For the operation of multicast MAC filters, the usage of filter op ADD
is rather misleading, given it removes any existing filters for the
vport. Use REPLACE ( ECORE_FILTER_REPLACE ) instead.
Current implementation pass only one MAC address to
ecore_sp_eth_filter_mcast() and hence any previously installed filters
are removed and breaks the multicast function. This can be observed via
assigning new IPv6 addresses to the interface, or putting the interface
as a member of lagg(4) interface with LACP aggregation protocol. Fix
that by calculating the multicast filter bins directly from all multicast
MAC addresses and replace the filters every time the bins changes.
As a nice effect, the soft limit of the maximum number of supported
multicast MAC address ( ECORE_MAX_MC_ADDRS 64 ) is removed. Due to the
nature of filter, which is hash based, a full 1's multicast filter bins
means all mutlicast packets are accepted and then there's no need to
make the vport into allmulti mode.
Given the VF port is set to promiscuous mode unconditionally, the
setting of the multicast MAC filters for VF ports is shortcuted and not
well tested.
PR: 265857
PR: 290973
MFC after: 1 week