svn commit: trunk/busybox/networking/libiproute

vda at busybox.net vda at busybox.net
Mon Nov 26 18:29:53 UTC 2007


Author: vda
Date: 2007-11-26 10:29:52 -0800 (Mon, 26 Nov 2007)
New Revision: 20547

Log:
iproute: fix a bug where "ip r flush table main" was rejected,
add "ip r flush cache" (however I'm unsure it is really valid syntax)
Add a few comments and stop mixing params and params' keywords.



Modified:
   trunk/busybox/networking/libiproute/iproute.c
   trunk/busybox/networking/libiproute/iprule.c


Changeset:
Modified: trunk/busybox/networking/libiproute/iproute.c
===================================================================
--- trunk/busybox/networking/libiproute/iproute.c	2007-11-26 15:47:41 UTC (rev 20546)
+++ trunk/busybox/networking/libiproute/iproute.c	2007-11-26 18:29:52 UTC (rev 20547)
@@ -111,11 +111,11 @@
 	if (r->rtm_family == AF_INET6) {
 		if (filter.tb) {
 			if (filter.tb < 0) {
-				if (!(r->rtm_flags&RTM_F_CLONED)) {
+				if (!(r->rtm_flags & RTM_F_CLONED)) {
 					return 0;
 				}
 			} else {
-				if (r->rtm_flags&RTM_F_CLONED) {
+				if (r->rtm_flags & RTM_F_CLONED) {
 					return 0;
 				}
 				if (filter.tb == RT_TABLE_LOCAL) {
@@ -366,7 +366,7 @@
 			unsigned mtu;
 			NEXT_ARG();
 			if (index_in_strings(keywords, *argv) == PARM_lock) {
-				mxlock |= (1<<RTAX_MTU);
+				mxlock |= (1 << RTAX_MTU);
 				NEXT_ARG();
 			}
 			if (get_unsigned(&mtu, *argv, 0))
@@ -398,7 +398,7 @@
 				NEXT_ARG();
 			}
 			if ((**argv < '0' || **argv > '9')
-				&& rtnl_rtntype_a2n(&type, *argv) == 0) {
+			 && rtnl_rtntype_a2n(&type, *argv) == 0) {
 				NEXT_ARG();
 				req.r.rtm_type = type;
 				ok |= type_ok;
@@ -518,19 +518,30 @@
 	char *id = NULL;
 	char *od = NULL;
 	static const char keywords[] ALIGN1 =
-		"protocol\0""all\0""dev\0""oif\0""iif\0""via\0""table\0""cache\0" /*all*/
-		"from\0""root\0""match\0""exact\0""to\0"/*root match exact*/;
+		/* "ip route list/flush" parameters: */
+		"protocol\0" "dev\0"   "oif\0"   "iif\0"
+		"via\0"      "table\0" "cache\0"
+		"from\0"     "to\0"
+		/* and possible further keywords */
+		"all\0"
+		"root\0"
+		"match\0"
+		"exact\0"
+		"main\0"
+		;
 	enum {
-		ARG_proto, PARM_all,
-		ARG_dev,
-		ARG_oif,
-		ARG_iif,
-		ARG_via,
-		ARG_table, PARM_cache, /*PARM_all,*/
-		ARG_from, PARM_root, PARM_match, PARM_exact,
-		ARG_to  /*PARM_root, PARM_match, PARM_exact*/
+		KW_proto, KW_dev,   KW_oif,  KW_iif,
+		KW_via,   KW_table, KW_cache,
+		KW_from,  KW_to,
+		/* */
+		KW_all,
+		KW_root,
+		KW_match,
+		KW_exact,
+		KW_main,
 	};
 	int arg, parm;
+
 	iproute_reset_filter();
 	filter.tb = RT_TABLE_MAIN;
 
@@ -539,64 +550,66 @@
 
 	while (*argv) {
 		arg = index_in_substrings(keywords, *argv);
-		if (arg == ARG_proto) {
+		if (arg == KW_proto) {
 			uint32_t prot = 0;
 			NEXT_ARG();
 			filter.protocolmask = -1;
 			if (rtnl_rtprot_a2n(&prot, *argv)) {
-				if (index_in_strings(keywords, *argv) != PARM_all)
+				if (index_in_strings(keywords, *argv) != KW_all)
 					invarg(*argv, "protocol");
 				prot = 0;
 				filter.protocolmask = 0;
 			}
 			filter.protocol = prot;
-		} else if (arg == ARG_dev || arg == ARG_oif) {
+		} else if (arg == KW_dev || arg == KW_oif) {
 			NEXT_ARG();
 			od = *argv;
-		} else if (arg == ARG_iif) {
+		} else if (arg == KW_iif) {
 			NEXT_ARG();
 			id = *argv;
-		} else if (arg == ARG_via) {
+		} else if (arg == KW_via) {
 			NEXT_ARG();
 			get_prefix(&filter.rvia, *argv, do_ipv6);
-		} else if (arg == ARG_table) {
+		} else if (arg == KW_table) { /* table all/cache/main */
 			NEXT_ARG();
 			parm = index_in_substrings(keywords, *argv);
-			if (parm == PARM_cache)
+			if (parm == KW_cache)
 				filter.tb = -1;
-			else if (parm == PARM_all)
+			else if (parm == KW_all)
 				filter.tb = 0;
-			else
+			else if (parm != KW_main)
 				invarg(*argv, "table");
-		} else if (arg == ARG_from) {
+		} else if (arg == KW_cache) { // hmm is it valid - "ip r flush cache"?
+			filter.tb = -1;
+		} else if (arg == KW_from) {
 			NEXT_ARG();
 			parm = index_in_substrings(keywords, *argv);
-			if (parm == PARM_root) {
+			if (parm == KW_root) {
 				NEXT_ARG();
 				get_prefix(&filter.rsrc, *argv, do_ipv6);
-			} else if (parm == PARM_match) {
+			} else if (parm == KW_match) {
 				NEXT_ARG();
 				get_prefix(&filter.msrc, *argv, do_ipv6);
 			} else {
-				if (parm == PARM_exact)
+				if (parm == KW_exact)
 					NEXT_ARG();
 				get_prefix(&filter.msrc, *argv, do_ipv6);
 				filter.rsrc = filter.msrc;
 			}
-		} else {
-			/* parm = arg; // would be more plausible, we reuse arg here */
-			if (arg == ARG_to) {
+		} else { /* "to" is the default parameter */
+			if (arg == KW_to) {
 				NEXT_ARG();
 				arg = index_in_substrings(keywords, *argv);
 			}
-			if (arg == PARM_root) {
+			/* parm = arg; - would be more plausible, but we reuse 'arg' here */
+			if (arg == KW_root) {
 				NEXT_ARG();
 				get_prefix(&filter.rdst, *argv, do_ipv6);
-			} else if (arg == PARM_match) {
+			} else if (arg == KW_match) {
 				NEXT_ARG();
 				get_prefix(&filter.mdst, *argv, do_ipv6);
-			} else {
-				if (arg == PARM_exact)
+			} else { /* "to exact" is the default */
+				if (arg == KW_exact)
 					NEXT_ARG();
 				get_prefix(&filter.mdst, *argv, do_ipv6);
 				filter.rdst = filter.mdst;
@@ -610,7 +623,6 @@
 	}
 
 	xrtnl_open(&rth);
-
 	ll_init_map(&rth);
 
 	if (id || od)  {
@@ -631,7 +643,7 @@
 	if (flush) {
 		char flushb[4096-512];
 
-		if (filter.tb == -1) {
+		if (filter.tb == -1) { /* "flush table cache" */
 			if (do_ipv6 != AF_INET6)
 				iproute_flush_cache();
 			if (do_ipv6 == AF_INET)

Modified: trunk/busybox/networking/libiproute/iprule.c
===================================================================
--- trunk/busybox/networking/libiproute/iprule.c	2007-11-26 15:47:41 UTC (rev 20546)
+++ trunk/busybox/networking/libiproute/iprule.c	2007-11-26 18:29:52 UTC (rev 20547)
@@ -17,7 +17,6 @@
  */
 
 #include <syslog.h>
-//#include <sys/socket.h>
 #include <netinet/in.h>
 #include <netinet/ip.h>
 #include <arpa/inet.h>




More information about the busybox-cvs mailing list