[rtems-libbsd commit] if_atsam: Support IFCAP_VLAN_HWTAGGING

Sebastian Huber sebh at rtems.org
Wed May 11 14:01:45 UTC 2022


Module:    rtems-libbsd
Branch:    master
Commit:    202502a397d00be3f3671b6809b30638bfb99c3a
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=202502a397d00be3f3671b6809b30638bfb99c3a

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue May 10 07:49:32 2022 +0200

if_atsam: Support IFCAP_VLAN_HWTAGGING

This is required to enable checksum offload for vlan interfaces.

Update #4652.

---

 rtemsbsd/sys/dev/atsam/if_atsam.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

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;



More information about the vc mailing list