@@ -1690,23 +1690,6 @@ create_bond(struct gatekeeper_if *iface)
16901690 }
16911691 }
16921692
1693- if (__lacp_enabled (iface )) {
1694- /*
1695- * If LACP is enabled, enable multicast addresses.
1696- * Otherwise, rx_burst_8023ad() of DPDK's bonding driver
1697- * (see rte_eth_bond_pmd.c) is going to discard
1698- * multicast Ethernet packets such as ARP and
1699- * ND packets.
1700- */
1701- ret = rte_eth_allmulticast_enable (iface -> id );
1702- if (unlikely (ret < 0 )) {
1703- G_LOG (ERR , "%s(%s): cannot enable multicast on bond device (errno=%i): %s\n" ,
1704- __func__ , iface -> name ,
1705- - ret , rte_strerror (- ret ));
1706- goto close_bond ;
1707- }
1708- }
1709-
17101693 /* Add members to bond. */
17111694 for (i = 0 ; i < iface -> num_ports ; i ++ ) {
17121695 ret = rte_eth_bond_member_add (iface -> id , iface -> ports [i ]);
@@ -2021,6 +2004,25 @@ init_iface(struct gatekeeper_if *iface)
20212004 goto free_ports ;
20222005 }
20232006
2007+ /*
2008+ * IPv6's protocol ND requires multicast. Therefore,
2009+ * if IPv6 is enabled, enable multicast addresses.
2010+ *
2011+ * Most DPDK's drivers have multicast enabled by default,
2012+ * but a few drivers have it disabled by default.
2013+ * Drivers known to have multicast disabled by default are
2014+ * the bonding driver when LACP is being used and the i40e driver.
2015+ */
2016+ if (ipv6_if_configured (iface )) {
2017+ ret = rte_eth_allmulticast_enable (iface -> id );
2018+ if (unlikely (ret < 0 )) {
2019+ G_LOG (ERR , "%s(%s): cannot enable multicast (errno=%i): %s\n" ,
2020+ __func__ , iface -> name ,
2021+ - ret , rte_strerror (- ret ));
2022+ goto close_ports ;
2023+ }
2024+ }
2025+
20242026 /* Make sure the interface supports hardware offloads. */
20252027 ret = check_if_offloads (iface , & port_conf );
20262028 if (unlikely (ret < 0 )) {
0 commit comments