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);