From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8E15FA057B; Tue, 14 Apr 2020 15:23:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5DE181C239; Tue, 14 Apr 2020 15:23:50 +0200 (CEST) Received: from mail-io1-f66.google.com (mail-io1-f66.google.com [209.85.166.66]) by dpdk.org (Postfix) with ESMTP id A43061C222 for ; Tue, 14 Apr 2020 15:23:48 +0200 (CEST) Received: by mail-io1-f66.google.com with SMTP id f19so13168216iog.5 for ; Tue, 14 Apr 2020 06:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nPg6R0k4j6oTT/4+Sqf/w1O9aR+Mc7jvEaa/gOYSZ4k=; b=cjd1sQ28nYAmelwBVjd4ycDkYDBz/fIr60rr2l0q2S0bPz7L0RFYW/M6eH8CSGVEyv zNkvq/5dsJM8GTTC3xcZ0Z3lNKBKHxsr4SRJltLc2T6a48cXBCSY7X8UV1XlF9p8DAOl v+dUXhyRFAp27xurCK+dF7g+o4RJiv31wXB/68YEsq73J8Lu75JTxODHosmMCzgqsh69 Lk/82cmJf+06YGWm965b18ASNi6EcKd3BhC4SYJ6XKe4pGkalyKw6xhOnhu6CSHEH915 iDmGqRevvl/j2efkskotE68VASrviF+s8A+erJ+af4EngydfPLWqP0YcqnHNB8X2DRYJ 12Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nPg6R0k4j6oTT/4+Sqf/w1O9aR+Mc7jvEaa/gOYSZ4k=; b=fTr8/D6gE4SDGweanAPXvB3TkJeFMPgpTQ/Ju8ODJqZPkgzsIQhPTaQXr/yHL1+Sv4 eGaOnhkxxK62YC+cH9MtuIceI4a3lGyNt1vz0K0aF5KgYwjskFACGOpHwkmKn0wXid5T sDFQJJWrulqJg8KT+K1biLZ3RDPzZITSRRp7ZcN2/CRyQ9c31WQUYSJ5xWZ9LXpScxLT zrB3Ajo/0fFuj/n2E5UmAVTc9dsKc0IT6UV94J1Ud7O71oKatZRYjOUHxDRgAR+AzJRD uODuNa6nUOVAzTlALGZwbYuK/AwDEMs/9W+hnOxOIfgrN1lSE70dWHZ2km4joqWEQw1W aL9A== X-Gm-Message-State: AGi0PuaVvGK2qrBFMOt/AOs4sksIYZiADY9VepB9N6OoM0S1aiHFXbzV rO5Tzi2e/WhkjIqjVYklLZctZ1yEXhs2Pbss8+I= X-Google-Smtp-Source: APiQypJkIEUAqjk7G6TxZa9e8x3au450hZ0Qslv4ZszsYcAk4JKhQS3Fc8Cj+DA/tfqmPR5ogQIhhbDGheaGeV/LbqU= X-Received: by 2002:a5e:8815:: with SMTP id l21mr800965ioj.59.1586870627860; Tue, 14 Apr 2020 06:23:47 -0700 (PDT) MIME-Version: 1.0 References: <20200228200451.2128-1-sodey@rbbn.com> <20200413230902.23421-1-rmody@marvell.com> In-Reply-To: <20200413230902.23421-1-rmody@marvell.com> From: Jerin Jacob Date: Tue, 14 Apr 2020 18:53:31 +0530 Message-ID: To: Rasesh Mody Cc: Jerin Jacob , Souvik Dey , dpdk-dev , Stephen Hemminger , Ferruh Yigit , Thomas Monjalon Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v2] net/bnx2x: add multicast MAC address filtering 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" On Tue, Apr 14, 2020 at 4:39 AM Rasesh Mody wrote: > > From: Souvik Dey > > Add support the set_mc_addr_list device operation in the bnx2xvf PMD. > > The configured addresses are stored in the device private area, so > they can be flushed before adding new ones. > Without this v6 multicast packets were properly forwarded to the > Guest VF. > > v2: > * Fixed the Wrong tag issue with check-git-log.sh > > Signed-off-by: Souvik Dey > Acked-by: Rasesh Mody Applied to dpdk-next-net-mrvl/master. Thanks > --- > drivers/net/bnx2x/bnx2x.h | 4 +++ > drivers/net/bnx2x/bnx2x_ethdev.c | 35 ++++++++++++++++++- > drivers/net/bnx2x/bnx2x_vfpf.c | 58 ++++++++++++++++++++++++++++++++ > drivers/net/bnx2x/bnx2x_vfpf.h | 3 ++ > 4 files changed, 99 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h > index 1dbc98197d..3cadb5d824 100644 > --- a/drivers/net/bnx2x/bnx2x.h > +++ b/drivers/net/bnx2x/bnx2x.h > @@ -1376,6 +1376,10 @@ struct bnx2x_softc { > uint8_t prio_to_cos[BNX2X_MAX_PRIORITY]; > > int panic; > + /* Array of Multicast addrs */ > + struct rte_ether_addr mc_addrs[VF_MAX_MULTICAST_PER_VF]; > + /* Multicast mac addresses number */ > + uint16_t mc_addrs_num; > }; /* struct bnx2x_softc */ > > /* IOCTL sub-commands for edebug and firmware upgrade */ > diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c > index 7864b5b80a..30588b152f 100644 > --- a/drivers/net/bnx2x/bnx2x_ethdev.c > +++ b/drivers/net/bnx2x/bnx2x_ethdev.c > @@ -240,6 +240,9 @@ bnx2x_dev_start(struct rte_eth_dev *dev) > PMD_DRV_LOG(ERR, sc, "rte_intr_enable failed"); > } > > + /* Configure the previously stored Multicast address list */ > + if (IS_VF(sc)) > + bnx2x_vfpf_set_mcast(sc, sc->mc_addrs, sc->mc_addrs_num); > bnx2x_dev_rxtx_init(dev); > > bnx2x_print_device_info(sc); > @@ -265,7 +268,12 @@ bnx2x_dev_stop(struct rte_eth_dev *dev) > /* stop the periodic callout */ > bnx2x_periodic_stop(dev); > } > - > + /* Remove the configured Multicast list > + * Sending NULL for the list of address and the > + * Number is set to 0 denoting DEL_CMD > + */ > + if (IS_VF(sc)) > + bnx2x_vfpf_set_mcast(sc, NULL, 0); > ret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE); > if (ret) { > PMD_DRV_LOG(DEBUG, sc, "bnx2x_nic_unload failed (%d)", ret); > @@ -348,6 +356,30 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev) > return 0; > } > > +static int > +bnx2x_dev_set_mc_addr_list(struct rte_eth_dev *dev, > + struct rte_ether_addr *mc_addrs, uint32_t mc_addrs_num) > +{ > + struct bnx2x_softc *sc = dev->data->dev_private; > + int err; > + PMD_INIT_FUNC_TRACE(sc); > + /* flush previous addresses */ > + err = bnx2x_vfpf_set_mcast(sc, NULL, 0); > + if (err) > + return err; > + sc->mc_addrs_num = 0; > + > + /* Add new ones */ > + err = bnx2x_vfpf_set_mcast(sc, mc_addrs, mc_addrs_num); > + if (err) > + return err; > + > + sc->mc_addrs_num = mc_addrs_num; > + memcpy(sc->mc_addrs, mc_addrs, mc_addrs_num * sizeof(*mc_addrs)); > + > + return 0; > +} > + > static int > bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) > { > @@ -562,6 +594,7 @@ static const struct eth_dev_ops bnx2xvf_eth_dev_ops = { > .promiscuous_disable = bnx2x_promisc_disable, > .allmulticast_enable = bnx2x_dev_allmulticast_enable, > .allmulticast_disable = bnx2x_dev_allmulticast_disable, > + .set_mc_addr_list = bnx2x_dev_set_mc_addr_list, > .link_update = bnx2xvf_dev_link_update, > .stats_get = bnx2x_dev_stats_get, > .xstats_get = bnx2x_dev_xstats_get, > diff --git a/drivers/net/bnx2x/bnx2x_vfpf.c b/drivers/net/bnx2x/bnx2x_vfpf.c > index 8f7559c675..097ccfee19 100644 > --- a/drivers/net/bnx2x/bnx2x_vfpf.c > +++ b/drivers/net/bnx2x/bnx2x_vfpf.c > @@ -703,3 +703,61 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc) > > return rc; > } > + > +int > +bnx2x_vfpf_set_mcast(struct bnx2x_softc *sc, > + struct rte_ether_addr *mc_addrs, > + uint32_t mc_addrs_num) > +{ > + struct vf_set_q_filters_tlv *query; > + struct vf_common_reply_tlv *reply = > + &sc->vf2pf_mbox->resp.common_reply; > + int rc = 0; > + uint32_t i = 0; > + query = &sc->vf2pf_mbox->query[0].set_q_filters; > + bnx2x_vf_prep(sc, &query->first_tlv, BNX2X_VF_TLV_SET_Q_FILTERS, > + sizeof(*query)); > + /* We support PFVF_MAX_MULTICAST_PER_VF mcast addresses tops */ > + if (mc_addrs_num > VF_MAX_MULTICAST_PER_VF) { > + PMD_DRV_LOG(ERR, sc, > + "VF supports not more than %d multicast MAC addresses", > + VF_MAX_MULTICAST_PER_VF); > + > + rc = -EINVAL; > + goto out; > + } > + > + for (i = 0; i < mc_addrs_num; i++) { > + PMD_DRV_LOG(DEBUG, sc, "Adding mcast MAC:%x:%x:%x:%x:%x:%x", > + mc_addrs[i].addr_bytes[0], > + mc_addrs[i].addr_bytes[1], > + mc_addrs[i].addr_bytes[2], > + mc_addrs[i].addr_bytes[3], > + mc_addrs[i].addr_bytes[4], > + mc_addrs[i].addr_bytes[5]); > + memcpy(query->multicast[i], mc_addrs[i].addr_bytes, ETH_ALEN); > + } > + > + query->vf_qid = 0; > + query->flags = BNX2X_VF_MULTICAST_CHANGED; > + query->multicast_cnt = i; > + > + /* add list termination tlv */ > + bnx2x_add_tlv(sc, query, query->first_tlv.tl.length, > + BNX2X_VF_TLV_LIST_END, > + sizeof(struct channel_list_end_tlv)); > + rc = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr); > + if (rc) > + goto out; > + > + if (reply->status != BNX2X_VF_STATUS_SUCCESS) { > + PMD_DRV_LOG(ERR, sc, "Set Rx mode/multicast failed: %d", > + reply->status); > + rc = -EINVAL; > + } > + > +out: > + bnx2x_vf_finalize(sc, &query->first_tlv); > + > + return rc; > +} > diff --git a/drivers/net/bnx2x/bnx2x_vfpf.h b/drivers/net/bnx2x/bnx2x_vfpf.h > index ce0259adf1..7aab8b101a 100644 > --- a/drivers/net/bnx2x/bnx2x_vfpf.h > +++ b/drivers/net/bnx2x/bnx2x_vfpf.h > @@ -331,5 +331,8 @@ struct bnx2x_vf_mbx_msg { > int bnx2x_vf_teardown_queue(struct bnx2x_softc *sc, int qid); > int bnx2x_vf_set_mac(struct bnx2x_softc *sc, int set); > int bnx2x_vf_config_rss(struct bnx2x_softc *sc, struct ecore_config_rss_params *params); > +int bnx2x_vfpf_set_mcast(struct bnx2x_softc *sc, > + struct rte_ether_addr *mc_addrs, > + uint32_t mc_addrs_num); > > #endif /* BNX2X_VFPF_H */ > -- > 2.18.0 >