Module Name:    src
Committed By:   roy
Date:           Wed Apr 22 19:46:09 UTC 2015

Modified Files:
        src/sys/net: if.c
        src/sys/netinet6: in6.c in6.h in6_proto.c
        src/sys/sys: domain.h

Log Message:
Move INET6 specific in6_if_{up,down}() and in6_if_link_{up,down}()
into agnostic domain functions.


To generate a diff of this commit:
cvs rdiff -u -r1.311 -r1.312 src/sys/net/if.c
cvs rdiff -u -r1.187 -r1.188 src/sys/netinet6/in6.c
cvs rdiff -u -r1.83 -r1.84 src/sys/netinet6/in6.h
cvs rdiff -u -r1.104 -r1.105 src/sys/netinet6/in6_proto.c
cvs rdiff -u -r1.31 -r1.32 src/sys/sys/domain.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/if.c
diff -u src/sys/net/if.c:1.311 src/sys/net/if.c:1.312
--- src/sys/net/if.c:1.311	Tue Apr 21 10:39:41 2015
+++ src/sys/net/if.c	Wed Apr 22 19:46:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.311 2015/04/21 10:39:41 pooka Exp $	*/
+/*	$NetBSD: if.c,v 1.312 2015/04/22 19:46:08 roy Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.311 2015/04/21 10:39:41 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.312 2015/04/22 19:46:08 roy Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -1423,9 +1423,8 @@ void
 if_link_state_change(struct ifnet *ifp, int link_state)
 {
 	int s;
-#if defined(DEBUG) || defined(INET6)
 	int old_link_state;
-#endif
+	struct domain *dp;
 
 	s = splnet();
 	if (ifp->if_link_state == link_state) {
@@ -1433,9 +1432,7 @@ if_link_state_change(struct ifnet *ifp, 
 		return;
 	}
 
-#if defined(DEBUG) || defined(INET6)
 	old_link_state = ifp->if_link_state;
-#endif
 	ifp->if_link_state = link_state;
 #ifdef DEBUG
 	log(LOG_DEBUG, "%s: link state %s (was %s)\n", ifp->if_xname,
@@ -1447,7 +1444,6 @@ if_link_state_change(struct ifnet *ifp, 
 		"UNKNOWN");
 #endif
 
-#ifdef INET6
 	/*
 	 * When going from UNKNOWN to UP, we need to mark existing
 	 * IPv6 addresses as tentative and restart DAD as we may have
@@ -1457,10 +1453,15 @@ if_link_state_change(struct ifnet *ifp, 
 	 * listeners would have an address and expect it to work right
 	 * away.
 	 */
