QinQ

Jon Otterholm jon.otterholm at ide.resurscentrum.se
Thu Oct 25 14:41:38 PDT 2007


Hi.

I was wondering about the possibility of adding support for QinQ
("Double tagged frames" / "Nested vlans"). Attached is a patch against
-STABLE to add this support. I have not tested this but was told it
should work.

Would it be possible to get this into CURRENT?

//Jon
-------------- next part --------------
--- if_vlan.c.orig	2006-10-17 14:24:18.000000000 +0700
+++ if_vlan.c	2007-09-14 14:00:44.000000000 +0700
@@ -327,7 +327,8 @@
 	/* Check for <etherif>.<vlan> style interface names. */
 	IFNET_RLOCK();
 	TAILQ_FOREACH(ifp, &ifnet, if_link) {
-		if (ifp->if_type != IFT_ETHER)
+		if (ifp->if_type != IFT_ETHER &&
+		    ifp->if_type != IFT_L2VLAN)
 			continue;
 		if (strncmp(ifp->if_xname, name, strlen(ifp->if_xname)) != 0)
 			continue;
@@ -672,6 +673,7 @@
 		mtag = NULL;
 		switch (ifp->if_type) {
 		case IFT_ETHER:
+		case IFT_L2VLAN:
 			if (m->m_len < sizeof(*evl) &&
 			    (m = m_pullup(m, sizeof(*evl))) == NULL) {
 				if_printf(ifp, "cannot pullup VLAN header\n");
@@ -748,8 +750,9 @@
 
 	VLAN_LOCK_ASSERT();
 
-	if (p->if_type != IFT_ETHER)
-		return (EPROTONOSUPPORT);
+	if ((p->if_data.ifi_type != IFT_ETHER) &&
+	 (p->if_data.ifi_type != IFT_L2VLAN))
+			return (EPROTONOSUPPORT);
 	if ((p->if_flags & VLAN_IFFLAGS) != VLAN_IFFLAGS)
 		return (EPROTONOSUPPORT);
 	if (ifv->ifv_p)


More information about the freebsd-net mailing list