addition to ipfw table..

Julian Elischer julian at elischer.org
Thu Apr 17 02:47:52 UTC 2008


this change allows one to type

ipfw table 2 add 1.1.1.1:255.255.255.0 0
in addition to the currently acceptable 1.1.1.1/24 0

The reason is that some programs supply the netmask in
that (mask) form and a shell script trying to add it to a table
has a hard time converting it to the currently acceptable form
(the latter).

I do know it won't handle non contiguous masks well but as the
ipfw ABI code only accepts a network mask length instead of a
mask, there's not much that can be done.
I may suggest a later fix for that but it will break the ABI.

comments?



-------------- next part --------------
Index: ipfw2.c
===================================================================
RCS file: /usr/local/cvsroot/freebsd/src/sbin/ipfw/ipfw2.c,v
retrieving revision 1.118
diff -d -u -r1.118 ipfw2.c
--- ipfw2.c	27 Feb 2008 13:52:33 -0000	1.118
+++ ipfw2.c	17 Apr 2008 02:46:34 -0000
@@ -5856,8 +5856,22 @@
 			ent.masklen = atoi(p);
 			if (ent.masklen > 32)
 				errx(EX_DATAERR, "bad width ``%s''", p);
-		} else
-			ent.masklen = 32;
+		} else {
+			p = strchr(*av, ':');
+ 			if (p) {
+				u_int32_t tempint;
+				*p++ = '\0';
+				if (!inet_aton(p, (struct in_addr *)&tempint ))
+					errx(EX_DATAERR,
+					    "bad netmask ``%s''", p);
+				if (tempint)
+					ent.masklen =
+					    33 - ffs((~ntohl(tempint)) + 1);
+				else
+					ent.masklen = 0;
+			} else
+				ent.masklen = 32;
+		}
 		if (lookup_host(*av, (struct in_addr *)&ent.addr) != 0)
 			errx(EX_NOHOST, "hostname ``%s'' unknown", *av);
 		ac--; av++;


More information about the freebsd-net mailing list