svn commit: trunk/busybox/networking

vodz at busybox.net vodz at busybox.net
Wed Jan 25 16:18:00 UTC 2006


Author: vodz
Date: 2006-01-25 08:17:58 -0800 (Wed, 25 Jan 2006)
New Revision: 13604

Log:
added support /prefix for IPV4 form IPV6 code. Close bug 461

Modified:
   trunk/busybox/networking/route.c


Changeset:
Modified: trunk/busybox/networking/route.c
===================================================================
--- trunk/busybox/networking/route.c	2006-01-25 15:58:04 UTC (rev 13603)
+++ trunk/busybox/networking/route.c	2006-01-25 16:17:58 UTC (rev 13604)
@@ -184,14 +184,33 @@
 
 	{
 		const char *target = *args++;
+		char *prefix;
 
+		/* recognize x.x.x.x/mask format. */
+		prefix = strchr(target, '/');
+		if(prefix) {
+			int prefix_len;
+
+			prefix_len = bb_xgetularg10_bnd(prefix+1, 0, 32);
+			mask_in_addr(rt) = htonl( ~ (0xffffffffUL >> prefix_len));
+			*prefix = '\0';
+#if HAVE_NEW_ADDRT
+			rt.rt_genmask.sa_family = AF_INET;
+#endif
+		} else {
+			/* Default netmask. */
+			netmask = bb_INET_default;
+		}
 		/* Prefer hostname lookup is -host flag (xflag==1) was given. */
 		isnet = INET_resolve(target, (struct sockaddr_in *) &rt.rt_dst,
 							 (xflag & HOST_FLAG));
 		if (isnet < 0) {
 			bb_error_msg_and_die("resolving %s", target);
 		}
-
+		if(prefix) {
+			/* do not destroy prefix for process args */
+			*prefix = '/';
+		}
 	}
 
 	if (xflag) {		/* Reinit isnet if -net or -host was specified. */
@@ -201,8 +220,6 @@
 	/* Fill in the other fields. */
 	rt.rt_flags = ((isnet) ? RTF_UP : (RTF_UP | RTF_HOST));
 
-	netmask = bb_INET_default;
-
 	while (*args) {
 		int k = kw_lookup(tbl_ipvx, &args);
 		const char *args_m1 = args[-1];




More information about the busybox-cvs mailing list