Subject: misc/3227
To: None <netbsd-bugs@netbsd.org>
From: Jason R. Fink <jrf@adresearch.com>
List: netbsd-bugs
Date: 07/14/2003 15:27:29
Here is an updated patch for the flushall option on 1.6.1, when
I get a new current box going I will try it there. It seems to work
rather well, although I had to make a few minor changes, for those
interested, give it a go:

Index: keywords.h
===================================================================
RCS file: /cvsroot/src/sbin/route/keywords.h,v
retrieving revision 1.6
diff -u -r1.6 keywords.h
--- keywords.h  2001/01/27 04:51:25     1.6
+++ keywords.h  2003/07/14 19:23:27
@@ -56,3 +56,4 @@
 #define        K_X25   46
 #define        K_XNS   47
 #define        K_XRESOLVE      48
+#define K_FLUSHALL     49
Index: keywords.c
===================================================================
RCS file: /cvsroot/src/sbin/route/keywords.c,v
retrieving revision 1.4
diff -u -r1.4 keywords.c
--- keywords.c  2001/01/27 04:51:25     1.4
+++ keywords.c  2003/07/14 19:23:27
@@ -54,6 +54,7 @@
        {"x25", K_X25},
        {"xns", K_XNS},
        {"xresolve", K_XRESOLVE},
+        {"flushall", K_FLUSHALL},
        {0, 0}
 };

Index: route.c
===================================================================
RCS file: /cvsroot/src/sbin/route/route.c,v
retrieving revision 1.54.2.4
diff -u -r1.54.2.4 route.c
--- route.c     2003/01/26 09:40:35     1.54.2.4
+++ route.c     2003/07/14 19:23:28
@@ -90,7 +90,7 @@
 static int inet6_makenetandmask __P((struct sockaddr_in6 *));
 #endif
 static int getaddr __P((int, char *, struct hostent **));
-static int flushroutes __P((int, char *[]));
+static int flushroutes __P((int, char *[], int));
 #ifndef SMALL
 static int prefixlen __P((char *));
 static int x25_makemask __P((void));
@@ -218,7 +218,7 @@
        case K_ADD:
        case K_DELETE:
                if (doflush)
-                       (void)flushroutes(1, argv);
+                       (void)flushroutes(1, argv, 0);
                return newroute(argc, argv);

        case K_SHOW:
@@ -232,8 +232,12 @@

 #endif /* SMALL */
        case K_FLUSH:
-               return flushroutes(argc, argv);
+               return flushroutes(argc, argv, 0);
+               break;

+       case K_FLUSHALL:
+               return flushroutes(argc, argv, 1);
+               break;
        no_cmd:
        default:
                usage(*argv);
@@ -246,9 +250,10 @@
  * associated with network interfaces.
  */
 static int
-flushroutes(argc, argv)
+flushroutes(argc, argv, doall)
        int argc;
        char *argv[];
+       int doall;
 {
        size_t needed;
        int mib[6], rlen, seqno;
@@ -317,7 +322,8 @@
                rtm = (struct rt_msghdr *)next;
                if (verbose)
                        print_rtmsg(rtm, rtm->rtm_msglen);
-               if ((rtm->rtm_flags & RTF_GATEWAY) == 0)
+               if (!(rtm->rtm_flags & (RTF_GATEWAY | RTF_STATIC |
+                                       RTF_LLINFO)) && !doall)
                        continue;
                if (af) {
                        struct sockaddr *sa = (struct sockaddr *)(rtm + 1);