From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Kinzie Subject: [PATCH V3 2/4] bond mode 4: do not ignore multicast Date: Tue, 1 Mar 2016 09:32:00 -0800 Message-ID: <1456853522-4864-3-git-send-email-ehkinzie@gmail.com> References: <8CEF83825BEC744B83065625E567D7C219FB4852@IRSMSX108.ger.corp.intel.com> <1456853522-4864-1-git-send-email-ehkinzie@gmail.com> Cc: Eric Kinzie To: dev@dpdk.org Return-path: Received: from mail-pf0-f193.google.com (mail-pf0-f193.google.com [209.85.192.193]) by dpdk.org (Postfix) with ESMTP id A8657A874 for ; Tue, 1 Mar 2016 18:32:24 +0100 (CET) Received: by mail-pf0-f193.google.com with SMTP id w128so11266166pfb.2 for ; Tue, 01 Mar 2016 09:32:24 -0800 (PST) In-Reply-To: <1456853522-4864-1-git-send-email-ehkinzie@gmail.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Eric Kinzie The bonding PMD in mode 4 puts all enslaved interfaces into promiscuous mode in order to receive LACPDUs and must filter unwanted packets after the traffic has been "collected". Allow broadcast and multicast through so that ARP and IPv6 neighbor discovery continue to work. Fixes: 46fb43683679 ("bond: add mode 4") Signed-off-by: Eric Kinzie Signed-off-by: Stephen Hemminger Acked-by: Declan Doherty --- app/test/test_link_bonding_mode4.c | 7 +++++-- drivers/net/bonding/rte_eth_bond_pmd.c | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c index 713368d..31640cd 100644 --- a/app/test/test_link_bonding_mode4.c +++ b/app/test/test_link_bonding_mode4.c @@ -747,8 +747,11 @@ test_mode4_rx(void) rte_eth_macaddr_get(test_params.bonded_port_id, &bonded_mac); ether_addr_copy(&bonded_mac, &dst_mac); - /* Assert that dst address is not bonding address */ - dst_mac.addr_bytes[0]++; + /* Assert that dst address is not bonding address. Do not set the + * least significant bit of the zero byte as this would create a + * multicast address. + */ + dst_mac.addr_bytes[0] += 2; /* First try with promiscuous mode enabled. * Add 2 packets to each slave. First with bonding MAC address, second with diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index b63c886..011150a 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -171,6 +171,7 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, * mode and packet address does not match. */ if (unlikely(hdr->ether_type == ether_type_slow_be || !collecting || (!promisc && + !is_multicast_ether_addr(&hdr->d_addr) && !is_same_ether_addr(&bond_mac, &hdr->d_addr)))) { if (hdr->ether_type == ether_type_slow_be) { -- 2.1.4