-	if (in6_present && link_state == LINK_STATE_UP &&
+	if (link_state == LINK_STATE_UP &&
 	    old_link_state == LINK_STATE_UNKNOWN)
-		in6_if_link_down(ifp);
-#endif
+	{
+		DOMAIN_FOREACH(dp) {
+			if (dp->dom_if_link_state_change != NULL)
+				dp->dom_if_link_state_change(ifp,
+				    LINK_STATE_DOWN);
+		}
+	}
 
 	/* Notify that the link state has changed. */
 	rt_ifmsg(ifp);
@@ -1470,14 +1471,10 @@ if_link_state_change(struct ifnet *ifp, 
 		carp_carpdev_state(ifp);
 #endif
 
-#ifdef INET6
-	if (in6_present) {
-		if (link_state == LINK_STATE_DOWN)
-			in6_if_link_down(ifp);
-		else if (link_state == LINK_STATE_UP)
-			in6_if_link_up(ifp);
+	DOMAIN_FOREACH(dp) {
+		if (dp->dom_if_link_state_change != NULL)
+			dp->dom_if_link_state_change(ifp, link_state);
 	}
-#endif
 
 	splx(s);
 }
@@ -1543,6 +1540,7 @@ void
 if_down(struct ifnet *ifp)
 {
 	struct ifaddr *ifa;
+	struct domain *dp;
 
 	ifp->if_flags &= ~IFF_UP;
 	nanotime(&ifp->if_lastchange);
@@ -1554,10 +1552,10 @@ if_down(struct ifnet *ifp)
 		carp_carpdev_state(ifp);
 #endif
 	rt_ifmsg(ifp);
-#ifdef INET6
-	if (in6_present)
-		in6_if_down(ifp);
-#endif
+	DOMAIN_FOREACH(dp) {
+		if (dp->dom_if_down)
+			dp->dom_if_down(ifp);
+	}
 }
 
 /*
@@ -1571,6 +1569,7 @@ if_up(struct ifnet *ifp)
 #ifdef notyet
 	struct ifaddr *ifa;
 #endif
+	struct domain *dp;
 
 	ifp->if_flags |= IFF_UP;
 	nanotime(&ifp->if_lastchange);
@@ -1584,10 +1583,10 @@ if_up(struct ifnet *ifp)
 		carp_carpdev_state(ifp);
 #endif
 	rt_ifmsg(ifp);
-#ifdef INET6
-	if (in6_present)
-		in6_if_up(ifp);
-#endif
+	DOMAIN_FOREACH(dp) {
+		if (dp->dom_if_down)
+			dp->dom_if_down(ifp);
+	}
 }
 
 /*
@@ -2067,13 +2066,11 @@ doifioctl(struct socket *so, u_long cmd,
 	}
 
 	if (((oif_flags ^ ifp->if_flags) & IFF_UP) != 0) {
-#ifdef INET6
-		if (in6_present && (ifp->if_flags & IFF_UP) != 0) {
+		if ((ifp->if_flags & IFF_UP) != 0) {
 			int s = splnet();
-			in6_if_up(ifp);
+			if_up(ifp);
 			splx(s);
 		}
-#endif
 	}
 #ifdef COMPAT_OIFREQ
 	if (cmd != ocmd)

Index: src/sys/netinet6/in6.c
diff -u src/sys/netinet6/in6.c:1.187 src/sys/netinet6/in6.c:1.188
--- src/sys/netinet6/in6.c:1.187	Mon Apr 20 10:19:54 2015
+++ src/sys/netinet6/in6.c	Wed Apr 22 19:46:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6.c,v 1.187 2015/04/20 10:19:54 roy Exp $	*/
+/*	$NetBSD: in6.c,v 1.188 2015/04/22 19:46:08 roy Exp $	*/
 /*	$KAME: in6.c,v 1.198 2001/07/18 09:12:38 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.187 2015/04/20 10:19:54 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.188 2015/04/22 19:46:08 roy Exp $");
 
 #include "opt_inet.h"
 #include "opt_compat_netbsd.h"
@@ -2099,6 +2099,20 @@ in6_if_down(struct ifnet *ifp)
 	in6_if_link_down(ifp);
 }
 
+void
+in6_if_link_state_change(struct ifnet *ifp, int link_state)
+{
+
+	switch (link_state) {
+	case LINK_STATE_DOWN:
+		in6_if_link_down(ifp);
+		break;
+	case LINK_STATE_UP:
+		in6_if_link_up(ifp);
+		break;
+	}
+}
+
 /*
  * Calculate max IPv6 MTU through all the interfaces and store it
  * to in6_maxmtu.

Index: src/sys/netinet6/in6.h
diff -u src/sys/netinet6/in6.h:1.83 src/sys/netinet6/in6.h:1.84
--- src/sys/netinet6/in6.h:1.83	Fri Feb 20 22:13:48 2015
+++ src/sys/netinet6/in6.h	Wed Apr 22 19:46:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6.h,v 1.83 2015/02/20 22:13:48 rjs Exp $	*/
+/*	$NetBSD: in6.h,v 1.84 2015/04/22 19:46:08 roy Exp $	*/
 /*	$KAME: in6.h,v 1.83 2001/03/29 02:55:07 jinmei Exp $	*/
 
 /*
@@ -705,6 +705,7 @@ int	in6_addrscope(const struct in6_addr 
 struct	in6_ifaddr *in6_ifawithifp(struct ifnet *, struct in6_addr *);
 extern void in6_if_link_up(struct ifnet *);
 extern void in6_if_link_down(struct ifnet *);
+extern void in6_if_link_state_change(struct ifnet *, int);
 extern void in6_if_up(struct ifnet *);
 extern void in6_if_down(struct ifnet *);
 #ifndef __FreeBSD__

Index: src/sys/netinet6/in6_proto.c
diff -u src/sys/netinet6/in6_proto.c:1.104 src/sys/netinet6/in6_proto.c:1.105
--- src/sys/netinet6/in6_proto.c:1.104	Tue Feb 10 19:11:52 2015
+++ src/sys/netinet6/in6_proto.c	Wed Apr 22 19:46:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6_proto.c,v 1.104 2015/02/10 19:11:52 rjs Exp $	*/
+/*	$NetBSD: in6_proto.c,v 1.105 2015/04/22 19:46:08 roy Exp $	*/
 /*	$KAME: in6_proto.c,v 1.66 2000/10/10 15:35:47 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in6_proto.c,v 1.104 2015/02/10 19:11:52 rjs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in6_proto.c,v 1.105 2015/04/22 19:46:08 roy Exp $");
 
 #include "opt_gateway.h"
 #include "opt_inet.h"
@@ -397,7 +397,9 @@ struct domain inet6domain = {
 	.dom_rtattach = rt_inithead,
 	.dom_rtoffset = offsetof(struct sockaddr_in6, sin6_addr) << 3,
 	.dom_maxrtkey = sizeof(struct ip_pack6),
+	.dom_if_up = in6_if_up, .dom_if_down = in6_if_down,
 	.dom_ifattach = in6_domifattach, .dom_ifdetach = in6_domifdetach,
+	.dom_if_link_state_change = in6_if_link_state_change,
 	.dom_ifqueues = { NULL, NULL },
 	.dom_link = { NULL },
 	.dom_mowner = MOWNER_INIT("",""),

Index: src/sys/sys/domain.h
diff -u src/sys/sys/domain.h:1.31 src/sys/sys/domain.h:1.32
--- src/sys/sys/domain.h:1.31	Sun Jun 26 16:43:12 2011
+++ src/sys/sys/domain.h	Wed Apr 22 19:46:08 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: domain.h,v 1.31 2011/06/26 16:43:12 christos Exp $	*/
+/*	$NetBSD: domain.h,v 1.32 2015/04/22 19:46:08 roy Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -66,10 +66,16 @@ struct	domain {
 			(rtbl_t **, int);
 	int	dom_rtoffset;		/* an arg to rtattach, in bits */
 	int	dom_maxrtkey;		/* for routing layer */
+	void	(*dom_if_up)		/* ifnet brought up */
+			(struct ifnet *);
+	void	(*dom_if_down)		/* ifnet brought down */
+			(struct ifnet *);
 	void	*(*dom_ifattach)	/* attach af-dependent data on ifnet */
 			(struct ifnet *);
 	void	(*dom_ifdetach)		/* detach af-dependent data on ifnet */
 			(struct ifnet *, void *);
+	void	(*dom_if_link_state_change)
+			(struct ifnet *, int);
 	const void *(*dom_sockaddr_const_addr)(const struct sockaddr *,
 					       socklen_t *);
 	void	*(*dom_sockaddr_addr)(struct sockaddr *, socklen_t *);

Reply via email to