From: Ivan Delalande Date: Fri, 6 Oct 2017 23:48:20 +0000 (-0700) Subject: ss: print MD5 signature keys configured on TCP sockets X-Git-Tag: v4.16.0~174^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da9cc6ab90186e5c1b6dd1d194c18c967e1a7869;p=thirdparty%2Fiproute2.git ss: print MD5 signature keys configured on TCP sockets These keys are reported by kernel 4.14 and later under the INET_DIAG_MD5SIG attribute, when INET_DIAG_INFO is requested (ss -i) and we have CAP_NET_ADMIN. The additional output looks like: md5keys:fe80::/64=signing_key,10.1.2.0/24=foobar,::1/128=Test Signed-off-by: Ivan Delalande --- diff --git a/misc/ss.c b/misc/ss.c index dd8dfaa4e..09bff8a7e 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -2153,6 +2153,16 @@ static void print_skmeminfo(struct rtattr *tb[], int attrtype) printf(")"); } +static void print_md5sig(struct tcp_diag_md5sig *sig) +{ + printf("%s/%d=", + format_host(sig->tcpm_family, + sig->tcpm_family == AF_INET6 ? 16 : 4, + &sig->tcpm_addr), + sig->tcpm_prefixlen); + print_escape_buf(sig->tcpm_key, sig->tcpm_keylen, " ,"); +} + #define TCPI_HAS_OPT(info, opt) !!(info->tcpi_options & (opt)) static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r, @@ -2289,6 +2299,17 @@ static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r, free(s.dctcp); free(s.bbr_info); } + if (tb[INET_DIAG_MD5SIG]) { + struct tcp_diag_md5sig *sig = RTA_DATA(tb[INET_DIAG_MD5SIG]); + int len = RTA_PAYLOAD(tb[INET_DIAG_MD5SIG]); + + printf(" md5keys:"); + print_md5sig(sig++); + for (len -= sizeof(*sig); len > 0; len -= sizeof(*sig)) { + printf(","); + print_md5sig(sig++); + } + } } static const char *format_host_sa(struct sockaddr_storage *sa)