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