Removing an Address from the Multicast Address Filter of a Network Device
NetDev_AddrMulticastRemove() is used to remove an (IP-to-Ethernet) multicast hardware address from a device.
You can use exactly the same code as in NetDev_AddrMulticastAdd() to calculate the device’s CRC hash, but instead remove a multicast address by decrementing the device’s hash bit reference counters and clearing the appropriate bits in the device’s multicast registers. See Driver Data & Control Using DMA below.
Listing - Removing Multicast Address
/* ---------- CALCULATE HASH CODE ---------- */
/* Use NetDev_AddrMulticastAdd()'s algorithm to calculate CRC hash. */
/* - REMOVE MULTICAST ADDRESS FROM DEVICE -- */
paddr_hash_ctrs = &pdev_data->MulticastAddrHashBitCtr[hash];
if (*paddr_hash_ctrs > 1u) { /* If multiple multicast addresses hashed, ..*/
(*paddr_hash_ctrs)--; /* .. decrement hash bit reference counter ..*/
*perr = NET_DEV_ERR_NONE; /* .. but do NOT unconfigure hash register. */
return;
}
*paddr_hash_ctrs = 0u; /* Clear hash bit reference counter. */
if (hash <= 31u) { /* Clear multicast hash register bit. */
pdev->MCAST_REG_LO &= ~(1u << reg_bit); /* (Substitute 'MCAST_REG_LO/HI' with .. */
} else { /* .. device's actual multicast registers.) */
pdev->MCAST_REG_HI &= ~(1u << reg_bit);
}
, multiple selections available,