diff options
author | Steve Shin <jonshin@cisco.com> | 2017-04-22 06:58:23 -0700 |
---|---|---|
committer | Steve Shin <jonshin@cisco.com> | 2017-04-22 06:58:23 -0700 |
commit | bc66a9122f73b97ca1ae60f1df47b39c141be3ae (patch) | |
tree | b19de0de241ede85479daac5b24924acc673d221 /src | |
parent | 77819f6ab4ac6525b51b92c78ea29e4b832a225b (diff) |
Fix multicast enable on the bonded interface
Multicast enable flag should be set when the bonded interface is up.
This flag allows multicast packets to be processed from the slave devices
of the bonded interface. Also promiscuous mode for all-multicast should
be correctly displayed as part of 'show hardware detail' output.
Change-Id: Ief0157c4c030a28afb9c45ebf3d6a12710083724
Signed-off-by: Steve Shin <jonshin@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/dpdk/device/device.c | 12 | ||||
-rw-r--r-- | src/plugins/dpdk/device/format.c | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/plugins/dpdk/device/device.c b/src/plugins/dpdk/device/device.c index e84d524f720..48f3237b6a8 100644 --- a/src/plugins/dpdk/device/device.c +++ b/src/plugins/dpdk/device/device.c @@ -649,6 +649,18 @@ dpdk_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags) rte_eth_promiscuous_disable (xd->device_index); rte_eth_allmulticast_enable (xd->device_index); + + if (xd->pmd == VNET_DPDK_PMD_BOND) + { + u8 slink[16]; + int nlink = rte_eth_bond_slaves_get (xd->device_index, slink, 16); + while (nlink >= 1) + { + u8 dpdk_port = slink[--nlink]; + rte_eth_allmulticast_enable (dpdk_port); + } + } + xd->flags |= DPDK_DEVICE_FLAG_ADMIN_UP; dpdk_update_counters (xd, now); dpdk_update_link_state (xd, now); diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c index f1cca3f7e5f..93eca524380 100644 --- a/src/plugins/dpdk/device/format.c +++ b/src/plugins/dpdk/device/format.c @@ -417,7 +417,7 @@ format_dpdk_device (u8 * s, va_list * args) format (s, "%Upromiscuous: unicast %s all-multicast %s\n", format_white_space, indent + 2, rte_eth_promiscuous_get (xd->device_index) ? "on" : "off", - rte_eth_promiscuous_get (xd->device_index) ? "on" : "off"); + rte_eth_allmulticast_get (xd->device_index) ? "on" : "off"); vlan_off = rte_eth_dev_get_vlan_offload (xd->device_index); s = format (s, "%Uvlan offload: strip %s filter %s qinq %s\n", format_white_space, indent + 2, |