From 54fc755c56db517e911717fe40e995de5467adbb Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov <evgsyr@gmail.com> Date: Mon, 27 Aug 2018 12:46:34 +0200 Subject: [PATCH] socketutils: add more IP/IPv6 transport protocols * 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 | 14 +++++++++++++- socketutils.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/defs.h b/defs.h index 78e2d9a0..22ab1970 100644 --- 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 *); diff --git a/socketutils.c b/socketutils.c index ff02c2fb..dd8451e4 100644 --- a/socketutils.c +++ b/socketutils.c @@ -48,6 +48,10 @@ #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 }, };