From 235c4453471a90017bac632462c7a208ba7573e8 Mon Sep 17 00:00:00 2001 From: Nikolay Aleksandrov Date: Wed, 15 Jul 2015 05:50:42 -0700 Subject: [PATCH] ss: fix display of raw sockets After commit 8250bc9ff4e5 ("ss: Unify inet sockets output") raw sockets are displayed as udp because dgram_show_line() is used for both and thus IPPROTO_UDP is used for both so proto_name() returns "udp". Fix this by checking dg_proto which is set according to the caller of dgram_show_line(). Reported-by: Miha Marolt Signed-off-by: Nikolay Aleksandrov --- misc/ss.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/misc/ss.c b/misc/ss.c index 03f92fa6..6abd1d12 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -1552,6 +1552,8 @@ out: static char *proto_name(int protocol) { switch (protocol) { + case 0: + return "raw"; case IPPROTO_UDP: return "udp"; case IPPROTO_TCP: @@ -2416,7 +2418,7 @@ static int dgram_show_line(char *line, const struct filter *f, int family) if (n < 9) opt[0] = 0; - inet_stats_print(&s, IPPROTO_UDP); + inet_stats_print(&s, dg_proto == UDP_PROTO ? IPPROTO_UDP : 0); if (show_details && opt[0]) printf(" opt:\"%s\"", opt);