decode some {g,s}etsockopt*.
This commit is contained in:
parent
b385f2f99e
commit
b0c85e5803
|
@ -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
|
* Copyright (c) 1988, 1993
|
||||||
|
@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1993\
|
||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
|
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
|
||||||
#else
|
#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
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
|
@ -69,11 +69,16 @@ __RCSID("$NetBSD: kdump.c,v 1.142 2024/02/11 01:08:57 kre Exp $");
|
||||||
#include <vis.h>
|
#include <vis.h>
|
||||||
#include <util.h>
|
#include <util.h>
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
|
||||||
#include "ktrace.h"
|
#include "ktrace.h"
|
||||||
#include "setemul.h"
|
#include "setemul.h"
|
||||||
|
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
|
#define CASERETURN(a) case a: return # a
|
||||||
|
|
||||||
#define TIMESTAMP_NONE 0x0
|
#define TIMESTAMP_NONE 0x0
|
||||||
#define TIMESTAMP_ABSOLUTE 0x1
|
#define TIMESTAMP_ABSOLUTE 0x1
|
||||||
#define TIMESTAMP_ELAPSED 0x2
|
#define TIMESTAMP_ELAPSED 0x2
|
||||||
|
@ -552,23 +557,152 @@ output_long(u_long it, int as_x)
|
||||||
static const char *
|
static const char *
|
||||||
fcntlname(u_long cmd)
|
fcntlname(u_long cmd)
|
||||||
{
|
{
|
||||||
#define FCNTLCASE(a) case a: return # a
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
FCNTLCASE(F_DUPFD);
|
CASERETURN(F_DUPFD);
|
||||||
FCNTLCASE(F_GETFD);
|
CASERETURN(F_GETFD);
|
||||||
FCNTLCASE(F_SETFD);
|
CASERETURN(F_SETFD);
|
||||||
FCNTLCASE(F_GETFL);
|
CASERETURN(F_GETFL);
|
||||||
FCNTLCASE(F_SETFL);
|
CASERETURN(F_SETFL);
|
||||||
FCNTLCASE(F_GETOWN);
|
CASERETURN(F_GETOWN);
|
||||||
FCNTLCASE(F_SETOWN);
|
CASERETURN(F_SETOWN);
|
||||||
FCNTLCASE(F_GETLK);
|
CASERETURN(F_GETLK);
|
||||||
FCNTLCASE(F_SETLK);
|
CASERETURN(F_SETLK);
|
||||||
FCNTLCASE(F_SETLKW);
|
CASERETURN(F_SETLKW);
|
||||||
FCNTLCASE(F_CLOSEM);
|
CASERETURN(F_CLOSEM);
|
||||||
FCNTLCASE(F_MAXFD);
|
CASERETURN(F_MAXFD);
|
||||||
FCNTLCASE(F_DUPFD_CLOEXEC);
|
CASERETURN(F_DUPFD_CLOEXEC);
|
||||||
FCNTLCASE(F_GETNOSIGPIPE);
|
CASERETURN(F_GETNOSIGPIPE);
|
||||||
FCNTLCASE(F_SETNOSIGPIPE);
|
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:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -638,25 +772,24 @@ putprot(int pr)
|
||||||
static const char *
|
static const char *
|
||||||
futex_op_name(u_long op)
|
futex_op_name(u_long op)
|
||||||
{
|
{
|
||||||
#define FUTEXCASE(a) case a: return # a
|
|
||||||
switch (op & FUTEX_CMD_MASK) {
|
switch (op & FUTEX_CMD_MASK) {
|
||||||
FUTEXCASE(FUTEX_WAIT);
|
CASERETURN(FUTEX_WAIT);
|
||||||
FUTEXCASE(FUTEX_WAKE);
|
CASERETURN(FUTEX_WAKE);
|
||||||
FUTEXCASE(FUTEX_FD);
|
CASERETURN(FUTEX_FD);
|
||||||
FUTEXCASE(FUTEX_REQUEUE);
|
CASERETURN(FUTEX_REQUEUE);
|
||||||
FUTEXCASE(FUTEX_CMP_REQUEUE);
|
CASERETURN(FUTEX_CMP_REQUEUE);
|
||||||
FUTEXCASE(FUTEX_WAKE_OP);
|
CASERETURN(FUTEX_WAKE_OP);
|
||||||
FUTEXCASE(FUTEX_LOCK_PI);
|
CASERETURN(FUTEX_LOCK_PI);
|
||||||
FUTEXCASE(FUTEX_UNLOCK_PI);
|
CASERETURN(FUTEX_UNLOCK_PI);
|
||||||
FUTEXCASE(FUTEX_TRYLOCK_PI);
|
CASERETURN(FUTEX_TRYLOCK_PI);
|
||||||
FUTEXCASE(FUTEX_WAIT_BITSET);
|
CASERETURN(FUTEX_WAIT_BITSET);
|
||||||
FUTEXCASE(FUTEX_WAKE_BITSET);
|
CASERETURN(FUTEX_WAKE_BITSET);
|
||||||
FUTEXCASE(FUTEX_WAIT_REQUEUE_PI);
|
CASERETURN(FUTEX_WAIT_REQUEUE_PI);
|
||||||
FUTEXCASE(FUTEX_CMP_REQUEUE_PI);
|
CASERETURN(FUTEX_CMP_REQUEUE_PI);
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#undef FUTEXCASE
|
#undef CASERETURN
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -764,6 +897,49 @@ ktrsyscall(struct ktr_syscall *ktr)
|
||||||
* Native name is "__futex".
|
* Native name is "__futex".
|
||||||
* Both have the same op argument.
|
* 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 ||
|
} else if ((strcmp(sys_name, "futex") == 0 ||
|
||||||
strcmp(sys_name, "__futex") == 0) &&
|
strcmp(sys_name, "__futex") == 0) &&
|
||||||
argcount > 2) {
|
argcount > 2) {
|
||||||
|
|
Loading…
Reference in New Issue