summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2015-07-08 08:48:34 +0000
committermpi <mpi@openbsd.org>2015-07-08 08:48:34 +0000
commit1a3ab866f3a65c9cf50f606115e5a2de596ba10e (patch)
treed5051785583bded90442ae5129b910f8de7f464b
parentCheck for RTF_CONNECTED to track interface (connected) routes. (diff)
downloadwireguard-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.c10
-rw-r--r--sys/netinet6/icmp6.c14
-rw-r--r--sys/netinet6/in6.c14
-rw-r--r--sys/netinet6/in6_var.h4
-rw-r--r--sys/netinet6/ip6_forward.c6
-rw-r--r--sys/netinet6/ip6_mroute.c8
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;