diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-05-10 07:49:32 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-05-11 15:49:04 +0200 |
commit | 821bcb73450c6f1fce014e9bd3f99d8f5a52712a (patch) | |
tree | 68515646219da4b95d0cd6eb71879e8b78b328ba | |
parent | if_atsam: Optimize receive (diff) | |
download | rtems-libbsd-821bcb73450c6f1fce014e9bd3f99d8f5a52712a.tar.bz2 |
if_atsam: Support IFCAP_VLAN_HWTAGGING
This is required to enable checksum offload for vlan interfaces.
Update #4652.
-rw-r--r-- | rtemsbsd/sys/dev/atsam/if_atsam.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/rtemsbsd/sys/dev/atsam/if_atsam.c b/rtemsbsd/sys/dev/atsam/if_atsam.c index ef2b3401..dbbe3f77 100644 --- a/rtemsbsd/sys/dev/atsam/if_atsam.c +++ b/rtemsbsd/sys/dev/atsam/if_atsam.c @@ -685,6 +685,18 @@ if_atsam_transmit(struct ifnet *ifp, struct mbuf *m) struct if_atsam_softc *sc; int error; + if (__predict_false((m->m_flags & M_VLANTAG) != 0)) { + struct mbuf *n; + + n = ether_vlanencap(m, m->m_pkthdr.ether_vtag); + if (n == NULL) { + m_freem(m); + return (ENOBUFS); + } + + m = n; + } + sc = ifp->if_softc; IF_ATSAM_LOCK(sc); @@ -1423,7 +1435,7 @@ static int if_atsam_driver_attach(device_t dev) ifp->if_qflush = if_qflush; ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX; ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6 | - IFCAP_VLAN_HWCSUM; + IFCAP_VLAN_HWCSUM | IFCAP_VLAN_HWTAGGING; ifp->if_capenable = ifp->if_capabilities; ifp->if_hwassist = CSUM_IP | CSUM_IP_UDP | CSUM_IP_TCP | CSUM_IP6_UDP | CSUM_IP6_TCP; |