Rx VLAN handling set RTE_MBUF_F_RX_VLAN_STRIPPED unconditionally,
relying on rte_vlan_insert() to clear it again. This produced correct
flags, but in a way that was not readily apparent from the driver.

Make the flag handling explicit in the driver itself: only set
RTE_MBUF_F_RX_VLAN_STRIPPED when vlan_strip is requested, or when
reinsertion fails. No behavioral change.

Signed-off-by: William Bland <[email protected]>
---
 drivers/net/af_packet/rte_eth_af_packet.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/af_packet/rte_eth_af_packet.c 
b/drivers/net/af_packet/rte_eth_af_packet.c
index b0ff22ea55..d95d045a37 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -223,10 +223,14 @@ eth_af_packet_rx(void *queue, struct rte_mbuf **bufs, 
uint16_t nb_pkts)
                /* check for vlan info */
                if (ppd->tp_status & TP_STATUS_VLAN_VALID) {
                        mbuf->vlan_tci = ppd->tp_vlan_tci;
-                       mbuf->ol_flags |= (RTE_MBUF_F_RX_VLAN | 
RTE_MBUF_F_RX_VLAN_STRIPPED);
+                       mbuf->ol_flags |= RTE_MBUF_F_RX_VLAN;
 
-                       if (!pkt_q->vlan_strip && rte_vlan_insert(&mbuf))
+                       if (pkt_q->vlan_strip) {
+                               mbuf->ol_flags |= RTE_MBUF_F_RX_VLAN_STRIPPED;
+                       } else if (rte_vlan_insert(&mbuf) != 0) {
                                PMD_LOG(ERR, "Failed to reinsert VLAN tag");
+                               mbuf->ol_flags |= RTE_MBUF_F_RX_VLAN_STRIPPED;
+                       }
                }
 
                /* add kernel provided timestamp when offloading is enabled */
-- 
2.43.0

Reply via email to