svn commit: r319417 - in stable/11: lib/libsysdecode usr.bin/truss
Michael Tuexen
tuexen at FreeBSD.org
Thu Jun 1 12:33:35 UTC 2017
Author: tuexen
Date: Thu Jun 1 12:33:33 2017
New Revision: 319417
URL: https://svnweb.freebsd.org/changeset/base/319417
Log:
MFC r317730:
Add support for listen() call.
MFC r317731:
Add Socklent for handling args of type socklen_t.
MFC r317732:
Decode the third argument of socket().
MFC r317736:
Add support for [gs]etsockopt().
MFC r317737:
Decode the fourth argument of sendto and recvfrom call.
MFC r317739:
Add support for sendmsg() and recvmsg().
MFC r317747:
Add support for socket option names related to the IPPROTO_SCTP level.
MFC r317748:
Add support for socket option names related to the IPPROTO_IPV6 level.
MFC r317750:
Add support for sctp_generic_sendmsg() and sctp_generic_recvmsg().
MFC r317789:
Add support for socket option names related to the level IPPROTO_UDPLITE.
MFC r318879:
Improve the decoding of the third argument of the socket() call.
Decoding of the third argument depends on the first one. For doing this,
add a corresponding function to libsysdecode.
Thanks to jhb@ for suggesting this.
Added:
stable/11/lib/libsysdecode/sysdecode_socket_protocol.3
- copied unchanged from r318879, head/lib/libsysdecode/sysdecode_socket_protocol.3
Modified:
stable/11/lib/libsysdecode/Makefile
stable/11/lib/libsysdecode/flags.c
stable/11/lib/libsysdecode/mktables
stable/11/lib/libsysdecode/sysdecode.h
stable/11/usr.bin/truss/syscall.h
stable/11/usr.bin/truss/syscalls.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/lib/libsysdecode/Makefile
==============================================================================
--- stable/11/lib/libsysdecode/Makefile Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/lib/libsysdecode/Makefile Thu Jun 1 12:33:33 2017 (r319417)
@@ -22,6 +22,7 @@ MAN= sysdecode.3 \
sysdecode_quotactl_cmd.3 \
sysdecode_sigcode.3 \
sysdecode_sockopt_name.3 \
+ sysdecode_socket_protocol.3 \
sysdecode_syscallnames.3 \
sysdecode_utrace.3
MLINKS= sysdecode_abi_to_freebsd_errno.3 sysdecode_freebsd_to_abi_errno.3
Modified: stable/11/lib/libsysdecode/flags.c
==============================================================================
--- stable/11/lib/libsysdecode/flags.c Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/lib/libsysdecode/flags.c Thu Jun 1 12:33:33 2017 (r319417)
@@ -47,8 +47,10 @@ __FBSDID("$FreeBSD$");
#include <sys/thr.h>
#include <sys/umtx.h>
#include <netinet/in.h>
+#include <netinet/sctp.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
+#include <netinet/udplite.h>
#include <nfsserver/nfs.h>
#include <ufs/ufs/quota.h>
#include <vm/vm.h>
@@ -728,6 +730,19 @@ sysdecode_socketdomain(int domain)
}
const char *
+sysdecode_socket_protocol(int domain, int protocol)
+{
+
+ switch (domain) {
+ case PF_INET:
+ case PF_INET6:
+ return (lookup_value(sockipproto, protocol));
+ default:
+ return (NULL);
+ }
+}
+
+const char *
sysdecode_sockaddr_family(int sa_family)
{
@@ -750,10 +765,16 @@ sysdecode_sockopt_name(int level, int optname)
if (level == IPPROTO_IP)
/* XXX: UNIX domain socket options use a level of 0 also. */
return (lookup_value(sockoptip, optname));
+ if (level == IPPROTO_IPV6)
+ return (lookup_value(sockoptipv6, optname));
+ if (level == IPPROTO_SCTP)
+ return (lookup_value(sockoptsctp, optname));
if (level == IPPROTO_TCP)
return (lookup_value(sockopttcp, optname));
if (level == IPPROTO_UDP)
return (lookup_value(sockoptudp, optname));
+ if (level == IPPROTO_UDPLITE)
+ return (lookup_value(sockoptudplite, optname));
return (NULL);
}
Modified: stable/11/lib/libsysdecode/mktables
==============================================================================
--- stable/11/lib/libsysdecode/mktables Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/lib/libsysdecode/mktables Thu Jun 1 12:33:33 2017 (r319417)
@@ -130,8 +130,11 @@ gen_table "sockfamily" "AF_[[:alnum:]]+[[:space:]
gen_table "sockipproto" "IPPROTO_[[:alnum:]]+[[:space:]]+" "netinet/in.h"
gen_table "sockopt" "SO_[A-Z]+[[:space:]]+0x[0-9]+" "sys/socket.h"
gen_table "sockoptip" "(IP_[[:alnum:]_]+|MCAST_[[:alnum:]_]+_GROUP)[[:space:]]+" "netinet/in.h" "IP_DEFAULT|IP_MIN|IP_MAX|IP_PORTRANGE"
+gen_table "sockoptipv6" "IPV6_[[:alnum:]_]+[[:space:]]+[0-9]+" "netinet6/in6.h" "IPV6_ADDR_|IPV6_TAG_DIRECT|IPV6_OPTIONS|IPV6_RECVOPTS|IPV6_RECVRETOPTS|IPV6_RECVDSTADDR|IPV6_RETOPTS|IPV6_2292|IPV6_RECVRTHDRDSTOPTS|IPV6_REACHCONF|IPV6_PKTOPTIONS"
+gen_table "sockoptsctp" "SCTP_[[:alnum:]_]+[[:space:]]+[0-9]+" "netinet/sctp.h"
gen_table "sockopttcp" "TCP_[[:alnum:]_]+[[:space:]]+[0-9]+" "netinet/tcp.h" "TCP_MIN|TCP_MAX[^S]|TCP_MSS|TCP_[[:alnum:]_]+_MAX"
gen_table "sockoptudp" "UDP_[[:alnum:]]+[[:space:]]+[0-9]+" "netinet/udp.h" "UDP_ENCAP_"
+gen_table "sockoptudplite" "UDPLITE_[[:alnum:]_]+[[:space:]]+[0-9]+" "netinet/udplite.h"
gen_table "socktype" "SOCK_[A-Z]+[[:space:]]+[1-9]+[0-9]*" "sys/socket.h"
gen_table "thrcreateflags" "THR_[A-Z]+[[:space:]]+0x[0-9]+" "sys/thr.h"
gen_table "umtxop" "UMTX_OP_[[:alnum:]_]+[[:space:]]+[0-9]+" "sys/umtx.h"
Modified: stable/11/lib/libsysdecode/sysdecode.h
==============================================================================
--- stable/11/lib/libsysdecode/sysdecode.h Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/lib/libsysdecode/sysdecode.h Thu Jun 1 12:33:33 2017 (r319417)
@@ -99,6 +99,7 @@ const char *sysdecode_sigsegv_code(int _si_code);
const char *sysdecode_sigtrap_code(int _si_code);
const char *sysdecode_sockaddr_family(int _sa_family);
const char *sysdecode_socketdomain(int _domain);
+const char *sysdecode_socket_protocol(int _domain, int _protocol);
bool sysdecode_socket_type(FILE *_fp, int _type, int *_rem);
const char *sysdecode_sockopt_level(int _level);
const char *sysdecode_sockopt_name(int _level, int _optname);
Copied: stable/11/lib/libsysdecode/sysdecode_socket_protocol.3 (from r318879, head/lib/libsysdecode/sysdecode_socket_protocol.3)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/11/lib/libsysdecode/sysdecode_socket_protocol.3 Thu Jun 1 12:33:33 2017 (r319417, copy of r318879, head/lib/libsysdecode/sysdecode_socket_protocol.3)
@@ -0,0 +1,54 @@
+.\"
+.\" Copyright (c) 2016 John Baldwin <jhb at FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd May 25, 2017
+.Dt sysdecode_socket_protocol 3
+.Os
+.Sh NAME
+.Nm sysdecode_socket_protocol
+.Nd lookup name of socket protocol
+.Sh LIBRARY
+.Lb libsysdecode
+.Sh SYNOPSIS
+.In sys/types.h
+.In stdbool.h
+.In sysdecode.h
+.Ft const char *
+.Fn sysdecode_socket_protocol "int domain" "int protocol"
+.Sh DESCRIPTION
+The
+.Fn sysdecode_socket_protocol
+function returns a text description of the protocol passed in the
+.Fa protocol
+argument to
+.Xr socket 2 .
+.Fn sysdecode_socket_protocol
+takes the
+.Fa protocol
+as well as the
+.Fa domain
+to uniquely identify the protocol.
Modified: stable/11/usr.bin/truss/syscall.h
==============================================================================
--- stable/11/usr.bin/truss/syscall.h Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/usr.bin/truss/syscall.h Thu Jun 1 12:33:33 2017 (r319417)
@@ -46,7 +46,8 @@ enum Argtype { None = 1, Hex, Octal, Int, UInt, LongHe
LinuxSockArgs, Umtxop, Atfd, Atflags, Timespec2, Accessmode, Long,
Sysarch, ExecArgs, ExecEnv, PipeFds, QuadHex, Utrace, IntArray, Pipe2,
CapFcntlRights, Fadvice, FileFlags, Flockop, Getfsstatmode, Kldsymcmd,
- Kldunloadflags, Sizet, Madvice,
+ Kldunloadflags, Sizet, Madvice, Socklent, Sockprotocol, Sockoptlevel,
+ Sockoptname, Msgflags,
CloudABIAdvice, CloudABIClockID, ClouduABIFDSFlags,
CloudABIFDStat, CloudABIFileStat, CloudABIFileType,
Modified: stable/11/usr.bin/truss/syscalls.c
==============================================================================
--- stable/11/usr.bin/truss/syscalls.c Thu Jun 1 11:48:01 2017 (r319416)
+++ stable/11/usr.bin/truss/syscalls.c Thu Jun 1 12:33:33 2017 (r319417)
@@ -86,7 +86,7 @@ static struct syscall decoded_syscalls[] = {
{ .name = "access", .ret_type = 1, .nargs = 2,
.args = { { Name | IN, 0 }, { Accessmode, 1 } } },
{ .name = "bind", .ret_type = 1, .nargs = 3,
- .args = { { Int, 0 }, { Sockaddr | IN, 1 }, { Int, 2 } } },
+ .args = { { Int, 0 }, { Sockaddr | IN, 1 }, { Socklent, 2 } } },
{ .name = "bindat", .ret_type = 1, .nargs = 4,
.args = { { Atfd, 0 }, { Int, 1 }, { Sockaddr | IN, 2 },
{ Int, 3 } } },
@@ -114,7 +114,7 @@ static struct syscall decoded_syscalls[] = {
{ .name = "close", .ret_type = 1, .nargs = 1,
.args = { { Int, 0 } } },
{ .name = "connect", .ret_type = 1, .nargs = 3,
- .args = { { Int, 0 }, { Sockaddr | IN, 1 }, { Int, 2 } } },
+ .args = { { Int, 0 }, { Sockaddr | IN, 1 }, { Socklent, 2 } } },
{ .name = "connectat", .ret_type = 1, .nargs = 4,
.args = { { Atfd, 0 }, { Int, 1 }, { Sockaddr | IN, 2 },
{ Int, 3 } } },
@@ -174,6 +174,9 @@ static struct syscall decoded_syscalls[] = {
.args = { { Int, 0 } } },
{ .name = "getsockname", .ret_type = 1, .nargs = 3,
.args = { { Int, 0 }, { Sockaddr | OUT, 1 }, { Ptr | OUT, 2 } } },
+ { .name = "getsockopt", .ret_type = 1, .nargs = 5,
+ .args = { { Int, 0 }, { Sockoptlevel, 1 }, { Sockoptname, 2 },
+ { Ptr | OUT, 3 }, { Ptr | OUT, 4 } } },
{ .name = "gettimeofday", .ret_type = 1, .nargs = 2,
.args = { { Timeval | OUT, 0 }, { Ptr, 1 } } },
{ .name = "ioctl", .ret_type = 1, .nargs = 3,
@@ -212,7 +215,9 @@ static struct syscall decoded_syscalls[] = {
{ .name = "linkat", .ret_type = 1, .nargs = 5,
.args = { { Atfd, 0 }, { Name, 1 }, { Atfd, 2 }, { Name, 3 },
{ Atflags, 4 } } },
- { .name = "lseek", .ret_type = 2, .nargs = 3,
+ { .name = "listen", .ret_type = 1, .nargs = 2,
+ .args = { { Int, 0 }, { Int, 1 } } },
+ { .name = "lseek", .ret_type = 2, .nargs = 3,
.args = { { Int, 0 }, { QuadHex, 1 }, { Whence, 2 } } },
{ .name = "lstat", .ret_type = 1, .nargs = 2,
.args = { { Name | IN, 0 }, { Stat | OUT, 1 } } },
@@ -273,8 +278,11 @@ static struct syscall decoded_syscalls[] = {
.args = { { Atfd, 0 }, { Name, 1 }, { Readlinkres | OUT, 2 },
{ Sizet, 3 } } },
{ .name = "recvfrom", .ret_type = 1, .nargs = 6,
- .args = { { Int, 0 }, { BinString | OUT, 1 }, { Sizet, 2 }, { Hex, 3 },
- { Sockaddr | OUT, 4 }, { Ptr | OUT, 5 } } },
+ .args = { { Int, 0 }, { BinString | OUT, 1 }, { Sizet, 2 },
+ { Msgflags, 3 }, { Sockaddr | OUT, 4 },
+ { Ptr | OUT, 5 } } },
+ { .name = "recvmsg", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Ptr, 1 }, { Msgflags, 2 } } },
{ .name = "rename", .ret_type = 1, .nargs = 2,
.args = { { Name, 0 }, { Name, 1 } } },
{ .name = "renameat", .ret_type = 1, .nargs = 4,
@@ -283,16 +291,30 @@ static struct syscall decoded_syscalls[] = {
.args = { { Rforkflags, 0 } } },
{ .name = "rmdir", .ret_type = 1, .nargs = 1,
.args = { { Name, 0 } } },
+ { .name = "sctp_generic_recvmsg", .ret_type = 1, .nargs = 7,
+ .args = { { Int, 0 }, { Ptr | IN, 1 }, { Int, 2 },
+ { Sockaddr | OUT, 3 }, { Ptr | OUT, 4 }, { Ptr | OUT, 5 },
+ { Ptr | OUT, 6 } } },
+ { .name = "sctp_generic_sendmsg", .ret_type = 1, .nargs = 7,
+ .args = { { Int, 0 }, { BinString | IN, 1 }, { Int, 2 },
+ { Sockaddr | IN, 3 }, { Socklent, 4 }, { Ptr | IN, 5 },
+ { Msgflags, 6 } } },
{ .name = "select", .ret_type = 1, .nargs = 5,
.args = { { Int, 0 }, { Fd_set, 1 }, { Fd_set, 2 }, { Fd_set, 3 },
{ Timeval, 4 } } },
+ { .name = "sendmsg", .ret_type = 1, .nargs = 3,
+ .args = { { Int, 0 }, { Ptr, 1 }, { Msgflags, 2 } } },
{ .name = "sendto", .ret_type = 1, .nargs = 6,
- .args = { { Int, 0 }, { BinString | IN, 1 }, { Sizet, 2 }, { Hex, 3 },
- { Sockaddr | IN, 4 }, { Int | IN, 5 } } },
+ .args = { { Int, 0 }, { BinString | IN, 1 }, { Sizet, 2 },
+ { Msgflags, 3 }, { Sockaddr | IN, 4 },
+ { Socklent | IN, 5 } } },
{ .name = "setitimer", .ret_type = 1, .nargs = 3,
.args = { { Int, 0 }, { Itimerval, 1 }, { Itimerval | OUT, 2 } } },
{ .name = "setrlimit", .ret_type = 1, .nargs = 2,
.args = { { Resource, 0 }, { Rlimit | IN, 1 } } },
+ { .name = "setsockopt", .ret_type = 1, .nargs = 5,
+ .args = { { Int, 0 }, { Sockoptlevel, 1 }, { Sockoptname, 2 },
+ { Ptr | IN, 3 }, { Socklent, 4 } } },
{ .name = "shutdown", .ret_type = 1, .nargs = 2,
.args = { { Int, 0 }, { Shutdown, 1 } } },
{ .name = "sigaction", .ret_type = 1, .nargs = 3,
@@ -315,7 +337,7 @@ static struct syscall decoded_syscalls[] = {
{ .name = "sigwaitinfo", .ret_type = 1, .nargs = 2,
.args = { { Sigset | IN, 0 }, { Ptr, 1 } } },
{ .name = "socket", .ret_type = 1, .nargs = 3,
- .args = { { Sockdomain, 0 }, { Socktype, 1 }, { Int, 2 } } },
+ .args = { { Sockdomain, 0 }, { Socktype, 1 }, { Sockprotocol, 2 } } },
{ .name = "stat", .ret_type = 1, .nargs = 2,
.args = { { Name | IN, 0 }, { Stat | OUT, 1 } } },
{ .name = "statfs", .ret_type = 1, .nargs = 2,
@@ -1911,6 +1933,48 @@ print_arg(struct syscall_args *sc, unsigned long *args
break;
case Madvice:
print_integer_arg(sysdecode_madvice, fp, args[sc->offset]);
+ break;
+ case Socklent:
+ fprintf(fp, "%u", (socklen_t)args[sc->offset]);
+ break;
+ case Sockprotocol: {
+ const char *temp;
+ int domain, protocol;
+
+ domain = args[sc->offset - 2];
+ protocol = args[sc->offset];
+ if (protocol == 0) {
+ fputs("0", fp);
+ } else {
+ temp = sysdecode_socket_protocol(domain, protocol);
+ if (temp) {
+ fputs(temp, fp);
+ } else {
+ fprintf(fp, "%d", protocol);
+ }
+ }
+ break;
+ }
+ case Sockoptlevel:
+ print_integer_arg(sysdecode_sockopt_level, fp,
+ args[sc->offset]);
+ break;
+ case Sockoptname: {
+ const char *temp;
+ int level, name;
+
+ level = args[sc->offset - 1];
+ name = args[sc->offset];
+ temp = sysdecode_sockopt_name(level, name);
+ if (temp) {
+ fputs(temp, fp);
+ } else {
+ fprintf(fp, "%d", name);
+ }
+ break;
+ }
+ case Msgflags:
+ print_mask_arg(sysdecode_msg_flags, fp, args[sc->offset]);
break;
case CloudABIAdvice:
More information about the svn-src-stable
mailing list