diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2022-07-28 18:36:26 +0200 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2022-07-31 21:03:01 +0000 |
commit | 1db1753842a864a1c27dc68793732a5304b89b95 (patch) | |
tree | 5ddbbd56889739f028a7f36ab6d3d2e51f7511af | |
parent | efc8bd8792fb574e720526db924bff4477b8534d (diff) | |
download | strace-1db1753842a864a1c27dc68793732a5304b89b95.tar.gz |
net: update handling of all int-like SOL_SOCKET options
* src/net.c (print_getsockopt) <case SO_DEBUG, case SO_REUSEADDR,
case SO_DONTROUTE, case SO_BROADCAST, case SO_SNDBUF, case SO_RCVBUF,
case SO_KEEPALIVE, case SO_OOBINLINE, case SO_NO_CHECK,
case SO_PRIORITY, case SO_BSDCOMPAT, case SO_REUSEPORT,
case SO_PASSCRED, case SO_RCVLOWAT, case SO_SNDLOWAT,
case SO_DETACH_FILTER, case SO_TIMESTAMP_OLD, case SO_ACCEPTCONN,
case SO_SNDBUFFORCE, case SO_RCVBUFFORCE, case SO_PASSSEC,
case SO_TIMESTAMPNS_OLD, case SO_MARK, case SO_TIMESTAMPING_OLD,
case SO_RXQ_OVFL, case SO_WIFI_STATUS, case SO_PEEK_OFF, case SO_NOFCS,
case SO_LOCK_FILTER, case SO_SELECT_ERR_QUEUE, case SO_BUSY_POLL,
case SO_INCOMING_CPU, case SO_CNX_ADVICE, case SO_INCOMING_NAPI_ID,
case SO_ZEROCOPY, case SO_TIMESTAMP_NEW, case SO_TIMESTAMPNS_NEW,
case SO_TIMESTAMPING_NEW, case SO_DETACH_REUSEPORT_BPF,
case SO_PREFER_BUSY_POLL, case SO_BUSY_POLL_BUDGET, case
SO_RESERVE_MEM>: Print only the integer value on any len larger than
sizeof(int).
(print_setsockopt) <case SO_DEBUG, case SO_REUSEADDR,
case SO_DONTROUTE, case SO_BROADCAST, case SO_SNDBUF, case SO_RCVBUF,
case SO_KEEPALIVE, case SO_OOBINLINE, case SO_NO_CHECK,
case SO_PRIORITY, case SO_BSDCOMPAT, case SO_REUSEPORT,
case SO_PASSCRED, case SO_RCVLOWAT, case SO_SNDLOWAT,
case SO_DETACH_FILTER, case SO_TIMESTAMP_OLD, case SO_ACCEPTCONN,
case SO_SNDBUFFORCE, case SO_RCVBUFFORCE, case SO_PASSSEC,
case SO_TIMESTAMPNS_OLD, case SO_MARK, case SO_TIMESTAMPING_OLD,
case SO_RXQ_OVFL, case SO_WIFI_STATUS, case SO_PEEK_OFF, case SO_NOFCS,
case SO_LOCK_FILTER, case SO_SELECT_ERR_QUEUE, case SO_BUSY_POLL,
case SO_INCOMING_CPU, case SO_CNX_ADVICE, case SO_INCOMING_NAPI_ID,
case SO_ZEROCOPY, case SO_TIMESTAMP_NEW, case SO_TIMESTAMPNS_NEW,
case SO_TIMESTAMPING_NEW, case SO_DETACH_REUSEPORT_BPF,
case SO_PREFER_BUSY_POLL, case SO_BUSY_POLL_BUDGET, case
SO_RESERVE_MEM>: Print address if len is less than sizeof(int),
the integer value otherwise.
* tests/sockopt-sol_socket.c: Update the expected output.
-rw-r--r-- | src/net.c | 98 | ||||
-rw-r--r-- | tests/sockopt-sol_socket.c | 84 |
2 files changed, 140 insertions, 42 deletions
@@ -796,6 +796,55 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level, case SO_ERROR: print_get_error(tcp, addr, rlen); return; + + /* All known int-like options */ + case SO_DEBUG: + case SO_REUSEADDR: + case SO_DONTROUTE: + case SO_BROADCAST: + case SO_SNDBUF: + case SO_RCVBUF: + case SO_KEEPALIVE: + case SO_OOBINLINE: + case SO_NO_CHECK: + case SO_PRIORITY: + case SO_BSDCOMPAT: + case SO_REUSEPORT: + case SO_PASSCRED: + case SO_RCVLOWAT: + case SO_SNDLOWAT: + case SO_DETACH_FILTER: + case SO_TIMESTAMP_OLD: + case SO_ACCEPTCONN: + case SO_SNDBUFFORCE: + case SO_RCVBUFFORCE: + case SO_PASSSEC: + case SO_TIMESTAMPNS_OLD: + case SO_MARK: + case SO_TIMESTAMPING_OLD: + case SO_RXQ_OVFL: + case SO_WIFI_STATUS: + case SO_PEEK_OFF: + case SO_NOFCS: + case SO_LOCK_FILTER: + case SO_SELECT_ERR_QUEUE: + case SO_BUSY_POLL: + case SO_INCOMING_CPU: + case SO_CNX_ADVICE: + case SO_INCOMING_NAPI_ID: + case SO_ZEROCOPY: + case SO_TIMESTAMP_NEW: + case SO_TIMESTAMPNS_NEW: + case SO_TIMESTAMPING_NEW: + case SO_DETACH_REUSEPORT_BPF: + case SO_PREFER_BUSY_POLL: + case SO_BUSY_POLL_BUDGET: + case SO_RESERVE_MEM: + if (rlen >= (int) sizeof(int)) + printnum_int(tcp, addr, "%d"); + else + printstrn(tcp, addr, rlen); + return; } break; @@ -1012,6 +1061,55 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level, else printaddr(addr); return; + + /* All known int-like options */ + case SO_DEBUG: + case SO_REUSEADDR: + case SO_DONTROUTE: + case SO_BROADCAST: + case SO_SNDBUF: + case SO_RCVBUF: + case SO_KEEPALIVE: + case SO_OOBINLINE: + case SO_NO_CHECK: + case SO_PRIORITY: + case SO_BSDCOMPAT: + case SO_REUSEPORT: + case SO_PASSCRED: + case SO_RCVLOWAT: + case SO_SNDLOWAT: + case SO_DETACH_FILTER: + case SO_TIMESTAMP_OLD: + case SO_ACCEPTCONN: + case SO_SNDBUFFORCE: + case SO_RCVBUFFORCE: + case SO_PASSSEC: + case SO_TIMESTAMPNS_OLD: + case SO_MARK: + case SO_TIMESTAMPING_OLD: + case SO_RXQ_OVFL: + case SO_WIFI_STATUS: + case SO_PEEK_OFF: + case SO_NOFCS: + case SO_LOCK_FILTER: + case SO_SELECT_ERR_QUEUE: + case SO_BUSY_POLL: + case SO_INCOMING_CPU: + case SO_CNX_ADVICE: + case SO_INCOMING_NAPI_ID: + case SO_ZEROCOPY: + case SO_TIMESTAMP_NEW: + case SO_TIMESTAMPNS_NEW: + case SO_TIMESTAMPING_NEW: + case SO_DETACH_REUSEPORT_BPF: + case SO_PREFER_BUSY_POLL: + case SO_BUSY_POLL_BUDGET: + case SO_RESERVE_MEM: + if (len < (int) sizeof(int)) + printaddr(addr); + else + printnum_int(tcp, addr, "%d"); + return; } break; diff --git a/tests/sockopt-sol_socket.c b/tests/sockopt-sol_socket.c index 345ff794b..131a84d29 100644 --- a/tests/sockopt-sol_socket.c +++ b/tests/sockopt-sol_socket.c @@ -63,76 +63,76 @@ main(void) size_t vecs_sz; size_t optsz; } names[] = { - { ARG_STR(SO_DEBUG) }, - { ARG_STR(SO_REUSEADDR) }, + { ARG_STR(SO_DEBUG), .optsz = sizeof(int) }, + { ARG_STR(SO_REUSEADDR), .optsz = sizeof(int) }, { ARG_STR(SO_TYPE), /* TODO */ }, /* SO_ERROR - see so_error test */ - { ARG_STR(SO_DONTROUTE) }, - { ARG_STR(SO_BROADCAST) }, - { ARG_STR(SO_SNDBUF) }, - { ARG_STR(SO_RCVBUF) }, - { ARG_STR(SO_KEEPALIVE) }, - { ARG_STR(SO_OOBINLINE) }, - { ARG_STR(SO_NO_CHECK) }, - { ARG_STR(SO_PRIORITY) }, + { ARG_STR(SO_DONTROUTE), .optsz = sizeof(int) }, + { ARG_STR(SO_BROADCAST), .optsz = sizeof(int) }, + { ARG_STR(SO_SNDBUF), .optsz = sizeof(int) }, + { ARG_STR(SO_RCVBUF), .optsz = sizeof(int) }, + { ARG_STR(SO_KEEPALIVE), .optsz = sizeof(int) }, + { ARG_STR(SO_OOBINLINE), .optsz = sizeof(int) }, + { ARG_STR(SO_NO_CHECK), .optsz = sizeof(int) }, + { ARG_STR(SO_PRIORITY), .optsz = sizeof(int) }, /* SO_LINGER - see so_linger test */ - { ARG_STR(SO_BSDCOMPAT) }, - { ARG_STR(SO_REUSEPORT) }, - { ARG_STR(SO_PASSCRED) }, + { ARG_STR(SO_BSDCOMPAT), .optsz = sizeof(int) }, + { ARG_STR(SO_REUSEPORT), .optsz = sizeof(int) }, + { ARG_STR(SO_PASSCRED), .optsz = sizeof(int) }, /* SO_PEERCRED - see so_peercred test */ - { ARG_STR(SO_RCVLOWAT) }, - { ARG_STR(SO_SNDLOWAT) }, + { ARG_STR(SO_RCVLOWAT), .optsz = sizeof(int) }, + { ARG_STR(SO_SNDLOWAT), .optsz = sizeof(int) }, { ARG_STR(SO_RCVTIMEO_OLD), /* TODO */ }, { ARG_STR(SO_SNDTIMEO_OLD), /* TODO */ }, { ARG_STR(SO_SECURITY_AUTHENTICATION) }, { ARG_STR(SO_SECURITY_ENCRYPTION_TRANSPORT) }, { ARG_STR(SO_SECURITY_ENCRYPTION_NETWORK) }, /* TODO: SO_BINDTODEVICE */ - { ARG_STR(SO_DETACH_FILTER) }, + { ARG_STR(SO_DETACH_FILTER), .optsz = sizeof(int) }, { ARG_STR(SO_PEERNAME), /* TODO */ }, - { ARG_STR(SO_TIMESTAMP_OLD) }, - { ARG_STR(SO_ACCEPTCONN) }, + { ARG_STR(SO_TIMESTAMP_OLD), .optsz = sizeof(int) }, + { ARG_STR(SO_ACCEPTCONN), .optsz = sizeof(int) }, { ARG_STR(SO_PEERSEC), /* TODO */ }, - { ARG_STR(SO_SNDBUFFORCE) }, - { ARG_STR(SO_RCVBUFFORCE) }, - { ARG_STR(SO_PASSSEC) }, - { ARG_STR(SO_TIMESTAMPNS_OLD) }, - { ARG_STR(SO_MARK) }, - { ARG_STR(SO_TIMESTAMPING_OLD) }, + { ARG_STR(SO_SNDBUFFORCE), .optsz = sizeof(int) }, + { ARG_STR(SO_RCVBUFFORCE), .optsz = sizeof(int) }, + { ARG_STR(SO_PASSSEC), .optsz = sizeof(int) }, + { ARG_STR(SO_TIMESTAMPNS_OLD), .optsz = sizeof(int) }, + { ARG_STR(SO_MARK), .optsz = sizeof(int) }, + { ARG_STR(SO_TIMESTAMPING_OLD), .optsz = sizeof(int) }, { ARG_STR(SO_PROTOCOL), /* TODO */ }, { ARG_STR(SO_DOMAIN), /* TODO */ }, - { ARG_STR(SO_RXQ_OVFL) }, - { ARG_STR(SO_WIFI_STATUS) }, - { ARG_STR(SO_PEEK_OFF) }, - { ARG_STR(SO_NOFCS) }, - { ARG_STR(SO_LOCK_FILTER) }, - { ARG_STR(SO_SELECT_ERR_QUEUE) }, - { ARG_STR(SO_BUSY_POLL) }, + { ARG_STR(SO_RXQ_OVFL), .optsz = sizeof(int) }, + { ARG_STR(SO_WIFI_STATUS), .optsz = sizeof(int) }, + { ARG_STR(SO_PEEK_OFF), .optsz = sizeof(int) }, + { ARG_STR(SO_NOFCS), .optsz = sizeof(int) }, + { ARG_STR(SO_LOCK_FILTER), .optsz = sizeof(int) }, + { ARG_STR(SO_SELECT_ERR_QUEUE), .optsz = sizeof(int) }, + { ARG_STR(SO_BUSY_POLL), .optsz = sizeof(int) }, { ARG_STR(SO_MAX_PACING_RATE), /* TODO */ }, { ARG_STR(SO_BPF_EXTENSIONS), /* TODO */ }, - { ARG_STR(SO_INCOMING_CPU) }, + { ARG_STR(SO_INCOMING_CPU), .optsz = sizeof(int) }, { ARG_STR(SO_ATTACH_BPF), /* TODO */ }, /* SO_ATTACH_REUSEPORT_CBPF - see sock_filter-v test */ { ARG_STR(SO_ATTACH_REUSEPORT_EBPF), /* TODO */ }, - { ARG_STR(SO_CNX_ADVICE) }, + { ARG_STR(SO_CNX_ADVICE), .optsz = sizeof(int) }, { ARG_STR(SO_MEMINFO), /* TODO */ }, - { ARG_STR(SO_INCOMING_NAPI_ID) }, + { ARG_STR(SO_INCOMING_NAPI_ID), .optsz = sizeof(int) }, { ARG_STR(SO_COOKIE), /* TODO */ }, { ARG_STR(SO_PEERGROUPS), /* TODO */ }, - { ARG_STR(SO_ZEROCOPY) }, + { ARG_STR(SO_ZEROCOPY), .optsz = sizeof(int) }, { ARG_STR(SO_TXTIME), /* TODO */ }, { ARG_STR(SO_BINDTOIFINDEX), /* TODO */ }, - { ARG_STR(SO_TIMESTAMP_NEW) }, - { ARG_STR(SO_TIMESTAMPNS_NEW) }, - { ARG_STR(SO_TIMESTAMPING_NEW) }, + { ARG_STR(SO_TIMESTAMP_NEW), .optsz = sizeof(int) }, + { ARG_STR(SO_TIMESTAMPNS_NEW), .optsz = sizeof(int) }, + { ARG_STR(SO_TIMESTAMPING_NEW), .optsz = sizeof(int) }, { ARG_STR(SO_RCVTIMEO_NEW), /* TODO */ }, { ARG_STR(SO_SNDTIMEO_NEW), /* TODO */ }, - { ARG_STR(SO_DETACH_REUSEPORT_BPF) }, - { ARG_STR(SO_PREFER_BUSY_POLL) }, - { ARG_STR(SO_BUSY_POLL_BUDGET) }, + { ARG_STR(SO_DETACH_REUSEPORT_BPF), .optsz = sizeof(int) }, + { ARG_STR(SO_PREFER_BUSY_POLL), .optsz = sizeof(int) }, + { ARG_STR(SO_BUSY_POLL_BUDGET), .optsz = sizeof(int) }, { ARG_STR(SO_NETNS_COOKIE), /* TODO */ }, { ARG_STR(SO_BUF_LOCK), /* TODO */ }, - { ARG_STR(SO_RESERVE_MEM) }, + { ARG_STR(SO_RESERVE_MEM), .optsz = sizeof(int) }, { 74, NULL }, { -1, NULL }, }; |