bin/145934: [patch] add count option to netstat

Dmitry Banshchikov me at ubique.spb.ru
Thu Apr 22 07:00:14 UTC 2010


>Number:         145934
>Category:       bin
>Synopsis:       [patch] add count option to netstat
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Thu Apr 22 07:00:12 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Dmitry Banshchikov
>Release:        FreeBSD 8.0-RELEASE
>Organization:
>Environment:
>Description:
Allows user to specify -c for netstat, to repeat display output in case of -w option(Similar to -c option of iostat utility)

Example usage:
#./netstat -w2 -c3
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
        20     0       1830          5     0        334     0
         9     0       3037          9     0       1246     0
        14     0       1268          7     0        658     0
#


>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- if.c	2009-10-25 04:10:29.000000000 +0300
+++ if.c	2010-04-21 11:32:15.000000000 +0400
@@ -676,6 +676,10 @@
 	if (!first)
 		putchar('\n');
 	fflush(stdout);
+	if (cflag)
+		count--;
+	if (count < 0 && cflag)
+		exit(0);
 	oldmask = sigblock(sigmask(SIGALRM));
 	while (!signalled)
 		sigpause(0);
--- main.c	2009-10-25 04:10:29.000000000 +0300
+++ main.c	2010-04-22 10:30:57.000000000 +0400
@@ -322,6 +322,7 @@
 int	aflag;		/* show all sockets (including servers) */
 int	Bflag;		/* show information about bpf consumers */
 int	bflag;		/* show i/f total bytes in/out */
+int	cflag;		/* repeat display */
 int	dflag;		/* show i/f dropped packets */
 int	gflag;		/* show group (multicast) routing or stats */
 int	hflag;		/* show counters in human readable format */
@@ -339,6 +340,7 @@
 int	zflag;		/* zero stats */
 
 int	interval;	/* repeat interval for i/f stats */
+int	count;		/* repeat display output */
 
 char	*interface;	/* desired i/f for stats, or NULL for all i/fs */
 int	unit;		/* unit number for above */
@@ -354,7 +356,7 @@
 
 	af = AF_UNSPEC;
 
-	while ((ch = getopt(argc, argv, "AaBbdf:ghI:iLlM:mN:np:rSstuWw:xz")) != -1)
+	while ((ch = getopt(argc, argv, "AaBbc:df:ghI:iLlM:mN:np:rSstuWw:xz")) != -1)
 		switch(ch) {
 		case 'A':
 			Aflag = 1;
@@ -368,6 +370,10 @@
 		case 'b':
 			bflag = 1;
 			break;
+		case 'c':
+			cflag = 1;
+			count = atoi(optarg);
+			break;
 		case 'd':
 			dflag = 1;
 			break;
--- netstat.1	2009-10-25 04:10:29.000000000 +0300
+++ netstat.1	2010-04-22 10:27:40.000000000 +0400
@@ -132,6 +132,7 @@
 .Bk -words
 .Nm
 .Fl w Ar wait
+.Op Fl c Ar count
 .Op Fl I Ar interface
 .Op Fl d
 .Op Fl M Ar core
@@ -141,7 +142,9 @@
 At intervals of
 .Ar wait
 seconds,
-display the information regarding packet
+display
+.Ar count
+times the information regarding packet
 traffic on all configured network interfaces
 or a single
 .Ar interface .
--- netstat.h	2009-10-25 04:10:29.000000000 +0300
+++ netstat.h	2010-04-22 10:29:12.000000000 +0400
@@ -39,6 +39,7 @@
 extern int	Aflag;	/* show addresses of protocol control block */
 extern int	aflag;	/* show all sockets (including servers) */
 extern int	bflag;	/* show i/f total bytes in/out */
+extern int	cflag;	/* repeat display output */
 extern int	dflag;	/* show i/f dropped packets */
 extern int	gflag;	/* show group (multicast) routing or stats */
 extern int	hflag;	/* show counters in human readable format */
@@ -55,6 +56,7 @@
 extern int	zflag;	/* zero stats */
 
 extern int	interval; /* repeat interval for i/f stats */
+extern int	count;	  /* repeat display output */
 
 extern char	*interface; /* desired i/f for stats, or NULL for all i/fs */
 extern int	unit;	/* unit number for above */


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list