mirror of https://github.com/xemu-project/xemu.git
Add getsockopt for settable SOL_IPV6 options
Signed-off-by: Tom Deseyn <tom.deseyn@gmail.com> Message-Id: <20181213130611.7496-1-tom.deseyn@gmail.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
147923b1a9
commit
bd8ed48549
|
@ -2352,6 +2352,45 @@ static abi_long do_getsockopt(int sockfd, int level, int optname,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SOL_IPV6:
|
||||||
|
switch (optname) {
|
||||||
|
case IPV6_MTU_DISCOVER:
|
||||||
|
case IPV6_MTU:
|
||||||
|
case IPV6_V6ONLY:
|
||||||
|
case IPV6_RECVPKTINFO:
|
||||||
|
case IPV6_UNICAST_HOPS:
|
||||||
|
case IPV6_MULTICAST_HOPS:
|
||||||
|
case IPV6_MULTICAST_LOOP:
|
||||||
|
case IPV6_RECVERR:
|
||||||
|
case IPV6_RECVHOPLIMIT:
|
||||||
|
case IPV6_2292HOPLIMIT:
|
||||||
|
case IPV6_CHECKSUM:
|
||||||
|
if (get_user_u32(len, optlen))
|
||||||
|
return -TARGET_EFAULT;
|
||||||
|
if (len < 0)
|
||||||
|
return -TARGET_EINVAL;
|
||||||
|
lv = sizeof(lv);
|
||||||
|
ret = get_errno(getsockopt(sockfd, level, optname, &val, &lv));
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
if (len < sizeof(int) && len > 0 && val >= 0 && val < 255) {
|
||||||
|
len = 1;
|
||||||
|
if (put_user_u32(len, optlen)
|
||||||
|
|| put_user_u8(val, optval_addr))
|
||||||
|
return -TARGET_EFAULT;
|
||||||
|
} else {
|
||||||
|
if (len > sizeof(int))
|
||||||
|
len = sizeof(int);
|
||||||
|
if (put_user_u32(len, optlen)
|
||||||
|
|| put_user_u32(val, optval_addr))
|
||||||
|
return -TARGET_EFAULT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = -TARGET_ENOPROTOOPT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
unimplemented:
|
unimplemented:
|
||||||
gemu_log("getsockopt level=%d optname=%d not yet supported\n",
|
gemu_log("getsockopt level=%d optname=%d not yet supported\n",
|
||||||
|
|
Loading…
Reference in New Issue