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

📄 connect.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
		}		pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;		RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_JOIN_IN_PROGRESS);//steven:for test	} }// for re-association onlyVOID IterateOnBssTab2(	IN PRT2570ADAPTER pAd) {	MLME_REASSOC_REQ_STRUCT ReassocReq;	ULONG					BssIdx;	BSS_ENTRY				*pBss;		BssIdx = pAd->Mlme.CntlAux.RoamIdx;	pBss = &pAd->Mlme.CntlAux.RoamTab.BssEntry[BssIdx];	if (BssIdx < pAd->Mlme.CntlAux.RoamTab.BssNr)	{		if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_REASSOC_IN_PROGRESS))			RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REASSOC_IN_PROGRESS);//steven:for test		DBGPRINT(RT_DEBUG_TRACE, "CNTL - try BSS #%d %02x:%02x:%02x:%02x:%02x:%02x ...\n", 			BssIdx, pBss->Bssid.Octet[0],pBss->Bssid.Octet[1],pBss->Bssid.Octet[2],			pBss->Bssid.Octet[3],pBss->Bssid.Octet[4],pBss->Bssid.Octet[5]);		AsicSwitchChannel(pAd, pBss->Channel);		AsicLockChannel(pAd, pBss->Channel);				// reassociate message has the same structure as associate message		AssocParmFill(pAd, &ReassocReq, &pBss->Bssid, pBss->CapabilityInfo, 					  ASSOC_TIMEOUT, pAd->PortCfg.DefaultListenCount);		MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ, 					sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq);				pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC;	}	else // no more BSS	{		DBGPRINT(RT_DEBUG_TRACE, "CNTL - All roaming failed, stay with original AP\n");		AsicSwitchChannel(pAd, pAd->PortCfg.Channel);		AsicLockChannel(pAd, pAd->PortCfg.Channel);		pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;		RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_REASSOC_IN_PROGRESS);//steven:for test	} }/*	==========================================================================	Description:	==========================================================================*/VOID JoinParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, 	IN ULONG BssIdx) {	JoinReq->BssIdx = BssIdx;}/*	==========================================================================	Description:	==========================================================================*/VOID AssocParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, 	IN MACADDR					 *Addr, 	IN USHORT					  CapabilityInfo, 	IN ULONG					  Timeout, 	IN USHORT					  ListenIntv) {	COPY_MAC_ADDR(&AssocReq->Addr, Addr);	// Add mask to support 802.11b mode only	AssocReq->CapabilityInfo = CapabilityInfo & 0xfff3; // not cf-pollable, not cf-poll-request	AssocReq->Timeout = Timeout;	AssocReq->ListenIntv = ListenIntv;}/*	==========================================================================	Description:	==========================================================================*/VOID ScanParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, 	IN CHAR Ssid[], 	IN UCHAR SsidLen, 	IN UCHAR BssType, 	IN UCHAR ScanType) {	ScanReq->SsidLen = SsidLen;	memcpy(ScanReq->Ssid, Ssid, SsidLen);	ScanReq->BssType = BssType;	ScanReq->ScanType = ScanType;}/*	==========================================================================	Description:	==========================================================================*/VOID DisassocParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, 	IN MACADDR *Addr, 	IN USHORT Reason) {	COPY_MAC_ADDR(&DisassocReq->Addr, Addr);	DisassocReq->Reason = Reason;}/*	==========================================================================	Description:	==========================================================================*/VOID StartParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_START_REQ_STRUCT *StartReq, 	IN CHAR Ssid[], 	IN UCHAR SsidLen) {	memcpy(StartReq->Ssid, Ssid, SsidLen);	StartReq->SsidLen = SsidLen;}/*	==========================================================================	Description:	==========================================================================*/VOID AuthParmFill(	IN PRT2570ADAPTER pAd, 	IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, 	IN MACADDR *Addr, 	IN USHORT Alg) {	COPY_MAC_ADDR(&AuthReq->Addr, Addr);	AuthReq->Alg = Alg;	AuthReq->Timeout = AUTH_TIMEOUT;}/*	==========================================================================	Description:	========================================================================== */VOID ComposePsPoll(	IN PRT2570ADAPTER pAd){	PSPOLL_FRAME *pPsPoll = (PSPOLL_FRAME *)&(pAd->PsPollContext.TransferBuffer->WirelessPacket);	memset(pPsPoll, 0, sizeof(PSPOLL_FRAME));	pPsPoll->Type = BTYPE_CNTL;	pPsPoll->SubType = SUBTYPE_PS_POLL;	pPsPoll->Aid = pAd->PortCfg.Aid | 0xC000;	COPY_MAC_ADDR(&(pPsPoll->Bssid), &pAd->PortCfg.Bssid);	COPY_MAC_ADDR(&(pPsPoll->Ta), &(pAd->CurrentAddress));}VOID ComposeNullFrame(	IN PRT2570ADAPTER pAd){	PHEADER_802_11 pNullFrame = (PHEADER_802_11)&(pAd->NullContext.TransferBuffer->WirelessPacket);	MgtMacHeaderInit(pAd, (PMACHDR)pNullFrame, SUBTYPE_NULL_FUNC, 1, &pAd->PortCfg.Bssid, &pAd->PortCfg.Bssid);	pNullFrame->Controlhead.Duration = 0;	pNullFrame->Controlhead.Frame.Type = BTYPE_DATA;}/*	==========================================================================	Description:		Pre-build a BEACON frame in the shared memory	==========================================================================*/VOID MakeIbssBeacon(	IN PRT2570ADAPTER pAd) {	UCHAR			SsidIe = IE_SSID, DsIe = IE_DS_PARM, IbssIe = IE_IBSS_PARM, SuppIe = IE_SUPP_RATES, 					DsLen = 1, IbssLen = 2;	UCHAR			i, ExtRateIe = IE_EXT_SUPP_RATES, ExtRatesLen;	UCHAR			ErpIe[3] = {IE_ERP, 1, 0x04};	MACHDR			BcnHdr;	USHORT			CapabilityInfo;	LARGE_INTEGER	FakeTimestamp;	ULONG			FrameLen;	UCHAR			SupportedRatesLen = 0;	UCHAR			SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];	BOOLEAN			Privacy;	PUCHAR			pBeaconFrame;	PTXD_STRUC		pTxD;	ULONG			BulkOutLength;	PTX_CONTEXT		pBeaconContext = &(pAd->BeaconContext[0]);#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)	if (pAd->MLMEThr_pid <= 0)	    return;#else	if (!pAd->MLMEThr_active)	    return;#endif    // 2003-12-10 802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode    // make sure 1,2,5.5,11 are the firt 4 rates in PortCfg.SupportedRates[] array    if ((pAd->PortCfg.PhyMode == PHY_11BG_MIXED) && (pAd->PortCfg.AdhocMode == 0))    {	    for (i = 0; i < pAd->PortCfg.SupportedRatesLen; i++)	    {	        switch (pAd->PortCfg.SupportedRates[i] & 0x7f)	        {	            case 2:	            case 4:	            case 11:	            case 22:	                SupportedRates[SupportedRatesLen] = pAd->PortCfg.SupportedRates[i];	                SupportedRatesLen ++;	                break;	            default:	                break;	        }	    }	    // error handling - should never happen	    if (SupportedRatesLen != 4)	    {            SupportedRatesLen = 4;            SupportedRates[0] = 0x82;            SupportedRates[1] = 0x84;            SupportedRates[2] = 0x8b;            SupportedRates[3] = 0x96;	    }    }    else    {        SupportedRatesLen = pAd->PortCfg.SupportedRatesLen;        memcpy(SupportedRates, pAd->PortCfg.SupportedRates, SupportedRatesLen);    }	if (pBeaconContext->InUse == TRUE)		return;	else		pBeaconContext->InUse = TRUE;    pAd->PortCfg.AtimWin = 0;  // ??????        // compose IBSS beacon frame    MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, &pAd->PortCfg.Broadcast, &pAd->PortCfg.Bssid);    Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||               (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||               (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);    CapabilityInfo = CAP_GENERATE(0, 1, 0, 0, Privacy, (pAd->PortCfg.WindowsTxPreamble == Rt802_11PreambleShort));	// Prepare beacon frame, this should go to beacon_ring[1] which contains the real body.	pBeaconFrame = (PUCHAR) pAd->BeaconContext[1].TransferBuffer->WirelessPacket;	    if (SupportedRatesLen <= 8)    {        MakeOutgoingFrame(pBeaconFrame,                &FrameLen,                      MAC_HDR_LEN,                     &BcnHdr,                       TIMESTAMP_LEN,                   &FakeTimestamp,                      2,                               &pAd->PortCfg.BeaconPeriod,                      2,                               &CapabilityInfo,                      1,                               &SsidIe,                       1,                               &pAd->PortCfg.SsidLen,                       pAd->PortCfg.SsidLen,             pAd->PortCfg.Ssid,                      1,                               &SuppIe,                       1,                               &SupportedRatesLen,                      SupportedRatesLen,               SupportedRates,                       1,                               &DsIe,                       1,                               &DsLen,                       1,                               &pAd->PortCfg.Channel,                      1,                               &IbssIe,                       1,                               &IbssLen,                       2,                               &pAd->PortCfg.AtimWin,                      END_OF_ARGS);    }    else    {        ExtRatesLen = SupportedRatesLen - 8;        SupportedRatesLen = 8;        MakeOutgoingFrame(pBeaconFrame,                &FrameLen,                      MAC_HDR_LEN,                     &BcnHdr,                       TIMESTAMP_LEN,                   &FakeTimestamp,                      2,                               &pAd->PortCfg.BeaconPeriod,                      2,                               &CapabilityInfo,                      1,                               &SsidIe,                       1,                               &pAd->PortCfg.SsidLen,                       pAd->PortCfg.SsidLen,             pAd->PortCfg.Ssid,                      1,                               &SuppIe,                       1,                               &SupportedRatesLen,                      SupportedRatesLen,                SupportedRates,                       1,                               &DsIe,                       1,                               &DsLen,                       1,                               &pAd->PortCfg.Channel,                      1,                               &IbssIe,                       1,                               &IbssLen,                       2,                               &pAd->PortCfg.AtimWin,                      3,                               ErpIe,                      1,                               &ExtRateIe,                      1,                               &ExtRatesLen,                      ExtRatesLen,                     &SupportedRates[SupportedRatesLen],                      END_OF_ARGS);    }    	// If adhoc secruity is set for WPA-None, append the cipher suite IE	if (pAd->PortCfg.AuthMode == Ndis802_11AuthModeWPANone)	{		ULONG	tmp = 0;		UCHAR	WpaIe = IE_WPA;				if (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled)		// Tkip		{        	MakeOutgoingFrame(pBeaconFrame + FrameLen,                    &tmp,				1,						  &WpaIe,				1,						  &CipherSuiteWpaNoneTkipLen,				CipherSuiteWpaNoneTkipLen,	  &CipherSuiteWpaNoneTkip[0],				END_OF_ARGS);			FrameLen += tmp;		}		else if (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled)	// Aes		{        	MakeOutgoingFrame(pBeaconFrame + FrameLen,                    &tmp,				1,						  &WpaIe,				1,						  &CipherSuiteWpaNoneAesLen,				CipherSuiteWpaNoneAesLen,	  &CipherSuiteWpaNoneAes[0],				END_OF_ARGS);			FrameLen += tmp;		}	}	    BulkOutLength = sizeof(TXD_STRUC) + FrameLen;	if ((BulkOutLength % 2) == 1)		BulkOutLength ++;//	if (BulkOutLength % pAd->BulkOutMaxPacketSize == 0)//		BulkOutLength += 2;    for (i = 0; i < BEACON_RING_SIZE; i++)	{		pTxD = (PTXD_STRUC) &pAd->BeaconContext[i].TransferBuffer->TxDesc;		memset(pTxD, 0, sizeof(TXD_STRUC));		pBeaconContext = &(pAd->BeaconContext[i]);;		// Both TxD need to put in the right descriptor    	RTUSBWriteBeaconDescriptor(pTxD, FrameLen, FrameLen + 4, pAd->PortCfg.MlmeRate, 4, pAd->PortCfg.TxPreambleInUsed);		if (i == 0)			pBeaconContext->BulkOutSize = 1;		else			pBeaconContext->BulkOutSize = BulkOutLength;			    DBGPRINT(RT_DEBUG_TRACE, "  (pBeaconContext->BulkOutSize=%d)\n", pBeaconContext->BulkOutSize);	}	// The flags will always start from beacon 0	RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_BEACON_0);	// Kick bulk out 	RTUSBKickBulkOut(pAd);}

⌨️ 快捷键说明

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