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

📄 sync.c

📁 TP Link 321 Linux Driver
💻 C
📖 第 1 页 / 共 5 页
字号:
        pAd->MlmeAux.Bssid[4], pAd->MlmeAux.Bssid[5]);        pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON;}/*     ==========================================================================    Description:        MLME START Request state machine procedure, starting an IBSS    ========================================================================== */VOID MlmeStartReqAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    UCHAR         Ssid[MAX_LEN_OF_SSID+1], SsidLen;     USHORT        Status;	// New for WPA security suites	UCHAR						VarIE[MAX_VIE_LEN]; 	// Total VIE length = MAX_VIE_LEN - -5	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;	LARGE_INTEGER				TimeStamp;    BOOLEAN Privacy;    BOOLEAN        TimerCancelled;#ifdef	SINGLE_ADHOC_LINKUP	ULONG	Bssidx;	CF_PARM CfParm;    CfParm.bValid = FALSE;#endif	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;	TimeStamp.vv.LowPart  = 0;	TimeStamp.vv.HighPart = 0;	    if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen))     {        // reset all the timers        RTMPCancelTimer(&pAd->MlmeAux.ScanTimer,&TimerCancelled);	    RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer,&TimerCancelled);        //        // Start a new IBSS. All IBSS parameters are decided now....        //        pAd->MlmeAux.BssType           = BSS_ADHOC;		NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);        NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen);         pAd->MlmeAux.SsidLen           = SsidLen;        // generate a radom number as BSSID        MacAddrRandomBssid(pAd, pAd->MlmeAux.Bssid);        Privacy = (pAd->PortCfg.WepStatus == Ndis802_11Encryption1Enabled) ||                   (pAd->PortCfg.WepStatus == Ndis802_11Encryption2Enabled) ||                   (pAd->PortCfg.WepStatus == Ndis802_11Encryption3Enabled);        pAd->MlmeAux.CapabilityInfo    = CAP_GENERATE(0,1,Privacy, (pAd->PortCfg.TxPreamble == Rt802_11PreambleShort), 1);        pAd->MlmeAux.BeaconPeriod      = pAd->PortCfg.BeaconPeriod;        pAd->MlmeAux.AtimWin           = pAd->PortCfg.AtimWin;        pAd->MlmeAux.Channel           = pAd->PortCfg.Channel;        pAd->MlmeAux.SupRateLen= pAd->PortCfg.SupRateLen;        NdisMoveMemory(pAd->MlmeAux.SupRate, pAd->PortCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES);        RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen);        pAd->MlmeAux.ExtRateLen = pAd->PortCfg.ExtRateLen;        NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->PortCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES);        RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);        // temporarily not support QOS in IBSS        NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM));        NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));        NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));                AsicSwitchChannel(pAd, pAd->MlmeAux.Channel);        AsicLockChannel(pAd, pAd->MlmeAux.Channel);        DBGPRINT(RT_DEBUG_TRACE, "SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n",            pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen);#ifdef	SINGLE_ADHOC_LINKUP		// Add itself as the entry within BSS table		Bssidx = BssTableSearch(&pAd->ScanTab, pAd->MlmeAux.Bssid, pAd->MlmeAux.Channel);		if (Bssidx == BSS_NOT_FOUND)		{			Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, pAd->MlmeAux.Bssid,				Ssid, SsidLen, pAd->MlmeAux.BssType, pAd->MlmeAux.BeaconPeriod, 				&CfParm, pAd->MlmeAux.AtimWin, pAd->MlmeAux.CapabilityInfo, 				pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRate, pAd->MlmeAux.ExtRateLen,				pAd->MlmeAux.Channel, pAd->BbpRssiToDbmDelta - 30, TimeStamp, 0, NULL, NULL, NULL, 0, pVIE);		}#endif        pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;        Status = MLME_SUCCESS;        MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);    }     else     {        DBGPRINT_ERR("SYNC - MlmeStartReqAction() sanity check fail.\n");        pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;        Status = MLME_INVALID_FORMAT;        MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);    }}/*     ==========================================================================    Description:        peer sends beacon back when scanning    ========================================================================== */VOID PeerBeaconAtScanAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    UCHAR           Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];    UCHAR           Ssid[MAX_LEN_OF_SSID+1], BssType, Channel, NewChannel,                    SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe;    CF_PARM         CfParm;    USHORT          BeaconPeriod, AtimWin, CapabilityInfo;    PFRAME_802_11   pFrame;    LARGE_INTEGER   TimeStamp;    UCHAR           Erp;	UCHAR         	SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES];	UCHAR		  	SupRateLen, ExtRateLen;//	UCHAR			LenVIE;	USHORT			LenVIE;  // edit by johnli, variable ie length could be > 256	UCHAR			CkipFlag;	UCHAR			AironetCellPowerLimit;	EDCA_PARM       EdcaParm;	QBSS_LOAD_PARM  QbssLoad;	QOS_CAPABILITY_PARM QosCapability;    ULONG           RalinkIe;	UCHAR						VarIE[MAX_VIE_LEN];		// Total VIE length = MAX_VIE_LEN - -5	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;        // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00);    pFrame = (PFRAME_802_11) Elem->Msg;	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;    if (PeerBeaconAndProbeRspSanity(pAd,                                 Elem->Msg,                                 Elem->MsgLen,                                 Addr2,                                 Bssid,                                 Ssid,                                 &SsidLen,                                 &BssType,                                 &BeaconPeriod,                                 &Channel,                                &NewChannel,                                &TimeStamp,                                 &CfParm,                                 &AtimWin,                                 &CapabilityInfo,                                 &Erp,                                &DtimCount,                                 &DtimPeriod,                                 &BcastFlag,                                 &MessageToMe,                                 SupRate,                                &SupRateLen,                                ExtRate,                                &ExtRateLen,                                &CkipFlag,                                &AironetCellPowerLimit,                                &EdcaParm,                                &QbssLoad,                                &QosCapability,                                &RalinkIe,                                &LenVIE,                                pVIE))    {        ULONG Idx;        UCHAR Rssi = 0;        CHAR  RealRssi;	    RealRssi = ConvertToRssi(pAd, Elem->Rssi, RSSI_NO_1);        // This correct im-proper RSSI indication during SITE SURVEY issue.        // Always report bigger RSSI during SCANNING when receiving multiple BEACONs from the same AP.         // This case happens because BEACONs come from adjacent channels, so RSSI become weaker as we         // switch to more far away channels.		if (Elem->Channel != Channel)			return;			        Idx = BssTableSearch(&pAd->ScanTab, Bssid, Channel);        if (Idx != BSS_NOT_FOUND)             Rssi = pAd->ScanTab.BssEntry[Idx].Rssi;	    if ((RealRssi + pAd->BbpRssiToDbmDelta) > Rssi)	        Rssi = RealRssi + pAd->BbpRssiToDbmDelta;//        DBGPRINT(RT_DEBUG_TRACE, "SYNC - PeerBeaconAtScanAction (SubType=%d, SsidLen=%d, Ssid=%s)\n", pFrame->Hdr.FC.SubType, SsidLen,Ssid);        // Back Door Mechanism: Get AP Cfg Data                if (pAd->PortCfg.bGetAPConfig)        	{            		CHAR CfgData[MAX_CFG_BUFFER_LEN+1] = {0};            		if (BackDoorProbeRspSanity(pAd, Elem->Msg, Elem->MsgLen, CfgData)) 		{                			printk("MlmeEnqueueForRecv: CfgData(len:%d):\n%s\n", strlen(CfgData), CfgData);			pAd->PortCfg.bGetAPConfig = FALSE;            		}        	}        Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType,                     BeaconPeriod, &CfParm, AtimWin, CapabilityInfo, SupRate,                     SupRateLen, ExtRate, ExtRateLen, Channel, Rssi, TimeStamp, CkipFlag,                    &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);    }    // sanity check fail, ignored}/*     ==========================================================================    Description:        When waiting joining the (I)BSS, beacon received from external    ========================================================================== */VOID PeerBeaconAtJoinAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    UCHAR         Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN];    UCHAR         Ssid[MAX_LEN_OF_SSID+1], SsidLen, BssType, Channel, MessageToMe,                   DtimCount, DtimPeriod, BcastFlag, NewChannel;    LARGE_INTEGER TimeStamp;    USHORT        BeaconPeriod, AtimWin, CapabilityInfo;//    UINT          FrameLen = 0;    CF_PARM       Cf;    UCHAR         Erp;	UCHAR         SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES];	UCHAR		  SupRateLen, ExtRateLen;	UCHAR         CkipFlag;//	UCHAR		  LenVIE;	USHORT			LenVIE;  // edit by johnli, variable ie length could be > 256	UCHAR		  AironetCellPowerLimit;	EDCA_PARM       EdcaParm;	QBSS_LOAD_PARM  QbssLoad;	QOS_CAPABILITY_PARM QosCapability;    USHORT        Status;	CHAR	        RealRssi = -85; //assume -85 dB	UCHAR						VarIE[MAX_VIE_LEN];		// Total VIE length = MAX_VIE_LEN - -5	NDIS_802_11_VARIABLE_IEs	*pVIE = NULL;    ULONG           RalinkIe;    ULONG           Idx;	UCHAR   		PeerTxType;	BOOLEAN       TimerCancelled;    	// Init Variable IE structure	pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;	pVIE->Length = 0;    if (PeerBeaconAndProbeRspSanity(pAd,                                 Elem->Msg,                                 Elem->MsgLen,                                 Addr2,                                 Bssid,                                 Ssid,                                 &SsidLen,                                 &BssType,                                 &BeaconPeriod,                                 &Channel,                                &NewChannel,                                &TimeStamp,                                 &Cf,                                 &AtimWin,                                 &CapabilityInfo,                                 &Erp,                                &DtimCount,                                 &DtimPeriod,                                 &BcastFlag,                                 &MessageToMe,                                 SupRate,                                &SupRateLen,                                ExtRate,                                &ExtRateLen,                                &CkipFlag,                                &AironetCellPowerLimit,                                &EdcaParm,                                &QbssLoad,                                &QosCapability,                                &RalinkIe,                                &LenVIE,                                pVIE))     {		// Disqualify 11b only adhoc when we are in 11g only adhoc mode		if (BssType == BSS_ADHOC)		{			PeerTxType = PeerTxTypeInUseSanity(Channel, SupRate, SupRateLen, ExtRate, ExtRateLen);			if ((pAd->PortCfg.AdhocMode == ADHOC_11G) && (PeerTxType == CCK_RATE))			{				return;			}			else if ((pAd->PortCfg.AdhocMode == ADHOC_11B) && (PeerTxType == OFDM_RATE))			{			    return;			}		}		// BEACON from desired BSS/IBSS found. We should be able to decide most		// BSS parameters here.		// Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION?		//    Do we need to receover back all parameters belonging to previous BSS?		// A. Should be not. There's no back-door recover to previous AP. It still need		//    a new JOIN-AUTH-ASSOC sequence.		if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid))        {            DBGPRINT(RT_DEBUG_TRACE, "SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", Channel);		    RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled);            	        RealRssi = ConvertToRssi(pAd, Elem->Rssi, RSSI_NO_1);	        pAd->PortCfg.LastRssi = RealRssi + pAd->BbpRssiToDbmDelta;	        pAd->PortCfg.AvgRssi  = pAd->PortCfg.LastRssi;	        pAd->PortCfg.AvgRssiX8 = pAd->PortCfg.AvgRssi << 3;			//			// We need to check if SSID only set to any, then we can record the current SSID.			// Otherwise will cause hidden SSID association failed. 			//			if (pAd->MlmeAux.SsidLen == 0)			{				NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);

⌨️ 快捷键说明

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