[28/44] Allow to specify PCP on packets not belonging to any VLAN.

Message ID 20180809060936.9726-29-sebastian.huber@embedded-brains.de
State Superseded
Headers show
Series
  • Update RTEMS-specific header files to latest FreeBSD versions
Related show

Commit Message

Sebastian Huber Aug. 9, 2018, 6:09 a.m.
From: kib <kib@FreeBSD.org>


According to 802.1Q-2014, VLAN tagged packets with VLAN id 0 should be
considered as untagged, and only PCP and DEI values from the VLAN tag
are meaningful.  See for instance
https://www.cisco.com/c/en/us/td/docs/switches/connectedgrid/cg-switch-sw-master/software/configuration/guide/vlan0/b_vlan_0.html.

Make it possible to specify PCP value for outgoing packets on an
ethernet interface.  When PCP is supplied, the tag is appended, VLAN
id set to 0, and PCP is filled by the supplied value.  The code to do
VLAN tag encapsulation is refactored from the if_vlan.c and moved into
if_ethersubr.c.

Drivers might have issues with filtering VID 0 packets on
receive.  This bug should be fixed for each driver.

Reviewed by:	ae (previous version), hselasky, melifaro
Sponsored by:	Mellanox Technologies
MFC after:	2 weeks
Differential revision:	https://reviews.freebsd.org/D14702
---
 newlib/libc/sys/rtems/include/net/if.h     | 3 +++
 newlib/libc/sys/rtems/include/sys/sockio.h | 3 +++
 2 files changed, 6 insertions(+)

-- 
2.13.7

Patch

diff --git a/newlib/libc/sys/rtems/include/net/if.h b/newlib/libc/sys/rtems/include/net/if.h
index b73c9f65f..d13e737fa 100644
--- a/newlib/libc/sys/rtems/include/net/if.h
+++ b/newlib/libc/sys/rtems/include/net/if.h
@@ -416,6 +416,7 @@  struct	ifreq {
 #define	ifr_index	ifr_ifru.ifru_index	/* interface index */
 #define	ifr_fib		ifr_ifru.ifru_fib	/* interface fib */
 #define	ifr_vlan_pcp	ifr_ifru.ifru_vlan_pcp	/* VLAN priority */
+#define	ifr_lan_pcp	ifr_ifru.ifru_vlan_pcp	/* VLAN priority */
 };
 
 #define	_SIZEOF_ADDR_IFREQ(ifr) \
@@ -565,6 +566,8 @@  struct ifrsshash {
 	uint32_t	ifrh_types;		/* RSS_TYPE_ */
 };
 
+#define	IFNET_PCP_NONE	0xff	/* PCP disabled */
+
 #endif /* __BSD_VISIBLE */
 
 #ifdef _KERNEL
diff --git a/newlib/libc/sys/rtems/include/sys/sockio.h b/newlib/libc/sys/rtems/include/sys/sockio.h
index a81a563a9..1ef52c456 100644
--- a/newlib/libc/sys/rtems/include/sys/sockio.h
+++ b/newlib/libc/sys/rtems/include/sys/sockio.h
@@ -140,4 +140,7 @@ 
 #define	SIOCGIFRSSHASH	_IOWR('i', 151, struct ifrsshash)/* get the current RSS
 							type/func settings */
 
+#define	SIOCGLANPCP	_IOWR('i', 152, struct ifreq)	/* Get (V)LAN PCP */
+#define	SIOCSLANPCP	 _IOW('i', 153, struct ifreq)	/* Set (V)LAN PCP */
+
 #endif /* !_SYS_SOCKIO_H_ */