From: Eric Dumazet Date: Fri, 29 May 2015 12:37:49 +0000 (-0700) Subject: ss: do not bindly dump two families X-Git-Tag: v4.1.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=518af1e0b14cdc8eeac4db313767f5d1dfd1fce1;p=thirdparty%2Fiproute2.git ss: do not bindly dump two families ss currently dumps IPv4 sockets, then IPv6 sockets from the kernel, even if -4 or -6 option was given. Filtering in user space then has to drop all sockets of wrong family. Such a waste of time... Before : $ time ss -tn -4 | wc -l 251659 real 0m1.241s user 0m0.423s sys 0m0.806s After: $ time ss -tn -4 | wc -l 251672 real 0m0.779s user 0m0.412s sys 0m0.386s Signed-off-by: Eric Dumazet --- diff --git a/misc/ss.c b/misc/ss.c index 68bffe289..1f4a30f7b 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -2199,6 +2199,8 @@ static int inet_show_netlink(struct filter *f, FILE *dump_fp, int protocol) return -1; rth.dump = MAGIC_SEQ; rth.dump_fp = dump_fp; + if (preferred_family == PF_INET6) + family = PF_INET6; again: if ((err = sockdiag_send(family, rth.fd, protocol, f))) @@ -2211,7 +2213,7 @@ again: } goto Exit; } - if (family == PF_INET) { + if (family == PF_INET && preferred_family != PF_INET) { family = PF_INET6; goto again; }