From 3bb4314f7427f455d179f0d0c6dcc818f6e3b0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fengbojiang=28=E5=A7=9C=E5=87=A4=E6=B3=A2=29?= Date: Tue, 6 Aug 2019 22:05:27 +0800 Subject: [PATCH] Fix bug of kni while set `vlan_strip=0`. --- lib/ff_dpdk_if.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/ff_dpdk_if.c b/lib/ff_dpdk_if.c index b2894f54..41faea06 100644 --- a/lib/ff_dpdk_if.c +++ b/lib/ff_dpdk_if.c @@ -909,10 +909,14 @@ protocol_filter(const void *data, uint16_t len) const struct vlan_hdr *vlanhdr; hdr = (const struct ether_hdr *)data; uint16_t ether_type = rte_be_to_cpu_16(hdr->ether_type); + data += ETHER_HDR_LEN; + len -= ETHER_HDR_LEN; if (ether_type == ETHER_TYPE_VLAN) { - vlanhdr = (struct vlan_hdr *)(data + sizeof(struct ether_hdr)); + vlanhdr = (struct vlan_hdr *)data; ether_type = rte_be_to_cpu_16(vlanhdr->eth_proto); + data += sizeof(struct vlan_hdr); + len -= sizeof(struct vlan_hdr); } if(ether_type == ETHER_TYPE_ARP) @@ -928,8 +932,7 @@ protocol_filter(const void *data, uint16_t len) if(ether_type != ETHER_TYPE_IPv4) return FILTER_UNKNOWN; - return ff_kni_proto_filter(data + ETHER_HDR_LEN, - len - ETHER_HDR_LEN); + return ff_kni_proto_filter(data, len); #endif }