diff options
author | Shu-Chun Weng | 2020-12-18 20:32:11 +0100 |
---|---|---|
committer | Laurent Vivier | 2021-01-20 18:21:03 +0100 |
commit | fe51b0a5979e94fd1853996ea0613089f4528340 (patch) | |
tree | bc49c250449e356e4fddf958fd37ef47580ab3b0 | |
parent | linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls (diff) | |
download | qemu-fe51b0a5979e94fd1853996ea0613089f4528340.tar.gz qemu-fe51b0a5979e94fd1853996ea0613089f4528340.tar.xz qemu-fe51b0a5979e94fd1853996ea0613089f4528340.zip |
linux-user: add missing UDP get/setsockopt option
SOL_UDP manipulate options at UDP level. All six options currently defined
in linux source include/uapi/linux/udp.h take integer values.
Signed-off-by: Shu-Chun Weng <scw@google.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20201218193213.3566856-3-scw@google.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
-rw-r--r-- | linux-user/strace.c | 6 | ||||
-rw-r--r-- | linux-user/syscall.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/linux-user/strace.c b/linux-user/strace.c index 227812c07e..64172de99d 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -7,6 +7,7 @@ #include <sys/mount.h> #include <arpa/inet.h> #include <netinet/tcp.h> +#include <netinet/udp.h> #include <linux/if_packet.h> #include <linux/netlink.h> #include <sched.h> @@ -2644,6 +2645,11 @@ static void do_print_sockopt(const char *name, abi_long arg1) print_raw_param(TARGET_ABI_FMT_ld, optname, 0); print_pointer(optval, 0); break; + case SOL_UDP: + qemu_log("SOL_UDP,"); + print_raw_param(TARGET_ABI_FMT_ld, optname, 0); + print_pointer(optval, 0); + break; case SOL_IP: qemu_log("SOL_IP,"); print_raw_param(TARGET_ABI_FMT_ld, optname, 0); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 98aaca0187..969db20081 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -53,6 +53,7 @@ //#include <sys/user.h> #include <netinet/ip.h> #include <netinet/tcp.h> +#include <netinet/udp.h> #include <linux/wireless.h> #include <linux/icmp.h> #include <linux/icmpv6.h> @@ -2184,7 +2185,8 @@ static abi_long do_setsockopt(int sockfd, int level, int optname, switch(level) { case SOL_TCP: - /* TCP options all take an 'int' value. */ + case SOL_UDP: + /* TCP and UDP options all take an 'int' value. */ if (optlen < sizeof(uint32_t)) return -TARGET_EINVAL; @@ -2832,7 +2834,8 @@ get_timeout: } break; case SOL_TCP: - /* TCP options all take an 'int' value. */ + case SOL_UDP: + /* TCP and UDP options all take an 'int' value. */ int_case: if (get_user_u32(len, optlen)) return -TARGET_EFAULT; |