Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> --- hw/net/igb_core.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c index 6e8de9d878..70acc86834 100644 --- a/hw/net/igb_core.c +++ b/hw/net/igb_core.c @@ -1017,9 +1017,17 @@ static uint16_t igb_receive_assign(IGBCore *core, const L2Header *l2_header, return queues; } - if (e1000x_is_vlan_packet(ehdr, core->mac[VET] & 0xffff) && - !e1000x_rx_vlan_filter(core->mac, PKT_GET_VLAN_HDR(ehdr))) { - return queues; + if (core->mac[CTRL_EXT] & BIT(26)) { + if (be16_to_cpu(ehdr->h_proto) == core->mac[VET] >> 16 && + be16_to_cpu(l2_header->vlan[0].h_proto) == (core->mac[VET] & 0xffff) && + !e1000x_rx_vlan_filter(core->mac, l2_header->vlan + 1)) { + return queues; + } + } else { + if (be16_to_cpu(ehdr->h_proto) == (core->mac[VET] & 0xffff) && + !e1000x_rx_vlan_filter(core->mac, l2_header->vlan)) { + return queues; + } } if (core->mac[MRQC] & 1) { -- 2.40.0