diff options
Diffstat (limited to 'wilink_6_1/stad/src/Data_link/rx.c')
-rw-r--r-- | wilink_6_1/stad/src/Data_link/rx.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/wilink_6_1/stad/src/Data_link/rx.c b/wilink_6_1/stad/src/Data_link/rx.c index b619735..9e7fc33 100644 --- a/wilink_6_1/stad/src/Data_link/rx.c +++ b/wilink_6_1/stad/src/Data_link/rx.c @@ -44,6 +44,7 @@ #include "osApi.h" #include "timer.h" #include "DataCtrl_Api.h" +#include "Ctrl.h" #include "802_11Defs.h" #include "Ethernet.h" #include "report.h" @@ -1223,8 +1224,8 @@ static void rxData_rcvPacketData(TI_HANDLE hRxData, void *pBuffer, TRxAttr* pRxA { rxData_t *pRxData = (rxData_t *)hRxData; TEthernetHeader *pEthernetHeader; - TI_UINT16 EventMask = 0; - + TI_UINT16 EventMask = 0; + TFwInfo *pFwInfo; TRACE0(pRxData->hReport, REPORT_SEVERITY_INFORMATION, " rxData_rcvPacketData() : Received DATA frame tranferred to OS\n"); @@ -1255,6 +1256,21 @@ static void rxData_rcvPacketData(TI_HANDLE hRxData, void *pBuffer, TRxAttr* pRxA RxBufFree(pRxData->hOs, pBuffer); return; } + + /* + * Discard multicast/broadcast frames that we sent ourselves. + * Per IEEE 802.11-2007 section 9.2.7: "STAs shall filter out + * broadcast/multicast messages that contain their address as + * the source address." + */ + pFwInfo = TWD_GetFWInfo (pRxData->hTWD); + if (MAC_EQUAL(pFwInfo->macAddress, pEthernetHeader->src)) + { + pRxData->rxDataDbgCounters.excludedFrameCounter++; + /* free Buffer */ + RxBufFree(pRxData->hOs, pBuffer); + return; + } } /* update traffic monitor parameters */ |