From: Konstantin Khlebnikov Date: Wed, 13 Feb 2019 12:39:01 +0000 (+0300) Subject: ss: add option --tos for requesting ipv4 tos and ipv6 tclass X-Git-Tag: v5.0.0~17 X-Git-Url: https://git.proxmox.com/?p=mirror_iproute2.git;a=commitdiff_plain;h=0f3f0ca3a2aef77b0e4009a8de31cb48f58993fc ss: add option --tos for requesting ipv4 tos and ipv6 tclass Also show socket class_id/priority used by classful qdisc. Kernel report this together with tclass since commit ("inet_diag: fix reporting cgroup classid and fallback to priority") Signed-off-by: Konstantin Khlebnikov Signed-off-by: Stephen Hemminger --- diff --git a/man/man8/ss.8 b/man/man8/ss.8 index 553a6cf4..9f21202d 100644 --- a/man/man8/ss.8 +++ b/man/man8/ss.8 @@ -244,6 +244,23 @@ the pacing rate and max pacing rate a helper variable for TCP internal auto tuning socket receive buffer .RE .TP +.B \-\-tos +Show ToS and priority information. Below fields may appear: +.RS +.P +.TP +.B tos +IPv4 Type-of-Service byte +.P +.TP +.B tclass +IPv6 Traffic Class byte +.P +.TP +.B class_id +Class id set by net_cls cgroup. If class is zero this shows priority set by SO_PRIORITY. +.RE +.TP .B \-K, \-\-kill Attempts to forcibly close sockets. This option displays sockets that are successfully closed and silently skips sockets that the kernel does not support diff --git a/misc/ss.c b/misc/ss.c index 3589ebed..9e821faf 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -110,6 +110,7 @@ static int show_header = 1; static int follow_events; static int sctp_ino; static int show_tipcinfo; +static int show_tos; enum col_id { COL_NETID, @@ -3008,6 +3009,15 @@ static int inet_show_sock(struct nlmsghdr *nlh, } } + if (show_tos) { + if (tb[INET_DIAG_TOS]) + out(" tos:%#x", rta_getattr_u8(tb[INET_DIAG_TOS])); + if (tb[INET_DIAG_TCLASS]) + out(" tclass:%#x", rta_getattr_u8(tb[INET_DIAG_TCLASS])); + if (tb[INET_DIAG_CLASS_ID]) + out(" class_id:%#x", rta_getattr_u32(tb[INET_DIAG_CLASS_ID])); + } + if (show_mem || (show_tcpinfo && s->type != IPPROTO_UDP)) { out("\n\t"); if (s->type == IPPROTO_SCTP) @@ -3058,6 +3068,11 @@ static int tcpdiag_send(int fd, int protocol, struct filter *f) req.r.idiag_ext |= (1<<(INET_DIAG_CONG-1)); } + if (show_tos) { + req.r.idiag_ext |= (1<<(INET_DIAG_TOS-1)); + req.r.idiag_ext |= (1<<(INET_DIAG_TCLASS-1)); + } + iov[0] = (struct iovec){ .iov_base = &req, .iov_len = sizeof(req) @@ -3118,6 +3133,11 @@ static int sockdiag_send(int family, int fd, int protocol, struct filter *f) req.r.idiag_ext |= (1<<(INET_DIAG_CONG-1)); } + if (show_tos) { + req.r.idiag_ext |= (1<<(INET_DIAG_TOS-1)); + req.r.idiag_ext |= (1<<(INET_DIAG_TCLASS-1)); + } + iov[0] = (struct iovec){ .iov_base = &req, .iov_len = sizeof(req) @@ -4661,6 +4681,7 @@ static void _usage(FILE *dest) " -i, --info show internal TCP information\n" " --tipcinfo show internal tipc socket information\n" " -s, --summary show socket usage summary\n" +" --tos show tos and priority information\n" " -b, --bpf show bpf filter socket information\n" " -E, --events continually display sockets as they are destroyed\n" " -Z, --context display process SELinux security contexts\n" @@ -4765,6 +4786,8 @@ static int scan_state(const char *state) #define OPT_TIPCSOCK 257 #define OPT_TIPCINFO 258 +#define OPT_TOS 259 + static const struct option long_opts[] = { { "numeric", 0, 0, 'n' }, { "resolve", 0, 0, 'r' }, @@ -4800,6 +4823,7 @@ static const struct option long_opts[] = { { "contexts", 0, 0, 'z' }, { "net", 1, 0, 'N' }, { "tipcinfo", 0, 0, OPT_TIPCINFO}, + { "tos", 0, 0, OPT_TOS }, { "kill", 0, 0, 'K' }, { "no-header", 0, 0, 'H' }, { 0 } @@ -4977,6 +5001,9 @@ int main(int argc, char *argv[]) case OPT_TIPCINFO: show_tipcinfo = 1; break; + case OPT_TOS: + show_tos = 1; + break; case 'K': current_filter.kill = 1; break;