diff --git a/include/mlme_osdep.h b/include/mlme_osdep.h index 7c0773b..8ea5d73 100644 --- a/include/mlme_osdep.h +++ b/include/mlme_osdep.h @@ -30,5 +30,6 @@ void rtw_os_indicate_scan_done( struct adapter *padapter, bool aborted); extern void rtw_report_sec_ie(struct adapter *adapter,u8 authmode,u8 *sec_ie); void rtw_reset_securitypriv( struct adapter *adapter ); +void indicate_wx_scan_complete_event(struct adapter *padapter); #endif //_MLME_OSDEP_H_ diff --git a/os_dep/mlme_linux.c b/os_dep/mlme_linux.c index adc20a0..14c0575 100644 --- a/os_dep/mlme_linux.c +++ b/os_dep/mlme_linux.c @@ -28,6 +28,7 @@ void rtw_join_timeout_handler (void *FunctionContext) { struct adapter *adapter = (struct adapter *)FunctionContext; + _rtw_join_timeout_handler(adapter); } @@ -35,18 +36,17 @@ void rtw_join_timeout_handler (void *FunctionContext) void _rtw_scan_timeout_handler (void *FunctionContext) { struct adapter *adapter = (struct adapter *)FunctionContext; + rtw_scan_timeout_handler(adapter); } - -static void _dynamic_check_timer_handlder (void *FunctionContext) +static void _dynamic_check_timer_handlder(void *FunctionContext) { struct adapter *adapter = (struct adapter *)FunctionContext; if (adapter->registrypriv.mp_mode == 1) return; rtw_dynamic_check_timer_handlder(adapter); - _set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000); } @@ -55,160 +55,121 @@ void rtw_init_mlme_timer(struct adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; _init_timer(&(pmlmepriv->assoc_timer), padapter->pnetdev, rtw_join_timeout_handler, padapter); - //_init_timer(&(pmlmepriv->sitesurveyctrl.sitesurvey_ctrl_timer), padapter->pnetdev, sitesurvey_ctrl_handler, padapter); _init_timer(&(pmlmepriv->scan_to_timer), padapter->pnetdev, _rtw_scan_timeout_handler, padapter); - _init_timer(&(pmlmepriv->dynamic_chk_timer), padapter->pnetdev, _dynamic_check_timer_handlder, padapter); } void rtw_os_indicate_connect(struct adapter *adapter) { - _func_enter_; - rtw_indicate_wx_assoc_event(adapter); netif_carrier_on(adapter->pnetdev); - - if (adapter->pid[2] !=0) + if (adapter->pid[2] != 0) rtw_signal_process(adapter->pid[2], SIGALRM); - - _func_exit_; - } -extern void indicate_wx_scan_complete_event(struct adapter *padapter); -void rtw_os_indicate_scan_done( struct adapter *padapter, bool aborted) +void rtw_os_indicate_scan_done(struct adapter *padapter, bool aborted) { indicate_wx_scan_complete_event(padapter); } -static struct rt_pmkid_list backupPMKIDList[ NUM_PMKID_CACHE ]; +static struct rt_pmkid_list backup_pmkid[NUM_PMKID_CACHE]; -void rtw_reset_securitypriv( struct adapter *adapter ) +void rtw_reset_securitypriv(struct adapter *adapter) { - u8 backupPMKIDIndex = 0; - u8 backupTKIPCountermeasure = 0x00; - u32 backupTKIPcountermeasure_time = 0; + u8 backup_index = 0; + u8 backup_counter = 0x00; + u32 backup_time = 0; - 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. - - _rtw_memset( &backupPMKIDList[ 0 ], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); - - _rtw_memcpy( &backupPMKIDList[ 0 ], &adapter->securitypriv.PMKIDList[ 0 ], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); - backupPMKIDIndex = adapter->securitypriv.PMKIDIndex; - backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure; - backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time; - - _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof (struct security_priv)); - //_init_timer(&(adapter->securitypriv.tkip_timer),adapter->pnetdev, rtw_use_tkipkey_handler, adapter); - - // Added by Albert 2009/02/18 - // Restore the PMK information to securitypriv structure for the following connection. - _rtw_memcpy( &adapter->securitypriv.PMKIDList[ 0 ], &backupPMKIDList[ 0 ], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); - adapter->securitypriv.PMKIDIndex = backupPMKIDIndex; - adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure; - adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time; + if (adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) { + /* 802.1x */ + /* 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. */ + _rtw_memset(&backup_pmkid[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); + _rtw_memcpy(&backup_pmkid[0], &adapter->securitypriv.PMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); + backup_index = adapter->securitypriv.PMKIDIndex; + backup_counter = adapter->securitypriv.btkip_countermeasure; + backup_time = adapter->securitypriv.btkip_countermeasure_time; + _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv)); + /* Restore the PMK information to securitypriv structure for the following connection. */ + _rtw_memcpy(&adapter->securitypriv.PMKIDList[0], + &backup_pmkid[0], + sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); + adapter->securitypriv.PMKIDIndex = backup_index; + adapter->securitypriv.btkip_countermeasure = backup_counter; + adapter->securitypriv.btkip_countermeasure_time = backup_time; adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen; adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled; + } else { + /* reset values in securitypriv */ + struct security_priv *psec_priv = &adapter->securitypriv; - } - 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->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; - //} } } -void rtw_os_indicate_disconnect( struct adapter *adapter ) +void rtw_os_indicate_disconnect(struct adapter *adapter) { _func_enter_; - - netif_carrier_off(adapter->pnetdev); // Do it first for tx broadcast pkt after disconnection issue! - + netif_carrier_off(adapter->pnetdev); /* Do it first for tx broadcast pkt after disconnection issue! */ rtw_indicate_wx_disassoc_event(adapter); - - rtw_reset_securitypriv( adapter ); - + rtw_reset_securitypriv(adapter); _func_exit_; - } -void rtw_report_sec_ie(struct adapter *adapter,u8 authmode,u8 *sec_ie) +void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie) { uint len; - u8 *buff,*p,i; + u8 *buff, *p, i; union iwreq_data wrqu; _func_enter_; - - RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("+rtw_report_sec_ie, authmode=%d\n", authmode)); - + RT_TRACE(_module_mlme_osdep_c_, _drv_info_, + ("+rtw_report_sec_ie, authmode=%d\n", authmode)); buff = NULL; - if (authmode==_WPA_IE_ID_) - { - RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("rtw_report_sec_ie, authmode=%d\n", authmode)); - + if (authmode == _WPA_IE_ID_) { + RT_TRACE(_module_mlme_osdep_c_, _drv_info_, + ("rtw_report_sec_ie, authmode=%d\n", authmode)); buff = rtw_malloc(IW_CUSTOM_MAX); - - _rtw_memset(buff,0,IW_CUSTOM_MAX); - - p=buff; - - p+=sprintf(p,"ASSOCINFO(ReqIEs="); - + if (!buff) + goto exit; + _rtw_memset(buff, 0, IW_CUSTOM_MAX); + p = buff; + p += sprintf(p, "ASSOCINFO(ReqIEs ="); len = sec_ie[1]+2; - len = (len < IW_CUSTOM_MAX) ? len:IW_CUSTOM_MAX; - - for (i=0;ipnetdev,IWEVCUSTOM,&wrqu,buff); - + len = (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX; + for (i = 0; i < len; i++) + p += sprintf(p, "%02x", sec_ie[i]); + p += sprintf(p, ")"); + _rtw_memset(&wrqu, 0, sizeof(wrqu)); + wrqu.data.length = p-buff; + wrqu.data.length = (wrqu.data.length < IW_CUSTOM_MAX) ? + wrqu.data.length : IW_CUSTOM_MAX; + wireless_send_event(adapter->pnetdev, IWEVCUSTOM, &wrqu, buff); if (buff) - rtw_mfree(buff, IW_CUSTOM_MAX); + rtw_mfree(buff, IW_CUSTOM_MAX); } - +exit: _func_exit_; - } -static void _survey_timer_hdl (void *FunctionContext) +static void _survey_timer_hdl(void *FunctionContext) { struct adapter *padapter = (struct adapter *)FunctionContext; survey_timer_hdl(padapter); } -static void _link_timer_hdl (void *FunctionContext) +static void _link_timer_hdl(void *FunctionContext) { struct adapter *padapter = (struct adapter *)FunctionContext; link_timer_hdl(padapter); @@ -222,7 +183,6 @@ static void _addba_timer_hdl(void *FunctionContext) void init_addba_retry_timer(struct adapter *padapter, struct sta_info *psta) { - _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta); } @@ -241,7 +201,7 @@ void rtw_indicate_sta_assoc_event(struct adapter *padapter, struct sta_info *pst union iwreq_data wrqu; struct sta_priv *pstapriv = &padapter->stapriv; - if (psta==NULL) + if (psta == NULL) return; if (psta->aid > NUM_STA) @@ -265,7 +225,7 @@ void rtw_indicate_sta_disassoc_event(struct adapter *padapter, struct sta_info * union iwreq_data wrqu; struct sta_priv *pstapriv = &padapter->stapriv; - if (psta==NULL) + if (psta == NULL) return; if (psta->aid > NUM_STA)