コード例 #1
0
MAC_TABLE_ENTRY *FindWdsEntry(
    IN PRTMP_ADAPTER	pAd,
    IN UCHAR 			Wcid,
    IN PUCHAR			pAddr,
    IN UINT32			PhyMode)
{
    MAC_TABLE_ENTRY *pEntry;

    // lookup the match wds entry for the incoming packet.
    pEntry = WdsTableLookupByWcid(pAd, Wcid, pAddr, TRUE);
    if (pEntry == NULL)
        pEntry = WdsTableLookup(pAd, pAddr, TRUE);

    // Only Lazy mode will auto learning, match with FrDs=1 and ToDs=1
    if((pEntry == NULL) && (pAd->WdsTab.Mode >= WDS_LAZY_MODE))
    {
        LONG WdsIdx = WdsEntryAlloc(pAd, pAddr);
        if (WdsIdx >= 0)
        {
            // user doesn't specific a phy mode for WDS link.
            if (pAd->WdsTab.WdsEntry[WdsIdx].PhyMode == 0xff)
                pAd->WdsTab.WdsEntry[WdsIdx].PhyMode = PhyMode;
            pEntry = MacTableInsertWDSEntry(pAd, pAddr, (UCHAR)WdsIdx);
        }
        else
            pEntry = NULL;
    }

    return pEntry;
}
コード例 #2
0
ファイル: ap_wds.c プロジェクト: 23171580/ralink
MAC_TABLE_ENTRY *FindWdsEntry(
	IN RTMP_ADAPTER *pAd,
	IN UCHAR Wcid,
	IN UCHAR *pAddr,
	IN UINT32 PhyMode)
{
	MAC_TABLE_ENTRY *pEntry;
	RT_802_11_WDS_ENTRY *wds_entry;

	/* lookup the match wds entry for the incoming packet. */
	pEntry = WdsTableLookupByWcid(pAd, Wcid, pAddr, TRUE);
	if (pEntry == NULL)
		pEntry = WdsTableLookup(pAd, pAddr, TRUE);

	/* Only Lazy mode will auto learning, match with FrDs=1 and ToDs=1 */
	if((pEntry == NULL) && (pAd->WdsTab.Mode >= WDS_LAZY_MODE))
	{
		INT WdsIdx = WdsEntryAlloc(pAd, pAddr);
		if (WdsIdx >= 0 && WdsIdx < MAX_WDS_ENTRY)
		{
			wds_entry = &pAd->WdsTab.WdsEntry[WdsIdx];

			/* user doesn't specific a phy mode for WDS link. */
			if (wds_entry->wdev.PhyMode == 0xff)
				wds_entry->wdev.PhyMode = PhyMode;
			pEntry = MacTableInsertWDSEntry(pAd, pAddr, (UCHAR)WdsIdx);

			RTMPSetSupportMCS(pAd,
							OPMODE_AP,
							pEntry,
							pAd->CommonCfg.SupRate,
							pAd->CommonCfg.SupRateLen,
							pAd->CommonCfg.ExtRate,
							pAd->CommonCfg.ExtRateLen,
#ifdef DOT11_VHT_AC
							0,
							NULL,
#endif /* DOT11_VHT_AC */
							&pAd->CommonCfg.HtCapability,
							sizeof(pAd->CommonCfg.HtCapability));
		}
		else 
			pEntry = NULL;
	}

	return pEntry;
}