Module Name:    src
Committed By:   ozaki-r
Date:           Mon Dec 12 03:13:14 UTC 2016

Modified Files:
        src/sys/netinet6: nd6.c nd6.h nd6_rtr.c

Log Message:
Introduce macros for the default router list

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.213 -r1.214 src/sys/netinet6/nd6.c
cvs rdiff -u -r1.76 -r1.77 src/sys/netinet6/nd6.h
cvs rdiff -u -r1.123 -r1.124 src/sys/netinet6/nd6_rtr.c

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

Modified files:

Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.213 src/sys/netinet6/nd6.c:1.214
--- src/sys/netinet6/nd6.c:1.213	Sun Dec 11 07:38:50 2016
+++ src/sys/netinet6/nd6.c	Mon Dec 12 03:13:14 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.c,v 1.213 2016/12/11 07:38:50 ozaki-r Exp $	*/
+/*	$NetBSD: nd6.c,v 1.214 2016/12/12 03:13:14 ozaki-r Exp $	*/
 /*	$KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.213 2016/12/11 07:38:50 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.214 2016/12/12 03:13:14 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -138,7 +138,7 @@ nd6_init(void)
 	int error;
 
 	/* initialization of the default router list */
-	TAILQ_INIT(&nd_defrouter);
+	ND_DEFROUTER_LIST_INIT();
 
 	callout_init(&nd6_slowtimo_ch, CALLOUT_MPSAFE);
 	callout_init(&nd6_timer_ch, CALLOUT_MPSAFE);
