From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from yy.com (unknown [183.36.123.141]) by dpdk.org (Postfix) with ESMTP id 316331B497; Thu, 21 Mar 2019 11:23:13 +0100 (CET) Received: from bigo.sg (unknown [14.29.89.90]) by centos (Coremail) with SMTP id AQAAfwDX3EgIZpNchrOtAA--.17955S2; Thu, 21 Mar 2019 18:23:04 +0800 (CST) Received: from ubuntu.bigo.local (unknown [58.248.226.7]) by coremail_mail (Coremail) with SMTP id bFkdDgCXKfH+ZZNc01+UAQ--.3396S2; Thu, 21 Mar 2019 18:22:58 +0800 (CST) From: Liang Zhang To: dev@dpdk.org Cc: 3chas3@gmail.com, ktraynor@redhat.com, Liang Zhang , stable@dpdk.org Date: Thu, 21 Mar 2019 18:22:47 +0800 Message-Id: <1553163767-27576-1-git-send-email-zhangliang@bigo.sg> X-Mailer: git-send-email 2.7.4 X-CM-TRANSID: AQAAfwDX3EgIZpNchrOtAA--.17955S2 Authentication-Results: centos; spf=neutral smtp.mail=zhangliang@bigo. sg; X-Coremail-Antispam: 1UD129KBjvJXoWxuF1fuFWktr1rZr1kJFW5ZFb_yoW5GrWxpF WDGw43AF1kJF47X3WxJa18ur4rurn7Aa4jgF93A3sYq3ZYvFy8Wr1xtFWjvrWY93yUWFsx Zr4UCrnI93WUCrJanT9S1TB71UUUUj7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU8nxnvy2 9KBjDU0xBIdaVrnUUvcSsGvfC2KfnxnUUI43ZEXa7xR_UUUUUUUUU== X-CM-SenderInfo: x2kd0wxold0w2s6exwnrovw/ Subject: [dpdk-dev] [PATCH v2] net/bonding: fix lacp negotiation failed X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Mar 2019 10:23:15 -0000 When monitor(port-mirroring) traffic from other lacp port-channel, rx_machine_update may recieving other lacp negotiation packets. Thus bond mode 4 will negotiation failed. Fixes: 112891cd27e5 ("net/bonding: add dedicated HW queues for LACP control") Cc: stable@dpdk.org Signed-off-by: Liang Zhang --- drivers/net/bonding/rte_eth_bond_8023ad.c | 12 ++++++++++-- drivers/net/bonding/rte_eth_bond_8023ad_private.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c index dd847c6..dac23ac 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.c +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c @@ -784,13 +784,20 @@ static void rx_machine_update(struct bond_dev_private *internals, uint8_t slave_id, struct rte_mbuf *lacp_pkt) { struct lacpdu_header *lacp; + struct lacpdu_actor_partner_params *partner; if (lacp_pkt != NULL) { lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *); RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP); - /* This is LACP frame so pass it to rx_machine */ - rx_machine(internals, slave_id, &lacp->lacpdu); + partner = &lacp->lacpdu.partner; + if (is_same_ether_addr(&partner->port_params.system, + &internals->mode4.mac_addr)) { + /* This LACP frame is sending to the bonding port + * so pass it to rx_machine. + */ + rx_machine(internals, slave_id, &lacp->lacpdu); + } rte_pktmbuf_free(lacp_pkt); } else rx_machine(internals, slave_id, NULL); @@ -1165,6 +1172,7 @@ bond_mode_8023ad_start(struct rte_eth_dev *bond_dev) struct mode8023ad_private *mode4 = &internals->mode4; static const uint64_t us = BOND_MODE_8023AX_UPDATE_TIMEOUT_MS * 1000; + rte_eth_macaddr_get(internals->port_id, &mode4->mac_addr); if (mode4->slowrx_cb) return rte_eal_alarm_set(us, &bond_mode_8023ad_ext_periodic_cb, bond_dev); diff --git a/drivers/net/bonding/rte_eth_bond_8023ad_private.h b/drivers/net/bonding/rte_eth_bond_8023ad_private.h index c51426b..f91902e 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad_private.h +++ b/drivers/net/bonding/rte_eth_bond_8023ad_private.h @@ -150,6 +150,7 @@ struct mode8023ad_private { uint64_t update_timeout_us; rte_eth_bond_8023ad_ext_slowrx_fn slowrx_cb; uint8_t external_sm; + struct ether_addr mac_addr; struct rte_eth_link slave_link; /***< slave link properties */ -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 03028A00E6 for ; Thu, 21 Mar 2019 11:23:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4259E1B4A0; Thu, 21 Mar 2019 11:23:16 +0100 (CET) Received: from yy.com (unknown [183.36.123.141]) by dpdk.org (Postfix) with ESMTP id 316331B497; Thu, 21 Mar 2019 11:23:13 +0100 (CET) Received: from bigo.sg (unknown [14.29.89.90]) by centos (Coremail) with SMTP id AQAAfwDX3EgIZpNchrOtAA--.17955S2; Thu, 21 Mar 2019 18:23:04 +0800 (CST) Received: from ubuntu.bigo.local (unknown [58.248.226.7]) by coremail_mail (Coremail) with SMTP id bFkdDgCXKfH+ZZNc01+UAQ--.3396S2; Thu, 21 Mar 2019 18:22:58 +0800 (CST) From: Liang Zhang To: dev@dpdk.org Cc: 3chas3@gmail.com, ktraynor@redhat.com, Liang Zhang , stable@dpdk.org Date: Thu, 21 Mar 2019 18:22:47 +0800 Message-Id: <1553163767-27576-1-git-send-email-zhangliang@bigo.sg> X-Mailer: git-send-email 2.7.4 X-CM-TRANSID: AQAAfwDX3EgIZpNchrOtAA--.17955S2 Authentication-Results: centos; spf=neutral smtp.mail=zhangliang@bigo. sg; X-Coremail-Antispam: 1UD129KBjvJXoWxuF1fuFWktr1rZr1kJFW5ZFb_yoW5GrWxpF WDGw43AF1kJF47X3WxJa18ur4rurn7Aa4jgF93A3sYq3ZYvFy8Wr1xtFWjvrWY93yUWFsx Zr4UCrnI93WUCrJanT9S1TB71UUUUj7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU8nxnvy2 9KBjDU0xBIdaVrnUUvcSsGvfC2KfnxnUUI43ZEXa7xR_UUUUUUUUU== X-CM-SenderInfo: x2kd0wxold0w2s6exwnrovw/ Subject: [dpdk-dev] [PATCH v2] net/bonding: fix lacp negotiation failed X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Content-Type: text/plain; charset="UTF-8" Message-ID: <20190321102247.msPcFzhmov7ouYsd6-mpw18HDC_Y9CU4TJ_Ke9bUWmk@z> When monitor(port-mirroring) traffic from other lacp port-channel, rx_machine_update may recieving other lacp negotiation packets. Thus bond mode 4 will negotiation failed. Fixes: 112891cd27e5 ("net/bonding: add dedicated HW queues for LACP control") Cc: stable@dpdk.org Signed-off-by: Liang Zhang --- drivers/net/bonding/rte_eth_bond_8023ad.c | 12 ++++++++++-- drivers/net/bonding/rte_eth_bond_8023ad_private.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c index dd847c6..dac23ac 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.c +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c @@ -784,13 +784,20 @@ static void rx_machine_update(struct bond_dev_private *internals, uint8_t slave_id, struct rte_mbuf *lacp_pkt) { struct lacpdu_header *lacp; + struct lacpdu_actor_partner_params *partner; if (lacp_pkt != NULL) { lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *); RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP); - /* This is LACP frame so pass it to rx_machine */ - rx_machine(internals, slave_id, &lacp->lacpdu); + partner = &lacp->lacpdu.partner; + if (is_same_ether_addr(&partner->port_params.system, + &internals->mode4.mac_addr)) { + /* This LACP frame is sending to the bonding port + * so pass it to rx_machine. + */ + rx_machine(internals, slave_id, &lacp->lacpdu); + } rte_pktmbuf_free(lacp_pkt); } else rx_machine(internals, slave_id, NULL); @@ -1165,6 +1172,7 @@ bond_mode_8023ad_start(struct rte_eth_dev *bond_dev) struct mode8023ad_private *mode4 = &internals->mode4; static const uint64_t us = BOND_MODE_8023AX_UPDATE_TIMEOUT_MS * 1000; + rte_eth_macaddr_get(internals->port_id, &mode4->mac_addr); if (mode4->slowrx_cb) return rte_eal_alarm_set(us, &bond_mode_8023ad_ext_periodic_cb, bond_dev); diff --git a/drivers/net/bonding/rte_eth_bond_8023ad_private.h b/drivers/net/bonding/rte_eth_bond_8023ad_private.h index c51426b..f91902e 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad_private.h +++ b/drivers/net/bonding/rte_eth_bond_8023ad_private.h @@ -150,6 +150,7 @@ struct mode8023ad_private { uint64_t update_timeout_us; rte_eth_bond_8023ad_ext_slowrx_fn slowrx_cb; uint8_t external_sm; + struct ether_addr mac_addr; struct rte_eth_link slave_link; /***< slave link properties */ -- 2.7.4