Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sbin/route Support -c <count> option for route monitor



details:   https://anonhg.NetBSD.org/src/rev/1d85cfbcdd24
branches:  trunk
changeset: 824733:1d85cfbcdd24
user:      ozaki-r <ozaki-r%NetBSD.org@localhost>
date:      Fri Jun 16 04:40:16 2017 +0000

description:
Support -c <count> option for route monitor

route command exits if it receives <count> routing messages where
<count> is a value specified by -c.

The option is useful to get only particular message(s) in a test script.

diffstat:

 sbin/route/route.8 |  13 +++++++++++--
 sbin/route/route.c |  31 ++++++++++++++++++++++++-------
 2 files changed, 35 insertions(+), 9 deletions(-)

diffs (113 lines):

diff -r 6b0b00ad31fb -r 1d85cfbcdd24 sbin/route/route.8
--- a/sbin/route/route.8        Fri Jun 16 04:16:18 2017 +0000
+++ b/sbin/route/route.8        Fri Jun 16 04:40:16 2017 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: route.8,v 1.56 2016/04/04 07:37:07 ozaki-r Exp $
+.\"    $NetBSD: route.8,v 1.57 2017/06/16 04:40:16 ozaki-r Exp $
 .\"
 .\" Copyright (c) 1983, 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)route.8    8.4 (Berkeley) 6/1/94
 .\"
-.Dd March 30, 2016
+.Dd June 16, 2017
 .Dt ROUTE 8
 .Os
 .Sh NAME
@@ -139,8 +139,17 @@
 .Nm
 .Op Fl n
 .Cm monitor
+.Op Fl c Ar count
 .Ed
 .Pp
+If
+.Ar count
+is specified,
+.Nm
+exits after receiving
+.Ar count
+routing messages.
+.Pp
 The flush command has the syntax
 .Pp
 .Bd -filled -offset indent -compact
diff -r 6b0b00ad31fb -r 1d85cfbcdd24 sbin/route/route.c
--- a/sbin/route/route.c        Fri Jun 16 04:16:18 2017 +0000
+++ b/sbin/route/route.c        Fri Jun 16 04:40:16 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: route.c,v 1.155 2017/03/17 16:13:44 roy Exp $  */
+/*     $NetBSD: route.c,v 1.156 2017/06/16 04:40:16 ozaki-r Exp $      */
 
 /*
  * Copyright (c) 1983, 1989, 1991, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)route.c    8.6 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: route.c,v 1.155 2017/03/17 16:13:44 roy Exp $");
+__RCSID("$NetBSD: route.c,v 1.156 2017/06/16 04:40:16 ozaki-r Exp $");
 #endif
 #endif /* not lint */
 
@@ -108,7 +108,7 @@
 static int prefixlen(const char *, struct sou *);
 #ifndef SMALL
 static void interfaces(void);
-__dead static void monitor(void);
+static void monitor(int, char * const *);
 static int print_getmsg(struct rt_msghdr *, int, struct sou *);
 static const char *linkstate(struct if_msghdr *);
 static sup readtag(sup, const char *);
@@ -236,7 +236,7 @@
 
 #ifndef SMALL
        case K_MONITOR:
-               monitor();
+               monitor(argc, argv);
                return 0;
 
 #endif /* SMALL */
@@ -1105,20 +1105,37 @@
 }
 
 static void
-monitor(void)
+monitor(int argc, char * const *argv)
 {
-       int n;
+       int i, n;
        union {
                char msg[2048];
                struct rt_msghdr hdr;
        } u;
+       int count = 0;
+
+       /* usage: route monitor [-c <count>] */
+
+       /* eat "monitor" */
+       argc -= 1;
+       argv += 1;
+
+       /* parse [-c <count>] */
+       if (argc > 0) {
+               if (argc != 2)
+                       usage(argv[0]);
+               if (strcmp(argv[0], "-c") != 0)
+                       usage(argv[0]);
+
+               count = atoi(argv[1]);
+       }
 
        verbose = 1;
        if (debugonly) {
                interfaces();
                exit(0);
        }
-       for(;;) {
+       for(i = 0; count == 0 || i < count; i++) {
                time_t now;
                n = prog_read(sock, &u, sizeof(u));
                now = time(NULL);



Home | Main Index | Thread Index | Old Index