From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liang Zhang Subject: [PATCH v3 1/2] bonding: fix lacp negotiation failed Date: Fri, 15 Mar 2019 16:53:38 +0800 Message-ID: <1552640019-16619-1-git-send-email-zhangliang@bigo.sg> References: <1552566441-14658-1-git-send-email-zhangliang@bigo.sg> Cc: 3chas3@gmail.com, Liang Zhang To: dev@dpdk.org Return-path: Received: from yy.com (unknown [183.36.123.141]) by dpdk.org (Postfix) with ESMTP id F21192BD3 for ; Fri, 15 Mar 2019 09:53:55 +0100 (CET) In-Reply-To: <1552566441-14658-1-git-send-email-zhangliang@bigo.sg> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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. Signed-off-by: Liang Zhang --- drivers/net/bonding/rte_eth_bond_8023ad.c | 9 +++++++-- drivers/net/bonding/rte_eth_bond_8023ad_private.h | 1 + 2 files changed, 8 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..e518956 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.c +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c @@ -784,13 +784,17 @@ 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 is LACP frame 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); @@ -1140,6 +1144,7 @@ bond_mode_8023ad_setup(struct rte_eth_dev *dev, bond_mode_8023ad_conf_assign(mode4, conf); mode4->slowrx_cb = conf->slowrx_cb; mode4->agg_selection = AGG_STABLE; + rte_eth_macaddr_get(internals->port_id, &mode4->mac_addr); if (dev->data->dev_started) bond_mode_8023ad_start(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