Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet6/ip6_output.c
Show First 20 Lines • Show All 1,800 Lines • ▼ Show 20 Lines | |||||
#ifdef RSS | #ifdef RSS | ||||
case IPV6_RECVRSSBUCKETID: | case IPV6_RECVRSSBUCKETID: | ||||
OPTSET2(INP_RECVRSSBUCKETID, optval); | OPTSET2(INP_RECVRSSBUCKETID, optval); | ||||
break; | break; | ||||
#endif | #endif | ||||
case IPV6_V6ONLY: | case IPV6_V6ONLY: | ||||
/* | INP_WLOCK(inp); | ||||
* make setsockopt(IPV6_V6ONLY) | |||||
* available only prior to bind(2). | |||||
* see ipng mailing list, Jun 22 2001. | |||||
*/ | |||||
if (inp->inp_lport || | if (inp->inp_lport || | ||||
!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) { | !IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) { | ||||
/* | |||||
* The socket is already bound. | |||||
*/ | |||||
INP_WUNLOCK(inp); | |||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
OPTSET(IN6P_IPV6_V6ONLY); | if (optval) { | ||||
if (optval) | inp->inp_flags |= IN6P_IPV6_V6ONLY; | ||||
inp->inp_vflag &= ~INP_IPV4; | inp->inp_vflag &= ~INP_IPV4; | ||||
else | } else { | ||||
inp->inp_flags &= ~IN6P_IPV6_V6ONLY; | |||||
inp->inp_vflag |= INP_IPV4; | inp->inp_vflag |= INP_IPV4; | ||||
} | |||||
INP_WUNLOCK(inp); | |||||
break; | break; | ||||
case IPV6_RECVTCLASS: | case IPV6_RECVTCLASS: | ||||
/* cannot mix with RFC2292 XXX */ | /* cannot mix with RFC2292 XXX */ | ||||
OPTSET2292_EXCLUSIVE(IN6P_TCLASS); | OPTSET2292_EXCLUSIVE(IN6P_TCLASS); | ||||
break; | break; | ||||
case IPV6_AUTOFLOWLABEL: | case IPV6_AUTOFLOWLABEL: | ||||
OPTSET(IN6P_AUTOFLOWLABEL); | OPTSET(IN6P_AUTOFLOWLABEL); | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 1,410 Lines • Show Last 20 Lines |