diff -Nur lwip-82/src/include/dpdk_version.h lwip-offload/src/include/dpdk_version.h --- lwip-82/src/include/dpdk_version.h 2023-11-28 14:17:02.432481010 +0800 +++ lwip-offload/src/include/dpdk_version.h 2023-11-28 14:34:21.208481010 +0800 @@ -48,6 +48,7 @@ #define RTE_MBUF_F_TX_TCP_CKSUM PKT_TX_TCP_CKSUM #define RTE_MBUF_F_TX_TCP_SEG PKT_TX_TCP_SEG #define RTE_MBUF_F_TX_UDP_CKSUM PKT_TX_UDP_CKSUM +#define RTE_MBUF_F_TX_VLAN PKT_TX_VLAN_PKT #endif /* DPDK_VERSION_1911 */ diff -Nur lwip-82/src/include/lwip/pbuf.h lwip-offload/src/include/lwip/pbuf.h --- lwip-82/src/include/lwip/pbuf.h 2023-11-28 14:17:02.408481010 +0800 +++ lwip-offload/src/include/lwip/pbuf.h 2023-11-28 14:41:31.580481010 +0800 @@ -240,6 +240,7 @@ struct pbuf *last; pthread_spinlock_t pbuf_lock; struct tcp_pcb *pcb; + u16_t vlan_tci; #if GAZELLE_UDP_ENABLE ip_addr_t addr; u16_t port; diff -Nur lwip-82/src/netif/ethernet.c lwip-offload/src/netif/ethernet.c --- lwip-82/src/netif/ethernet.c 2023-11-28 14:17:02.440481010 +0800 +++ lwip-offload/src/netif/ethernet.c 2023-11-28 16:35:36.536481010 +0800 @@ -289,7 +289,12 @@ } #else if (netif->vlan_enable) { - vlan_prio_vid = netif->vlan_tci; + if (netif->txol_flags & DEV_TX_OFFLOAD_VLAN_INSERT) { + p->ol_flags |= RTE_MBUF_F_TX_VLAN; + p->vlan_tci = netif->vlan_tci; + } else { + vlan_prio_vid = netif->vlan_tci; + } } #endif /* GAZELLE_ENABLE */ #endif @@ -327,11 +332,11 @@ ("ethernet_output: sending packet %p\n", (void *)p)); #if CHECKSUM_GEN_IP_HW || CHECKSUM_GEN_TCP_HW -#if LWIP_VLAN_PCP - ethh_cksum_set(p, sizeof(*ethhdr)+SIZEOF_VLAN_HDR); -#else - ethh_cksum_set(p, sizeof(*ethhdr)); -#endif + if (netif->vlan_enable && !(netif->txol_flags & DEV_TX_OFFLOAD_VLAN_INSERT)) { + ethh_cksum_set(p, sizeof(*ethhdr) + SIZEOF_VLAN_HDR); + } else { + ethh_cksum_set(p, sizeof(*ethhdr)); + } #endif /* send the packet */