Hi,

This is a patch that I have backported to -CURRENT, which is originally
made against RELENG_6_2.

I have received several feature requests from our local community which
they wanted to have a top(1)'s '-d' alike feature for netstat, so they
will be able to use netstat(1) as a handy brick when building monitoring
scripts.

So here is the patchset that adds a '-q' option, which accepts a
numerical argument meaning how many outputs are going out before we exit.

Comments?  (I think 'q' is arguable, but netstat(1) has too many options :-)

Cheers,
-- 
Xin LI <[EMAIL PROTECTED]>      http://www.delphij.net/
FreeBSD - The Power to Serve!
Index: if.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/netstat/if.c,v
retrieving revision 1.66
diff -u -p -r1.66 if.c
--- if.c        8 Nov 2006 15:15:05 -0000       1.66
+++ if.c        18 Feb 2007 13:37:32 -0000
@@ -676,6 +676,8 @@ loop:
        (void)alarm(interval1);
        line++;
        first = 0;
+       if (qflag && (qval-- == 0))
+               exit(0);
        if (line == 21)
                goto banner;
        else
Index: main.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/netstat/main.c,v
retrieving revision 1.83
diff -u -p -r1.83 main.c
--- main.c      28 Jul 2006 16:16:40 -0000      1.83
+++ main.c      18 Feb 2007 13:29:11 -0000
@@ -295,6 +295,8 @@ int mflag;          /* show memory stats */
 int    numeric_addr;   /* show addresses numerically */
 int    numeric_port;   /* show ports numerically */
 static int pflag;      /* show given protocol */
+int    qflag;          /* whether to quit after specified outputs */
+int    qval;           /* how much outputs before we exit */
 int    rflag;          /* show routing tables (or routing stats) */
 int    sflag;          /* show protocol statistics */
 int    tflag;          /* show i/f watchdog timers */
@@ -316,7 +318,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:q:rSstuWw:z")) 
!= -1)
                switch(ch) {
                case 'A':
                        Aflag = 1;
@@ -400,6 +402,10 @@ main(int argc, char *argv[])
                        }
                        pflag = 1;
                        break;
+               case 'q':
+                       qval = atoi(optarg);
+                       qflag = 1;
+                       break;
                case 'r':
                        rflag = 1;
                        break;
Index: netstat.1
===================================================================
RCS file: /home/ncvs/src/usr.bin/netstat/netstat.1,v
retrieving revision 1.57
diff -u -p -r1.57 netstat.1
--- netstat.1   29 Sep 2006 15:20:46 -0000      1.57
+++ netstat.1   18 Feb 2007 13:40:17 -0000
@@ -130,6 +130,7 @@ is also present, print interface names u
 .Nm
 .Fl w Ar wait
 .Op Fl I Ar interface
+.Op Fl q Ar howmany
 .Op Fl d
 .Op Fl M Ar core
 .Op Fl N Ar system
@@ -143,6 +144,11 @@ traffic on all configured network interf
 or a single
 .Ar interface .
 If
+.Fl q
+is also present, exit after
+.Ar howmany
+outputs.
+If
 .Fl d
 is also present, show the number of dropped packets.
 .It Xo
Index: netstat.h
===================================================================
RCS file: /home/ncvs/src/usr.bin/netstat/netstat.h,v
retrieving revision 1.48
diff -u -p -r1.48 netstat.h
--- netstat.h   28 Jul 2006 16:09:18 -0000      1.48
+++ netstat.h   18 Feb 2007 13:19:41 -0000
@@ -47,6 +47,8 @@ extern int    Lflag;  /* show size of listen
 extern int     mflag;  /* show memory stats */
 extern int     numeric_addr;   /* show addresses numerically */
 extern int     numeric_port;   /* show ports numerically */
+extern int     qflag;  /* whether to quit after specified outputs */
+extern int     qval;   /* how much outputs before we exit */
 extern int     rflag;  /* show routing tables (or routing stats) */
 extern int     sflag;  /* show protocol statistics */
 extern int     tflag;  /* show i/f watchdog timers */

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to