Module Name:    src
Committed By:   ozaki-r
Date:           Wed Dec  6 04:37:00 UTC 2017

Modified Files:
        src/sys/net/agr: if_agr.c if_agrether.c if_agrsubr.c if_agrsubr.h

Log Message:
Simplify; share agr_vlan_add and agr_vlan_del (NFCI)


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/sys/net/agr/if_agr.c
cvs rdiff -u -r1.9 -r1.10 src/sys/net/agr/if_agrether.c
cvs rdiff -u -r1.10 -r1.11 src/sys/net/agr/if_agrsubr.c
cvs rdiff -u -r1.4 -r1.5 src/sys/net/agr/if_agrsubr.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/agr/if_agr.c
diff -u src/sys/net/agr/if_agr.c:1.41 src/sys/net/agr/if_agr.c:1.42
--- src/sys/net/agr/if_agr.c:1.41	Sat Jan 28 22:56:09 2017
+++ src/sys/net/agr/if_agr.c	Wed Dec  6 04:37:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agr.c,v 1.41 2017/01/28 22:56:09 maya Exp $	*/
+/*	$NetBSD: if_agr.c,v 1.42 2017/12/06 04:37:00 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.41 2017/01/28 22:56:09 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agr.c,v 1.42 2017/12/06 04:37:00 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -254,62 +254,6 @@ agrport_ioctl(struct agr_port *port, u_l
 /*
  * INTERNAL FUNCTIONS
  */
-
-/*
- * Enable vlan hardware assist for the specified port.
- */
-static int
-agr_vlan_add(struct agr_port *port, void *arg)
-{
-	struct ifnet *ifp = port->port_ifp;
-	struct ethercom *ec_port = (void *)ifp;
-	int error=0;
-
-	if (ec_port->ec_nvlans++ == 0 &&
-	    (ec_port->ec_capabilities & ETHERCAP_VLAN_MTU) != 0) {
-		struct ifnet *p = port->port_ifp;
-		/*
-		 * Enable Tx/Rx of VLAN-sized frames.
-		 */
-		ec_port->ec_capenable |= ETHERCAP_VLAN_MTU;
-		if (p->if_flags & IFF_UP) {
-			error = if_flags_set(p, p->if_flags);
-			if (error) {
-				if (ec_port->ec_nvlans-- == 1)
-					ec_port->ec_capenable &=
-					    ~ETHERCAP_VLAN_MTU;
-				return (error);
-			}
-		}
-	}
-
-	return error;
-}
-
-/*
- * Disable vlan hardware assist for the specified port.
- */
-static int
-agr_vlan_del(struct agr_port *port, void *arg)
-{
-	struct ethercom *ec_port = (void *)port->port_ifp;
-
-	/* Disable vlan support */
-	if (ec_port->ec_nvlans-- == 1) {
-		/*
-		 * Disable Tx/Rx of VLAN-sized frames.
-		 */
-		ec_port->ec_capenable &= ~ETHERCAP_VLAN_MTU;
-		if (port->port_ifp->if_flags & IFF_UP) {
-			(void)if_flags_set(port->port_ifp,
-			    port->port_ifp->if_flags);
-		}
-	}
-
-	return 0;
-}
-
-
 /*
  * Check for vlan attach/detach.
  * ec->ec_nvlans is directly modified by the vlan driver.
@@ -332,8 +276,9 @@ agr_vlan_check(struct ifnet *ifp, struct
 		agr_port_foreach(sc, agr_vlan_add, NULL);
 		sc->sc_nvlans = ec->ec_nvlans;
 	} else if (ec->ec_nvlans == 0) {
+		bool force_zero = false;
 		/* vlan removed */
-		agr_port_foreach(sc, agr_vlan_del, NULL);
+		agr_port_foreach(sc, agr_vlan_del, &force_zero);
 		sc->sc_nvlans = 0;
 	}
 }

Index: src/sys/net/agr/if_agrether.c
diff -u src/sys/net/agr/if_agrether.c:1.9 src/sys/net/agr/if_agrether.c:1.10
--- src/sys/net/agr/if_agrether.c:1.9	Wed Oct 19 01:49:50 2011
+++ src/sys/net/agr/if_agrether.c	Wed Dec  6 04:37:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agrether.c,v 1.9 2011/10/19 01:49:50 dyoung Exp $	*/
+/*	$NetBSD: if_agrether.c,v 1.10 2017/12/06 04:37:00 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agrether.c,v 1.9 2011/10/19 01:49:50 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agrether.c,v 1.10 2017/12/06 04:37:00 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/callout.h>
@@ -166,23 +166,10 @@ agrether_portinit(struct agr_softc *sc, 
 	}
 
 	/* Enable vlan support */
