Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet6/in6_src.c
Show First 20 Lines • Show All 246 Lines • ▼ Show 20 Lines | if (cred != NULL && (error = prison_local_ip6(cred, | ||||
return (error); | return (error); | ||||
/* | /* | ||||
* If IPV6_BINDANY socket option is set, we allow to specify | * If IPV6_BINDANY socket option is set, we allow to specify | ||||
* non local addresses as source address in IPV6_PKTINFO | * non local addresses as source address in IPV6_PKTINFO | ||||
* ancillary data. | * ancillary data. | ||||
*/ | */ | ||||
if ((inp->inp_flags & INP_BINDANY) == 0) { | if ((inp->inp_flags & INP_BINDANY) == 0) { | ||||
ia = in6ifa_ifwithaddr(&tmp, 0 /* XXX */); | ia = in6ifa_ifwithaddr(&tmp, 0 /* XXX */, false); | ||||
if (ia == NULL || (ia->ia6_flags & (IN6_IFF_ANYCAST | | if (ia == NULL || (ia->ia6_flags & (IN6_IFF_ANYCAST | | ||||
IN6_IFF_NOTREADY))) { | IN6_IFF_NOTREADY))) | ||||
if (ia != NULL) | |||||
ifa_free(&ia->ia_ifa); | |||||
return (EADDRNOTAVAIL); | return (EADDRNOTAVAIL); | ||||
} | |||||
bcopy(&ia->ia_addr.sin6_addr, srcp, sizeof(*srcp)); | bcopy(&ia->ia_addr.sin6_addr, srcp, sizeof(*srcp)); | ||||
ifa_free(&ia->ia_ifa); | |||||
} else | } else | ||||
bcopy(&tmp, srcp, sizeof(*srcp)); | bcopy(&tmp, srcp, sizeof(*srcp)); | ||||
pi->ipi6_addr = tmp; /* XXX: this overrides pi */ | pi->ipi6_addr = tmp; /* XXX: this overrides pi */ | ||||
if (ifpp) | if (ifpp) | ||||
*ifpp = ifp; | *ifpp = ifp; | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 953 Lines • Show Last 20 Lines |