/* * Description: Caculate multicast hash value by CRC32 * * Parameters: * In: * pbyMultiAddr - Multicast Address * Out: * none * * Return Value: Hash value * */ unsigned char ETHbyGetHashIndexByCrc32 (unsigned char *pbyMultiAddr) { int ii; unsigned char byTmpHash; unsigned char byHash = 0; // get the least 6-bits from CRC generator byTmpHash = (unsigned char)(CRCdwCrc32(pbyMultiAddr, ETH_ALEN, 0xFFFFFFFFL) & 0x3F); // reverse most bit to least bit for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { byHash <<= 1; if (byTmpHash & 0x01) byHash |= 1; byTmpHash >>= 1; } // adjust 6-bits to the right most return (byHash >> 2); }
BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr) { int ii; BYTE byTmpHash; BYTE byHash = 0; byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, ETH_ALEN, 0xFFFFFFFFL) & 0x3F); for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { byHash <<= 1; if (byTmpHash & 0x01) byHash |= 1; byTmpHash >>= 1; } return byHash >> 2; }
BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr) { int ii; BYTE byTmpHash; BYTE byHash = 0; /* get the least 6-bits from CRC generator */ byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, ETH_ALEN, 0xFFFFFFFFL) & 0x3F); /* reverse most bit to least bit */ for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { byHash <<= 1; if (byTmpHash & 0x01) byHash |= 1; byTmpHash >>= 1; } /* adjust 6-bits to the right most */ return byHash >> 2; }