aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/netstat
diff options
context:
space:
mode:
authorSimon J. Gerraty <sjg@FreeBSD.org>2014-08-19 06:50:54 +0000
committerSimon J. Gerraty <sjg@FreeBSD.org>2014-08-19 06:50:54 +0000
commitee7b0571c2c18bdec848ed2044223cc88db29bd8 (patch)
treeb04f4bd7cd887f50e7d98af35f46b9834ff86c80 /usr.bin/netstat
parentffda191e301f128a62c152fde92b692548367fca (diff)
parent15fc2873832ea5b9b639e701bbbf2e73af8b6a88 (diff)
downloadsrc-ee7b0571c2c18bdec848ed2044223cc88db29bd8.tar.gz
src-ee7b0571c2c18bdec848ed2044223cc88db29bd8.zip
Merge head from 7/28
Notes
Notes: svn path=/projects/bmake/; revision=270164
Diffstat (limited to 'usr.bin/netstat')
-rw-r--r--usr.bin/netstat/inet.c14
-rw-r--r--usr.bin/netstat/main.c22
-rw-r--r--usr.bin/netstat/netstat.1744
-rw-r--r--usr.bin/netstat/netstat.h1
-rw-r--r--usr.bin/netstat/route.c26
5 files changed, 546 insertions, 261 deletions
diff --git a/usr.bin/netstat/inet.c b/usr.bin/netstat/inet.c
index 9f8f1d2913f2..10d0698e6beb 100644
--- a/usr.bin/netstat/inet.c
+++ b/usr.bin/netstat/inet.c
@@ -429,7 +429,7 @@ protopr(u_long off, const char *name, int af1, int proto)
"%-5.5s %-6.6s %-6.6s %-22.22s %-22.22s",
"Proto", "Recv-Q", "Send-Q",
"Local Address", "Foreign Address");
- if (!xflag)
+ if (!xflag && !Rflag)
printf(" (state)");
}
if (xflag) {
@@ -441,6 +441,9 @@ protopr(u_long off, const char *name, int af1, int proto)
printf(" %7.7s %7.7s %7.7s %7.7s %7.7s %7.7s",
"rexmt", "persist", "keep",
"2msl", "delack", "rcvtime");
+ } else if (Rflag) {
+ printf (" %8.8s %5.5s",
+ "flowid", "ftype");
}
putchar('\n');
first = 0;
@@ -549,7 +552,7 @@ protopr(u_long off, const char *name, int af1, int proto)
timer->tt_delack / 1000, (timer->tt_delack % 1000) / 10,
timer->t_rcvtime / 1000, (timer->t_rcvtime % 1000) / 10);
}
- if (istcp && !Lflag && !xflag && !Tflag) {
+ if (istcp && !Lflag && !xflag && !Tflag && !Rflag) {
if (tp->t_state < 0 || tp->t_state >= TCP_NSTATES)
printf("%d", tp->t_state);
else {
@@ -560,7 +563,12 @@ protopr(u_long off, const char *name, int af1, int proto)
putchar('*');
#endif /* defined(TF_NEEDSYN) && defined(TF_NEEDFIN) */
}
- }
+ }
+ if (Rflag) {
+ printf(" %08x %5d",
+ inp->inp_flowid,
+ inp->inp_flowtype);
+ }
putchar('\n');
}
if (xig != oxig && xig->xig_gen != oxig->xig_gen) {
diff --git a/usr.bin/netstat/main.c b/usr.bin/netstat/main.c
index 5fe4917c8e7b..8fc2b4e05474 100644
--- a/usr.bin/netstat/main.c
+++ b/usr.bin/netstat/main.c
@@ -295,6 +295,7 @@ int numeric_port; /* show ports numerically */
static int pflag; /* show given protocol */
int Qflag; /* show netisr information */
int rflag; /* show routing tables (or routing stats) */
+int Rflag; /* show flow / RSS statistics */
int sflag; /* show protocol statistics */
int Wflag; /* wide display */
int Tflag; /* TCP Information */
@@ -319,7 +320,7 @@ main(int argc, char *argv[])
af = AF_UNSPEC;
- while ((ch = getopt(argc, argv, "46AaBbdF:f:ghI:iLlM:mN:np:Qq:rSTsuWw:xz"))
+ while ((ch = getopt(argc, argv, "46AaBbdF:f:ghI:iLlM:mN:np:Qq:RrSTsuWw:xz"))
!= -1)
switch(ch) {
case '4':
@@ -433,6 +434,9 @@ main(int argc, char *argv[])
case 'r':
rflag = 1;
break;
+ case 'R':
+ Rflag = 1;
+ break;
case 's':
++sflag;
break;
@@ -820,18 +824,20 @@ static void
usage(void)
{
(void)fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
-"usage: netstat [-46AaLnSTWx] [-f protocol_family | -p protocol]\n"
+"usage: netstat [-46AaLnRSTWx] [-f protocol_family | -p protocol]\n"
" [-M core] [-N system]",
" netstat -i | -I interface [-46abdhnW] [-f address_family]\n"
" [-M core] [-N system]",
-" netstat -w wait [-I interface] [-46d] [-M core] [-N system] [-q howmany]",
-" netstat -s [-s] [-46z] [-f protocol_family | -p protocol]\n"
-" [-M core] [-N system]",
-" netstat -i | -I interface [-46s] [-f protocol_family | -p protocol]\n"
+" netstat -w wait [-I interface] [-46d] [-M core] [-N system]\n"
+" [-q howmany]",
+" netstat -s [-46sz] [-f protocol_family | -p protocol]\n"
" [-M core] [-N system]",
+" netstat -i | -I interface -s [-46s]\n"
+" [-f protocol_family | -p protocol] [-M core] [-N system]",
" netstat -m [-M core] [-N system]",
-" netstat -B [-I interface]",
-" netstat -r [-46AanW] [-f address_family] [-M core] [-N system]",
+" netstat -B [-z] [-I interface]",
+" netstat -r [-46AnW] [-F fibnum] [-f address_family]\n"
+" [-M core] [-N system]",
" netstat -rs [-s] [-M core] [-N system]",
" netstat -g [-46W] [-f address_family] [-M core] [-N system]",
" netstat -gs [-46s] [-f address_family] [-M core] [-N system]",
diff --git a/usr.bin/netstat/netstat.1 b/usr.bin/netstat/netstat.1
index 67095d6ef10f..1f2bb0125e06 100644
--- a/usr.bin/netstat/netstat.1
+++ b/usr.bin/netstat/netstat.1
@@ -28,12 +28,70 @@
.\" @(#)netstat.1 8.8 (Berkeley) 4/18/94
.\" $FreeBSD$
.\"
-.Dd January 11, 2014
+.Dd June 4, 2014
.Dt NETSTAT 1
.Os
.Sh NAME
.Nm netstat
-.Nd show network status
+.Nd show network status and statistics
+.Sh SYNOPSIS
+.Bk -words
+.Bl -tag -width "netstat"
+.It Nm
+.Op Fl 46AaLnRSTWx
+.Op Fl f Ar protocol_family | Fl p Ar protocol
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl i | I Ar interface
+.Op Fl 46abdhnW
+.Op Fl f Ar address_family
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl w Ar wait
+.Op Fl I Ar interface
+.Op Fl 46d
+.Op Fl M Ar core
+.Op Fl N Ar system
+.Op Fl q Ar howmany
+.It Nm Fl s
+.Op Fl 46sz
+.Op Fl f Ar protocol_family | Fl p Ar protocol
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl i | I Ar interface Fl s
+.Op Fl 46s
+.Op Fl f Ar protocol_family | Fl p Ar protocol
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl m
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl B
+.Op Fl z
+.Op Fl I Ar interface
+.It Nm Fl r
+.Op Fl 46AnW
+.Op Fl F Ar fibnum
+.Op Fl f Ar address_family
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl rs
+.Op Fl s
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl g
+.Op Fl 46W
+.Op Fl f Ar address_family
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl gs
+.Op Fl 46s
+.Op Fl f Ar address_family
+.Op Fl M Ar core
+.Op Fl N Ar system
+.It Nm Fl Q
+.El
+.Ek
.Sh DESCRIPTION
The
.Nm
@@ -45,7 +103,7 @@ depending on the options for the information presented.
.It Xo
.Bk -words
.Nm
-.Op Fl 46AaLnSTWx
+.Op Fl 46AaLnRSTWx
.Op Fl f Ar protocol_family | Fl p Ar protocol
.Op Fl M Ar core
.Op Fl N Ar system
@@ -53,47 +111,132 @@ depending on the options for the information presented.
.Xc
Display a list of active sockets
(protocol control blocks)
-for each network protocol,
-for a particular
-.Ar protocol_family ,
-or for a single
-.Ar protocol .
-If
-.Fl A
-is also present,
-show the address of a protocol control block (PCB)
+for each network protocol.
+.Pp
+The default display for active sockets shows the local
+and remote addresses, send and receive queue sizes (in bytes), protocol,
+and the internal state of the protocol.
+Address formats are of the form
+.Dq host.port
+or
+.Dq network.port
+if a socket's address specifies a network but no specific host address.
+When known, the host and network addresses are displayed symbolically
+according to the databases
+.Xr hosts 5
+and
+.Xr networks 5 ,
+respectively.
+If a symbolic name for an address is unknown, or if
+the
+.Fl n
+option is specified, the address is printed numerically, according
+to the address family.
+For more information regarding
+the Internet IPv4
+.Dq dot format ,
+refer to
+.Xr inet 3 .
+Unspecified,
+or
+.Dq wildcard ,
+addresses and ports appear as
+.Dq Li * .
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl A
+Show the address of a protocol control block (PCB)
associated with a socket; used for debugging.
-If
-.Fl a
-is also present,
-show the state of all sockets;
+.It Fl a
+Show the state of all sockets;
normally sockets used by server processes are not shown.
-If
-.Fl L
-is also present,
-show the size of the various listen queues.
+.It Fl L
+Show the size of the various listen queues.
The first count shows the number of unaccepted connections,
the second count shows the amount of unaccepted incomplete connections,
and the third count is the maximum number of queued connections.
-If
-.Fl S
-is also present,
-show network addresses as numbers (as with
+.It Fl n
+Do not resolve numeric addresses and port numbers to names.
+See
+.Sx GENERAL OPTIONS .
+.It Fl R
+Display the flowid and flowtype for each socket.
+flowid is a 32 bit hardware specific identifier for each flow.
+flowtype defines which protocol fields are hashed to produce the id.
+A complete listing is available in
+.Pa sys/mbuf.h
+under
+.Dv M_HASHTYPE_* .
+.It Fl S
+Show network addresses as numbers (as with
.Fl n )
but show ports symbolically.
-If
+.It Fl T
+Display diagnostic information from the TCP control block.
+Fields include the number of packets requiring retransmission,
+received out-of-order, and those advertising a zero-sized window.
+.It Fl W
+Avoid truncating addresses even if this causes some fields to overflow.
+.It Fl x
+Display socket buffer and TCP timer statistics for each
+internet socket.
+.Pp
+The
.Fl x
-is present, display socket buffer and tcp timer statistics for each internet socket.
-When
-.Fl T
-is present, display information from the TCP control block, including
-retransmits, out-of-order packets received, and zero-sized windows advertised.
+flag causes
+.Nm
+to output all the information recorded about data
+stored in the socket buffers.
+The fields are:
+.Bl -column ".Li R-MBUF"
+.It Li R-MBUF Ta Number of mbufs in the receive queue.
+.It Li S-MBUF Ta Number of mbufs in the send queue.
+.It Li R-CLUS Ta Number of clusters, of any type, in the receive
+queue.
+.It Li S-CLUS Ta Number of clusters, of any type, in the send queue.
+.It Li R-HIWA Ta Receive buffer high water mark, in bytes.
+.It Li S-HIWA Ta Send buffer high water mark, in bytes.
+.It Li R-LOWA Ta Receive buffer low water mark, in bytes.
+.It Li S-LOWA Ta Send buffer low water mark, in bytes.
+.It Li R-BCNT Ta Receive buffer byte count.
+.It Li S-BCNT Ta Send buffer byte count.
+.It Li R-BMAX Ta Maximum bytes that can be used in the receive buffer.
+.It Li S-BMAX Ta Maximum bytes that can be used in the send buffer.
+.El
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.It Fl p Ar protocol
+Filter by
+.Ar protocol .
+See
+.Sx GENERAL OPTIONS .
+.It Fl M
+Use an alternative core.
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image.
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
.Fl i | I Ar interface
.Op Fl 46abdhnW
.Op Fl f Ar address_family
+.Op Fl M Ar core
+.Op Fl N Ar system
.Ek
.Xc
Show the state of all network interfaces or a single
@@ -105,30 +248,59 @@ An asterisk
.Pq Dq Li *
after an interface name indicates that the interface is
.Dq down .
-If
-.Fl a
-is also present, multicast addresses currently in use are shown
+.Pp
+When
+.Nm
+is invoked with
+.Fl i
+.Pq all interfaces
+or
+.Fl I Ar interface ,
+it provides a table of cumulative
+statistics regarding packets transferred, errors, and collisions.
+The network addresses of the interface
+and the maximum transmission unit
+.Pq Dq mtu
+are also displayed.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl a
+Multicast addresses currently in use are shown
for each Ethernet interface and for each IP interface address.
Multicast addresses are shown on separate lines following the interface
address with which they are associated.
-If
-.Fl b
-is also present, show the number of bytes in and out.
-If
-.Fl d
-is also present, show the number of dropped packets.
-If
-.Fl h
-is also present, print all counters in human readable form.
-If
-.Fl W
-is also present, print interface names using a wider field size.
+.It Fl b
+Show the number of bytes in and out.
+.It Fl d
+Show the number of dropped packets.
+.It Fl h
+Print all counters in human readable form.
+.It Fl n
+Do not resolve numeric addresses and port numbers to names.
+See
+.Sx GENERAL OPTIONS .
+.It Fl W
+Avoid truncating interface names even if this causes some fields to overflow.
+.Sx GENERAL OPTIONS .
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
.Fl w Ar wait
.Op Fl I Ar interface
-.Op Fl d
+.Op Fl 46d
.Op Fl M Ar core
.Op Fl N Ar system
.Op Fl q Ar howmany
@@ -136,55 +308,139 @@ is also present, print interface names using a wider field size.
.Xc
At intervals of
.Ar wait
-seconds,
-display the information regarding packet
-traffic on all configured network interfaces
-or a single
+seconds, display the information regarding packet traffic on all
+configured network interfaces or a single
.Ar interface .
-If
-.Fl q
-is also present, exit after
+.Pp
+When
+.Nm
+is invoked with the
+.Fl w
+option and a
+.Ar wait
+interval argument, it displays a running count of statistics related to
+network interfaces.
+An obsolescent version of this option used a numeric parameter
+with no option, and is currently supported for backward compatibility.
+By default, this display summarizes information for all interfaces.
+Information for a specific interface may be displayed with the
+.Fl I Ar interface
+option.
+.Bl -tag -width indent
+.It Fl I Ar interface
+Only show information regarding
+.Ar interface
+.It Fl 4
+Show IPv4 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl d
+Show the number of dropped packets.
+.It Fl M
+Use an alternative core.
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image.
+See
+.Sx GENERAL OPTIONS .
+.It Fl q
+Exit after
.Ar howmany
outputs.
-If
-.Fl d
-is also present, show the number of dropped packets.
+.El
.It Xo
.Bk -words
.Nm
-.Fl s Op Fl s
-.Op Fl 46z
+.Fl s
+.Op Fl 46sz
.Op Fl f Ar protocol_family | Fl p Ar protocol
.Op Fl M Ar core
.Op Fl N Ar system
.Ek
.Xc
-Display system-wide statistics for each network protocol,
-for a particular
-.Ar protocol_family ,
-or for a single
-.Ar protocol .
+Display system-wide statistics for each network protocol.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl s
If
.Fl s
is repeated, counters with a value of zero are suppressed.
-If
-.Fl z
-is also present, reset statistic counters after displaying them.
+.It Fl z
+Reset statistic counters after displaying them.
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.It Fl p Ar protocol
+Filter by
+.Ar protocol .
+See
+.Sx GENERAL OPTIONS .
+.It Fl M
+Use an alternative core.
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
.Fl i | I Ar interface Fl s
-.Op Fl 46
+.Op Fl 46s
.Op Fl f Ar protocol_family | Fl p Ar protocol
.Op Fl M Ar core
.Op Fl N Ar system
.Ek
.Xc
-Display per-interface statistics for each network protocol,
-for a particular
-.Ar protocol_family ,
-or for a single
+Display per-interface statistics for each network protocol.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl s
+If
+.Fl s
+is repeated, counters with a value of zero are suppressed.
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.It Fl p Ar protocol
+Filter by
.Ar protocol .
+See
+.Sx GENERAL OPTIONS .
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -196,6 +452,16 @@ or for a single
Show statistics recorded by the memory management routines
.Pq Xr mbuf 9 .
The network manages a private pool of memory buffers.
+.Bl -tag -width indent
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -211,11 +477,39 @@ This includes information like
how many packets have been matched, dropped and received by the
bpf device, also information about current buffer sizes and device
states.
+.Pp
+The
+.Xr bpf 4
+flags displayed when
+.Nm
+is invoked with the
+.Fl B
+option represent the underlying parameters of the bpf peer.
+Each flag is
+represented as a single lower case letter.
+The mapping between the letters and flags in order of appearance are:
+.Bl -column ".Li i"
+.It Li p Ta Set if listening promiscuously
+.It Li i Ta Dv BIOCIMMEDIATE No has been set on the device
+.It Li f Ta Dv BIOCGHDRCMPLT No status: source link addresses are being
+filled automatically
+.It Li s Ta Dv BIOCGSEESENT No status: see packets originating locally and
+remotely on the interface.
+.It Li a Ta Packet reception generates a signal
+.It Li l Ta Dv BIOCLOCK No status: descriptor has been locked
+.El
+.Pp
+For more information about these flags, please refer to
+.Xr bpf 4 .
+.Bl -tag -width indent
+.It Fl z
+Reset statistic counters after displaying them.
+.El
.It Xo
.Bk -words
.Nm
.Fl r
-.Op Fl 46AanW
+.Op Fl 46AnW
.Op Fl F Ar fibnum
.Op Fl f Ar address_family
.Op Fl M Ar core
@@ -223,35 +517,91 @@ states.
.Ek
.Xc
Display the contents of routing tables.
+.Pp
When
-.Fl f
-is specified, a routing table for a particular
-.Ar address_family
-is displayed.
-When
-.Fl F
-is specified, a routing table with the number
-.Ar fibnum
-is displayed.
+.Nm
+is invoked with the routing table option
+.Fl r ,
+it lists the available routes and their status.
+Each route consists of a destination host or network, and a gateway to use
+in forwarding packets.
+The flags field shows a collection of information about the route stored
+as binary choices.
+The individual flags are discussed in more detail in the
+.Xr route 8
+and
+.Xr route 4
+manual pages.
+The mapping between letters and flags is:
+.Bl -column ".Li W" ".Dv RTF_WASCLONED"
+.It Li 1 Ta Dv RTF_PROTO1 Ta "Protocol specific routing flag #1"
+.It Li 2 Ta Dv RTF_PROTO2 Ta "Protocol specific routing flag #2"
+.It Li 3 Ta Dv RTF_PROTO3 Ta "Protocol specific routing flag #3"
+.It Li B Ta Dv RTF_BLACKHOLE Ta "Just discard pkts (during updates)"
+.It Li b Ta Dv RTF_BROADCAST Ta "The route represents a broadcast address"
+.It Li D Ta Dv RTF_DYNAMIC Ta "Created dynamically (by redirect)"
+.It Li G Ta Dv RTF_GATEWAY Ta "Destination requires forwarding by intermediary"
+.It Li H Ta Dv RTF_HOST Ta "Host entry (net otherwise)"
+.It Li L Ta Dv RTF_LLINFO Ta "Valid protocol to link address translation"
+.It Li M Ta Dv RTF_MODIFIED Ta "Modified dynamically (by redirect)"
+.It Li R Ta Dv RTF_REJECT Ta "Host or net unreachable"
+.It Li S Ta Dv RTF_STATIC Ta "Manually added"
+.It Li U Ta Dv RTF_UP Ta "Route usable"
+.It Li X Ta Dv RTF_XRESOLVE Ta "External daemon translates proto to link address"
+.El
+.Pp
+Direct routes are created for each
+interface attached to the local host;
+the gateway field for such entries shows the address of the outgoing interface.
+The refcnt field gives the
+current number of active uses of the route.
+Connection oriented
+protocols normally hold on to a single route for the duration of
+a connection while connectionless protocols obtain a route while sending
+to the same destination.
+The use field provides a count of the number of packets
+sent using that route.
+The interface entry indicates the network interface utilized for the route.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only.
+See
+.Sx GENERAL OPTIONS .
+.It Fl A
+Show the contents of the internal Patricia tree
+structures; used for debugging.
+.It Fl n
+Do not resolve numeric addresses and port numbers to names.
+See
+.Sx GENERAL OPTIONS .
+.It Fl W
+Show the path MTU for each route, and print interface names with a
+wider field size.
+.It Fl F
+Display the routing table with the number
+.Ar fibnum .
If the specified
.Ar fibnum
is -1 or
.Fl F
is not specified,
the default routing table is displayed.
-If
-.Fl A
-is also present,
-show the contents of the internal Patricia tree
-structures; used for debugging.
-When
-.Fl W
-is also present,
-show the path MTU
-for each route,
-and print interface
-names with a wider
-field size.
+.It Fl f
+Display the routing table for a particular
+.Ar address_family .
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -262,9 +612,20 @@ field size.
.Ek
.Xc
Display routing statistics.
+.Bl -tag -width indent
+.It Fl s
If
.Fl s
is repeated, counters with a value of zero are suppressed.
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -284,6 +645,31 @@ This option is applicable only to the
and
.Cm inet6
address families.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl W
+Avoid truncating addresses even if this causes some fields to overflow.
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -295,9 +681,33 @@ address families.
.Ek
.Xc
Show multicast routing statistics.
+.Bl -tag -width indent
+.It Fl 4
+Show IPv4 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl 6
+Show IPv6 only
+See
+.Sx GENERAL OPTIONS .
+.It Fl s
If
.Fl s
is repeated, counters with a value of zero are suppressed.
+.It Fl f Ar protocol_family
+Filter by
+.Ar protocol_family .
+See
+.Sx GENERAL OPTIONS .
+.It Fl M
+Use an alternative core
+See
+.Sx GENERAL OPTIONS .
+.It Fl N
+Use an alternative kernel image
+See
+.Sx GENERAL OPTIONS .
+.El
.It Xo
.Bk -words
.Nm
@@ -315,16 +725,19 @@ The flags field shows available ISR handlers:
.El
.El
.Pp
+.Ss GENERAL OPTIONS
Some options have the general meaning:
.Bl -tag -width flag
.It Fl 4
Is shorthand for
.Fl f
.Ar inet
+.Pq Show only IPv4
.It Fl 6
Is shorthand for
.Fl f
.Ar inet6
+.Pq Show only IPv6
.It Fl f Ar address_family , Fl p Ar protocol
Limit display to those records
of the specified
@@ -364,149 +777,6 @@ Normally
.Nm
attempts to resolve addresses and ports,
and display them symbolically.
-.It Fl W
-In certain displays, avoid truncating addresses even if this causes
-some fields to overflow.
-.El
-.Pp
-The default display, for active sockets, shows the local
-and remote addresses, send and receive queue sizes (in bytes), protocol,
-and the internal state of the protocol.
-Address formats are of the form
-.Dq host.port
-or
-.Dq network.port
-if a socket's address specifies a network but no specific host address.
-When known, the host and network addresses are displayed symbolically
-according to the databases
-.Xr hosts 5
-and
-.Xr networks 5 ,
-respectively.
-If a symbolic name for an address is unknown, or if
-the
-.Fl n
-option is specified, the address is printed numerically, according
-to the address family.
-For more information regarding
-the Internet IPv4
-.Dq dot format ,
-refer to
-.Xr inet 3 .
-Unspecified,
-or
-.Dq wildcard ,
-addresses and ports appear as
-.Dq Li * .
-.Pp
-The interface display provides a table of cumulative
-statistics regarding packets transferred, errors, and collisions.
-The network addresses of the interface
-and the maximum transmission unit
-.Pq Dq mtu
-are also displayed.
-.Pp
-The routing table display indicates the available routes and their status.
-Each route consists of a destination host or network, and a gateway to use
-in forwarding packets.
-The flags field shows a collection of information about the route stored
-as binary choices.
-The individual flags are discussed in more detail in the
-.Xr route 8
-and
-.Xr route 4
-manual pages.
-The mapping between letters and flags is:
-.Bl -column ".Li W" ".Dv RTF_WASCLONED"
-.It Li 1 Ta Dv RTF_PROTO1 Ta "Protocol specific routing flag #1"
-.It Li 2 Ta Dv RTF_PROTO2 Ta "Protocol specific routing flag #2"
-.It Li 3 Ta Dv RTF_PROTO3 Ta "Protocol specific routing flag #3"
-.It Li B Ta Dv RTF_BLACKHOLE Ta "Just discard pkts (during updates)"
-.It Li b Ta Dv RTF_BROADCAST Ta "The route represents a broadcast address"
-.It Li D Ta Dv RTF_DYNAMIC Ta "Created dynamically (by redirect)"
-.It Li G Ta Dv RTF_GATEWAY Ta "Destination requires forwarding by intermediary"
-.It Li H Ta Dv RTF_HOST Ta "Host entry (net otherwise)"
-.It Li L Ta Dv RTF_LLINFO Ta "Valid protocol to link address translation"
-.It Li M Ta Dv RTF_MODIFIED Ta "Modified dynamically (by redirect)"
-.It Li R Ta Dv RTF_REJECT Ta "Host or net unreachable"
-.It Li S Ta Dv RTF_STATIC Ta "Manually added"
-.It Li U Ta Dv RTF_UP Ta "Route usable"
-.It Li X Ta Dv RTF_XRESOLVE Ta "External daemon translates proto to link address"
-.El
-.Pp
-Direct routes are created for each
-interface attached to the local host;
-the gateway field for such entries shows the address of the outgoing interface.
-The refcnt field gives the
-current number of active uses of the route.
-Connection oriented
-protocols normally hold on to a single route for the duration of
-a connection while connectionless protocols obtain a route while sending
-to the same destination.
-The use field provides a count of the number of packets
-sent using that route.
-The interface entry indicates the network interface utilized for the route.
-.Pp
-When
-.Nm
-is invoked with the
-.Fl w
-option and a
-.Ar wait
-interval argument, it displays a running count of statistics related to
-network interfaces.
-An obsolescent version of this option used a numeric parameter
-with no option, and is currently supported for backward compatibility.
-By default, this display summarizes information for all interfaces.
-Information for a specific interface may be displayed with the
-.Fl I
-option.
-.Pp
-The
-.Xr bpf 4
-flags displayed when
-.Nm
-is invoked with the
-.Fl B
-option represent the underlying parameters of the bpf peer.
-Each flag is
-represented as a single lower case letter.
-The mapping between the letters and flags in order of appearance are:
-.Bl -column ".Li i"
-.It Li p Ta Set if listening promiscuously
-.It Li i Ta Dv BIOCIMMEDIATE No has been set on the device
-.It Li f Ta Dv BIOCGHDRCMPLT No status: source link addresses are being
-filled automatically
-.It Li s Ta Dv BIOCGSEESENT No status: see packets originating locally and
-remotely on the interface.
-.It Li a Ta Packet reception generates a signal
-.It Li l Ta Dv BIOCLOCK No status: descriptor has been locked
-.El
-.Pp
-For more information about these flags, please refer to
-.Xr bpf 4 .
-.Pp
-The
-.Fl x
-flag causes
-.Nm
-to output all the information recorded about data
-stored in the socket buffers.
-The fields are:
-.Bl -column ".Li R-MBUF"
-.It Li R-MBUF Ta Number of mbufs in the receive queue.
-.It Li S-MBUF Ta Number of mbufs in the send queue.
-.It Li R-CLUS Ta Number of clusters, of any type, in the receive
-queue.
-.It Li S-CLUS Ta Number of clusters, of any type, in the send queue.
-.It Li R-HIWA Ta Receive buffer high water mark, in bytes.
-.It Li S-HIWA Ta Send buffer high water mark, in bytes.
-.It Li R-LOWA Ta Receive buffer low water mark, in bytes.
-.It Li S-LOWA Ta Send buffer low water mark, in bytes.
-.It Li R-BCNT Ta Receive buffer byte count.
-.It Li S-BCNT Ta Send buffer byte count.
-.It Li R-BMAX Ta Maximum bytes that can be used in the receive buffer.
-.It Li S-BMAX Ta Maximum bytes that can be used in the send buffer.
.El
.Sh SEE ALSO
.Xr fstat 1 ,
diff --git a/usr.bin/netstat/netstat.h b/usr.bin/netstat/netstat.h
index ebbdd5db070d..cb46c0fdcd7b 100644
--- a/usr.bin/netstat/netstat.h
+++ b/usr.bin/netstat/netstat.h
@@ -45,6 +45,7 @@ extern int noutputs; /* how much outputs before we exit */
extern int numeric_addr; /* show addresses numerically */
extern int numeric_port; /* show ports numerically */
extern int rflag; /* show routing tables (or routing stats) */
+extern int Rflag; /* show flowid / RSS information */
extern int sflag; /* show protocol statistics */
extern int Tflag; /* show TCP control block info */
extern int Wflag; /* wide display */
diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c
index 3f09459989b1..75556150e04b 100644
--- a/usr.bin/netstat/route.c
+++ b/usr.bin/netstat/route.c
@@ -230,13 +230,13 @@ pr_family(int af1)
#ifndef INET6
#define WID_DST_DEFAULT(af) 18 /* width of destination column */
#define WID_GW_DEFAULT(af) 18 /* width of gateway column */
-#define WID_IF_DEFAULT(af) (Wflag ? 8 : 6) /* width of netif column */
+#define WID_IF_DEFAULT(af) (Wflag ? 10 : 8) /* width of netif column */
#else
#define WID_DST_DEFAULT(af) \
((af) == AF_INET6 ? (numeric_addr ? 33: 18) : 18)
#define WID_GW_DEFAULT(af) \
((af) == AF_INET6 ? (numeric_addr ? 29 : 18) : 18)
-#define WID_IF_DEFAULT(af) ((af) == AF_INET6 ? 8 : (Wflag ? 8 : 6))
+#define WID_IF_DEFAULT(af) ((af) == AF_INET6 ? 8 : (Wflag ? 10 : 8))
#endif /*INET6*/
static int wid_dst;
@@ -586,19 +586,18 @@ p_rtable_sysctl(int fibnum, int af)
mib[4] = NET_RT_DUMP;
mib[5] = 0;
mib[6] = fibnum;
- if (sysctl(mib, 7, NULL, &needed, NULL, 0) < 0) {
- err(1, "sysctl: net.route.0.%d.dump.%d estimate", af, fibnum);
- }
-
- if ((buf = malloc(needed)) == 0) {
+ if (sysctl(mib, nitems(mib), NULL, &needed, NULL, 0) < 0)
+ err(EX_OSERR, "sysctl: net.route.0.%d.dump.%d estimate", af,
+ fibnum);
+ if ((buf = malloc(needed)) == NULL)
errx(2, "malloc(%lu)", (unsigned long)needed);
- }
- if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) {
+ if (sysctl(mib, nitems(mib), buf, &needed, NULL, 0) < 0)
err(1, "sysctl: net.route.0.%d.dump.%d", af, fibnum);
- }
lim = buf + needed;
for (next = buf; next < lim; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)next;
+ if (rtm->rtm_version != RTM_VERSION)
+ continue;
/*
* Peek inside header to determine AF
*/
@@ -611,6 +610,7 @@ p_rtable_sysctl(int fibnum, int af)
}
p_rtentry_sysctl(rtm);
}
+ free(buf);
}
static void
@@ -971,9 +971,9 @@ in6_fillscopeid(struct sockaddr_in6 *sa6)
if (IN6_IS_ADDR_LINKLOCAL(&sa6->sin6_addr) ||
IN6_IS_ADDR_MC_NODELOCAL(&sa6->sin6_addr) ||
IN6_IS_ADDR_MC_LINKLOCAL(&sa6->sin6_addr)) {
- /* XXX: override is ok? */
- sa6->sin6_scope_id =
- ntohs(*(u_int16_t *)&sa6->sin6_addr.s6_addr[2]);
+ if (sa6->sin6_scope_id == 0)
+ sa6->sin6_scope_id =
+ ntohs(*(u_int16_t *)&sa6->sin6_addr.s6_addr[2]);
sa6->sin6_addr.s6_addr[2] = sa6->sin6_addr.s6_addr[3] = 0;
}
#endif