Removing an Address from the Multicast Address Filter of a Network Device

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);
}