Information

Enhanced Three-Speed Ethernet Controllers
MPC8308 PowerQUICC II Pro Processor Reference Manual, Rev. 1
Freescale Semiconductor 16-133
#define BITS_PER_BYTE 8
/* crc32() Takes the array of bytes, macaddr[], representing an
Ethernet MAC address and returns the CRC-32 result over these bytes,
where each byte is used in bit-reversed form (Ethernet bit order).
Index 0 of macaddr[] is the first byte of the address on the wire.
Test case: the result of crc32 on {0x00, 0x01, 0x02, 0x03, 0x04, 0x05}
should be 0xad0c28f3.
*/
unsigned long crc32(unsigned char macaddr[MAC_ADDRLEN])
{
unsigned long crc, result;
int byte, i;
/* CRC-32 algorithm starts by inverting first 4 bytes */
crc = CRC_INITIAL;
/* add each byte to running CRC accumulator */
for (byte = 0; byte < MAC_ADDRLEN; ++byte) {
crc ^= macaddr[byte];
/* shift CRC right to perform but reversal on byte of address */
for (i = 0; i < BITS_PER_BYTE; ++i)
if (crc & 1)
crc = (crc >> 1) ^ CRC_POLYNOMIAL;
else
crc >>= 1;
}
/* finally, reverse bits of result to get CRC in normal bit order */
for (result = 0, i = 4*BITS_PER_BYTE-1; i >= 0; crc >>= 1, --i)
result |= (crc & 1) << i;
return result;
}
If the CRC hash table index selects a bit that is set in the hash table, the frame is accepted. If 32 group
addresses are stored in the hash table and random group addresses are received, the extended hash table
prevents roughly 480/512 (93.8%) of the group address frames from reaching memory. Software must
further filter those that reach memory to determine if they contain the correct addresses. Alternatively,
small multicast groups can be held in the exact match MAC address registers, which guarantees that only
correct frames are admitted.
The effectiveness of the hash table declines as the number of addresses increases. For instance, as the
number of addresses stored in the 512-bin hash table increases, the vast majority of the hash table bits are
set, preventing only a small fraction of frames from reaching memory.
NOTE
The hash table cannot be used to reject frames that match a set of selected
addresses because unintended addresses can map to the same bit in the hash
table. The receive queue filer may be used to reject frames with unintended
address hits in the hash table.