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; }
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; }