From bc66a9122f73b97ca1ae60f1df47b39c141be3ae Mon Sep 17 00:00:00 2001 From: Steve Shin Date: Sat, 22 Apr 2017 06:58:23 -0700 Subject: [PATCH] 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 --- src/plugins/dpdk/device/device.c | 12 ++++++++++++ src/plugins/dpdk/device/format.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) 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, -- 2.16.6