On Mon, 2006-03-13 at 21:39 -0500, jamal wrote:
> On Tue, 2006-14-03 at 12:29 +1000, Russell Stuart wrote:
> > On Sat, 2006-03-11 at 08:11 -0500, jamal wrote:
> > > On Fri, 2006-10-02 at 12:33 +1000, Russell Stuart wrote:
> > > > This patch adds a "divisor" option to tc's "sample"
> > > > clause:
> > >
> > > While this looks right - can we have more test data with tc filter ls
> > > both before and after your fix? Specify divisor of 256 and 16 for
> > > example. Show that for the 256 it is the same as before and for 16 it
> > > does the right thing.
> >
> > With patch, divisor 256:
>
> Thanks.
> Looks like it is doing the right thing - Although sometimes the only way
> to really see things is to send some traffic.
Take my word for it that I have sent mega bytes of traffic
through it. I also used the patch below to view how the
u32 filter was classifying things.
Stephen - it looks like jamal is happy with this patch.
(Jamal - I hope I am not putting words into your mouth.)
Could you detail why you didn't add it to CVS, so I can
attempt to fix any problems you have with it?
Just to be clear, the patch below produces trace. It is
an excellent way of debugging a complex u32 filter - but
should kept away from production systems.
diff -Nur kernel-source-2.6.15.orig/net/sched/cls_u32.c
kernel-source-2.6.15/net/sched/cls_u32.c
--- kernel-source-2.6.15.orig/net/sched/cls_u32.c 2006-01-03
13:21:10.000000000 +1000
+++ kernel-source-2.6.15/net/sched/cls_u32.c 2006-02-23 17:39:27.000000000
+1000
@@ -58,6 +58,8 @@
#include <net/act_api.h>
#include <net/pkt_cls.h>
+#define U32_TRACE(x, args...) printk(x, ## args)
+
struct tc_u_knode
{
struct tc_u_knode *next;
@@ -131,6 +133,11 @@
#endif
int i, r;
+ U32_TRACE(
+ "u32_classify dev=%s len=%04x proto=%02x src=%08x dst=%08x
ports=%08x skblen=%04x ",
+ skb->dev->name, ((u16*)ptr)[1], ptr[9],
+ ((u32*)ptr)[3], ((u32*)ptr)[4], ((u32*)ptr)[5], skb->len);
+
next_ht:
n = ht->ht[sel];
@@ -138,6 +145,9 @@
if (n) {
struct tc_u32_key *key = n->sel.keys;
+
+ U32_TRACE(" handle=%08x", n->handle);
+
#ifdef CONFIG_CLS_U32_PERF
n->pf->rcnt +=1;
j = 0;
@@ -146,6 +156,7 @@
#ifdef CONFIG_CLS_U32_MARK
if ((skb->nfmark & n->mark.mask) != n->mark.val) {
n = n->next;
+ U32_TRACE("~mark");
goto next_knode;
} else {
n->mark.success++;
@@ -156,8 +167,12 @@
if
((*(u32*)(ptr+key->off+(off2&key->offmask))^key->val)&key->mask) {
n = n->next;
+ U32_TRACE("~%08x=%08x&%08x",
+ key->val,
*(u32*)(ptr+key->off+(off2&key->offmask)), key->mask);
goto next_knode;
}
+ U32_TRACE(",%08x=%08x&%08x",
+ key->val,
*(u32*)(ptr+key->off+(off2&key->offmask)), key->mask);
#ifdef CONFIG_CLS_U32_PERF
n->pf->kcnts[j] +=1;
j++;
@@ -171,6 +186,7 @@
#ifdef CONFIG_NET_CLS_IND
if (!tcf_match_indev(skb, n->indev)) {
n = n->next;
+ U32_TRACE("~in-dev");
goto next_knode;
}
#endif
@@ -180,11 +196,15 @@
r = tcf_exts_exec(skb, &n->exts, res);
if (r < 0) {
n = n->next;
+ U32_TRACE("~exts");
goto next_knode;
}
+ U32_TRACE("~OK classid=%08x\n", n->res.classid);
+
return r;
}
+ U32_TRACE("~class");
n = n->next;
goto next_knode;
}
@@ -198,11 +218,20 @@
ht = n->ht_down;
sel = 0;
- if (ht->divisor)
+
+ U32_TRACE(",link-%08x", ht->handle);
+ if (ht->divisor) {
+ U32_TRACE("(%08x&%08x>>%d)",
+ *(u32*)(ptr+n->sel.hoff),
+ n->sel.hmask, n->fshift);
sel =
ht->divisor&u32_hash_fold(*(u32*)(ptr+n->sel.hoff), &n->sel,n->fshift);
+ }
+ U32_TRACE("[%02x]", sel);
- if (!(n->sel.flags&(TC_U32_VAROFFSET|TC_U32_OFFSET|TC_U32_EAT)))
+ if
(!(n->sel.flags&(TC_U32_VAROFFSET|TC_U32_OFFSET|TC_U32_EAT))) {
+ U32_TRACE(":+%d+%d", ptr-skb->nh.raw, off2);
goto next_ht;
+ }
if (n->sel.flags&(TC_U32_OFFSET|TC_U32_VAROFFSET)) {
off2 = n->sel.off + 3;
@@ -215,8 +244,10 @@
off2 = 0;
}
- if (ptr < skb->tail)
+ if (ptr < skb->tail) {
+ U32_TRACE(":+%d+%d", ptr-skb->nh.raw, off2);
goto next_ht;
+ }
}
/* POP */
@@ -224,8 +255,11 @@
n = stack[sdepth].knode;
ht = n->ht_up;
ptr = stack[sdepth].ptr;
+ U32_TRACE(",pop:+%d+%d", ptr-skb->nh.raw, off2);
goto check_terminal;
}
+
+ U32_TRACE(" FAILED\n");
return -1;
deadloop:
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html