On Tue, Apr 14, 2020 at 4:39 AM Rasesh Mody <rm...@marvell.com> wrote: > > From: Souvik Dey <so...@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 <so...@rbbn.com> > Acked-by: Rasesh Mody <rm...@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 >