void os_indicate_disconnect( _adapter *adapter ) { //RT_PMKID_LIST backupPMKIDList[ NUM_PMKID_CACHE ]; u8 backupPMKIDIndex = 0; u8 backupTKIPCountermeasure = 0x00; _func_enter_; indicate_wx_disassoc_event(adapter); netif_carrier_off(adapter->pnetdev); if(adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)//802.1x { // Added by Albert 2009/02/18 // We have to backup the PMK information for WiFi PMK Caching test item. // // Backup the btkip_countermeasure information. // When the countermeasure is trigger, the driver have to disconnect with AP for 60 seconds. _memset( &backupPMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE ); _memcpy( &backupPMKIDList[ 0 ], &adapter->securitypriv.PMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE ); backupPMKIDIndex = adapter->securitypriv.PMKIDIndex; backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure; _memset((unsigned char *)&adapter->securitypriv, 0, sizeof (struct security_priv)); _init_timer(&(adapter->securitypriv.tkip_timer),adapter->pnetdev, use_tkipkey_handler, adapter); // Added by Albert 2009/02/18 // Restore the PMK information to securitypriv structure for the following connection. _memcpy( &adapter->securitypriv.PMKIDList[ 0 ], &backupPMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE ); adapter->securitypriv.PMKIDIndex = backupPMKIDIndex; adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure; adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen; adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled; } else //reset values in securitypriv { //if(adapter->mlmepriv.fw_state & WIFI_STATION_STATE) //{ struct security_priv *psec_priv=&adapter->securitypriv; psec_priv->dot11AuthAlgrthm =dot11AuthAlgrthm_Open; //open system psec_priv->dot11PrivacyAlgrthm = _NO_PRIVACY_; psec_priv->dot11PrivacyKeyIndex = 0; psec_priv->dot118021XGrpPrivacy = _NO_PRIVACY_; psec_priv->dot118021XGrpKeyid = 1; psec_priv->ndisauthtype = Ndis802_11AuthModeOpen; psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled; psec_priv->wps_phase = _FALSE; //} } _func_exit_; }
void os_indicate_disconnect( _adapter *adapter ) { //RT_PMKID_LIST backupPMKIDList[ NUM_PMKID_CACHE ]; _func_enter_; indicate_wx_disassoc_event(adapter); netif_carrier_off(adapter->pnetdev); #ifdef RTK_DMP_PLATFORM _set_workitem(&adapter->mlmepriv.Linkdown_workitem); #endif rtw_reset_securitypriv( adapter ); _func_exit_; }