net/bonding: prefer allmulti to promiscuous for LACP
authorDavid Marchand <david.marchand@redhat.com>
Wed, 10 Apr 2019 12:53:49 +0000 (14:53 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 22 Aug 2019 16:45:49 +0000 (18:45 +0200)
commit68218b87c184e2dbea1ca3540a92a849240c115f
tree702250f340f3e47830b09bbc7a127850cb8b8b8f
parent0ec234460b9282c96033282a9679e88d2df5e58e
net/bonding: prefer allmulti to promiscuous for LACP

Rather than the global promiscuous mode on all slaves, let's try to use
allmulti.
To do this, we apply the same mechanism than for promiscuous and drop in
rx_burst.

When adding a slave, we first try to use allmulti, else we try
promiscuous.
Because of this, we must be able to handle allmulti on the bonding
interface, so the associated dev_ops is added with checks on which mode
has been applied on each slave.

Rather than add a new flag in the bond private structure, we can remove
promiscuous_en since ethdev already maintains this information.
When starting the bond device, there is no promisc/allmulti re-apply
as, again, ethdev does this itself.

On reception, we must inspect if the packets are multicast or unicast
and take a decision to drop based on which mode has been enabled on the
bonding interface.

Note: in the future, if we define an API so that we can add/remove mc
addresses to a port (rather than the current global set_mc_addr_list
API), we can refine this to only register the LACP multicast mac
address.

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chas Williams <chas3@att.com>
drivers/net/bonding/rte_eth_bond_8023ad.c
drivers/net/bonding/rte_eth_bond_8023ad_private.h
drivers/net/bonding/rte_eth_bond_pmd.c
drivers/net/bonding/rte_eth_bond_private.h