[dpdk-dev] [PATCH v3] net/bnx2x: handle guest VLAN for SR-IOV case

Jerin Jacob jerinjacobk at gmail.com
Tue Apr 14 15:46:37 CEST 2020


On Tue, Apr 14, 2020 at 4:39 AM Rasesh Mody <rmody at marvell.com> wrote:
>
> From: Souvik Dey <sodey at rbbn.com>
>
> In case of bnx2xvf pmd, tx packets can support vland id in 2 ways:
> 1. setting the mbuf ol_flags=PKT_TX_VLAN_PKT and passing the
> vlanid in mbuf->vlan_tci.
> 2. the tx packet itself has the vlan id included in the packet.
> The first case is working as expected but the second case where
> the vlan id is included in thetx packets itself was found not
> working as expected. To handle that we need to properly set the
> start_bd bitfield and the vlan_or_ethertype instead of setting it
> to just the ethertype in case of VF.
>
> v3:
>  * Fixed the checkpatch issue.
>  * Changed vlan to VLAN in the headline.
>
> v2:
>  * Fix compilation issues.
>  * Changed the Subject Line as recommended.
>
> Signed-off-by: Souvik Dey <sodey at rbbn.com>
> Acked-by: Rasesh Mody <rmody at marvell.com>

Applied to dpdk-next-net-mrvl/master. Thanks



> ---
>  drivers/net/bnx2x/bnx2x.c | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
> index 0b4030e2b9..ff7646b25d 100644
> --- a/drivers/net/bnx2x/bnx2x.c
> +++ b/drivers/net/bnx2x/bnx2x.c
> @@ -2216,11 +2216,27 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0)
>                         tx_start_bd->vlan_or_ethertype =
>                             rte_cpu_to_le_16(pkt_prod);
>                 else {
> +                       /* when transmitting in a vf, start bd
> +                        * must hold the ethertype for fw to enforce it
> +                        */
>                         struct rte_ether_hdr *eh =
>                             rte_pktmbuf_mtod(m0, struct rte_ether_hdr *);
>
> -                       tx_start_bd->vlan_or_ethertype =
> -                           rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type));
> +                       /* Still need to consider inband vlan for enforced */
> +                       if (eh->ether_type ==
> +                                       rte_cpu_to_be_16(RTE_ETHER_TYPE_VLAN)) {
> +                               struct rte_vlan_hdr *vh =
> +                                       (struct rte_vlan_hdr *)(eh + 1);
> +                               tx_start_bd->bd_flags.as_bitfield |=
> +                                       (X_ETH_INBAND_VLAN <<
> +                                       ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
> +                               tx_start_bd->vlan_or_ethertype =
> +                                       rte_cpu_to_le_16(ntohs(vh->vlan_tci));
> +                       } else {
> +                               tx_start_bd->vlan_or_ethertype =
> +                                       (rte_cpu_to_le_16
> +                                       (rte_be_to_cpu_16(eh->ether_type)));
> +                       }
>                 }
>         }
>
> --
> 2.18.0
>


More information about the dev mailing list