[BusyBox-cvs] busybox/networking/libiproute ip_common.h,1.2,1.3 iproute.c,1.5,1.6

Glenn McGrath bug1 at busybox.net
Mon Dec 2 00:35:27 UTC 2002


Update of /var/cvs/busybox/networking/libiproute
In directory winder:/tmp/cvs-serv7018/libiproute

Modified Files:
	ip_common.h iproute.c 
Log Message:
Save a hundred bytes or so on the do_iproute function


Index: ip_common.h
===================================================================
RCS file: /var/cvs/busybox/networking/libiproute/ip_common.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- ip_common.h	1 Dec 2002 23:04:06 -0000	1.2
+++ ip_common.h	2 Dec 2002 00:35:23 -0000	1.3
@@ -9,10 +9,8 @@
 extern int ipaddr_list_link(int argc, char **argv);
 extern int iproute_monitor(int argc, char **argv);
 extern void iplink_usage(void) __attribute__((noreturn));
-extern void iproute_reset_filter(void);
 extern void ipaddr_reset_filter(int);
 extern void ipneigh_reset_filter(void);
-extern int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg);
 extern int do_ipaddr(int argc, char **argv);
 extern int do_iproute(int argc, char **argv);
 extern int do_iprule(int argc, char **argv);

Index: iproute.c
===================================================================
RCS file: /var/cvs/busybox/networking/libiproute/iproute.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- iproute.c	28 Nov 2002 12:01:25 -0000	1.5
+++ iproute.c	2 Dec 2002 00:35:23 -0000	1.6
@@ -30,7 +30,6 @@
 
 #include "rt_names.h"
 #include "utils.h"
-#include "ip_common.h"
 
 #include "busybox.h"
 
@@ -60,7 +59,7 @@
 	inet_prefix msrc;
 } filter;
 
-int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
+static int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
 {
 	FILE *fp = (FILE*)arg;
 	struct rtmsg *r = NLMSG_DATA(n);
@@ -238,7 +237,7 @@
 	return 0;
 }
 
-int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
+static int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
 {
 	struct rtnl_handle rth;
 	struct {
@@ -402,6 +401,13 @@
 	return sendto(rth->fd, (void*)&req, sizeof(req), 0, (struct sockaddr*)&nladdr, sizeof(nladdr));
 }
 
+static void iproute_reset_filter(void)
+{
+	memset(&filter, 0, sizeof(filter));
+	filter.mdst.bitlen = -1;
+	filter.msrc.bitlen = -1;
+}
+
 static int iproute_list(int argc, char **argv)
 {
 	int do_ipv6 = preferred_family;
@@ -516,7 +522,7 @@
 }
 
 
-int iproute_get(int argc, char **argv)
+static int iproute_get(int argc, char **argv)
 {
 	struct rtnl_handle rth;
 	struct {
@@ -671,54 +677,46 @@
 	exit(0);
 }
 
-void iproute_reset_filter()
-{
-	memset(&filter, 0, sizeof(filter));
-	filter.mdst.bitlen = -1;
-	filter.msrc.bitlen = -1;
-}
-
 int do_iproute(int argc, char **argv)
 {
-	if (argc < 1) {
-		return iproute_list(0, NULL);
-	}
-	
-	if (matches(*argv, "add") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "replace") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "prepend") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "append") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "test") == 0) {
-		return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "delete") == 0) {
-		return iproute_modify(RTM_DELROUTE, 0,
-				      argc-1, argv+1);
-	}
-	if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0
-	    || matches(*argv, "lst") == 0) {
-		return iproute_list(argc-1, argv+1);
+	const char *ip_route_commands[] = { "add", "append", "change", "chg",
+		"delete", "get", "list", "show", "prepend", "replace", "test", 0 };
+	unsigned short command_num = 6;
+	unsigned int flags = 0;
+	int cmd = RTM_NEWROUTE;
+
+	if (*argv) {
+		command_num = compare_string_array(ip_route_commands, *argv);
 	}
-	if (matches(*argv, "get") == 0) {
-		return iproute_get(argc-1, argv+1);
+	switch(command_num) {
+		case 0: /* add*/
+			flags = NLM_F_CREATE|NLM_F_EXCL;
+			break;
+		case 1: /* append */
+			flags = NLM_F_CREATE|NLM_F_APPEND;
+			break;
+		case 2: /* change */
+		case 3: /* chg */
+			flags = NLM_F_REPLACE;
+			break;
+		case 4: /* delete */
+			cmd = RTM_DELROUTE;
+			break;
+		case 5: /* get */
+			return iproute_get(argc-1, argv+1);
+		case 6: /* list */
+		case 7: /* show */
+			return iproute_list(argc-1, argv+1);
+		case 8: /* prepend */
+			flags = NLM_F_CREATE;
+		case 9: /* replace */
+			flags = NLM_F_CREATE|NLM_F_REPLACE;
+		case 10: /* test */
+			flags = NLM_F_EXCL;
+		default:
+			error_msg_and_die("Unknown command %s", *argv);
 	}
-	error_msg_and_die("Command \"%s\" is unknown, try \"ip route help\".", *argv);
+
+	return iproute_modify(cmd, flags, argc-1, argv+1);
 }
 




More information about the busybox-cvs mailing list