From: Dilshod Urazov <[email protected]>
Layer 2 length must be updated after the prepend to mbuf to keep
the length right to be used by other Tx offloads.
If the packet has tunnel encapsulation, outer_l2_len should be
updated. Otherwise l2_len should be updated.
Fixes: c974021a5949 ("ether: add soft vlan encap/decap")
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Dilshod Urazov <[email protected]>
Signed-off-by: Andrew Rybchenko <[email protected]>
---
The fix is required for net/virtio which supports both VLAN
insertion (using the function) and Tx checksum offloads.
lib/librte_net/rte_ether.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h
index 7be9b4890..961ed9361 100644
--- a/lib/librte_net/rte_ether.h
+++ b/lib/librte_net/rte_ether.h
@@ -417,6 +417,11 @@ static inline int rte_vlan_insert(struct rte_mbuf **m)
(*m)->ol_flags &= ~(PKT_RX_VLAN_STRIPPED | PKT_TX_VLAN);
+ if ((*m)->ol_flags & PKT_TX_TUNNEL_MASK)
+ (*m)->outer_l2_len += sizeof(struct rte_vlan_hdr);
+ else
+ (*m)->l2_len += sizeof(struct rte_vlan_hdr);
+
return 0;
}
--
2.17.1