diff options
author | 2019-02-13 23:47:42 +0000 | |
---|---|---|
committer | 2019-02-13 23:47:42 +0000 | |
commit | 8f960e22352b7ad1b6bb02e6c7de9ee6f54a819f (patch) | |
tree | 26ea4e08934508eae0c95ed5a403b7d7fbe5b4f1 /sys/netinet6 | |
parent | (unsigned) means (unsigned int) which on ptrdiff_t or size_t or other (diff) | |
download | wireguard-openbsd-8f960e22352b7ad1b6bb02e6c7de9ee6f54a819f.tar.xz wireguard-openbsd-8f960e22352b7ad1b6bb02e6c7de9ee6f54a819f.zip |
change rt_ifa_add and rt_ifa_del so they take an rdomain argument.
this allows mpls interfaces (mpe, mpw) to pass the rdomain they
wish the local label to be in, rather than have it implicitly forced
to 0 by these functions. right now they'll pass 0, but it will soon
be possible to have them rx packets in other rdomains.
previously the functions used ifp->if_rdomain for the rdomain.
everything other than mpls still passes ifp->if_rdomain.
ok mpi@
Diffstat (limited to 'sys/netinet6')
-rw-r--r-- | sys/netinet6/in6.c | 15 | ||||
-rw-r--r-- | sys/netinet6/in6_ifattach.c | 5 | ||||
-rw-r--r-- | sys/netinet6/ip6_mroute.c | 3 |
3 files changed, 14 insertions, 9 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 29b325dbf8c..1a17f925784 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: in6.c,v 1.229 2019/02/10 22:32:26 dlg Exp $ */ +/* $OpenBSD: in6.c,v 1.230 2019/02/13 23:47:43 dlg Exp $ */ /* $KAME: in6.c,v 1.372 2004/06/14 08:14:21 itojun Exp $ */ /* @@ -378,7 +378,7 @@ in6_ioctl_change_ifaddr(u_long cmd, caddr_t data, struct ifnet *ifp) error = rt_ifa_add(&ia6->ia_ifa, RTF_CLONING | RTF_CONNECTED | RTF_MPATH, - ia6->ia_ifa.ifa_addr); + ia6->ia_ifa.ifa_addr, ifp->if_rdomain); if (error) { in6_purgeaddr(&ia6->ia_ifa); break; @@ -680,7 +680,8 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra, struct ifaddr *ifa = &ia6->ia_ifa; if ((ia6->ia_flags & IFA_ROUTE) != 0 && - rt_ifa_del(ifa, RTF_HOST, ifa->ifa_dstaddr) != 0) { + rt_ifa_del(ifa, RTF_HOST, ifa->ifa_dstaddr, + ifp->if_rdomain) != 0) { nd6log((LOG_ERR, "in6_update_ifa: failed to remove " "a route to the old destination: %s\n", inet_ntop(AF_INET6, &ia6->ia_addr.sin6_addr, @@ -888,7 +889,9 @@ in6_purgeaddr(struct ifaddr *ifa) ia6->ia_dstaddr.sin6_len != 0) { int e; - if ((e = rt_ifa_del(ifa, RTF_HOST, ifa->ifa_dstaddr)) != 0) { + e = rt_ifa_del(ifa, RTF_HOST, ifa->ifa_dstaddr, + ifp->if_rdomain); + if (e != 0) { char addr[INET6_ADDRSTRLEN]; log(LOG_ERR, "in6_purgeaddr: failed to remove " "a route to the p2p destination: %s on %s, " @@ -929,7 +932,7 @@ in6_unlink_ifa(struct in6_ifaddr *ia6, struct ifnet *ifp) plen = in6_mask2len(&ia6->ia_prefixmask.sin6_addr, NULL); if ((ifp->if_flags & IFF_LOOPBACK) == 0 && plen != 128) { rt_ifa_del(ifa, RTF_CLONING | RTF_CONNECTED, - ifa->ifa_addr); + ifa->ifa_addr, ifp->if_rdomain); } rt_ifa_purge(ifa); @@ -984,7 +987,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia6, int newhost) ia6->ia_dstaddr.sin6_family == AF_INET6) { ifa = &ia6->ia_ifa; error = rt_ifa_add(ifa, RTF_HOST | RTF_MPATH, - ifa->ifa_dstaddr); + ifa->ifa_dstaddr, ifp->if_rdomain); if (error != 0) return (error); ia6->ia_flags |= IFA_ROUTE; diff --git a/sys/netinet6/in6_ifattach.c b/sys/netinet6/in6_ifattach.c index 77da29d7d1a..884406957cf 100644 --- a/sys/netinet6/in6_ifattach.c +++ b/sys/netinet6/in6_ifattach.c @@ -1,4 +1,4 @@ -/* $OpenBSD: in6_ifattach.c,v 1.112 2019/02/10 22:32:26 dlg Exp $ */ +/* $OpenBSD: in6_ifattach.c,v 1.113 2019/02/13 23:47:43 dlg Exp $ */ /* $KAME: in6_ifattach.c,v 1.124 2001/07/18 08:32:51 jinmei Exp $ */ /* @@ -378,7 +378,8 @@ in6_ifattach_linklocal(struct ifnet *ifp, struct in6_addr *ifid) if ((ifp->if_flags & IFF_POINTOPOINT) == 0) flags |= RTF_CLONING; - error = rt_ifa_add(&ia6->ia_ifa, flags, ia6->ia_ifa.ifa_addr); + error = rt_ifa_add(&ia6->ia_ifa, flags, ia6->ia_ifa.ifa_addr, + ifp->if_rdomain); if (error) { in6_purgeaddr(&ia6->ia_ifa); return (error); diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 3171c631174..37fb9e2f5d2 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -1241,7 +1241,8 @@ mrt6_mcast6_add(struct ifnet *ifp, struct sockaddr *origin, return NULL; } - rv = rt_ifa_add(ifa, RTF_HOST | RTF_MULTICAST | RTF_MPATH, group); + rv = rt_ifa_add(ifa, RTF_HOST | RTF_MULTICAST | RTF_MPATH, group, + ifp->if_rdomain); if (rv != 0) { DPRINTF("rt_ifa_add failed %d", rv); return NULL; |