Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Jul 2006 15:08:19 -0300
From:      "Tobias P. Santos" <tobias@netconsultoria.com.br>
To:        freebsd-ipfw@freebsd.org
Subject:   ipfw pipe changes from 5.4 to 6.1-RELEASE
Message-ID:  <44CA5293.6070505@netconsultoria.com.br>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------050108030907000608040909
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello!

I've noticed some changes in ipfw, as follows:


RELEASE-5.4:

# ipfw pipe 1 config bw 64Kbit/s
# ipfw pipe 2 config bw 512Kbit/s
# ipfw pipe 3 config bw 512Kbit/s mask dst-ip 0xfffffffc
# ipfw pipe show
00001:  64.000 Kbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
     mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
00002: 512.000 Kbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
     mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
00003: 512.000 Kbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
     mask: 0x00 0x00000000/0x0000 -> 0xfffffffc/0x0000


RELEASE-6.1

# ipfw pipe 1 config bw 64Kbit/s
# ipfw pipe 2 config bw 512Kbit/s
# ipfw pipe 3 config bw 512Kbit/s mask dst-ip 0xfffffffc
# ipfw pipe show
00001:  64.000 Kbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
00002: 512.000 Kbit/s    0 ms   50 sl. 0 queues (1 buckets) droptail
00003: 512.000 Kbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail


In RELEASE-6.1, the line containing mask options is not shown.
IMHO, it should be displayed because it's part of pipe attributes.
I went to check the differences in the source code and it seems that 
adding IPv6 to ipfw2.c made the 'mask' line appears only when there is a 
flow to that pipe.
I made some changes trying to revert to the previous behaviour, but as I 
am not keen to this kind of programming, I'd like to someone more 
experienced to take a look at it.
It seems to work, but currently I can't check whether IPv6 masks are 
shown correctly.

I need the 'old' behaviour because some shell scripts stopped working 
when we upgraded our server.

Thank you,
Tobias.


--------------050108030907000608040909
Content-Type: text/plain;
 name="ipfw2.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ipfw2.diff"

--- ipfw2.c.orig	Fri Jul 28 09:52:04 2006
+++ ipfw2.c	Fri Jul 28 12:05:29 2006
@@ -2004,9 +2004,32 @@
 {
 	int l;
 	int index_printed, indexes = 0;
-	char buff[255];
+	int ipv6_masks = 0;
+	char buff[255], buff2[255];
 	struct protoent *pe;
 
+	inet_ntop(AF_INET6, &(fs->flow_mask.src_ip6),
+	    buff, sizeof(buff));
+	inet_ntop(AF_INET6, &(fs->flow_mask.dst_ip6),
+	    buff2, sizeof(buff2));
+
+	if (fs->flow_mask.flow_id6 != 0 || strlen(buff) > 2 || strlen(buff2) > 2)
+		ipv6_masks = 1;
+
+	if (!ipv6_masks) {
+		printf("    "
+ 		   "mask: 0x%02x 0x%08x/0x%04x -> 0x%08x/0x%04x\n",
+		    fs->flow_mask.proto,
+		    fs->flow_mask.src_ip, fs->flow_mask.src_port,
+		    fs->flow_mask.dst_ip, fs->flow_mask.dst_port);
+	} else {
+		printf("    "
+		"mask: proto: 0x%02x, flow_id: 0x%08x,  %s/0x%04x -> %s/0x%04x\n",
+		    fs->flow_mask.proto, fs->flow_mask.flow_id6,
+		    buff, fs->flow_mask.src_port,
+		    buff2, fs->flow_mask.dst_port);
+	}
+
 	if (fs->rq_elements == 0)
 		return;
 
@@ -2027,11 +2050,6 @@
 			if (indexes > 0)	/* currently a no-op */
 				printf("\n");
 			indexes++;
-			printf("    "
-			    "mask: 0x%02x 0x%08x/0x%04x -> 0x%08x/0x%04x\n",
-			    fs->flow_mask.proto,
-			    fs->flow_mask.src_ip, fs->flow_mask.src_port,
-			    fs->flow_mask.dst_ip, fs->flow_mask.dst_port);
 
 			printf("BKT Prot ___Source IP/port____ "
 			    "____Dest. IP/port____ "
@@ -2069,14 +2087,6 @@
 			if (indexes > 0)
 				printf("\n");
 			indexes++;
-			printf("\n        mask: proto: 0x%02x, flow_id: 0x%08x,  ",
-			    fs->flow_mask.proto, fs->flow_mask.flow_id6);
-			inet_ntop(AF_INET6, &(fs->flow_mask.src_ip6),
-			    buff, sizeof(buff));
-			printf("%s/0x%04x -> ", buff, fs->flow_mask.src_port);
-			inet_ntop( AF_INET6, &(fs->flow_mask.dst_ip6),
-			    buff, sizeof(buff) );
-			printf("%s/0x%04x\n", buff, fs->flow_mask.dst_port);
 
 			printf("BKT ___Prot___ _flow-id_ "
 			    "______________Source IPv6/port_______________ "

--------------050108030907000608040909--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44CA5293.6070505>