Module Name: src
Committed By: christos
Date: Sun Mar 10 17:08:31 UTC 2024
Modified Files:
src/usr.bin/kdump: kdump.c
Log Message:
decode some {g,s}etsockopt*.
To generate a diff of this commit:
cvs rdiff -u -r1.142 -r1.143 src/usr.bin/kdump/kdump.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/kdump/kdump.c
diff -u src/usr.bin/kdump/kdump.c:1.142 src/usr.bin/kdump/kdump.c:1.143
--- src/usr.bin/kdump/kdump.c:1.142 Sat Feb 10 20:08:57 2024
+++ src/usr.bin/kdump/kdump.c Sun Mar 10 13:08:31 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: kdump.c,v 1.142 2024/02/11 01:08:57 kre Exp $ */
+/* $NetBSD: kdump.c,v 1.143 2024/03/10 17:08:31 christos Exp $ */
/*-
* Copyright (c) 1988, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 19
#if 0
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: kdump.c,v 1.142 2024/02/11 01:08:57 kre Exp $");
+__RCSID("$NetBSD: kdump.c,v 1.143 2024/03/10 17:08:31 christos Exp $");
#endif
#endif /* not lint */
@@ -69,11 +69,16 @@ __RCSID("$NetBSD: kdump.c,v 1.142 2024/0
#include <vis.h>
#include <util.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
#include "ktrace.h"
#include "setemul.h"
#include <sys/syscall.h>
+#define CASERETURN(a) case a: return # a
+
#define TIMESTAMP_NONE 0x0
#define TIMESTAMP_ABSOLUTE 0x1
#define TIMESTAMP_ELAPSED 0x2
@@ -552,23 +557,152 @@ output_long(u_long it, int as_x)
static const char *
fcntlname(u_long cmd)
{
-#define FCNTLCASE(a) case a: return # a
switch (cmd) {
- FCNTLCASE(F_DUPFD);
- FCNTLCASE(F_GETFD);
- FCNTLCASE(F_SETFD);
- FCNTLCASE(F_GETFL);
- FCNTLCASE(F_SETFL);
- FCNTLCASE(F_GETOWN);
- FCNTLCASE(F_SETOWN);
- FCNTLCASE(F_GETLK);
- FCNTLCASE(F_SETLK);
- FCNTLCASE(F_SETLKW);
- FCNTLCASE(F_CLOSEM);
- FCNTLCASE(F_MAXFD);
- FCNTLCASE(F_DUPFD_CLOEXEC);
- FCNTLCASE(F_GETNOSIGPIPE);
- FCNTLCASE(F_SETNOSIGPIPE);
+ CASERETURN(F_DUPFD);
+ CASERETURN(F_GETFD);
+ CASERETURN(F_SETFD);
+ CASERETURN(F_GETFL);
+ CASERETURN(F_SETFL);
+ CASERETURN(F_GETOWN);
+ CASERETURN(F_SETOWN);
+ CASERETURN(F_GETLK);
+ CASERETURN(F_SETLK);
+ CASERETURN(F_SETLKW);
+ CASERETURN(F_CLOSEM);
+ CASERETURN(F_MAXFD);
+ CASERETURN(F_DUPFD_CLOEXEC);
+ CASERETURN(F_GETNOSIGPIPE);
+ CASERETURN(F_SETNOSIGPIPE);
+ default:
+ return NULL;
+ }
+}
+
+static const char *
+sockproto(register_t proto)
+{
+ switch (proto) {
+ CASERETURN(IPPROTO_IP);
+ CASERETURN(IPPROTO_ICMP);
+ CASERETURN(IPPROTO_IGMP);
+ CASERETURN(IPPROTO_GGP);
+// CASERETURN(IPPROTO_IPV4);
+ CASERETURN(IPPROTO_IPIP);
+ CASERETURN(IPPROTO_TCP);
+ CASERETURN(IPPROTO_EGP);
+ CASERETURN(IPPROTO_PUP);
+ CASERETURN(IPPROTO_UDP);
+ CASERETURN(IPPROTO_IDP);
+ CASERETURN(IPPROTO_TP);
+ CASERETURN(IPPROTO_DCCP);
+ CASERETURN(IPPROTO_IPV6);
+ CASERETURN(IPPROTO_ROUTING);
+ CASERETURN(IPPROTO_FRAGMENT);
+ CASERETURN(IPPROTO_RSVP);
+ CASERETURN(IPPROTO_GRE);
+ CASERETURN(IPPROTO_ESP);
+ CASERETURN(IPPROTO_AH);
+ CASERETURN(IPPROTO_MOBILE);
+// CASERETURN(IPPROTO_IPV6_ICMP);
+ CASERETURN(IPPROTO_ICMPV6);
+ CASERETURN(IPPROTO_NONE);
+ CASERETURN(IPPROTO_DSTOPTS);
+ CASERETURN(IPPROTO_EON);
+ CASERETURN(IPPROTO_ETHERIP);
+ CASERETURN(IPPROTO_ENCAP);
+ CASERETURN(IPPROTO_PIM);
+ CASERETURN(IPPROTO_IPCOMP);
+ CASERETURN(IPPROTO_VRRP);
+// CASERETURN(IPPROTO_CARP);
+ CASERETURN(IPPROTO_L2TP);
+ CASERETURN(IPPROTO_SCTP);
+ CASERETURN(IPPROTO_PFSYNC);
+ CASERETURN(IPPROTO_RAW);
+ CASERETURN(IPPROTO_MAX);
+ CASERETURN(IPPROTO_DONE);
+ CASERETURN(SOL_SOCKET);
+ default:
+ return NULL;
+ }
+}
+
+static const char *
+sockoptname(register_t optname)
+{
+ switch (optname) {
+ CASERETURN(SO_ACCEPTCONN);
+ CASERETURN(SO_ACCEPTFILTER);
+ CASERETURN(SO_BROADCAST);
+ CASERETURN(SO_DEBUG);
+ CASERETURN(SO_DONTROUTE);
+ CASERETURN(SO_ERROR);
+ CASERETURN(SO_KEEPALIVE);
+ CASERETURN(SO_LINGER);
+ CASERETURN(SO_NOHEADER);
+ CASERETURN(SO_NOSIGPIPE);
+ CASERETURN(SO_OOBINLINE);
+ CASERETURN(SO_OVERFLOWED);
+ CASERETURN(SO_RCVBUF);
+ CASERETURN(SO_RCVLOWAT);
+ CASERETURN(SO_RCVTIMEO);
+ CASERETURN(SO_RERROR);
+ CASERETURN(SO_REUSEADDR);
+ CASERETURN(SO_REUSEPORT);
+ CASERETURN(SO_SNDBUF);
+ CASERETURN(SO_SNDLOWAT);
+ CASERETURN(SO_SNDTIMEO);
+ CASERETURN(SO_TIMESTAMP);
+ CASERETURN(SO_TYPE);
+ CASERETURN(SO_USELOOPBACK);
+ default:
+ return NULL;
+ }
+}
+
+static const char *
+tcpoptname(register_t optname)
+{
+ switch (optname) {
+ CASERETURN(TCP_NODELAY);
+ CASERETURN(TCP_MAXSEG);
+ CASERETURN(TCP_MD5SIG);
+ CASERETURN(TCP_KEEPIDLE);
+ CASERETURN(TCP_KEEPINTVL);
+ CASERETURN(TCP_KEEPCNT);
+ CASERETURN(TCP_KEEPINIT);
+ CASERETURN(TCP_INFO);
+ default:
+ return NULL;
+ }
+}
+
+static const char *
+ipoptname(register_t optname)
+{
+ switch (optname) {
+ CASERETURN(IP_OPTIONS);
+ CASERETURN(IP_HDRINCL);
+ CASERETURN(IP_TOS);
+ CASERETURN(IP_TTL);
+ CASERETURN(IP_RECVOPTS);
+ CASERETURN(IP_RECVRETOPTS);
+ CASERETURN(IP_RECVDSTADDR);
+ CASERETURN(IP_RETOPTS);
+ CASERETURN(IP_MULTICAST_IF);
+ CASERETURN(IP_MULTICAST_TTL);
+ CASERETURN(IP_MULTICAST_LOOP);
+ CASERETURN(IP_ADD_MEMBERSHIP);
+ CASERETURN(IP_DROP_MEMBERSHIP);
+ CASERETURN(IP_PORTALGO);
+ CASERETURN(IP_PORTRANGE);
+ CASERETURN(IP_RECVIF);
+ CASERETURN(IP_ERRORMTU);
+ CASERETURN(IP_IPSEC_POLICY);
+ CASERETURN(IP_RECVTTL);
+ CASERETURN(IP_MINTTL);
+ CASERETURN(IP_PKTINFO);
+ CASERETURN(IP_RECVPKTINFO);
+ CASERETURN(IP_BINDANY);
default:
return NULL;
}
@@ -638,25 +772,24 @@ putprot(int pr)
static const char *
futex_op_name(u_long op)
{
-#define FUTEXCASE(a) case a: return # a
switch (op & FUTEX_CMD_MASK) {
- FUTEXCASE(FUTEX_WAIT);
- FUTEXCASE(FUTEX_WAKE);
- FUTEXCASE(FUTEX_FD);
- FUTEXCASE(FUTEX_REQUEUE);
- FUTEXCASE(FUTEX_CMP_REQUEUE);
- FUTEXCASE(FUTEX_WAKE_OP);
- FUTEXCASE(FUTEX_LOCK_PI);
- FUTEXCASE(FUTEX_UNLOCK_PI);
- FUTEXCASE(FUTEX_TRYLOCK_PI);
- FUTEXCASE(FUTEX_WAIT_BITSET);
- FUTEXCASE(FUTEX_WAKE_BITSET);
- FUTEXCASE(FUTEX_WAIT_REQUEUE_PI);
- FUTEXCASE(FUTEX_CMP_REQUEUE_PI);
+ CASERETURN(FUTEX_WAIT);
+ CASERETURN(FUTEX_WAKE);
+ CASERETURN(FUTEX_FD);
+ CASERETURN(FUTEX_REQUEUE);
+ CASERETURN(FUTEX_CMP_REQUEUE);
+ CASERETURN(FUTEX_WAKE_OP);
+ CASERETURN(FUTEX_LOCK_PI);
+ CASERETURN(FUTEX_UNLOCK_PI);
+ CASERETURN(FUTEX_TRYLOCK_PI);
+ CASERETURN(FUTEX_WAIT_BITSET);
+ CASERETURN(FUTEX_WAKE_BITSET);
+ CASERETURN(FUTEX_WAIT_REQUEUE_PI);
+ CASERETURN(FUTEX_CMP_REQUEUE_PI);
default:
return NULL;
}
-#undef FUTEXCASE
+#undef CASERETURN
}
static void
@@ -764,6 +897,49 @@ ktrsyscall(struct ktr_syscall *ktr)
* Native name is "__futex".
* Both have the same op argument.
*/
+ } else if ((strcmp(sys_name, "setsockopt") == 0 ||
+ strcmp(sys_name, "getsockopt") == 0 ||
+ strcmp(sys_name, "getsockopt2") == 0) && argcount >= 3) {
+ (void)putchar('(');
+ output_long((long)*ap, !(decimal || small(*ap)));
+ ap++;
+ argcount--;
+ register_t level = *ap;
+ fprintf(stderr, "level=%jx\n", (intmax_t)level);
+ if ((cp = sockproto(level)) != NULL) {
+ (void)printf(",%s", cp);
+ } else {
+ output_long((long)*ap,
+ !(decimal || small(*ap)));
+ }
+ ap++;
+ argcount--;
+ const char *(*f)(register_t);
+ switch (level) {
+ case SOL_SOCKET:
+ f = sockoptname;
+ break;
+ case IPPROTO_IP:
+ f = ipoptname;
+ break;
+ case IPPROTO_TCP:
+ f = tcpoptname;
+ break;
+ default:
+ f = NULL;
+ break;
+ }
+
+ if (f && (cp = (*f)(*ap)) != NULL)
+ (void)printf(",%s", cp);
+ else {
+ (void)putchar(',');
+ output_long((long)*ap,
+ !(decimal || small(*ap)));
+ }
+ ap++;
+ argcount--;
+ c = ',';
} else if ((strcmp(sys_name, "futex") == 0 ||
strcmp(sys_name, "__futex") == 0) &&
argcount > 2) {