Skip to content

Commit 23c7c38

Browse files
authored
Merge pull request #716 from AltraMayor/ipv6_mc
lib/net: enable multicast addresses if IPv6 is enabled
2 parents 917021c + 2195af5 commit 23c7c38

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

lib/net.c

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)