⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wt_mac.c

📁 linux2.6.11内核无线网卡驱动程序。支持802.11 abg
💻 C
📖 第 1 页 / 共 5 页
字号:
#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);		SwChnl(Adapter, pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig);		//added by hk 2006.12.26		Adapter->MacParameter.mPhPm = pMlmeJoinRequest->BD.ndisbssidex.Configuration.DSConfig;		//SwChnl(Adapter, 1);   		//TSF( Adapter, now() - pMlmeJoinRequest->bdTstamp, TRUE);    		TSF( Adapter, now(), TRUE);          //     printk("<0>In Function %s in Line %d \n\r",__FUNCTION__,__LINE__);		FN_EXIT(0,0);				return 1;}VOID TJoinProc(IN PWT_ADAPTER Adapter){	      // printk("<0>*******FUNCTION %s Line %d******** \r\n", __FUNCTION__, __LINE__);		memset(Adapter->MacParameter.mBssid, 0, sizeof(Adapter->MacParameter.mBssid));		memset( &Adapter->MacParameter.mSsId, 0,  sizeof(NDIS_802_11_SSID) );}	 int JoinAct(  IN PWT_ADAPTER Adapter, PWTWLAN_RXBUF PDU,Time REnd,Time tstr){		//BOOL TimerCanceled;		FrameElement Ele;		MacAddr BssID;		MlmeAuthenticateRequest MlmeAuthenticateRequest;		ULONG Timeout;	       //printk("<0>*******FUNCTION %s Line %d******** \r\n", __FUNCTION__, __LINE__);		FN_ENTER;		memset(&Ele, 0, sizeof(Ele));//锟紼le		// Get Bssid From Beacon or ProbRsp		{			// addr3 of frame			memmove(BssID, PDU->RXHwBuf.pHwRxBuf->dot11Head + 16, WLAN_ADDR_LEN);		}				if (memcmp(Adapter->MacParameter.mBssid, BssID, sizeof(MacAddr)) == 0)		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -