summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorozaki-r <ozaki-r@NetBSD.org>2016-12-12 03:13:14 +0000
committerozaki-r <ozaki-r@NetBSD.org>2016-12-12 03:13:14 +0000
commitbd3f70ebf5244cb8d9af9eff80f9da614d5c2a4f (patch)
tree5c9b73c06fdfa5bf1192d88c352cf2226cdcf4c2 /sys
parent8b8d1013d0a5d87f348baf02c48935db39d7982e (diff)
Introduce macros for the default router list
No functional change.
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet6/nd6.c22
-rw-r--r--sys/netinet6/nd6.h21
-rw-r--r--sys/netinet6/nd6_rtr.c36
3 files changed, 48 insertions, 31 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index f73eabb206c..086cd662f81 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -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 *arg)
/* 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_ifextra *ext)
* 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_ifextra *ext)
}
}
- 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 sockaddr_in6 *addr, struct ifnet *ifp)
* 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 sockaddr_in6 *addr, struct ifnet *ifp)
* 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 ifnet *ifp)
*/
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 ifnet *ifp)
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, size_t ol)
}
l = 0;
- TAILQ_FOREACH(dr, &nd_defrouter, dr_entry) {
+ ND_DEFROUTER_LIST_FOREACH(dr) {
if (oldp && d + 1 <= de) {
memset(d, 0, sizeof(*d));
diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h
index 7d8ee66b40c..ab937ad9429 100644
--- a/sys/netinet6/nd6.h
+++ b/sys/netinet6/nd6.h
@@ -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;
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index 30dc5ed6693..27340f035ad 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -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_addr *addr, struct ifnet *ifp)
{
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 *dr, struct in6_ifextra *ext)
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 *newdr)
* 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