summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorgnn <gnn@FreeBSD.org>2008-05-15 20:18:44 +0000
committergnn <gnn@FreeBSD.org>2008-05-15 20:18:44 +0000
commit368bdf05e9188bfc74fa11ed733351ed1c1e5c2c (patch)
treedc4a19cd314451b850213be8dc0f8bf050c8258b /usr.bin
parentf7f31164f19cdffc5fc75cde6ac6d025b796f980 (diff)
downloadFreeBSD-src-368bdf05e9188bfc74fa11ed733351ed1c1e5c2c.zip
FreeBSD-src-368bdf05e9188bfc74fa11ed733351ed1c1e5c2c.tar.gz
Update the kernel to count the number of mbufs and clusters
(all types) used per socket buffer. Add support to netstat to print out all of the socket buffer statistics. Update the netstat manual page to describe the new -x flag which gives the extended output. Reviewed by: rwatson, julian
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/netstat/inet.c46
-rw-r--r--usr.bin/netstat/main.c6
-rw-r--r--usr.bin/netstat/netstat.125
-rw-r--r--usr.bin/netstat/netstat.h1
4 files changed, 67 insertions, 11 deletions
diff --git a/usr.bin/netstat/inet.c b/usr.bin/netstat/inet.c
index 36a8203..60093bd 100644
--- a/usr.bin/netstat/inet.c
+++ b/usr.bin/netstat/inet.c
@@ -142,6 +142,8 @@ sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb)
xsb->sb_cc = sb->sb_cc;
xsb->sb_hiwat = sb->sb_hiwat;
xsb->sb_mbcnt = sb->sb_mbcnt;
+ xsb->sb_mcnt = sb->sb_mcnt;
+ xsb->sb_ccnt = sb->sb_ccnt;
xsb->sb_mbmax = sb->sb_mbmax;
xsb->sb_lowat = sb->sb_lowat;
xsb->sb_flags = sb->sb_flags;
@@ -405,13 +407,19 @@ protopr(u_long off, const char *name, int af1, int proto)
if (Lflag)
printf("%-5.5s %-14.14s %-22.22s\n",
"Proto", "Listen", "Local Address");
+ printf((Aflag && !Wflag) ?
+ "%-5.5s %-6.6s %-6.6s %-18.18s %-18.18s" :
+ "%-5.5s %-6.6s %-6.6s %-22.22s %-22.22s",
+ "Proto", "Recv-Q", "Send-Q",
+ "Local Address", "Foreign Address");
+ if (xflag)
+ printf("%-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %-6.6s %s\n",
+ "R-MBUF", "S-MBUF", "R-CLUS", "S-CLUS",
+ "R-HIWA", "S-HIWA", "R-LOWA", "S-LOWA",
+ "R-BCNT", "S-BCNT", "R-BMAX", "S-BMAX",
+ "(state)");
else
- printf((Aflag && !Wflag) ?
- "%-5.5s %-6.6s %-6.6s %-18.18s %-18.18s %s\n" :
- "%-5.5s %-6.6s %-6.6s %-22.22s %-22.22s %s\n",
- "Proto", "Recv-Q", "Send-Q",
- "Local Address", "Foreign Address",
- "(state)");
+ printf("(state)\n");
first = 0;
}
if (Lflag && so->so_qlimit == 0)
@@ -438,7 +446,8 @@ protopr(u_long off, const char *name, int af1, int proto)
so->so_incqlen, so->so_qlimit);
printf("%-14.14s ", buf1);
} else {
- printf("%6u %6u ", so->so_rcv.sb_cc, so->so_snd.sb_cc);
+ printf("%6u %6u ",
+ so->so_rcv.sb_cc, so->so_snd.sb_cc);
}
if (numeric_port) {
if (inp->inp_vflag & INP_IPV4) {
@@ -494,10 +503,29 @@ protopr(u_long off, const char *name, int af1, int proto)
} /* else nothing printed now */
#endif /* INET6 */
}
+ if (xflag) {
+ if (Lflag)
+ printf("%21s %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u ",
+ " ",
+ so->so_rcv.sb_mcnt, so->so_snd.sb_mcnt,
+ so->so_rcv.sb_ccnt, so->so_snd.sb_ccnt,
+ so->so_rcv.sb_hiwat, so->so_snd.sb_hiwat,
+ so->so_rcv.sb_lowat, so->so_snd.sb_lowat,
+ so->so_rcv.sb_mbcnt, so->so_snd.sb_mbcnt,
+ so->so_rcv.sb_mbmax, so->so_snd.sb_mbmax);
+ else
+ printf("%6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u %6u ",
+ so->so_rcv.sb_mcnt, so->so_snd.sb_mcnt,
+ so->so_rcv.sb_ccnt, so->so_snd.sb_ccnt,
+ so->so_rcv.sb_hiwat, so->so_snd.sb_hiwat,
+ so->so_rcv.sb_lowat, so->so_snd.sb_lowat,
+ so->so_rcv.sb_mbcnt, so->so_snd.sb_mbcnt,
+ so->so_rcv.sb_mbmax, so->so_snd.sb_mbmax);
+ }
if (istcp && !Lflag) {
if (tp->t_state < 0 || tp->t_state >= TCP_NSTATES)
printf("%d", tp->t_state);
- else {
+ else {
printf("%s", tcpstates[tp->t_state]);
#if defined(TF_NEEDSYN) && defined(TF_NEEDFIN)
/* Show T/TCP `hidden state' */
@@ -505,7 +533,7 @@ protopr(u_long off, const char *name, int af1, int proto)
putchar('*');
#endif /* defined(TF_NEEDSYN) && defined(TF_NEEDFIN) */
}
- }
+ }
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 824b4e9..51a3260 100644
--- a/usr.bin/netstat/main.c
+++ b/usr.bin/netstat/main.c
@@ -331,6 +331,7 @@ int rflag; /* show routing tables (or routing stats) */
int sflag; /* show protocol statistics */
int tflag; /* show i/f watchdog timers */
int Wflag; /* wide display */
+int xflag; /* extra information, includes all socket buffer info */
int zflag; /* zero stats */
int interval; /* repeat interval for i/f stats */
@@ -349,7 +350,7 @@ main(int argc, char *argv[])
af = AF_UNSPEC;
- while ((ch = getopt(argc, argv, "AaBbdf:ghI:iLlM:mN:np:rSstuWw:z")) != -1)
+ while ((ch = getopt(argc, argv, "AaBbdf:ghI:iLlM:mN:np:rSstuWw:xz")) != -1)
switch(ch) {
case 'A':
Aflag = 1;
@@ -456,6 +457,9 @@ main(int argc, char *argv[])
interval = atoi(optarg);
iflag = 1;
break;
+ case 'x':
+ xflag = 1;
+ break;
case 'z':
zflag = 1;
break;
diff --git a/usr.bin/netstat/netstat.1 b/usr.bin/netstat/netstat.1
index c1e140f..de87477 100644
--- a/usr.bin/netstat/netstat.1
+++ b/usr.bin/netstat/netstat.1
@@ -49,7 +49,7 @@ depending on the options for the information presented.
.It Xo
.Bk -words
.Nm
-.Op Fl AaLnSW
+.Op Fl AaLnSWx
.Op Fl f Ar protocol_family | Fl p Ar protocol
.Op Fl M Ar core
.Op Fl N Ar system
@@ -85,6 +85,9 @@ is also present,
show network addresses as numbers (as with
.Fl n )
but show ports symbolically.
+If
+.Fl x
+is present display full socket buffer statistics for each internet socket.
.It Xo
.Bk -words
.Nm
@@ -454,6 +457,26 @@ remotely on the interface.
.Pp
For more information about these flags, please refer to
.Xr bpf 4 .
+.Pp
+The
+.Fl x
+flag causes netstat 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 recieve
+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 ,
.Xr nfsstat 1 ,
diff --git a/usr.bin/netstat/netstat.h b/usr.bin/netstat/netstat.h
index ed4f76a..e84e737 100644
--- a/usr.bin/netstat/netstat.h
+++ b/usr.bin/netstat/netstat.h
@@ -51,6 +51,7 @@ extern int rflag; /* show routing tables (or routing stats) */
extern int sflag; /* show protocol statistics */
extern int tflag; /* show i/f watchdog timers */
extern int Wflag; /* wide display */
+extern int xflag; /* extended display, includes all socket buffer info */
extern int zflag; /* zero stats */
extern int interval; /* repeat interval for i/f stats */
OpenPOWER on IntegriCloud