?? wt_mac.c
字號:
memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_powerconstraint, frmprobresp->powerconstraint, sizeof( wlan_powerconstraint_t ) ); } if( frmprobresp->channelswa ) { memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_channelswa, frmprobresp->channelswa, sizeof( wlan_channelswa_t ) ); } if( frmprobresp->quiet_parms ) { memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_quiet, frmprobresp->quiet_parms, sizeof( wlan_quiet_t ) ); } if( frmprobresp->ibbss_dfs ) { memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_ibssdfs, frmprobresp->ibbss_dfs, sizeof( wlan_ibssdfs_t ) ); } if( frmprobresp->tpc_report ) { memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_tpcreport, frmprobresp->tpc_report, sizeof( wlan_tpcreport_t ) ); } if( frmprobresp->erp_parms ) { memmove( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_erp, frmprobresp->erp_parms, sizeof( wlan_erp_t ) ); }#if 0 if( frmprobresp->rsn ) { NdisMoveMemory( &Adapter->Ndis80211Parameter.pWlanScanDb->wlandesc[i].ie_rsn, frmprobresp->rsn, sizeof( wlan_rsn_t ) ); }#endif //0 } FN_EXIT(0,0);}BOOL BuildProbRsp( IN PWT_ADAPTER Adapter, wlan_fr_proberesp_t *frm, PWTWLAN_RXBUF pWtRxBuf){ PWTWLAN_TXBUF pWtTxBuf; UINT8 *saddr = NULL; p80211_hdr_t *hdr; pWtTxBuf = (PWTWLAN_TXBUF)frm->buf; frm->bcn_int = &Adapter->MacParameter.mBcnInterval; //printk("mBcnInterval = %04x\n", Adapter->MacParameter.mBcnInterval); //printk("mCap = %04x\n", Adapter->MacParameter.mCap); frm->cap_info = &Adapter->MacParameter.mCap; frm->ssid = (wlan_ie_ssid_t *)&Adapter->MacParameter.mEleSsid; frm->supp_rates = (wlan_ie_supp_rates_t *)&Adapter->MacParameter.mSupRates; frm->ext_rates = (wlan_ie_extend_rates_t *)&Adapter->MacParameter.mExtRates; frm->ds_parms = (wlan_ie_ds_parms_t *)&Adapter->MacParameter.mDsParms; frm->ibss_parms = (wlan_ie_ibss_parms_t *)&Adapter->MacParameter.mIbssParms; hdr = (p80211_hdr_t *)(&pWtRxBuf->RXHwBuf.pHwRxBuf->dot11Head); if ((WLAN_GET_FC_TODS(ieee2host16(hdr->a3.fc)) == 0) && (WLAN_GET_FC_FROMDS(ieee2host16(hdr->a3.fc)) == 0)) { saddr = hdr->a3.a2; } else if ((WLAN_GET_FC_TODS(ieee2host16(hdr->a3.fc)) == 0) && (WLAN_GET_FC_FROMDS(ieee2host16(hdr->a3.fc)) == 1)) { saddr = hdr->a3.a3; } else if ((WLAN_GET_FC_TODS(ieee2host16(hdr->a3.fc)) == 1) && (WLAN_GET_FC_FROMDS(ieee2host16(hdr->a3.fc)) == 0)) { saddr = hdr->a3.a2; } else { saddr = hdr->a4.a4; } mkWlanMgmtFrameHdr( pWtTxBuf, WLAN_FSTYPE_PROBERESP, saddr, Adapter->MacParameter.dot11MacAddress, Adapter->MacParameter.mBssid); wt_mgmt_encode_proberesp( frm ); return TRUE;}void FrmProbReqProc( IN PWT_ADAPTER Adapter, PWTWLAN_RXBUF pWtRxBuf) PWTWLAN_TXBUF pWtTxBuf; wlan_fr_proberesp_t *frm; if( Adapter->MacParameter.macmode == WLAN_MACMODE_IBSS_STA ) { AllocTxMgmt( Adapter, &pWtTxBuf); if( pWtTxBuf == NULL ) return ; #ifdef WIN_PLATFORM NdisZeroMemory( &pWtTxBuf->ParseData, sizeof(p80211mgmt_fr_t) ); #else memset( &pWtTxBuf->ParseData, 0, sizeof(p80211mgmt_fr_t) ); #endif frm = &pWtTxBuf->ParseData.a.proberesp; frm->type = WLAN_FSTYPE_PROBERESP; frm->buf = (UINT8 *)pWtTxBuf; if( BuildProbRsp( Adapter, frm, pWtRxBuf ) ) MmRequest( Adapter, pWtTxBuf); }}void FrmProbRspProc( IN PWT_ADAPTER Adapter, PWTWLAN_RXBUF pWtRxBuf){ wlan_fr_proberesp_t *frm; FN_ENTER; //printk("<0>In Fuction %s\r\n", __FUNCTION__); frm = &pWtRxBuf->ParseData.a.proberesp; #ifdef WIN_PLATFORM NdisZeroMemory( frm, sizeof(wlan_fr_proberesp_t)); #else memset( frm, 0, sizeof(wlan_fr_proberesp_t)); #endif frm->buf = (UINT8 *)pWtRxBuf; if( FALSE == wt_mgmt_decode_proberesp(frm) ) { return; } if( Adapter->MlmeParameter.bScanOngoing ) { ScanListen( Adapter,pWtRxBuf ); } FN_EXIT(0,0); } /***********************************************/ /* */ /* */ /* */ /* */ /***********************************************///the bottom function to an ibss void MlmeStartIBSS(IN PWT_ADAPTER Adapter, MlmeStartRequest *PMlmeStartRequest){ int8 parameter_ok; int16 tmp_randomIbssId1; int32 tmp_randomIbssId2; MlmeStatus MlmeStartconfirm_Var; int i; ULONG Timeout; if (Adapter->MacParameter.CurrentState == NO_BSS) { if ((PMlmeStartRequest->yBtp==independent) /*|| (PMlmeStartRequest->yBtp==infrastructure && sCanBeAP)*/) { //--------- parameter valid check --------------// parameter_ok = 1; if (PMlmeStartRequest->mssid.SsidLength > 32) parameter_ok = 0; if ((PMlmeStartRequest->yBtp != infrastructure) && (PMlmeStartRequest->yBtp != independent)) parameter_ok = 0; if (parameter_ok) { memcpy(&Adapter->MacParameter.mSsId, &(PMlmeStartRequest->mssid), sizeof(NDIS_802_11_SSID));//?? Adapter->MacParameter.mEleSsid.element_ID = WLAN_EID_SSID; Adapter->MacParameter.mEleSsid.length = (UCHAR)PMlmeStartRequest->mssid.SsidLength; memcpy(&Adapter->MacParameter.mEleSsid.inf, &(PMlmeStartRequest->mssid.Ssid), NDIS_802_11_LENGTH_SSID);//?? //Adapter->MacParameter.mCap = PMlmeStartRequest->mCap;//??edited by hk 2004.11.12 memcpy(Adapter->MacParameter.mBrates, PMlmeStartRequest->mBrates, 8);//?? Adapter->MacParameter.mIbss = TRUE; Adapter->MacParameter.mPss = awake ; Adapter->MacParameter.mPdly = PMlmeStartRequest->ypdly; Adapter->MacParameter.yPhpm = PMlmeStartRequest->bdPhyParms;//?? Adapter->MacParameter.mPhPm = PMlmeStartRequest->bdPhyParms;//?? Adapter->MacParameter.yIbpm = PMlmeStartRequest->yIbpm;//?? tmp_randomIbssId1 = (int16)random_ibssdata(); tmp_randomIbssId2 = (int32)random_ibssdata(); //printk("random1 = %x,random2 = %x\n",tmp_randomIbssId1,tmp_randomIbssId2); memcpy( Adapter->MacParameter.mBssid , &tmp_randomIbssId1 , 2 ); memcpy( &(Adapter->MacParameter.mBssid[2]) , &tmp_randomIbssId2 , 4 ); Adapter->MacParameter.mBssid[0] &= ~0x1; Adapter->MacParameter.mBssid[0] |= 0x2; Adapter->dot11Mib.dot11BeaconPeriod = PMlmeStartRequest->yBcnPeriod; Adapter->dot11Mib.dot11DtimPeriod = PMlmeStartRequest->yDtim; memset( Adapter->dot11Mib.dot11OperationalRateSet , 0 , sizeof(Ratestring) ); memcpy( Adapter->dot11Mib.dot11OperationalRateSet , PMlmeStartRequest->yOrates, sizeof(Ratestring) ); // update rates and ext rates Adapter->MacParameter.mSupRates.element_ID = WLAN_EID_SUPP_RATES; Adapter->MacParameter.mSupRates.length = 0; Adapter->MacParameter.mExtRates.eid = WLAN_EID_EXT_RATES; Adapter->MacParameter.mExtRates.len = 0; i = 0; while( ( i < NDIS_802_11_LENGTH_RATES_EX )&&(Adapter->dot11Mib.dot11OperationalRateSet[i]) ) { if( i < ELE_LEN_SUPPORT_RATES ) { Adapter->MacParameter.mSupRates.sup_rates[i] = Adapter->dot11Mib.dot11OperationalRateSet[i]; Adapter->MacParameter.mSupRates.length++; } else { Adapter->MacParameter.mExtRates.extrates[i-ELE_LEN_SUPPORT_RATES] = Adapter->dot11Mib.dot11OperationalRateSet[i]; Adapter->MacParameter.mExtRates.len++; } i++; } Adapter->MacParameter.yBcn = dKusec( PMlmeStartRequest->yBcnPeriod); Adapter->MacParameter.mBcnInterval = (int16)PMlmeStartRequest->yBcnPeriod; Adapter->MacParameter.yAtw = dKusec( PMlmeStartRequest->yIbpm); //----------- Set actual phy parameters from phpm----------// //-------------- ibss init --------------------------// //bdPhyParms:channel num Adapter->MacParameter.yChan = (int)(PMlmeStartRequest->bdPhyParms); //SwChanl(yChan, TRUE); //????? Need call function SwChanl() SwChnl( Adapter, (USHORT)Adapter->MacParameter.yChan ); Adapter->MacParameter.mDsParms.element_ID = WLAN_EID_DS_PARMS; Adapter->MacParameter.mDsParms.length = 1; Adapter->MacParameter.mDsParms.curr_channel = PMlmeStartRequest->bdPhyParms; Adapter->MacParameter.mIbssParms.eid = WLAN_EID_IBSS_PARMS; Adapter->MacParameter.mIbssParms.len = 2; Adapter->MacParameter.mIbssParms.atim_win = PMlmeStartRequest->yIbpm; //Adapter->MacParameter.mNextTbtt = Adapter->MacParameter.yBcn -((TSF( Adapter, 0 , FALSE ))%(Adapter->MacParameter.yBcn)); //mxx how to define nexttbtt time Adapter->MacParameter.mNextTbtt = Adapter->MacParameter.yBcn - mod64(TSF( Adapter, 0 , FALSE ),(unsigned long)(Adapter->MacParameter.yBcn)); //-------------- Set time out value ----------------// //mxx see here Timeout = (ULONG)(div64((Adapter->MacParameter.mNextTbtt),1000)*HZ); Timeout = Timeout/1000; mod_timer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), jiffies+Timeout); //printk("Adapter->MacParameter.mNextTbtt = %16x BeaconProcTimer=%08x\n",Adapter->MacParameter.mNextTbtt, div64((Adapter->MacParameter.mNextTbtt),1000)*HZ); Adapter->MacParameter.mDisable = FALSE; if( PMlmeStartRequest->ypdly >= 0x10ull )//L { PMlmeStartRequest->ypdly = 0x10ull; } udelay((unsigned long)PMlmeStartRequest->ypdly); MlmeStartconfirm_Var = mmsuccess; Adapter->MacParameter.CurrentState = IBSS_ACTIVE; Adapter->Ndis80211Parameter.INFRASTRUCTURE_MODE = Ndis802_11IBSS; WT_SET_READY(Adapter); Adapter->bLinkStatus = TRUE; // start xmit data if( netif_queue_stopped( Adapter->ndev ) )//dev->state stand for xmit state netif_wake_queue( Adapter->ndev ); //Adapter->MacParameter.macmode = WLAN_MACMODE_IBSS_STA; Adapter->BeaconReceiveWatchDog = 1;//????????????? //added by hk 2004.12.4 memmove( &Adapter->MainMemAddress->HwCSMem.NetMacAddress.NetAddress, Adapter->MacParameter.mBssid,6 ); //set CONFIGURATION Adapter->Ndis80211Parameter.CONFIGURATION.Length = sizeof(NDIS_802_11_CONFIGURATION); Adapter->Ndis80211Parameter.CONFIGURATION.DSConfig = Adapter->MacParameter.mDsParms.curr_channel; Adapter->Ndis80211Parameter.CONFIGURATION.BeaconPeriod = Adapter->dot11Mib.dot11BeaconPeriod; Adapter->Ndis80211Parameter.CONFIGURATION.ATIMWindow = Adapter->dot11Mib.dot11DtimPeriod; return ; } else { MlmeStartconfirm_Var = mminvalid; return ; } } else { MlmeStartconfirm_Var = mminvalid; return ; } } else { MlmeStartconfirm_Var = mmalready_bss; return ; }}int MlmeJoin( IN PWT_ADAPTER Adapter, MlmeJoinRequest *pMlmeJoinRequest) //int MlmeJoin(BssDscr bd, int JTo, Usec PDly, Ratestring ORates){ ULONG Timeout; FN_ENTER; //printk("<0>In Function %s in Line %d \n\r",__FUNCTION__,__LINE__); if (pMlmeJoinRequest->JTo < 1) return -1;//MlmeJoin.confim (invalid) //set Adapter->Ndis80211Parameter.CONFIGURATION memcpy(&Adapter->Ndis80211Parameter.CONFIGURATION, &pMlmeJoinRequest->BD.ndisbssidex.Configuration, sizeof(NDIS_802_11_CONFIGURATION)); memcpy( Adapter->MacParameter.mBssid, pMlmeJoinRequest->BD.ndisbssidex.MacAddress, sizeof(Adapter->MacParameter.mBssid)); Adapter->MacParameter.mSsId.SsidLength = pMlmeJoinRequest->BD.ndisbssidex.Ssid.SsidLength; memcpy(Adapter->MacParameter.mSsId.Ssid, pMlmeJoinRequest->BD.ndisbssidex.Ssid.Ssid, Adapter->MacParameter.mSsId.SsidLength); Adapter->dot11Mib.dot11BeaconPeriod = pMlmeJoinRequest->BD.ndisbssidex.Configuration.BeaconPeriod; Adapter->MacParameter.mBcnInterval = pMlmeJoinRequest->BD.ndisbssidex.Configuration.BeaconPeriod; //edited by hk 2006.12.26 //Adapter->MacParameter.mPhPm = pMlmeJoinRequest->BD.ie_fhparms.NumChannel; //Adapter->MacParameter.mPhPm = pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig; //Adapter->MacParameter.mPhPm = 1; //printk("channel: %d \n",Adapter->MacParameter.mPhPm); Adapter->MacParameter.mCfPm.Count = pMlmeJoinRequest->BD.ie_cfps.cfp_count; Adapter->MacParameter.mCfPm.DurRem = pMlmeJoinRequest->BD.ie_cfps.cfp_dur_rem; Adapter->MacParameter.mCfPm.MaxDur = pMlmeJoinRequest->BD.ie_cfps.cfp_max_dur; Adapter->MacParameter.mCfPm.Period = pMlmeJoinRequest->BD.ie_cfps.cfp_period; Adapter->MacParameter.mIBPm = pMlmeJoinRequest->BD.ie_ibss_parms.atim_win; Adapter->MacParameter.mCap = pMlmeJoinRequest->BD.ie_fixed.Capabilities; memcpy(Adapter->MacParameter.mBrates, pMlmeJoinRequest->BD.ndisbssidex.SupportedRates, sizeof(Adapter->MacParameter.mBrates)); Adapter->MacParameter.mPdly = pMlmeJoinRequest->PDly; memcpy(Adapter->dot11Mib.dot11OperationalRateSet, pMlmeJoinRequest->ORates, sizeof(pMlmeJoinRequest->ORates)); #ifdef WIN_PLATFORM NdisSetTimer(&Adapter->MacParameter.MacTimer.TJoin, (ULONG)(now() + Adapter->MacParameter.mBcnPeriod * pMlmeJoinRequest->JTo)); #else Timeout = (ULONG)(Adapter->MacParameter.mBcnInterval*pMlmeJoinRequest->JTo*HZ/1000); //mod_timer(&(Adapter->MacParameter.MacTimer.JoinProcTimer), jiffies+div64((Adapter->MacParameter.mBcnPeriod *pMlmeJoinRequest->JTo),200)*HZ); //printk("<0>Timeout = %d\n",Timeout); mod_timer(&(Adapter->MacParameter.MacTimer.JoinProcTimer), jiffies+Timeout); #endif //printk("<0>pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig = %d\n",pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig); //printk("channel: %d \n", pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -