Message ID | 51964669.7020503@parallels.com |
---|---|
State | Accepted, archived |
Delegated to: | stephen hemminger |
Headers | show |
Hello. On 05/17/2013 07:02 PM, Pavel Emelyanov wrote: > When extended info is requested (-e option) one will be able to observe > arrows in the output, like this: > > ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 --> > ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <-- > ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 --- > ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <-> > > for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively. > > The respective nlattrs in *_diag messages has appeared in Linux v3.7 and > are already present in ss's headers. > > Signed-off-by: Pavel Emelyanov <xemul@parallels.com> > > --- > > diff --git a/misc/ss.c b/misc/ss.c > index 5493630..c32574c 100644 > --- a/misc/ss.c > +++ b/misc/ss.c > @@ -1350,15 +1350,12 @@ static void print_skmeminfo(struct rtattr *tb[], int attrtype) > printf(")"); > } > > -static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r) > +static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r, > + struct rtattr *tb[]) Should be aligned under the next char after (. > @@ -1443,9 +1440,13 @@ static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r) > > static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f) > { > + struct rtattr * tb[INET_DIAG_MAX+1]; > struct inet_diag_msg *r = NLMSG_DATA(nlh); > struct tcpstat s; > > + parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr*)(r+1), > + nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); > + > s.state = r->idiag_state; > s.local.family = s.remote.family = r->idiag_family; > s.lport = ntohs(r->id.idiag_sport); > @@ -1494,10 +1495,15 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f) > if (r->id.idiag_cookie[1] != 0) > printf("%08x", r->id.idiag_cookie[1]); > printf("%08x", r->id.idiag_cookie[0]); > + if (tb[INET_DIAG_SHUTDOWN]) { > + unsigned char mask; Empty line wouldn't hurt here, after declaration. > + mask = *(__u8 *)RTA_DATA(tb[INET_DIAG_SHUTDOWN]); > + printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>'); > + } > } > if (show_mem || show_tcpinfo) { > printf("\n\t"); > - tcp_show_info(nlh, r); > + tcp_show_info(nlh, r, tb); > } > > printf("\n"); > @@ -2203,6 +2209,14 @@ static int unix_show_sock(struct nlmsghdr *nlh, struct filter *f) > print_skmeminfo(tb, UNIX_DIAG_MEMINFO); > } > > + if (show_details) { > + if (tb[UNIX_DIAG_SHUTDOWN]) { > + unsigned char mask; Here too. > + mask = *(__u8 *)RTA_DATA(tb[UNIX_DIAG_SHUTDOWN]); > + printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>'); > + } > + } > + > WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/misc/ss.c b/misc/ss.c index 5493630..c32574c 100644 --- a/misc/ss.c +++ b/misc/ss.c @@ -1350,15 +1350,12 @@ static void print_skmeminfo(struct rtattr *tb[], int attrtype) printf(")"); } -static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r) +static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r, + struct rtattr *tb[]) { - struct rtattr * tb[INET_DIAG_MAX+1]; char b1[64]; double rtt = 0; - parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr*)(r+1), - nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); - if (tb[INET_DIAG_SKMEMINFO]) { print_skmeminfo(tb, INET_DIAG_SKMEMINFO); } else if (tb[INET_DIAG_MEMINFO]) { @@ -1443,9 +1440,13 @@ static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r) static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f) { + struct rtattr * tb[INET_DIAG_MAX+1]; struct inet_diag_msg *r = NLMSG_DATA(nlh); struct tcpstat s; + parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr*)(r+1), + nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); + s.state = r->idiag_state; s.local.family = s.remote.family = r->idiag_family; s.lport = ntohs(r->id.idiag_sport); @@ -1494,10 +1495,15 @@ static int inet_show_sock(struct nlmsghdr *nlh, struct filter *f) if (r->id.idiag_cookie[1] != 0) printf("%08x", r->id.idiag_cookie[1]); printf("%08x", r->id.idiag_cookie[0]); + if (tb[INET_DIAG_SHUTDOWN]) { + unsigned char mask; + mask = *(__u8 *)RTA_DATA(tb[INET_DIAG_SHUTDOWN]); + printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>'); + } } if (show_mem || show_tcpinfo) { printf("\n\t"); - tcp_show_info(nlh, r); + tcp_show_info(nlh, r, tb); } printf("\n"); @@ -2203,6 +2209,14 @@ static int unix_show_sock(struct nlmsghdr *nlh, struct filter *f) print_skmeminfo(tb, UNIX_DIAG_MEMINFO); } + if (show_details) { + if (tb[UNIX_DIAG_SHUTDOWN]) { + unsigned char mask; + mask = *(__u8 *)RTA_DATA(tb[UNIX_DIAG_SHUTDOWN]); + printf(" %c-%c", mask & 1 ? '-' : '<', mask & 2 ? '-' : '>'); + } + } + printf("\n"); return 0;
When extended info is requested (-e option) one will be able to observe arrows in the output, like this: ESTAB 0 0 127.0.0.1:41705 127.0.0.1:12345 ino:143321 sk:ffff88003a8cea00 --> ESTAB 0 0 127.0.0.1:46925 127.0.0.1:12346 ino:143322 sk:ffff88003a8ce4c0 <-- ESTAB 0 0 127.0.0.1:51678 127.0.0.1:12347 ino:143323 sk:ffff88003a8cdf80 --- ESTAB 0 0 127.0.0.1:46911 127.0.0.1:12348 ino:143324 sk:ffff88003b7f05c0 <-> for SHUT_RD, SHUT_WR, SHUT_RDWR and non-shutdown sockets respectively. The respective nlattrs in *_diag messages has appeared in Linux v3.7 and are already present in ss's headers. Signed-off-by: Pavel Emelyanov <xemul@parallels.com> --- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html