summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2022-07-28 18:36:26 +0200
committerDmitry V. Levin <ldv@strace.io>2022-07-31 21:03:01 +0000
commit1db1753842a864a1c27dc68793732a5304b89b95 (patch)
tree5ddbbd56889739f028a7f36ab6d3d2e51f7511af
parentefc8bd8792fb574e720526db924bff4477b8534d (diff)
downloadstrace-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.c98
-rw-r--r--tests/sockopt-sol_socket.c84
2 files changed, 140 insertions, 42 deletions
diff --git a/src/net.c b/src/net.c
index 8bdf26d59..d071c192d 100644
--- a/src/net.c
+++ b/src/net.c
@@ -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 },
};