@@ -593,7 +593,7 @@ nd6_timer_work(struct work *wk, void *ar
 
 	/* expire default router list */
 	
-	TAILQ_FOREACH_SAFE(dr, &nd_defrouter, dr_entry, next_dr) {
+	ND_DEFROUTER_LIST_FOREACH_SAFE(dr, next_dr) {
 		if (dr->expire && dr->expire < time_uptime) {
 			nd6_defrtrlist_del(dr, NULL);
 		}
@@ -838,7 +838,7 @@ nd6_purge(struct ifnet *ifp, struct in6_
 	 * in the routing table, in order to keep additional side effects as
 	 * small as possible.
 	 */
-	TAILQ_FOREACH_SAFE(dr, &nd_defrouter, dr_entry, ndr) {
+	ND_DEFROUTER_LIST_FOREACH_SAFE(dr, ndr) {
 		if (dr->installed)
 			continue;
 
@@ -848,7 +848,7 @@ nd6_purge(struct ifnet *ifp, struct in6_
 		}
 	}
 
-	TAILQ_FOREACH_SAFE(dr, &nd_defrouter, dr_entry, ndr) {
+	ND_DEFROUTER_LIST_FOREACH_SAFE(dr, ndr) {
 		if (!dr->installed)
 			continue;
 
@@ -1033,7 +1033,7 @@ nd6_is_new_addr_neighbor(const struct so
 	 * as on-link, and thus, as a neighbor.
 	 */
 	if (ND_IFINFO(ifp)->flags & ND6_IFF_ACCEPT_RTADV &&
-	    TAILQ_EMPTY(&nd_defrouter) &&
+	    ND_DEFROUTER_LIST_EMPTY() &&
 	    nd6_defifindex == ifp->if_index) {
 		return 1;
 	}
@@ -1097,7 +1097,7 @@ nd6_is_addr_neighbor(const struct sockad
 	 * XXX: we restrict the condition to hosts, because routers usually do
 	 * not have the "default router list".
 	 */
-	if (!ip6_forwarding && TAILQ_FIRST(&nd_defrouter) == NULL &&
+	if (!ip6_forwarding && ND_DEFROUTER_LIST_EMPTY() &&
 	    nd6_defifindex == ifp->if_index) {
 		return 1;
 	}
@@ -1617,7 +1617,7 @@ nd6_ioctl(u_long cmd, void *data, struct
 		 */
 		memset(drl, 0, sizeof(*drl));
 		s = splsoftnet();
-		TAILQ_FOREACH(dr, &nd_defrouter, dr_entry) {
+		ND_DEFROUTER_LIST_FOREACH(dr) {
 			if (i >= DRLSTSIZ)
 				break;
 			drl->defrouter[i].rtaddr = dr->rtaddr;
@@ -1892,7 +1892,7 @@ nd6_ioctl(u_long cmd, void *data, struct
 
 		s = splsoftnet();
 		nd6_defrouter_reset();
-		TAILQ_FOREACH_SAFE(drtr, &nd_defrouter, dr_entry, next) {
+		ND_DEFROUTER_LIST_FOREACH_SAFE(drtr, next) {
 			nd6_defrtrlist_del(drtr, NULL);
 		}
 		nd6_defrouter_select();
@@ -2644,7 +2644,7 @@ fill_drlist(void *oldp, size_t *oldlenp,
 	}
 	l = 0;
 
-	TAILQ_FOREACH(dr, &nd_defrouter, dr_entry) {
+	ND_DEFROUTER_LIST_FOREACH(dr) {
 
 		if (oldp && d + 1 <= de) {
 			memset(d, 0, sizeof(*d));

Index: src/sys/netinet6/nd6.h
diff -u src/sys/netinet6/nd6.h:1.76 src/sys/netinet6/nd6.h:1.77
--- src/sys/netinet6/nd6.h:1.76	Sun Dec 11 07:38:50 2016
+++ src/sys/netinet6/nd6.h	Mon Dec 12 03:13:14 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.h,v 1.76 2016/12/11 07:38:50 ozaki-r Exp $	*/
+/*	$NetBSD: nd6.h,v 1.77 2016/12/12 03:13:14 ozaki-r Exp $	*/
 /*	$KAME: nd6.h,v 1.95 2002/06/08 11:31:06 itojun Exp $	*/
 
 /*
@@ -256,6 +256,25 @@ struct	nd_defrouter {
 	int	installed;	/* is installed into kernel routing table */
 };
 
+#define ND_DEFROUTER_LIST_INIT()					\
+	TAILQ_INIT(&nd_defrouter)
+#define ND_DEFROUTER_LIST_FOREACH(dr)					\
+	TAILQ_FOREACH((dr), &nd_defrouter, dr_entry)
+#define ND_DEFROUTER_LIST_FOREACH_SAFE(dr, dr_next)			\
+	TAILQ_FOREACH_SAFE((dr), &nd_defrouter, dr_entry, (dr_next))
+#define ND_DEFROUTER_LIST_EMPTY()					\
+	TAILQ_EMPTY(&nd_defrouter)
+#define ND_DEFROUTER_LIST_REMOVE(dr)					\
+	TAILQ_REMOVE(&nd_defrouter, (dr), dr_entry)
+#define ND_DEFROUTER_LIST_INSERT_BEFORE(dr, dr_new)			\
+	TAILQ_INSERT_BEFORE((dr), (dr_new), dr_entry)
+#define ND_DEFROUTER_LIST_INSERT_TAIL(dr)				\
+	TAILQ_INSERT_TAIL(&nd_defrouter, (dr), dr_entry)
+#define ND_DEFROUTER_LIST_FIRST()					\
+	TAILQ_FIRST(&nd_defrouter)
+#define ND_DEFROUTER_LIST_NEXT(dr)					\
+	TAILQ_NEXT((dr), dr_entry)
+
 struct nd_prefixctl {
 	struct ifnet *ndprc_ifp;
 

Index: src/sys/netinet6/nd6_rtr.c
diff -u src/sys/netinet6/nd6_rtr.c:1.123 src/sys/netinet6/nd6_rtr.c:1.124
--- src/sys/netinet6/nd6_rtr.c:1.123	Sun Dec 11 07:38:50 2016
+++ src/sys/netinet6/nd6_rtr.c	Mon Dec 12 03:13:14 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6_rtr.c,v 1.123 2016/12/11 07:38:50 ozaki-r Exp $	*/
+/*	$NetBSD: nd6_rtr.c,v 1.124 2016/12/12 03:13:14 ozaki-r Exp $	*/
 /*	$KAME: nd6_rtr.c,v 1.95 2001/02/07 08:09:47 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.123 2016/12/11 07:38:50 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.124 2016/12/12 03:13:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -487,7 +487,7 @@ nd6_defrouter_lookup(const struct in6_ad
 {
 	struct nd_defrouter *dr;
 
-	TAILQ_FOREACH(dr, &nd_defrouter, dr_entry) {
+	ND_DEFROUTER_LIST_FOREACH(dr) {
 		if (dr->ifp == ifp && IN6_ARE_ADDR_EQUAL(addr, &dr->rtaddr))
 			break;
 	}
@@ -523,7 +523,7 @@ nd6_defrtrlist_del(struct nd_defrouter *
 		deldr = dr;
 		defrouter_delreq(dr);
 	}
-	TAILQ_REMOVE(&nd_defrouter, dr, dr_entry);
+	ND_DEFROUTER_LIST_REMOVE(dr);
 
 	/*
 	 * Also delete all the pointers to the router in each prefix lists.
@@ -599,8 +599,7 @@ nd6_defrouter_reset(void)
 {
 	struct nd_defrouter *dr;
 
-	for (dr = TAILQ_FIRST(&nd_defrouter); dr;
-	     dr = TAILQ_NEXT(dr, dr_entry))
+	ND_DEFROUTER_LIST_FOREACH(dr)
 		defrouter_delreq(dr);
 
 	/*
@@ -654,7 +653,7 @@ nd6_defrouter_select(void)
 	 * Let's handle easy case (3) first:
 	 * If default router list is empty, there's nothing to be done.
 	 */
-	if (!TAILQ_FIRST(&nd_defrouter)) {
+	if (ND_DEFROUTER_LIST_EMPTY()) {
 		splx(s);
 		return;
 	}
@@ -664,8 +663,7 @@ nd6_defrouter_select(void)
 	 * We just pick up the first reachable one (if any), assuming that
 	 * the ordering rule of the list described in defrtrlist_update().
 	 */
-	for (dr = TAILQ_FIRST(&nd_defrouter); dr;
-	     dr = TAILQ_NEXT(dr, dr_entry)) {
+	ND_DEFROUTER_LIST_FOREACH(dr) {
 		ndi = ND_IFINFO(dr->ifp);
 		if (nd6_accepts_rtadv(ndi))
 			continue;
@@ -691,10 +689,11 @@ nd6_defrouter_select(void)
 	 * or when the new one has a really higher preference value.
 	 */
 	if (selected_dr == NULL) {
-		if (installed_dr == NULL || !TAILQ_NEXT(installed_dr, dr_entry))
-			selected_dr = TAILQ_FIRST(&nd_defrouter);
+		if (installed_dr == NULL ||
+		    ND_DEFROUTER_LIST_NEXT(installed_dr) == NULL)
+			selected_dr = ND_DEFROUTER_LIST_FIRST();
 		else
-			selected_dr = TAILQ_NEXT(installed_dr, dr_entry);
+			selected_dr = ND_DEFROUTER_LIST_NEXT(installed_dr);
 	} else if (installed_dr &&
 	    nd6_is_llinfo_probreach(installed_dr) &&
 	    rtpref(selected_dr) <= rtpref(installed_dr)) {
@@ -781,7 +780,7 @@ defrtrlist_update(struct nd_defrouter *n
 			 * nd6_defrouter_select() below will handle routing
 			 * changes later.
 			 */
-			TAILQ_REMOVE(&nd_defrouter, dr, dr_entry);
+			ND_DEFROUTER_LIST_REMOVE(dr);
 			n = dr;
 			goto insert;
 		}
@@ -824,15 +823,14 @@ insert:
 	 */
 
 	/* insert at the end of the group */
-	for (dr = TAILQ_FIRST(&nd_defrouter); dr;
-	     dr = TAILQ_NEXT(dr, dr_entry)) {
+	ND_DEFROUTER_LIST_FOREACH(dr) {
 		if (rtpref(n) > rtpref(dr))
 			break;
 	}
 	if (dr)
-		TAILQ_INSERT_BEFORE(dr, n, dr_entry);
+		ND_DEFROUTER_LIST_INSERT_BEFORE(dr, n);
 	else
-		TAILQ_INSERT_TAIL(&nd_defrouter, n, dr_entry);
+		ND_DEFROUTER_LIST_INSERT_TAIL(n);
 
 	nd6_defrouter_select();
 
@@ -1465,7 +1463,7 @@ nd6_pfxlist_onlink_check(void)
 	 * that does not advertise any prefixes.
 	 */
 	if (pr == NULL) {
-		TAILQ_FOREACH(dr, &nd_defrouter, dr_entry) {
+		ND_DEFROUTER_LIST_FOREACH(dr) {
 			struct nd_prefix *pr0;
 
 			LIST_FOREACH(pr0, &nd_prefix, ndpr_entry) {
@@ -1476,7 +1474,7 @@ nd6_pfxlist_onlink_check(void)
 				break;
 		}
 	}
-	if (pr != NULL || (TAILQ_FIRST(&nd_defrouter) && !pfxrtr)) {
+	if (pr != NULL || (!ND_DEFROUTER_LIST_EMPTY() && !pfxrtr)) {
 		/*
 		 * There is at least one prefix that has a reachable router,
 		 * or at least a router which probably does not advertise

Reply via email to