]> granicus.if.org Git - strace/commitdiff
socketutils: add more IP/IPv6 transport protocols
authorEugene Syromyatnikov <evgsyr@gmail.com>
Mon, 27 Aug 2018 10:46:34 +0000 (12:46 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 2 Sep 2018 17:44:26 +0000 (17:44 +0000)
* defs.h (sock_proto): Add SOCK_PROTO_UDPLITE, SOCK_PROTO_DCCP,
SOCK_PROTO_SCTP, SOCK_PROTO_L2TP_IP, SOCK_PROTO_PING, SOCK_PROTO_RAW,
SOCK_PROTO_UDPLITEv6, SOCK_PROTO_DCCPv6, SOCK_PROTO_L2TP_IPv6,
SOCK_PROTO_SCTPv6, SOCK_PROTO_PINGv6, and SOCK_PROTO_RAWv6.
* socketutils.c: Include "xlat/inet_protocols.h" in XLAT_MACROS_ONLY
mode.
(protocols): Add protocol descriptions for them.

defs.h
socketutils.c

diff --git a/defs.h b/defs.h
index 78e2d9a0d40f8c81dd844be24d26ff803cc66987..22ab1970ac4e7e08d87d5e56065cdc83cd91cf38 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -379,9 +379,21 @@ enum sock_proto {
        SOCK_PROTO_UNIX,
        SOCK_PROTO_TCP,
        SOCK_PROTO_UDP,
+       SOCK_PROTO_UDPLITE,
+       SOCK_PROTO_DCCP,
+       SOCK_PROTO_SCTP,
+       SOCK_PROTO_L2TP_IP,
+       SOCK_PROTO_PING,
+       SOCK_PROTO_RAW,
        SOCK_PROTO_TCPv6,
        SOCK_PROTO_UDPv6,
-       SOCK_PROTO_NETLINK
+       SOCK_PROTO_UDPLITEv6,
+       SOCK_PROTO_DCCPv6,
+       SOCK_PROTO_L2TP_IPv6,
+       SOCK_PROTO_SCTPv6,
+       SOCK_PROTO_PINGv6,
+       SOCK_PROTO_RAWv6,
+       SOCK_PROTO_NETLINK,
 };
 extern enum sock_proto get_proto_by_name(const char *);
 
index ff02c2fb366b075a2cea80070bd42de571de429f..dd8451e44f4b8eb7983dbfad38b4163a15447165 100644 (file)
 
 #include "xstring.h"
 
+#define XLAT_MACROS_ONLY
+# include "xlat/inet_protocols.h"
+#undef XLAT_MACROS_ONLY
+
 typedef struct {
        unsigned long inode;
        char *details;
@@ -451,14 +455,43 @@ static const struct {
        int proto;
 } protocols[] = {
        [SOCK_PROTO_UNIX]       = { "UNIX",     unix_get,       AF_UNIX},
+       /*
+        * inet_diag handlers are currently implemented only for TCP,
+        * UDP(lite), SCTP, RAW, and DCCP, but we try to resolve it for all
+        * protocols anyway, just in case.
+        */
        [SOCK_PROTO_TCP]        =
                { "TCP",        inet_get, AF_INET,  IPPROTO_TCP },
        [SOCK_PROTO_UDP]        =
                { "UDP",        inet_get, AF_INET,  IPPROTO_UDP },
+       [SOCK_PROTO_UDPLITE]    =
+               { "UDPLITE",    inet_get, AF_INET,  IPPROTO_UDPLITE },
+       [SOCK_PROTO_DCCP]       =
+               { "DCCP",       inet_get, AF_INET,  IPPROTO_DCCP },
+       [SOCK_PROTO_SCTP]       =
+               { "SCTP",       inet_get, AF_INET,  IPPROTO_SCTP },
+       [SOCK_PROTO_L2TP_IP]    =
+               { "L2TP/IP",    inet_get, AF_INET,  IPPROTO_L2TP },
+       [SOCK_PROTO_PING]       =
+               { "PING",       inet_get, AF_INET,  IPPROTO_ICMP },
+       [SOCK_PROTO_RAW]        =
+               { "RAW",        inet_get, AF_INET,  IPPROTO_RAW },
        [SOCK_PROTO_TCPv6]      =
                { "TCPv6",      inet_get, AF_INET6, IPPROTO_TCP },
        [SOCK_PROTO_UDPv6]      =
                { "UDPv6",      inet_get, AF_INET6, IPPROTO_UDP },
+       [SOCK_PROTO_UDPLITEv6]  =
+               { "UDPLITEv6",  inet_get, AF_INET6, IPPROTO_UDPLITE },
+       [SOCK_PROTO_DCCPv6]     =
+               { "DCCPv6",     inet_get, AF_INET6, IPPROTO_DCCP },
+       [SOCK_PROTO_SCTPv6]     =
+               { "SCTPv6",     inet_get, AF_INET6, IPPROTO_SCTP },
+       [SOCK_PROTO_L2TP_IPv6]  =
+               { "L2TP/IPv6",  inet_get, AF_INET6, IPPROTO_L2TP },
+       [SOCK_PROTO_PINGv6]     =
+               { "PINGv6",     inet_get, AF_INET6, IPPROTO_ICMP },
+       [SOCK_PROTO_RAWv6]      =
+               { "RAWv6",      inet_get, AF_INET6, IPPROTO_RAW },
        [SOCK_PROTO_NETLINK]    = { "NETLINK",  netlink_get,    AF_NETLINK },
 };