summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authortuexen <tuexen@FreeBSD.org>2017-06-01 12:33:33 +0000
committertuexen <tuexen@FreeBSD.org>2017-06-01 12:33:33 +0000
commitac471f3f8b4303115a2813182e87e27d00aff4d5 (patch)
treeedebb4d9e8e5802e5926227ddb916b05193e2769 /lib
parentaae59ee4e4b5e9565344c36b9a8d18c6d9982ae7 (diff)
downloadFreeBSD-src-ac471f3f8b4303115a2813182e87e27d00aff4d5.zip
FreeBSD-src-ac471f3f8b4303115a2813182e87e27d00aff4d5.tar.gz
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/libsysdecode/Makefile1
-rw-r--r--lib/libsysdecode/flags.c21
-rw-r--r--lib/libsysdecode/mktables3
-rw-r--r--lib/libsysdecode/sysdecode.h1
-rw-r--r--lib/libsysdecode/sysdecode_socket_protocol.354
5 files changed, 80 insertions, 0 deletions
diff --git a/lib/libsysdecode/Makefile b/lib/libsysdecode/Makefile
index bde9460..0820a20 100644
--- a/lib/libsysdecode/Makefile
+++ b/lib/libsysdecode/Makefile
@@ -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
diff --git a/lib/libsysdecode/flags.c b/lib/libsysdecode/flags.c
index b4749bf..ea477b0 100644
--- a/lib/libsysdecode/flags.c
+++ b/lib/libsysdecode/flags.c
@@ -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);
}
diff --git a/lib/libsysdecode/mktables b/lib/libsysdecode/mktables
index 101b4f8..317bf34 100644
--- a/lib/libsysdecode/mktables
+++ b/lib/libsysdecode/mktables
@@ -130,8 +130,11 @@ gen_table "sockfamily" "AF_[[:alnum:]]+[[:space:]]+" "sys/
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"
diff --git a/lib/libsysdecode/sysdecode.h b/lib/libsysdecode/sysdecode.h
index f8d05be..03c12a5 100644
--- a/lib/libsysdecode/sysdecode.h
+++ b/lib/libsysdecode/sysdecode.h
@@ -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);
diff --git a/lib/libsysdecode/sysdecode_socket_protocol.3 b/lib/libsysdecode/sysdecode_socket_protocol.3
new file mode 100644
index 0000000..66b92e5
--- /dev/null
+++ b/lib/libsysdecode/sysdecode_socket_protocol.3
@@ -0,0 +1,54 @@
+.\"
+.\" Copyright (c) 2016 John Baldwin <jhb@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.
OpenPOWER on IntegriCloud