MAC_DRVR_RxFilterHashTableEntrySet Function
C
TCPIP_MAC_RES MAC_DRVR_RxFilterHashTableEntrySet(
DRV_HANDLE hMac,
const TCPIP_MAC_ADDR * DestMACAddr
);
Returns
- TCPIP_MAC_RES_OK if success
- a TCPIP_MAC_RES error value if failed
Description
This function sets the MAC hash table filtering to allow packets sent to DestMACAddr to be received. It calculates a CRC-32 using polynomial 0x4C11DB7 over the 6 byte MAC address and then, using bits 28:23 of the CRC, will set the appropriate bits in the hash table filter registers ( ETHHT0-ETHHT1).
The function will enable/disable the Hash Table receive filter if needed.
Remarks
- Sets the appropriate bit in the ETHHT0/1 registers to allow packets sent to DestMACAddr to be received and enabled the Hash Table receive filter.
- There is no way to individually remove destination MAC addresses from the hash table since it is possible to have a hash collision and therefore multiple MAC addresses relying on the same hash table bit.
- A workaround is to have the stack store each enabled MAC address and to perform the comparison at run time.
- A call to MAC_DRVR_RxFilterHashTableEntrySet() using a
00-00-00-00-00-00 destination MAC address, which will clear
the entire hash table and disable the hash table filter.
This will allow the receive of all packets, regardless of their destination.
Preconditions
- MAC_DRVR_Initialize() should have been called.
- MAC_DRVR_Open() should have been called to obtain a valid handle.
Parameters
Parameters | Description |
---|---|
hMac | Ethernet MAC client handle |
DestMACAddr | Destination, 6 byte, MAC addresses to be allowed through the Hash Table Filter. If DestMACAddr is set to 00-00-00-00-00-00, then the hash table will be cleared of all entries and the filter will be disabled. |