[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 40/50] igb: Filter with the second VLAN tag for extended VLAN
|
From: |
Jason Wang |
|
Subject: |
[PULL 40/50] igb: Filter with the second VLAN tag for extended VLAN |
|
Date: |
Tue, 23 May 2023 15:32:28 +0800 |
From: Akihiko Odaki <akihiko.odaki@daynix.com>
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
hw/net/igb_core.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/hw/net/igb_core.c b/hw/net/igb_core.c
index 688eaf7..5345f57 100644
--- a/hw/net/igb_core.c
+++ b/hw/net/igb_core.c
@@ -69,7 +69,7 @@ typedef struct IGBTxPktVmdqCallbackContext {
typedef struct L2Header {
struct eth_header eth;
- struct vlan_header vlan;
+ struct vlan_header vlan[2];
} L2Header;
static ssize_t
@@ -1001,7 +1001,7 @@ static uint16_t igb_receive_assign(IGBCore *core, const
L2Header *l2_header,
uint32_t f, ra[2], *macp, rctl = core->mac[RCTL];
uint16_t queues = 0;
uint16_t oversized = 0;
- uint16_t vid = be16_to_cpu(l2_header->vlan.h_tci) & VLAN_VID_MASK;
+ size_t vlan_num = 0;
int i;
memset(rss_info, 0, sizeof(E1000E_RSSInfo));
@@ -1010,8 +1010,19 @@ static uint16_t igb_receive_assign(IGBCore *core, const
L2Header *l2_header,
*external_tx = true;
}
- if (e1000x_is_vlan_packet(ehdr, core->mac[VET] & 0xffff) &&
- !e1000x_rx_vlan_filter(core->mac, PKT_GET_VLAN_HDR(ehdr))) {
+ 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)) {
+ vlan_num = 2;
+ }
+ } else {
+ if (be16_to_cpu(ehdr->h_proto) == (core->mac[VET] & 0xffff)) {
+ vlan_num = 1;
+ }
+ }
+
+ if (vlan_num &&
+ !e1000x_rx_vlan_filter(core->mac, l2_header->vlan + vlan_num - 1)) {
return queues;
}
@@ -1065,7 +1076,9 @@ static uint16_t igb_receive_assign(IGBCore *core, const
L2Header *l2_header,
if (e1000x_vlan_rx_filter_enabled(core->mac)) {
uint16_t mask = 0;
- if (e1000x_is_vlan_packet(ehdr, core->mac[VET] & 0xffff)) {
+ if (vlan_num) {
+ uint16_t vid = be16_to_cpu(l2_header->vlan[vlan_num -
1].h_tci) & VLAN_VID_MASK;
+
for (i = 0; i < E1000_VLVF_ARRAY_SIZE; i++) {
if ((core->mac[VLVF0 + i] & E1000_VLVF_VLANID_MASK) == vid
&&
(core->mac[VLVF0 + i] & E1000_VLVF_VLANID_ENABLE)) {
--
2.7.4
- [PULL 23/50] e1000e: Reset packet state after emptying Tx queue, (continued)
- [PULL 23/50] e1000e: Reset packet state after emptying Tx queue, Jason Wang, 2023/05/23
- [PULL 24/50] vmxnet3: Reset packet state after emptying Tx queue, Jason Wang, 2023/05/23
- [PULL 25/50] igb: Add more definitions for Tx descriptor, Jason Wang, 2023/05/23
- [PULL 26/50] igb: Share common VF constants, Jason Wang, 2023/05/23
- [PULL 27/50] igb: Fix igb_mac_reg_init coding style alignment, Jason Wang, 2023/05/23
- [PULL 28/50] igb: Clear EICR bits for delayed MSI-X interrupts, Jason Wang, 2023/05/23
- [PULL 29/50] e1000e: Rename a variable in e1000e_receive_internal(), Jason Wang, 2023/05/23
- [PULL 31/50] net/eth: Use void pointers, Jason Wang, 2023/05/23
- [PULL 30/50] igb: Rename a variable in igb_receive_internal(), Jason Wang, 2023/05/23
- [PULL 33/50] hw/net/net_rx_pkt: Enforce alignment for eth_header, Jason Wang, 2023/05/23
- [PULL 40/50] igb: Filter with the second VLAN tag for extended VLAN,
Jason Wang <=
- [PULL 34/50] tests/qtest/libqos/igb: Set GPIE.Multiple_MSIX, Jason Wang, 2023/05/23
- [PULL 35/50] igb: Implement MSI-X single vector mode, Jason Wang, 2023/05/23
- [PULL 44/50] e1000e: Notify only new interrupts, Jason Wang, 2023/05/23
- [PULL 37/50] igb: Implement Rx SCTP CSO, Jason Wang, 2023/05/23
- [PULL 41/50] igb: Implement igb-specific oversize check, Jason Wang, 2023/05/23
- [PULL 43/50] igb: Implement Tx timestamp, Jason Wang, 2023/05/23
- [PULL 42/50] igb: Implement Rx PTP2 timestamp, Jason Wang, 2023/05/23
- [PULL 36/50] igb: Use UDP for RSS hash, Jason Wang, 2023/05/23
- [PULL 38/50] igb: Implement Tx SCTP CSO, Jason Wang, 2023/05/23
- [PULL 39/50] igb: Strip the second VLAN tag for extended VLAN, Jason Wang, 2023/05/23