Module Name: src Committed By: ozaki-r Date: Mon Jul 4 06:48:14 UTC 2016
Modified Files: src/sys/netinet: ip_carp.c src/sys/netinet6: in6.c in6_ifattach.c in6_src.c in6_var.h ip6_input.c mld6.c nd6.c nd6_rtr.c src/sys/netipsec: key.c Log Message: Use pslist(9) for the global in6_ifaddr list psz and psref will be applied in another commit. No functional change intended. To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 src/sys/netinet/ip_carp.c cvs rdiff -u -r1.203 -r1.204 src/sys/netinet6/in6.c cvs rdiff -u -r1.99 -r1.100 src/sys/netinet6/in6_ifattach.c cvs rdiff -u -r1.62 -r1.63 src/sys/netinet6/in6_src.c cvs rdiff -u -r1.77 -r1.78 src/sys/netinet6/in6_var.h cvs rdiff -u -r1.161 -r1.162 src/sys/netinet6/ip6_input.c cvs rdiff -u -r1.69 -r1.70 src/sys/netinet6/mld6.c cvs rdiff -u -r1.198 -r1.199 src/sys/netinet6/nd6.c cvs rdiff -u -r1.112 -r1.113 src/sys/netinet6/nd6_rtr.c cvs rdiff -u -r1.97 -r1.98 src/sys/netipsec/key.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/netinet/ip_carp.c diff -u src/sys/netinet/ip_carp.c:1.71 src/sys/netinet/ip_carp.c:1.72 --- src/sys/netinet/ip_carp.c:1.71 Tue Jun 21 03:28:27 2016 +++ src/sys/netinet/ip_carp.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_carp.c,v 1.71 2016/06/21 03:28:27 ozaki-r Exp $ */ +/* $NetBSD: ip_carp.c,v 1.72 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $OpenBSD: ip_carp.c,v 1.113 2005/11/04 08:11:54 mcbride Exp $ */ /* @@ -33,7 +33,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.71 2016/06/21 03:28:27 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.72 2016/07/04 06:48:14 ozaki-r Exp $"); /* * TODO: @@ -1827,7 +1827,7 @@ carp_set_addr6(struct carp_softc *sc, st /* we have to do this by hand to ensure we don't match on ourselves */ ia_if = NULL; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { int i; for (i = 0; i < 4; i++) { Index: src/sys/netinet6/in6.c diff -u src/sys/netinet6/in6.c:1.203 src/sys/netinet6/in6.c:1.204 --- src/sys/netinet6/in6.c:1.203 Mon Jul 4 02:41:18 2016 +++ src/sys/netinet6/in6.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6.c,v 1.203 2016/07/04 02:41:18 ozaki-r Exp $ */ +/* $NetBSD: in6.c,v 1.204 2016/07/04 06:48:14 ozaki-r 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.203 2016/07/04 02:41:18 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.204 2016/07/04 06:48:14 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -209,7 +209,7 @@ in6_ifremlocal(struct ifaddr *ifa) * XXX agree, especially now that I have fixed the dangling * XXX ifp-pointers bug. */ - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { if (!IN6_ARE_ADDR_EQUAL(IFA_IN6(ifa), &ia->ia_addr.sin6_addr)) continue; if (ia->ia_ifp != ifa->ifa_ifp) @@ -758,7 +758,6 @@ in6_update_ifa1(struct ifnet *ifp, struc struct in6_ifaddr *ia, int flags) { int error = 0, hostIsNew = 0, plen = -1; - struct in6_ifaddr *oia; struct sockaddr_in6 dst6; struct in6_addrlifetime *lt; struct in6_multi_mship *imm; @@ -921,6 +920,7 @@ in6_update_ifa1(struct ifnet *ifp, struc (struct sockaddr *)&ia->ia_prefixmask; ia->ia_ifp = ifp; + IN6_ADDRLIST_ENTRY_INIT(ia); } /* update timestamp */ @@ -1027,12 +1027,8 @@ in6_update_ifa1(struct ifnet *ifp, struc /* * Insert ia to the global list and ifa to the interface's list. */ - if ((oia = in6_ifaddr) != NULL) { - for ( ; oia->ia_next; oia = oia->ia_next) - continue; - oia->ia_next = ia; - } else - in6_ifaddr = ia; + IN6_ADDRLIST_WRITER_INSERT_TAIL(ia); + /* gain a refcnt for the link from in6_ifaddr */ ifaref(&ia->ia_ifa); ifa_insert(ifp, &ia->ia_ifa); @@ -1352,52 +1348,39 @@ in6_purgeaddr(struct ifaddr *ifa) static void in6_unlink_ifa(struct in6_ifaddr *ia, struct ifnet *ifp) { - struct in6_ifaddr *oia; int s = splnet(); ifa_remove(ifp, &ia->ia_ifa); - oia = ia; - if (oia == (ia = in6_ifaddr)) - in6_ifaddr = ia->ia_next; - else { - while (ia->ia_next && (ia->ia_next != oia)) - ia = ia->ia_next; - if (ia->ia_next) - ia->ia_next = oia->ia_next; - else { - /* search failed */ - printf("Couldn't unlink in6_ifaddr from in6_ifaddr\n"); - } - } + IN6_ADDRLIST_WRITER_REMOVE(ia); /* * XXX thor...@netbsd.org -- if the interface is going * XXX away, don't save the multicast entries, delete them! */ - if (LIST_EMPTY(&oia->ia6_multiaddrs)) + if (LIST_EMPTY(&ia->ia6_multiaddrs)) ; - else if (if_is_deactivated(oia->ia_ifa.ifa_ifp)) { + else if (if_is_deactivated(ia->ia_ifa.ifa_ifp)) { struct in6_multi *in6m, *next; - for (in6m = LIST_FIRST(&oia->ia6_multiaddrs); in6m != NULL; + for (in6m = LIST_FIRST(&ia->ia6_multiaddrs); in6m != NULL; in6m = next) { next = LIST_NEXT(in6m, in6m_entry); in6_delmulti(in6m); } } else - in6_savemkludge(oia); + in6_savemkludge(ia); /* * Release the reference to the base prefix. There should be a * positive reference. */ - if (oia->ia6_ndpr == NULL) { + if (ia->ia6_ndpr == NULL) { nd6log(LOG_NOTICE, "autoconf'ed address %p has no prefix\n", - oia); + ia); } else { - oia->ia6_ndpr->ndpr_refcnt--; - oia->ia6_ndpr = NULL; + ia->ia6_ndpr->ndpr_refcnt--; + ia->ia6_ndpr = NULL; } /* @@ -1405,14 +1388,14 @@ in6_unlink_ifa(struct in6_ifaddr *ia, st * pfxlist_onlink_check() since the release might affect the status of * other (detached) addresses. */ - if ((oia->ia6_flags & IN6_IFF_AUTOCONF) != 0) + if ((ia->ia6_flags & IN6_IFF_AUTOCONF) != 0) pfxlist_onlink_check(); /* * release another refcnt for the link from in6_ifaddr. * Note that we should decrement the refcnt at least once for all *BSD. */ - ifafree(&oia->ia_ifa); + ifafree(&ia->ia_ifa); splx(s); } @@ -1789,7 +1772,7 @@ in6ifa_ifwithaddr(const struct in6_addr IN6_IFADDR_RLOCK(); LIST_FOREACH(ia, IN6ADDR_HASH(addr), ia6_hash) { #else - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { #endif if (IN6_ARE_ADDR_EQUAL(IA6_IN6(ia), addr)) { if (zoneid != 0 && @@ -1858,10 +1841,11 @@ in6_localaddr(const struct in6_addr *in6 if (IN6_IS_ADDR_LOOPBACK(in6) || IN6_IS_ADDR_LINKLOCAL(in6)) return 1; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) + IN6_ADDRLIST_READER_FOREACH(ia) { if (IN6_ARE_MASKED_ADDR_EQUAL(in6, &ia->ia_addr.sin6_addr, &ia->ia_prefixmask.sin6_addr)) return 1; + } return 0; } @@ -1871,7 +1855,7 @@ in6_is_addr_deprecated(struct sockaddr_i { struct in6_ifaddr *ia; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr, &sa6->sin6_addr) && #ifdef SCOPEDROUTING Index: src/sys/netinet6/in6_ifattach.c diff -u src/sys/netinet6/in6_ifattach.c:1.99 src/sys/netinet6/in6_ifattach.c:1.100 --- src/sys/netinet6/in6_ifattach.c:1.99 Mon Jul 4 02:41:18 2016 +++ src/sys/netinet6/in6_ifattach.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_ifattach.c,v 1.99 2016/07/04 02:41:18 ozaki-r Exp $ */ +/* $NetBSD: in6_ifattach.c,v 1.100 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $KAME: in6_ifattach.c,v 1.124 2001/07/18 08:32:51 jinmei Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.99 2016/07/04 02:41:18 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_ifattach.c,v 1.100 2016/07/04 06:48:14 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -245,7 +245,7 @@ generate_tmp_ifid(u_int8_t *seed0, const else { struct in6_ifaddr *ia; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { if (!memcmp(&ia->ia_addr.sin6_addr.s6_addr[8], ret, 8)) { badid = 1; Index: src/sys/netinet6/in6_src.c diff -u src/sys/netinet6/in6_src.c:1.62 src/sys/netinet6/in6_src.c:1.63 --- src/sys/netinet6/in6_src.c:1.62 Tue Jun 21 10:25:27 2016 +++ src/sys/netinet6/in6_src.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_src.c,v 1.62 2016/06/21 10:25:27 ozaki-r Exp $ */ +/* $NetBSD: in6_src.c,v 1.63 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $KAME: in6_src.c,v 1.159 2005/10/19 01:40:32 t-momose Exp $ */ /* @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.62 2016/06/21 10:25:27 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.63 2016/07/04 06:48:14 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -293,7 +293,7 @@ in6_selectsrc(struct sockaddr_in6 *dstso if (*errorp != 0) goto exit; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { int new_scope = -1, new_matchlen = -1; struct in6_addrpolicy *new_policy = NULL; u_int32_t srczone, osrczone, dstzone; Index: src/sys/netinet6/in6_var.h diff -u src/sys/netinet6/in6_var.h:1.77 src/sys/netinet6/in6_var.h:1.78 --- src/sys/netinet6/in6_var.h:1.77 Wed Jun 22 07:48:17 2016 +++ src/sys/netinet6/in6_var.h Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_var.h,v 1.77 2016/06/22 07:48:17 ozaki-r Exp $ */ +/* $NetBSD: in6_var.h,v 1.78 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $KAME: in6_var.h,v 1.81 2002/06/08 11:16:51 itojun Exp $ */ /* @@ -111,6 +111,7 @@ struct in6_ifaddr { struct sockaddr_in6 ia_dstaddr; /* space for destination addr */ struct sockaddr_in6 ia_prefixmask; /* prefix mask */ u_int32_t ia_plen; /* prefix length */ + /* DEPRECATED. Keep it to avoid breaking kvm(3) users */ struct in6_ifaddr *ia_next; /* next in6 list of IP6 addresses */ struct in6_multihead ia6_multiaddrs; /* list of multicast addresses */ @@ -127,6 +128,8 @@ struct in6_ifaddr { /* multicast addresses joined from the kernel */ LIST_HEAD(, in6_multi_mship) ia6_memberships; + + struct pslist_entry ia6_pslist_entry; }; /* control structure to manage address selection policy */ @@ -490,7 +493,53 @@ extern pktqueue_t *ip6_pktq; MALLOC_DECLARE(M_IP6OPT); -extern struct in6_ifaddr *in6_ifaddr; +extern struct pslist_head in6_ifaddr_list; + +#define IN6_ADDRLIST_ENTRY_INIT(__ia) \ + PSLIST_ENTRY_INIT((__ia), ia6_pslist_entry) +#define IN6_ADDRLIST_READER_EMPTY() \ + (PSLIST_READER_FIRST(&in6_ifaddr_list, struct in6_ifaddr, \ + ia6_pslist_entry) == NULL) +#define IN6_ADDRLIST_READER_FIRST() \ + PSLIST_READER_FIRST(&in6_ifaddr_list, struct in6_ifaddr, \ + ia6_pslist_entry) +#define IN6_ADDRLIST_READER_NEXT(__ia) \ + PSLIST_READER_NEXT((__ia), struct in6_ifaddr, ia6_pslist_entry) +#define IN6_ADDRLIST_READER_FOREACH(__ia) \ + PSLIST_READER_FOREACH((__ia), &in6_ifaddr_list, \ + struct in6_ifaddr, ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_INSERT_HEAD(__ia) \ + PSLIST_WRITER_INSERT_HEAD(&in6_ifaddr_list, (__ia), ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_REMOVE(__ia) \ + PSLIST_WRITER_REMOVE((__ia), ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_FOREACH(__ia) \ + PSLIST_WRITER_FOREACH((__ia), &in6_ifaddr_list, struct in6_ifaddr, \ + ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_FIRST() \ + PSLIST_WRITER_FIRST(&in6_ifaddr_list, struct in6_ifaddr, \ + ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_NEXT(__ia) \ + PSLIST_WRITER_NEXT((__ia), struct in6_ifaddr, ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_INSERT_AFTER(__ia, __new) \ + PSLIST_WRITER_INSERT_AFTER((__ia), (__new), ia6_pslist_entry) +#define IN6_ADDRLIST_WRITER_EMPTY() \ + (PSLIST_WRITER_FIRST(&in6_ifaddr_list, struct in6_ifaddr, \ + ia6_pslist_entry) == NULL) +#define IN6_ADDRLIST_WRITER_INSERT_TAIL(__new) \ + do { \ + if (IN6_ADDRLIST_WRITER_EMPTY()) { \ + IN6_ADDRLIST_WRITER_INSERT_HEAD((__new)); \ + } else { \ + struct in6_ifaddr *__ia; \ + IN6_ADDRLIST_WRITER_FOREACH(__ia) { \ + if (IN6_ADDRLIST_WRITER_NEXT(__ia) == NULL) { \ + IN6_ADDRLIST_WRITER_INSERT_AFTER(__ia,\ + (__new)); \ + break; \ + } \ + } \ + } \ + } while (0) #define in6_ifstat_inc(ifp, tag) \ do { \ @@ -612,7 +661,7 @@ in6_next_multi(struct in6_multistep *ste } while (step->i_ia != NULL) { in6m = LIST_FIRST(&step->i_ia->ia6_multiaddrs); - step->i_ia = step->i_ia->ia_next; + step->i_ia = IN6_ADDRLIST_READER_NEXT(step->i_ia); if (in6m != NULL) { step->i_in6m = LIST_NEXT(in6m, in6m_entry); break; @@ -624,7 +673,8 @@ in6_next_multi(struct in6_multistep *ste static inline struct in6_multi * in6_first_multi(struct in6_multistep *step) { - step->i_ia = in6_ifaddr; + + step->i_ia = IN6_ADDRLIST_READER_FIRST(); step->i_in6m = NULL; return in6_next_multi(step); } Index: src/sys/netinet6/ip6_input.c diff -u src/sys/netinet6/ip6_input.c:1.161 src/sys/netinet6/ip6_input.c:1.162 --- src/sys/netinet6/ip6_input.c:1.161 Wed Jun 22 07:48:17 2016 +++ src/sys/netinet6/ip6_input.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_input.c,v 1.161 2016/06/22 07:48:17 ozaki-r Exp $ */ +/* $NetBSD: ip6_input.c,v 1.162 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.161 2016/06/22 07:48:17 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.162 2016/07/04 06:48:14 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -133,7 +133,7 @@ __KERNEL_RCSID(0, "$NetBSD: ip6_input.c, extern struct domain inet6domain; u_char ip6_protox[IPPROTO_MAX]; -struct in6_ifaddr *in6_ifaddr; +struct pslist_head in6_ifaddr_list; pktqueue_t *ip6_pktq __read_mostly; int ip6_forward_srcrt; /* XXX */ @@ -163,6 +163,8 @@ ip6_init(void) const struct ip6protosw *pr; int i; + PSLIST_INIT(&in6_ifaddr_list); + sysctl_net_inet6_ip6_setup(NULL); pr = (const struct ip6protosw *)pffindproto(PF_INET6, IPPROTO_RAW, SOCK_RAW); if (pr == 0) Index: src/sys/netinet6/mld6.c diff -u src/sys/netinet6/mld6.c:1.69 src/sys/netinet6/mld6.c:1.70 --- src/sys/netinet6/mld6.c:1.69 Wed Jun 22 07:48:17 2016 +++ src/sys/netinet6/mld6.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: mld6.c,v 1.69 2016/06/22 07:48:17 ozaki-r Exp $ */ +/* $NetBSD: mld6.c,v 1.70 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $KAME: mld6.c,v 1.25 2001/01/16 14:14:18 itojun Exp $ */ /* @@ -102,7 +102,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mld6.c,v 1.69 2016/06/22 07:48:17 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mld6.c,v 1.70 2016/07/04 06:48:14 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -742,7 +742,7 @@ in6_delmulti(struct in6_multi *in6m) * Delete all references of this multicasting group from * the membership arrays */ - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { struct in6_multi_mship *imm; LIST_FOREACH(imm, &ia->ia6_memberships, i6mm_chain) { if (imm->i6mm_maddr == in6m) Index: src/sys/netinet6/nd6.c diff -u src/sys/netinet6/nd6.c:1.198 src/sys/netinet6/nd6.c:1.199 --- src/sys/netinet6/nd6.c:1.198 Thu Jun 30 01:34:53 2016 +++ src/sys/netinet6/nd6.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nd6.c,v 1.198 2016/06/30 01:34:53 ozaki-r Exp $ */ +/* $NetBSD: nd6.c,v 1.199 2016/07/04 06:48: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.198 2016/06/30 01:34:53 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.199 2016/07/04 06:48:14 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -583,8 +583,8 @@ nd6_timer(void *ignored_arg) * rather separate address lifetimes and prefix lifetimes. */ addrloop: - for (ia6 = in6_ifaddr; ia6; ia6 = nia6) { - nia6 = ia6->ia_next; + for (ia6 = IN6_ADDRLIST_WRITER_FIRST(); ia6; ia6 = nia6) { + nia6 = IN6_ADDRLIST_WRITER_NEXT(ia6); /* check address lifetime */ if (IFA6_IS_INVALID(ia6)) { int regen = 0; @@ -1781,9 +1781,10 @@ nd6_ioctl(u_long cmd, void *data, struct continue; /* XXX */ /* do we really have to remove addresses as well? */ - for (ia = in6_ifaddr; ia; ia = ia_next) { + for (ia = IN6_ADDRLIST_WRITER_FIRST(); ia; + ia = ia_next) { /* ia might be removed. keep the next ptr. */ - ia_next = ia->ia_next; + ia_next = IN6_ADDRLIST_WRITER_NEXT(ia); if ((ia->ia6_flags & IN6_IFF_AUTOCONF) == 0) continue; Index: src/sys/netinet6/nd6_rtr.c diff -u src/sys/netinet6/nd6_rtr.c:1.112 src/sys/netinet6/nd6_rtr.c:1.113 --- src/sys/netinet6/nd6_rtr.c:1.112 Wed Jun 15 06:01:21 2016 +++ src/sys/netinet6/nd6_rtr.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nd6_rtr.c,v 1.112 2016/06/15 06:01:21 ozaki-r Exp $ */ +/* $NetBSD: nd6_rtr.c,v 1.113 2016/07/04 06:48: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.112 2016/06/15 06:01:21 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.113 2016/07/04 06:48:14 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1538,7 +1538,7 @@ pfxlist_onlink_check(void) * always be attached. * The precise detection logic is same as the one for prefixes. */ - for (ifa = in6_ifaddr; ifa; ifa = ifa->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ifa) { if (!(ifa->ia6_flags & IN6_IFF_AUTOCONF)) continue; @@ -1555,7 +1555,7 @@ pfxlist_onlink_check(void) break; } if (ifa) { - for (ifa = in6_ifaddr; ifa; ifa = ifa->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ifa) { if ((ifa->ia6_flags & IN6_IFF_AUTOCONF) == 0) continue; @@ -1582,7 +1582,7 @@ pfxlist_onlink_check(void) } } else { - for (ifa = in6_ifaddr; ifa; ifa = ifa->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ifa) { if ((ifa->ia6_flags & IN6_IFF_AUTOCONF) == 0) continue; @@ -1937,7 +1937,7 @@ in6_tmpifadd( * there may be a time lag between generation of the ID and generation * of the address. So, we'll do one more sanity check. */ - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr, &ifra.ifra_addr.sin6_addr)) { if (trylimit-- == 0) { Index: src/sys/netipsec/key.c diff -u src/sys/netipsec/key.c:1.97 src/sys/netipsec/key.c:1.98 --- src/sys/netipsec/key.c:1.97 Mon Mar 7 13:08:48 2016 +++ src/sys/netipsec/key.c Mon Jul 4 06:48:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.97 2016/03/07 13:08:48 christos Exp $ */ +/* $NetBSD: key.c,v 1.98 2016/07/04 06:48:14 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/key.c,v 1.3.2.3 2004/02/14 22:23:23 bms Exp $ */ /* $KAME: key.c,v 1.191 2001/06/27 10:46:49 sakane Exp $ */ @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.97 2016/03/07 13:08:48 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.98 2016/07/04 06:48:14 ozaki-r Exp $"); /* * This code is referd to RFC 2367 @@ -4160,10 +4160,10 @@ key_ismyaddr(const struct sockaddr *sa) static int key_ismyaddr6(const struct sockaddr_in6 *sin6) { - const struct in6_ifaddr *ia; + struct in6_ifaddr *ia; const struct in6_multi *in6m; - for (ia = in6_ifaddr; ia; ia = ia->ia_next) { + IN6_ADDRLIST_READER_FOREACH(ia) { if (key_sockaddrcmp((const struct sockaddr *)&sin6, (const struct sockaddr *)&ia->ia_addr, 0) == 0) return 1;