diff --git a/linux-user/alpha/sockbits.h b/linux-user/alpha/sockbits.h index d54dc98c0902..4350a8649629 100644 --- a/linux-user/alpha/sockbits.h +++ b/linux-user/alpha/sockbits.h @@ -75,6 +75,36 @@ /* Instruct lower device to use last 4-bytes of skb data as FCS */ #define TARGET_SO_NOFCS 43 +#define TARGET_SO_LOCK_FILTER 44 +#define TARGET_SO_SELECT_ERR_QUEUE 45 +#define TARGET_SO_BUSY_POLL 46 +#define TARGET_SO_MAX_PACING_RATE 47 +#define TARGET_SO_BPF_EXTENSIONS 48 +#define TARGET_SO_INCOMING_CPU 49 +#define TARGET_SO_ATTACH_BPF 50 +#define TARGET_SO_DETACH_BPF TARGET_SO_DETACH_FILTER +#define TARGET_SO_ATTACH_REUSEPORT_CBPF 51 +#define TARGET_SO_ATTACH_REUSEPORT_EBPF 52 +#define TARGET_SO_CNX_ADVICE 53 +#define TARGET_SO_MEMINFO 55 +#define TARGET_SO_INCOMING_NAPI_ID 56 +#define TARGET_SO_COOKIE 57 +#define TARGET_SCM_TIMESTAMPING_PKTINFO 58 +#define TARGET_SO_PEERGROUPS 59 +#define TARGET_SO_ZEROCOPY 60 +#define TARGET_SO_TXTIME 61 +#define TARGET_SCM_TXTIME TARGET_SO_TXTIME +#define TARGET_SO_BINDTOIFINDEX 62 +#define TARGET_SO_TIMESTAMP_OLD 29 +#define TARGET_SO_TIMESTAMPNS_OLD 35 +#define TARGET_SO_TIMESTAMPING_OLD 37 +#define TARGET_SO_TIMESTAMP_NEW 63 +#define TARGET_SO_TIMESTAMPNS_NEW 64 +#define TARGET_SO_TIMESTAMPING_NEW 65 +#define TARGET_SO_RCVTIMEO_NEW 66 +#define TARGET_SO_SNDTIMEO_NEW 67 +#define TARGET_SO_DETACH_REUSEPORT_BPF 68 + /* TARGET_O_NONBLOCK clashes with the bits used for socket types. Therefore we * have to define SOCK_NONBLOCK to a different value here. */ diff --git a/linux-user/generic/sockbits.h b/linux-user/generic/sockbits.h index e44733c601a4..722ea1b61184 100644 --- a/linux-user/generic/sockbits.h +++ b/linux-user/generic/sockbits.h @@ -55,4 +55,48 @@ #define TARGET_SO_ACCEPTCONN 30 #define TARGET_SO_PEERSEC 31 + +#define TARGET_SO_PASSSEC 34 +#define TARGET_SO_MARK 36 +#define TARGET_SO_PROTOCOL 38 +#define TARGET_SO_DOMAIN 39 +#define TARGET_SO_RXQ_OVFL 40 +#define TARGET_SO_WIFI_STATUS 41 +#define TARGET_SCM_WIFI_STATUS TARGET_SO_WIFI_STATUS +#define TARGET_SO_PEEK_OFF 42 + +/* Instruct lower device to use last 4-bytes of skb data as FCS */ +#define TARGET_SO_NOFCS 43 + +#define TARGET_SO_LOCK_FILTER 44 +#define TARGET_SO_SELECT_ERR_QUEUE 45 +#define TARGET_SO_BUSY_POLL 46 +#define TARGET_SO_MAX_PACING_RATE 47 +#define TARGET_SO_BPF_EXTENSIONS 48 +#define TARGET_SO_INCOMING_CPU 49 +#define TARGET_SO_ATTACH_BPF 50 +#define TARGET_SO_DETACH_BPF TARGET_SO_DETACH_FILTER +#define TARGET_SO_ATTACH_REUSEPORT_CBPF 51 +#define TARGET_SO_ATTACH_REUSEPORT_EBPF 52 +#define TARGET_SO_CNX_ADVICE 53 +#define TARGET_SCM_TIMESTAMPING_OPT_STATS 54 +#define TARGET_SO_MEMINFO 55 +#define TARGET_SO_INCOMING_NAPI_ID 56 +#define TARGET_SO_COOKIE 57 +#define TARGET_SCM_TIMESTAMPING_PKTINFO 58 +#define TARGET_SO_PEERGROUPS 59 +#define TARGET_SO_ZEROCOPY 60 +#define TARGET_SO_TXTIME 61 +#define TARGET_SCM_TXTIME TARGET_SO_TXTIME +#define TARGET_SO_BINDTOIFINDEX 62 +#define TARGET_SO_TIMESTAMP_OLD 29 +#define TARGET_SO_TIMESTAMPNS_OLD 35 +#define TARGET_SO_TIMESTAMPING_OLD 37 +#define TARGET_SO_TIMESTAMP_NEW 63 +#define TARGET_SO_TIMESTAMPNS_NEW 64 +#define TARGET_SO_TIMESTAMPING_NEW 65 +#define TARGET_SO_RCVTIMEO_NEW 66 +#define TARGET_SO_SNDTIMEO_NEW 67 +#define TARGET_SO_DETACH_REUSEPORT_BPF 68 + #endif diff --git a/linux-user/hppa/sockbits.h b/linux-user/hppa/sockbits.h index 23f69a32938e..401bdea2515e 100644 --- a/linux-user/hppa/sockbits.h +++ b/linux-user/hppa/sockbits.h @@ -67,6 +67,27 @@ #define TARGET_SO_CNX_ADVICE 0x402E +#define TARGET_SCM_TIMESTAMPING_OPT_STATS 0x402F +#define TARGET_SO_MEMINFO 0x4030 +#define TARGET_SO_INCOMING_NAPI_ID 0x4031 +#define TARGET_SO_COOKIE 0x4032 +#define TARGET_SCM_TIMESTAMPING_PKTINFO 0x4033 +#define TARGET_SO_PEERGROUPS 0x4034 +#define TARGET_SO_ZEROCOPY 0x4035 +#define TARGET_SO_TXTIME 0x4036 +#define TARGET_SCM_TXTIME TARGET_SO_TXTIME +#define TARGET_SO_BINDTOIFINDEX 0x4037 +#define TARGET_SO_TIMESTAMP_OLD 0x4012 +#define TARGET_SO_TIMESTAMPNS_OLD 0x4013 +#define TARGET_SO_TIMESTAMPING_OLD 0x4020 +#define TARGET_SO_TIMESTAMP_NEW 0x4038 +#define TARGET_SO_TIMESTAMPNS_NEW 0x4039 +#define TARGET_SO_TIMESTAMPING_NEW 0x403A +#define TARGET_SO_RCVTIMEO_NEW 0x4040 +#define TARGET_SO_SNDTIMEO_NEW 0x4041 +#define TARGET_SO_DETACH_REUSEPORT_BPF 0x4042 + + /* TARGET_O_NONBLOCK clashes with the bits used for socket types. Therefore we * have to define SOCK_NONBLOCK to a different value here. */ diff --git a/linux-user/mips/sockbits.h b/linux-user/mips/sockbits.h index 0f022cd598a9..2ef6acdec6b9 100644 --- a/linux-user/mips/sockbits.h +++ b/linux-user/mips/sockbits.h @@ -69,6 +69,46 @@ #define TARGET_SO_RCVBUFFORCE 33 #define TARGET_SO_PASSSEC 34 +#define TARGET_SO_MARK 36 +#define TARGET_SO_RXQ_OVFL 40 +#define TARGET_SO_WIFI_STATUS 41 +#define TARGET_SCM_WIFI_STATUS TARGET_SO_WIFI_STATUS +#define TARGET_SO_PEEK_OFF 42 + +/* Instruct lower device to use last 4-bytes of skb data as FCS */ +#define TARGET_SO_NOFCS 43 + +#define TARGET_SO_LOCK_FILTER 44 +#define TARGET_SO_SELECT_ERR_QUEUE 45 +#define TARGET_SO_BUSY_POLL 46 +#define TARGET_SO_MAX_PACING_RATE 47 +#define TARGET_SO_BPF_EXTENSIONS 48 +#define TARGET_SO_INCOMING_CPU 49 +#define TARGET_SO_ATTACH_BPF 50 +#define TARGET_SO_DETACH_BPF TARGET_SO_DETACH_FILTER +#define TARGET_SO_ATTACH_REUSEPORT_CBPF 51 +#define TARGET_SO_ATTACH_REUSEPORT_EBPF 52 +#define TARGET_SO_CNX_ADVICE 53 +#define TARGET_SCM_TIMESTAMPING_OPT_STATS 54 +#define TARGET_SO_MEMINFO 55 +#define TARGET_SO_INCOMING_NAPI_ID 56 +#define TARGET_SO_COOKIE 57 +#define SCM_TIMESTAMPING_PKTINFO 58 +#define TARGET_SO_PEERGROUPS 59 +#define TARGET_SO_ZEROCOPY 60 +#define TARGET_SO_TXTIME 61 +#define TARGET_SCM_TXTIME TARGET_SO_TXTIME +#define TARGET_SO_BINDTOIFINDEX 62 +#define TARGET_SO_TIMESTAMP_OLD 29 +#define TARGET_SO_TIMESTAMPNS_OLD 35 +#define TARGET_SO_TIMESTAMPING_OLD 37 +#define TARGET_SO_TIMESTAMP_NEW 63 +#define TARGET_SO_TIMESTAMPNS_NEW 64 +#define TARGET_SO_TIMESTAMPING_NEW 65 +#define TARGET_SO_RCVTIMEO_NEW 66 +#define TARGET_SO_SNDTIMEO_NEW 67 +#define TARGET_SO_DETACH_REUSEPORT_BPF 68 + /** sock_type - Socket types * * Please notice that for binary compat reasons MIPS has to diff --git a/linux-user/sparc/sockbits.h b/linux-user/sparc/sockbits.h index 0a822e3e1f1b..70e94c04516f 100644 --- a/linux-user/sparc/sockbits.h +++ b/linux-user/sparc/sockbits.h @@ -104,6 +104,29 @@ #define TARGET_SO_ZEROCOPY 0x003e +#define TARGET_SO_TXTIME 0x003f +#define TARGET_SCM_TXTIME TARGET_SO_TXTIME + +#define TARGET_SO_BINDTOIFINDEX 0x0041 + +/* Security levels - as per NRL IPv6 - don't actually do anything */ +#define TARGET_SO_SECURITY_AUTHENTICATION 0x5001 +#define TARGET_SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 +#define TARGET_SO_SECURITY_ENCRYPTION_NETWORK 0x5004 + +#define TARGET_SO_TIMESTAMP_OLD 0x001d +#define TARGET_SO_TIMESTAMPNS_OLD 0x0021 +#define TARGET_SO_TIMESTAMPING_OLD 0x0023 + +#define TARGET_SO_TIMESTAMP_NEW 0x0046 +#define TARGET_SO_TIMESTAMPNS_NEW 0x0042 +#define TARGET_SO_TIMESTAMPING_NEW 0x0043 + +#define TARGET_SO_RCVTIMEO_NEW 0x0044 +#define TARGET_SO_SNDTIMEO_NEW 0x0045 + +#define TARGET_SO_DETACH_REUSEPORT_BPF 0x0047 + /* Security levels - as per NRL IPv6 - don't actually do anything */ #define TARGET_SO_SECURITY_AUTHENTICATION 0x5001 #define TARGET_SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 93da3b972852..75e62bddf69e 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2474,6 +2474,35 @@ get_timeout: } break; } + case TARGET_SO_PEERGROUPS: { + pid_t *groups; + int i; + + if (get_user_u32(len, optlen)) { + return -TARGET_EFAULT; + } + if (len < 0) { + return -TARGET_EINVAL; + } + + groups = lock_user(VERIFY_WRITE, optval_addr, len, 0); + if (!groups) { + return -TARGET_EFAULT; + } + lv = len; + ret = get_errno(getsockopt(sockfd, level, SO_PEERGROUPS, + groups, &lv)); + if (!is_error(ret)) { + for (i = 0; i < lv / sizeof(pid_t); i++) { + __put_user(groups[i], &groups[i]); + } + if (put_user_u32(lv, optlen)) { + ret = -TARGET_EFAULT; + } + } + unlock_user(groups, optval_addr, lv); + break; + } case TARGET_SO_PEERSEC: { char *name;