diff options
author | 2015-07-08 08:48:34 +0000 | |
---|---|---|
committer | 2015-07-08 08:48:34 +0000 | |
commit | 1a3ab866f3a65c9cf50f606115e5a2de596ba10e (patch) | |
tree | d5051785583bded90442ae5129b910f8de7f464b | |
parent | Check for RTF_CONNECTED to track interface (connected) routes. (diff) | |
download | wireguard-openbsd-1a3ab866f3a65c9cf50f606115e5a2de596ba10e.tar.xz wireguard-openbsd-1a3ab866f3a65c9cf50f606115e5a2de596ba10e.zip |
Pass an interface index instead of a pointer to in6_addr2scopeid().
ok millert@
-rw-r--r-- | sys/netinet/udp_usrreq.c | 10 | ||||
-rw-r--r-- | sys/netinet6/icmp6.c | 14 | ||||
-rw-r--r-- | sys/netinet6/in6.c | 14 | ||||
-rw-r--r-- | sys/netinet6/in6_var.h | 4 | ||||
-rw-r--r-- | sys/netinet6/ip6_forward.c | 6 | ||||
-rw-r--r-- | sys/netinet6/ip6_mroute.c | 8 |
6 files changed, 26 insertions, 30 deletions
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 927712b949a..d113a326369 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -1,4 +1,4 @@ -/* $OpenBSD: udp_usrreq.c,v 1.202 2015/06/30 15:30:17 mpi Exp $ */ +/* $OpenBSD: udp_usrreq.c,v 1.203 2015/07/08 08:48:34 mpi Exp $ */ /* $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */ /* @@ -757,8 +757,8 @@ udp6_ctlinput(int cmd, struct sockaddr *sa, u_int rdomain, void *d) sa6.sin6_len = sizeof(sa6); sa6.sin6_addr = *ip6cp->ip6c_finaldst; /* XXX: assuming M is valid in this case */ - sa6.sin6_scope_id = in6_addr2scopeid( - if_get(m->m_pkthdr.ph_ifidx), ip6cp->ip6c_finaldst); + sa6.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.ph_ifidx, + ip6cp->ip6c_finaldst); if (in6_embedscope(ip6cp->ip6c_finaldst, &sa6, NULL, NULL)) { /* should be impossible */ return; @@ -790,8 +790,8 @@ udp6_ctlinput(int cmd, struct sockaddr *sa, u_int rdomain, void *d) sa6_src.sin6_family = AF_INET6; sa6_src.sin6_len = sizeof(sa6_src); sa6_src.sin6_addr = ip6->ip6_src; - sa6_src.sin6_scope_id = in6_addr2scopeid( - if_get(m->m_pkthdr.ph_ifidx), &ip6->ip6_src); + sa6_src.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.ph_ifidx, + &ip6->ip6_src); if (in6_embedscope(&sa6_src.sin6_addr, &sa6_src, NULL, NULL)) { /* should be impossible */ return; diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c index 553e41055b7..b5477bf9f6f 100644 --- a/sys/netinet6/icmp6.c +++ b/sys/netinet6/icmp6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: icmp6.c,v 1.160 2015/06/30 15:30:17 mpi Exp $ */ +/* $OpenBSD: icmp6.c,v 1.161 2015/07/08 08:48:34 mpi Exp $ */ /* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */ /* @@ -928,8 +928,8 @@ icmp6_notify_error(struct mbuf *m, int off, int icmp6len, int code) icmp6dst.sin6_addr = eip6->ip6_dst; else icmp6dst.sin6_addr = *finaldst; - icmp6dst.sin6_scope_id = in6_addr2scopeid( - if_get(m->m_pkthdr.ph_ifidx), &icmp6dst.sin6_addr); + icmp6dst.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.ph_ifidx, + &icmp6dst.sin6_addr); if (in6_embedscope(&icmp6dst.sin6_addr, &icmp6dst, NULL, NULL)) { /* should be impossbile */ @@ -946,8 +946,8 @@ icmp6_notify_error(struct mbuf *m, int off, int icmp6len, int code) icmp6src.sin6_len = sizeof(struct sockaddr_in6); icmp6src.sin6_family = AF_INET6; icmp6src.sin6_addr = eip6->ip6_src; - icmp6src.sin6_scope_id = in6_addr2scopeid( - if_get(m->m_pkthdr.ph_ifidx), &icmp6src.sin6_addr); + icmp6src.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.ph_ifidx, + &icmp6src.sin6_addr); if (in6_embedscope(&icmp6src.sin6_addr, &icmp6src, NULL, NULL)) { /* should be impossbile */ @@ -1034,7 +1034,7 @@ icmp6_mtudisc_update(struct ip6ctlparam *ip6cp, int validated) if (IN6_IS_ADDR_LINKLOCAL(dst)) { sin6.sin6_addr.s6_addr16[1] = htons(m->m_pkthdr.ph_ifidx); } - sin6.sin6_scope_id = in6_addr2scopeid(if_get(m->m_pkthdr.ph_ifidx), + sin6.sin6_scope_id = in6_addr2scopeid(m->m_pkthdr.ph_ifidx, &sin6.sin6_addr); rt = icmp6_mtudisc_clone(sin6tosa(&sin6), m->m_pkthdr.ph_rtableid); @@ -1610,7 +1610,7 @@ icmp6_redirect_output(struct mbuf *m0, struct rtentry *rt) src_sa.sin6_len = sizeof(src_sa); src_sa.sin6_addr = sip6->ip6_src; /* we don't currently use sin6_scope_id, but eventually use it */ - src_sa.sin6_scope_id = in6_addr2scopeid(ifp, &sip6->ip6_src); + src_sa.sin6_scope_id = in6_addr2scopeid(ifp->if_index, &sip6->ip6_src); if (nd6_is_addr_neighbor(&src_sa, ifp) == 0) goto fail; if (IN6_IS_ADDR_MULTICAST(&sip6->ip6_dst)) diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 5111feb2091..78263d88e02 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: in6.c,v 1.159 2015/06/08 22:19:27 krw Exp $ */ +/* $OpenBSD: in6.c,v 1.160 2015/07/08 08:48:34 mpi Exp $ */ /* $KAME: in6.c,v 1.372 2004/06/14 08:14:21 itojun Exp $ */ /* @@ -1665,13 +1665,8 @@ in6_addrscope(struct in6_addr *addr) return __IPV6_ADDR_SCOPE_GLOBAL; } -/* - * ifp - must not be NULL - * addr - must not be NULL - */ - int -in6_addr2scopeid(struct ifnet *ifp, struct in6_addr *addr) +in6_addr2scopeid(unsigned int ifidx, struct in6_addr *addr) { int scope = in6_addrscope(addr); @@ -1679,7 +1674,7 @@ in6_addr2scopeid(struct ifnet *ifp, struct in6_addr *addr) case __IPV6_ADDR_SCOPE_INTFACELOCAL: case __IPV6_ADDR_SCOPE_LINKLOCAL: /* XXX: we do not distinguish between a link and an I/F. */ - return (ifp->if_index); + return (ifidx); case __IPV6_ADDR_SCOPE_SITELOCAL: return (0); /* XXX: invalid. */ @@ -1803,7 +1798,8 @@ in6_ifawithscope(struct ifnet *oifp, struct in6_addr *dst, u_int rdomain) * We can never take an address that breaks the scope zone * of the destination. */ - if (in6_addr2scopeid(ifp, dst) != in6_addr2scopeid(oifp, dst)) + if (in6_addr2scopeid(ifp->if_index, dst) != + in6_addr2scopeid(oifp->if_index, dst)) continue; TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) { diff --git a/sys/netinet6/in6_var.h b/sys/netinet6/in6_var.h index a9b2b6f4beb..aebbcefc9cf 100644 --- a/sys/netinet6/in6_var.h +++ b/sys/netinet6/in6_var.h @@ -1,4 +1,4 @@ -/* $OpenBSD: in6_var.h,v 1.51 2014/11/20 09:55:57 mpi Exp $ */ +/* $OpenBSD: in6_var.h,v 1.52 2015/07/08 08:48:34 mpi Exp $ */ /* $KAME: in6_var.h,v 1.55 2001/02/16 12:49:45 itojun Exp $ */ /* @@ -519,7 +519,7 @@ void in6_domifdetach(struct ifnet *, void *); struct in6_ifaddr *in6ifa_ifpforlinklocal(struct ifnet *, int); struct in6_ifaddr *in6ifa_ifpwithaddr(struct ifnet *, struct in6_addr *); int in6_ifpprefix(const struct ifnet *, const struct in6_addr *); -int in6_addr2scopeid(struct ifnet *, struct in6_addr *); +int in6_addr2scopeid(unsigned int, struct in6_addr *); int in6_matchlen(struct in6_addr *, struct in6_addr *); int in6_are_prefix_equal(struct in6_addr *, struct in6_addr *, int); void in6_prefixlen2mask(struct in6_addr *, int); diff --git a/sys/netinet6/ip6_forward.c b/sys/netinet6/ip6_forward.c index 51cd68f1032..de0e88c4444 100644 --- a/sys/netinet6/ip6_forward.c +++ b/sys/netinet6/ip6_forward.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip6_forward.c,v 1.77 2015/06/30 15:30:17 mpi Exp $ */ +/* $OpenBSD: ip6_forward.c,v 1.78 2015/07/08 08:48:35 mpi Exp $ */ /* $KAME: ip6_forward.c,v 1.75 2001/06/29 12:42:13 jinmei Exp $ */ /* @@ -288,8 +288,8 @@ reroute: * unreachable error with Code 2 (beyond scope of source address). * [draft-ietf-ipngwg-icmp-v3-00.txt, Section 3.1] */ - if (in6_addr2scopeid(if_get(m->m_pkthdr.ph_ifidx), &ip6->ip6_src) != - in6_addr2scopeid(rt->rt_ifp, &ip6->ip6_src)) { + if (in6_addr2scopeid(m->m_pkthdr.ph_ifidx, &ip6->ip6_src) != + in6_addr2scopeid(rt->rt_ifp->if_index, &ip6->ip6_src)) { ip6stat.ip6s_cantforward++; ip6stat.ip6s_badscope++; in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard); diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index c2ea872015b..406b8653f95 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -1475,11 +1475,11 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) if ((mif6table[rt->mf6c_parent].m6_flags & MIFF_REGISTER) == 0 && (mif6table[mifi].m6_flags & MIFF_REGISTER) == 0 && - (in6_addr2scopeid(ifp, &ip6->ip6_dst) != - in6_addr2scopeid(mif6table[mifi].m6_ifp, + (in6_addr2scopeid(ifp->if_index, &ip6->ip6_dst) != + in6_addr2scopeid(mif6table[mifi].m6_ifp->if_index, &ip6->ip6_dst) || - in6_addr2scopeid(ifp, &ip6->ip6_src) != - in6_addr2scopeid(mif6table[mifi].m6_ifp, + in6_addr2scopeid(ifp->if_index, &ip6->ip6_src) != + in6_addr2scopeid(mif6table[mifi].m6_ifp->if_index, &ip6->ip6_src))) { ip6stat.ip6s_badscope++; continue; |