From: Steve Shin Date: Sat, 22 Apr 2017 13:58:23 +0000 (-0700) Subject: Fix multicast enable on the bonded interface X-Git-Tag: v17.07-rc1~293 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;ds=sidebyside;h=bc66a9122f73b97ca1ae60f1df47b39c141be3ae;p=vpp.git 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 --- 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,