diff options
author | 2011-11-24 17:39:55 +0000 | |
---|---|---|
committer | 2011-11-24 17:39:55 +0000 | |
commit | ba79ddd5133a23a35c94dc81ff62f867032c81d5 (patch) | |
tree | 568a5bf3c7ce571306b328e42c8baf7cbfe59e2d /sys/netinet6/raw_ip6.c | |
parent | Fix Segmentation Fault when launching mailq(8) (diff) | |
download | wireguard-openbsd-ba79ddd5133a23a35c94dc81ff62f867032c81d5.tar.xz wireguard-openbsd-ba79ddd5133a23a35c94dc81ff62f867032c81d5.zip |
rdomain support for IPv6
ok mikeb
Diffstat (limited to 'sys/netinet6/raw_ip6.c')
-rw-r--r-- | sys/netinet6/raw_ip6.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index 65c1884d1c0..99de480d0f7 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: raw_ip6.c,v 1.43 2011/05/13 14:31:17 oga Exp $ */ +/* $OpenBSD: raw_ip6.c,v 1.44 2011/11/24 17:39:55 sperreault Exp $ */ /* $KAME: raw_ip6.c,v 1.69 2001/03/04 15:55:44 itojun Exp $ */ /* @@ -434,7 +434,8 @@ rip6_output(struct mbuf *m, ...) struct in6_addr *in6a; if ((in6a = in6_selectsrc(dstsock, optp, in6p->in6p_moptions, - &in6p->in6p_route, &in6p->in6p_laddr, &error)) == 0) { + &in6p->in6p_route, &in6p->in6p_laddr, &error, + in6p->inp_rtableid)) == 0) { if (error == 0) error = EADDRNOTAVAIL; goto bad; @@ -487,6 +488,9 @@ rip6_output(struct mbuf *m, ...) if (in6p->in6p_flags & IN6P_MINMTU) flags |= IPV6_MINMTU; + /* force routing domain */ + m->m_pkthdr.rdomain = in6p->inp_rtableid; + error = ip6_output(m, optp, &in6p->in6p_route, flags, in6p->in6p_moptions, &oifp, in6p); if (so->so_proto->pr_protocol == IPPROTO_ICMPV6) { @@ -677,7 +681,7 @@ rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, */ if (!IN6_IS_ADDR_UNSPECIFIED(&addr->sin6_addr) && (ia = ifa_ifwithaddr((struct sockaddr *)addr, - /* XXX */ 0)) == 0) { + in6p->inp_rtableid)) == 0) { error = EADDRNOTAVAIL; break; } @@ -725,7 +729,7 @@ rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, /* Source address selection. XXX: need pcblookup? */ in6a = in6_selectsrc(addr, in6p->in6p_outputopts, in6p->in6p_moptions, &in6p->in6p_route, - &in6p->in6p_laddr, &error); + &in6p->in6p_laddr, &error, in6p->inp_rtableid); if (in6a == NULL) { if (error == 0) error = EADDRNOTAVAIL; |