On 12/16/19 11:47 AM, Somnath Kotur wrote: > On Mon, Dec 16, 2019 at 12:01 PM Andrew Rybchenko > <arybche...@solarflare.com> wrote: >> >> On 12/16/19 6:16 AM, Somnath Kotur wrote: >>> Certain hardware may be able to strip and/or save only the outermost >>> VLAN instead of both the VLANs in the mbuf in a QinQ scenario. >>> To handle such cases, we could re-interpret setting of just >>> PKT_RX_QINQ_STRIPPED >>> to indicate that only the outermost VLAN has been stripped by the hardware >>> and >>> saved in mbuf->vlan_tci_outer. >>> Only When both PKT_RX_QINQ_STRIPPED and PKT_RX_VLAN_STRIPPED are set, the 2 >>> vlans >>> have been stripped by the hardware and their tci are saved in >>> mbuf->vlan_tci (inner) >>> and mbuf->vlan_tci_outer (outer). >>> >>> Signed-off-by: Somnath Kotur <somnath.ko...@broadcom.com> >>> Signed-off-by: JP Lee <jongpil....@broadcom.com> >>> --- >>> lib/librte_mbuf/rte_mbuf_core.h | 15 +++++++++++---- >>> 1 file changed, 11 insertions(+), 4 deletions(-) >>> >>> diff --git a/lib/librte_mbuf/rte_mbuf_core.h >>> b/lib/librte_mbuf/rte_mbuf_core.h >>> index 9a8557d..db1070b 100644 >>> --- a/lib/librte_mbuf/rte_mbuf_core.h >>> +++ b/lib/librte_mbuf/rte_mbuf_core.h >>> @@ -124,12 +124,19 @@ >>> #define PKT_RX_FDIR_FLX (1ULL << 14) >>> >>> /** >>> - * The 2 vlans have been stripped by the hardware and their tci are >>> - * saved in mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). >>> + * The outer vlan has been stripped by the hardware and their tci are >>> + * saved in mbuf->vlan_tci_outer (outer). >>> * This can only happen if vlan stripping is enabled in the RX >>> * configuration of the PMD. >>> - * When PKT_RX_QINQ_STRIPPED is set, the flags (PKT_RX_VLAN | >>> - * PKT_RX_VLAN_STRIPPED | PKT_RX_QINQ) must also be set. >>> + * When PKT_RX_QINQ_STRIPPED is set, the flags (PKT_RX_VLAN | PKT_RX_QINQ) >>> + * must also be set. >>> + * When both PKT_RX_QINQ_STRIPPED and PKT_RX_VLAN_STRIPPED are set, the 2 >>> vlans >>> + * have been stripped by the hardware and their tci are saved in >>> + * mbuf->vlan_tci (inner) and mbuf->vlan_tci_outer (outer). >>> + * This can only happen if vlan stripping is enabled in the RX >>> configuration >>> + * of the PMD. >>> + * When PKT_RX_QINQ_STRIPPED and PKT_RX_VLAN_STRIPPED are set, >>> + * (PKT_RX_VLAN | PKT_RX_QINQ) must also be set. >>> */ >>> #define PKT_RX_QINQ_STRIPPED (1ULL << 15) >>> >> >> I always thought that PKT_RX_VLAN_STRIPPED means *one* VLAN >> stripped regardless if it is outer (if the packet is double >> tagged) or inner (if only one VLAN tag was present). >> >> That's why PKT_RX_QINQ_STRIPPED description says that *two* >> VLANs have been stripped. >> >> What is the problem with such approach? > The problem is that RX_VLAN_STRIPPED implies that the stripped VLAN > (outer or inner) is saved in mbuf->vlan_tci, correct?
Yes. > There is no way to convey that it is in QinQ mode and yet only outer > VLAN has been stripped and saved in mbuf->vlan_tci_outer ? Ah, it looks like I understand now that the problem is in PKT_RX_QINQ description which claims that TCI is saved in mbuf->vlan_tci_outer and PKT_RX_QINQ_STRIPPED means that both VLAN tags are stripped regardless (PKT_RX_VLAN_STRIPPED). Moreover PKT_RX_QINQ_STRIPPED requires PKT_RX_VLAN_STRIPPED. It means that PKT_RX_QINQ_STRIPPED, PKT_RX_QINQ, PKT_RX_VLAN and PKT_RX_VLAN_STRIPPED must be clarified. I'm not sure, but it looks like it could affect net/dpaa2, so I'm including driver maintainers in CC.