diff --git a/src/netif/ethernet.c b/src/netif/ethernet.c index d0d68b3..5ba6d95 100644 --- a/src/netif/ethernet.c +++ b/src/netif/ethernet.c @@ -123,7 +123,9 @@ ethernet_input(struct pbuf *p, struct netif *netif) goto free_and_return; } #if GAZELLE_ENABLE - if (netif->vlan_enable && !(netif->txol_flags & RTE_ETH_RX_OFFLOAD_VLAN_FILTER) && VLAN_ID(vlan) != netif->vlan_tci) { + /* 1.if vlan mode is not enable, ignore VLAN packets. + 2.if vlan mode is enable, ignore packets not for our VLAN */ + if (netif->vlan_enable == false || (netif->vlan_enable && VLAN_ID(vlan) != netif->vlan_tci)) { goto free_and_return; } #endif @@ -141,6 +143,9 @@ ethernet_input(struct pbuf *p, struct netif *netif) } #endif /* defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) */ type = vlan->tpid; + } else if (netif->vlan_enable && !(netif->txol_flags & RTE_ETH_RX_OFFLOAD_VLAN_STRIP)) { + /* if vlan mode is enable but vlan strip offload is off, ignore packets without vlan info. */ + goto free_and_return; } #endif /* ETHARP_SUPPORT_VLAN */