-	if ((ec->ec_nvlans > 0) && 
-	     ec_port->ec_nvlans++ == 0 &&
-	    (ec_port->ec_capabilities & ETHERCAP_VLAN_MTU) != 0) {
-		struct ifnet *p = port->port_ifp;
-		/*
-		 * Enable Tx/Rx of VLAN-sized frames.
-		 */
-		ec_port->ec_capenable |= ETHERCAP_VLAN_MTU;
-		if (p->if_flags & IFF_UP) {
-			error = if_flags_set(p, p->if_flags);
-			if (error) {
-				if (ec_port->ec_nvlans-- == 1)
-					ec_port->ec_capenable &=
-					    ~ETHERCAP_VLAN_MTU;
-				return (error);
-			}
-		}
+	if (ec->ec_nvlans > 0) {
+		error = agr_vlan_add(port, NULL);
+		if (error != 0)
+			return error;
 	}
 	/* XXX ETHERCAP_JUMBO_MTU */
 
@@ -225,16 +212,9 @@ agrether_portfini(struct agr_softc *sc, 
 	}
 
 	if (ec_port->ec_nvlans > 0) {
+		bool force = true;
 		/* Disable vlan support */
-		ec_port->ec_nvlans = 0;
-		/*
-		 * Disable Tx/Rx of VLAN-sized frames.
-		 */
-		ec_port->ec_capenable &= ~ETHERCAP_VLAN_MTU;
-		if (port->port_ifp->if_flags & IFF_UP) {
-			(void)if_flags_set(port->port_ifp,
-			    port->port_ifp->if_flags);
-		}
+		agr_vlan_del(port, &force);
 	}
 
 	memset(&ifr, 0, sizeof(ifr));

Index: src/sys/net/agr/if_agrsubr.c
diff -u src/sys/net/agr/if_agrsubr.c:1.10 src/sys/net/agr/if_agrsubr.c:1.11
--- src/sys/net/agr/if_agrsubr.c:1.10	Mon Aug 24 22:21:26 2015
+++ src/sys/net/agr/if_agrsubr.c	Wed Dec  6 04:37:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agrsubr.c,v 1.10 2015/08/24 22:21:26 pooka Exp $	*/
+/*	$NetBSD: if_agrsubr.c,v 1.11 2017/12/06 04:37:00 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_agrsubr.c,v 1.10 2015/08/24 22:21:26 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_agrsubr.c,v 1.11 2017/12/06 04:37:00 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_agrsubr.c
 #include <sys/sockio.h>
 
 #include <net/if.h>
+#include <net/if_ether.h>
 
 #include <net/agr/if_agrvar_impl.h>
 #include <net/agr/if_agrsubr.h>
@@ -272,3 +273,65 @@ agr_port_getmedia(struct agr_port *port,
 
 	return error;
 }
+
+/* ==================== */
+
+/*
+ * Enable vlan hardware assist for the specified port.
+ */
+int
+agr_vlan_add(struct agr_port *port, void *arg)
+{
+	struct ifnet *ifp = port->port_ifp;
+	struct ethercom *ec_port = (void *)ifp;
+	int error=0;
+
+	if (ec_port->ec_nvlans++ == 0 &&
+	    (ec_port->ec_capabilities & ETHERCAP_VLAN_MTU) != 0) {
+		struct ifnet *p = port->port_ifp;
+		/*
+		 * Enable Tx/Rx of VLAN-sized frames.
+		 */
+		ec_port->ec_capenable |= ETHERCAP_VLAN_MTU;
+		if (p->if_flags & IFF_UP) {
+			error = if_flags_set(p, p->if_flags);
+			if (error) {
+				if (ec_port->ec_nvlans-- == 1)
+					ec_port->ec_capenable &=
+					    ~ETHERCAP_VLAN_MTU;
+				return (error);
+			}
+		}
+	}
+
+	return error;
+}
+
+/*
+ * Disable vlan hardware assist for the specified port.
+ */
+int
+agr_vlan_del(struct agr_port *port, void *arg)
+{
+	struct ethercom *ec_port = (void *)port->port_ifp;
+	bool *force_zero = (bool *)arg;
+
+	KASSERT(force_zero != NULL);
+
+	/* Disable vlan support */
+	if ((*force_zero && ec_port->ec_nvlans > 0) ||
+	    ec_port->ec_nvlans-- == 1) {
+		if (*force_zero)
+			ec_port->ec_nvlans = 0;
+		/*
+		 * Disable Tx/Rx of VLAN-sized frames.
+		 */
+		ec_port->ec_capenable &= ~ETHERCAP_VLAN_MTU;
+		if (port->port_ifp->if_flags & IFF_UP) {
+			(void)if_flags_set(port->port_ifp,
+			    port->port_ifp->if_flags);
+		}
+	}
+
+	return 0;
+}

Index: src/sys/net/agr/if_agrsubr.h
diff -u src/sys/net/agr/if_agrsubr.h:1.4 src/sys/net/agr/if_agrsubr.h:1.5
--- src/sys/net/agr/if_agrsubr.h:1.4	Wed Feb 21 23:00:07 2007
+++ src/sys/net/agr/if_agrsubr.h	Wed Dec  6 04:37:00 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_agrsubr.h,v 1.4 2007/02/21 23:00:07 thorpej Exp $	*/
+/*	$NetBSD: if_agrsubr.h,v 1.5 2017/12/06 04:37:00 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c)2005 YAMAMOTO Takashi,
@@ -51,4 +51,7 @@ int agr_configmulti_ifreq(struct agr_sof
 
 int agr_port_getmedia(struct agr_port *, u_int *, u_int *);
 
+int agr_vlan_add(struct agr_port *, void *);
+int agr_vlan_del(struct agr_port *, void *);
+
 #endif /* !_NET_AGR_IF_AGRSUBR_H_ */

Reply via email to