Date: Mon, 23 Aug 2004 18:57:18 +0200 From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: Pawel Malachowski <pawmal-posting@freebsd.lublin.pl> Cc: FreeBSD-gnats-submit@FreeBSD.org Subject: Re: bin/70311: ipfw(8) pipe/queue show N displays data not only for N Message-ID: <20040823165718.GQ30151@darkness.comp.waw.pl> In-Reply-To: <20040811163426.E06283474C2@shellma.zin.lublin.pl> References: <20040811163426.E06283474C2@shellma.zin.lublin.pl>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Wed, Aug 11, 2004 at 06:34:26PM +0200, Pawel Malachowski wrote:
+> 2. After patching:
+> `ipfw pipe show N' displays data for pipe N and queues with parentpipe=N.
+> `ipfw queue show N' displays data for queue N and no pipes.
+>
+> *** /usr/src/sbin/ipfw/ipfw2.c.orig Wed Aug 11 18:08:27 2004
+> --- /usr/src/sbin/ipfw/ipfw2.c Wed Aug 11 18:27:21 2004
+> ***************
+> *** 1498,1504 ****
+> next = (char *)p + l;
+> nbytes -= l;
+>
+> ! if (rulenum != 0 && rulenum != p->pipe_nr)
+> continue;
+>
+> /*
+> --- 1498,1504 ----
+> next = (char *)p + l;
+> nbytes -= l;
+>
+> ! if ( (rulenum != 0 && rulenum != p->pipe_nr) || (do_pipe==2) )
+> continue;
+>
+> /*
+> ***************
+> *** 1532,1537 ****
+> --- 1532,1542 ----
+> l = sizeof(*fs) + fs->rq_elements * sizeof(*q);
+> next = (char *)fs + l;
+> nbytes -= l;
+> +
+> + if (rulenum != 0 && ((rulenum != fs->fs_nr && do_pipe==2)
+> + || (rulenum != fs->parent_nr && do_pipe==1)))
+> + continue;
+> +
+> q = (struct dn_flow_queue *)(fs+1);
+> sprintf(prefix, "q%05d: weight %d pipe %d ",
+> fs->fs_nr, fs->weight, fs->parent_nr);
This patch doesn't work for me as expected. It shows all pipes and queues
with parentpipe=N.
Could you check this patch (it is against -CURRENT, but it should be easy
to apply it to 4.x):
Index: ipfw2.c
===================================================================
RCS file: /private/FreeBSD/src/sbin/ipfw/ipfw2.c,v
retrieving revision 1.54
diff -u -p -r1.54 ipfw2.c
--- ipfw2.c 12 Aug 2004 22:06:55 -0000 1.54
+++ ipfw2.c 23 Aug 2004 16:51:26 -0000
@@ -1564,6 +1564,12 @@ list_pipes(void *data, uint nbytes, int
l = sizeof(*fs) + fs->rq_elements * sizeof(*q);
next = (char *)fs + l;
nbytes -= l;
+
+ if (rulenum != 0 && ((rulenum != fs->fs_nr && do_pipe == 2) ||
+ (rulenum != fs->parent_nr && do_pipe == 1))) {
+ continue;
+ }
+
q = (struct dn_flow_queue *)(fs+1);
sprintf(prefix, "q%05d: weight %d pipe %d ",
fs->fs_nr, fs->weight, fs->parent_nr);
Basically, it looks that first addition of 'do_pipe==2' is bogus.
PS. Could you use unified diff format for patches generation?
--
Pawel Jakub Dawidek http://www.FreeBSD.org
pjd@FreeBSD.org http://garage.freebsd.pl
FreeBSD committer Am I Evil? Yes, I Am!
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)
iD8DBQFBKiHuForvXbEpPzQRAr79AKChjiIY5ShwiIU+KZO76i1LfXhOOACfTQAm
+gD5Y8Oo0SVqDdg5d28LbGk=
=mOse
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040823165718.GQ30151>
