diff options
author | Aurelien Cazuc <aurelien.cazuc.external@stormshield.eu> | 2025-02-13 18:08:42 +0000 |
---|---|---|
committer | Kevin Bowling <kbowling@FreeBSD.org> | 2025-02-16 00:26:40 +0000 |
commit | e812e4d86d283ea65c6275e20b23bbddb9bd97d8 (patch) | |
tree | 43185afd277bc57369d50d6f68fb59cfbd3377b2 /sys | |
parent | b26592d87dbedb202b4b75f8515165deb7e234d0 (diff) |
e1000: Fix vlan PCP/DEI on lem(4)
The vlan PCP and CFI/DEI were discarded when receiving vlan tagged
packets on lem(4) interfaces with vlanhwtag.
According to the 82540 SDM[1] (pg. 24), vlan tag is in the standard
format, so there's no reason to discard PCP/DEI.
[1]: http://iommu.com/datasheets/ethernet/controllers-nics/intel/e1000/pci-pci-x-family-gbe-controllers-software-dev-manual.pdf
Sponsored by: Stormshield (author)
Differential Revision: https://reviews.freebsd.org/D48987
(cherry picked from commit 4b29599fbbe33b75b7b58cfc5deea7a881e9a10e)
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/e1000/e1000_defines.h | 1 | ||||
-rw-r--r-- | sys/dev/e1000/em_txrx.c | 3 |
2 files changed, 1 insertions, 3 deletions
diff --git a/sys/dev/e1000/e1000_defines.h b/sys/dev/e1000/e1000_defines.h index 92f676932636..f1b1008764a1 100644 --- a/sys/dev/e1000/e1000_defines.h +++ b/sys/dev/e1000/e1000_defines.h @@ -130,7 +130,6 @@ #define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */ #define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */ #define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */ -#define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ #define E1000_RXDEXT_STATERR_TST 0x00000100 /* Time Stamp taken */ #define E1000_RXDEXT_STATERR_LB 0x00040000 diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c index edbe0f8ab546..ced8d0f41d14 100644 --- a/sys/dev/e1000/em_txrx.c +++ b/sys/dev/e1000/em_txrx.c @@ -710,8 +710,7 @@ lem_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri) if (scctx->isc_capenable & IFCAP_VLAN_HWTAGGING && status & E1000_RXD_STAT_VP) { - ri->iri_vtag = - le16toh(rxd->special & E1000_RXD_SPC_VLAN_MASK); + ri->iri_vtag = le16toh(rxd->special); ri->iri_flags |= M_VLANTAG; } |