Date: Tue, 12 Sep 2017 21:07:48 +0000 (UTC) From: Michael Tuexen <tuexen@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r323504 - head/usr.bin/sockstat Message-ID: <201709122107.v8CL7muK027036@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: tuexen Date: Tue Sep 12 21:07:48 2017 New Revision: 323504 URL: https://svnweb.freebsd.org/changeset/base/323504 Log: Add printing of the remote encapsulation port for SCTP associations. Sponsored by: Netflix, Inc. Modified: head/usr.bin/sockstat/sockstat.1 head/usr.bin/sockstat/sockstat.c Modified: head/usr.bin/sockstat/sockstat.1 ============================================================================== --- head/usr.bin/sockstat/sockstat.1 Tue Sep 12 19:36:24 2017 (r323503) +++ head/usr.bin/sockstat/sockstat.1 Tue Sep 12 21:07:48 2017 (r323504) @@ -35,7 +35,7 @@ .Nd list open sockets .Sh SYNOPSIS .Nm -.Op Fl 46cLlSsu +.Op Fl 46cLlSsUu .Op Fl j Ar jid .Op Fl p Ar ports .Op Fl P Ar protocols @@ -89,6 +89,9 @@ This is currently only implemented for TCP. .It Fl s Display the protocol state, if applicable. This is currently only implemented for SCTP and TCP. +.It Fl U +Display the remote UDP encapsulation port number, if applicable. +This is currently only implemented for SCTP. .It Fl u Show .Dv AF_LOCAL @@ -146,6 +149,10 @@ if the endpoint could not be determined. (Internet sockets only) The address the foreign end of the socket is bound to (see .Xr getpeername 2 ) . +.It Li ENCAPS +The remote UDP encapsulation port number if +.Fl U +is specified (only for SCTP). .It Li STATE The protocol state if .Fl s Modified: head/usr.bin/sockstat/sockstat.c ============================================================================== --- head/usr.bin/sockstat/sockstat.c Tue Sep 12 19:36:24 2017 (r323503) +++ head/usr.bin/sockstat/sockstat.c Tue Sep 12 21:07:48 2017 (r323504) @@ -75,6 +75,7 @@ static int opt_L; /* Don't show IPv4 or IPv6 loopbac static int opt_l; /* Show listening sockets */ static int opt_S; /* Show protocol stack if applicable */ static int opt_s; /* Show protocol state if applicable */ +static int opt_U; /* Show remote UDP encapsulation port number */ static int opt_u; /* Show Unix domain sockets */ static int opt_v; /* Verbose mode */ @@ -95,6 +96,7 @@ static int *ports; struct addr { struct sockaddr_storage address; + unsigned int encaps_port; struct addr *next; }; @@ -531,6 +533,7 @@ gather_sctp(void) "address family %d not supported", xraddr->address.sa.sa_family); } + faddr->encaps_port = xraddr->encaps_port; faddr->next = NULL; if (prev_faddr == NULL) sock->faddr = faddr; @@ -979,7 +982,7 @@ static void displaysock(struct sock *s, int pos) { void *p; - int hash, first; + int hash, first, offset; struct addr *laddr, *faddr; struct sock *s_tmp; @@ -1045,34 +1048,46 @@ displaysock(struct sock *s, int pos) default: abort(); } - if (first) { - if (opt_s && - (s->proto == IPPROTO_SCTP || - s->proto == IPPROTO_TCP)) { - while (pos < 80) + offset = 80; + if (opt_U) { + if (faddr != NULL && + s->proto == IPPROTO_SCTP && + s->state != SCTP_CLOSED && + s->state != SCTP_BOUND && + s->state != SCTP_LISTEN) { + while (pos < offset) pos += xprintf(" "); - switch (s->proto) { - case IPPROTO_SCTP: - pos += xprintf("%s", - sctp_state(s->state)); - break; - case IPPROTO_TCP: - if (s->state >= 0 && - s->state < TCP_NSTATES) - pos += - xprintf("%s", - tcpstates[s->state]); - else - pos += xprintf("?"); - break; + pos += xprintf("%u", + ntohs(faddr->encaps_port)); + } + offset += 7; + } + if (first) { + if (opt_s) { + if (s->proto == IPPROTO_SCTP || + s->proto == IPPROTO_TCP) { + while (pos < offset) + pos += xprintf(" "); + switch (s->proto) { + case IPPROTO_SCTP: + pos += xprintf("%s", + sctp_state(s->state)); + break; + case IPPROTO_TCP: + if (s->state >= 0 && + s->state < TCP_NSTATES) + pos += xprintf("%s", + tcpstates[s->state]); + else + pos += xprintf("?"); + break; + } } + offset += 13; } if (opt_S && s->proto == IPPROTO_TCP) { - while (pos < 80) + while (pos < offset) pos += xprintf(" "); - if (opt_s) - while (pos < 93) - pos += xprintf(" "); xprintf("%.*s", TCP_FUNCTION_NAME_LEN_MAX, s->stack); } @@ -1101,6 +1116,8 @@ display(void) printf("%-8s %-10s %-5s %-2s %-6s %-21s %-21s", "USER", "COMMAND", "PID", "FD", "PROTO", "LOCAL ADDRESS", "FOREIGN ADDRESS"); + if (opt_U) + printf(" %-6s", "ENCAPS"); if (opt_s) printf(" %-12s", "STATE"); if (opt_S) @@ -1186,7 +1203,7 @@ main(int argc, char *argv[]) int o, i; opt_j = -1; - while ((o = getopt(argc, argv, "46cj:Llp:P:Ssuv")) != -1) + while ((o = getopt(argc, argv, "46cj:Llp:P:SsUuv")) != -1) switch (o) { case '4': opt_4 = 1; @@ -1217,6 +1234,9 @@ main(int argc, char *argv[]) break; case 's': opt_s = 1; + break; + case 'U': + opt_U = 1; break; case 'u': opt_u = 1;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709122107.v8CL7muK027036>