qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 35/40] igb: Filter with the second VLAN tag for extended VLAN


From: Akihiko Odaki
Subject: [PATCH 35/40] igb: Filter with the second VLAN tag for extended VLAN
Date: Fri, 14 Apr 2023 20:37:32 +0900

Signed-off-by: Akihiko Odaki <akihiko.odaki@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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]