diff options
author | bz <bz@FreeBSD.org> | 2008-12-14 17:47:33 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2008-12-14 17:47:33 +0000 |
commit | f7adea0f1eab18238a468de11d38f5ff2f1b91c9 (patch) | |
tree | 04df112a70904bb4e026511fb2c75d902a280830 /sys/netinet | |
parent | c4ea5e4067b28d0528395b77aebe0a0b01a07767 (diff) | |
download | FreeBSD-src-f7adea0f1eab18238a468de11d38f5ff2f1b91c9.zip FreeBSD-src-f7adea0f1eab18238a468de11d38f5ff2f1b91c9.tar.gz |
Add a check, that is currently under discussion for 8 but that we need
to keep for 7-STABLE when MFCing in_pcbladdr() to not change the
behaviour there.
With this a destination route via a loopback interface is treated as
a valid and reachable thing for IPv4 source address selection, even
though nothing of that network is ever directly reachable, but it is
more like a blackhole route.
With this the source address will be selected and IPsec can grab the
packets before we would discard them at a later point, encapsulate them
and send them out from a different tunnel endpoint IP.
Discussed on: net
Reported by: Frank Behrens <frank@harz.behrens.de>
Tested by: Frank Behrens <frank@harz.behrens.de>
MFC after: 4 weeks (just so that I get the mail)
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/in_pcb.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 70f217a..c5515da 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -695,6 +695,10 @@ in_pcbladdr(struct inpcb *inp, struct in_addr *faddr, struct in_addr *laddr, ia = ifatoia(ifa_ifwithnet(sintosa(&sain))); if (cred == NULL || !jailed(cred)) { +#if __FreeBSD_version < 800000 + if (ia == NULL) + ia = (struct in_ifaddr *)sro.ro_rt->rt_ifa; +#endif if (ia == NULL) { error = ENETUNREACH; goto done; |