Hi Andy,
Apologies again - I wont be able to get access to my test machine until
tuesday.
On Sat, 2005-03-19 at 05:23, Andy Furniss wrote:
> $TC filter add dev eth0 parent ffff: protocol ip prio 10 u32 \
> match u32 0 0 flowid 1:1 \
> action ipt -j MARK --set-mark 1
>
> It still gives memory error with 1.3.1 , with 1.2.11 it parses OK but I
> get bogus stats - hit count is OK
>
> [root@amd /home/andy/Qos]# tc -s filter ls dev eth0 parent ffff:
>
> filter protocol ip pref 10 u32
> filter protocol ip pref 10 u32 fh 800: ht divisor 1
> filter protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0
> flowid 1:1 (rule hit 12 success 12)
> match 00000000/00000000 at 0 (success 12 )
> action order 1: tablename: mangle hook: NF_IP_PRE_ROUTING
> target MARK set 0x1
> index 1 ref 1 bind 1 installed 251 sec expires 1 sec
> Action statistics:
> Sent 7630953 bytes 0 pkt
> rate 3146Kbit 1095565348pps
>
Ok, this seems to be a bug in the stats - I think it may have been
introduced during the new kernel stats code updates.
Ive cced Thomas who added that code, he may be able to figure it oput
before i get back
> If I try with the lines below added
>
> action egress redirect dev dummy0 or
> action redirect dev dummy0
>
> I just get errors on whatever is after action - or memory errors with 1.3.1.
>
> Using tc iproute2-ss050112 + patch for these tests.
>
So if i have understood you correctly, with this version of tc and
version of iproute2, you have no problems other than stats being messed
up? i.e action ipt .. action mirred .. looks/works fine?
I think iptables >= 1.2.11 may have broken backward compatibility, i
will investigate when i get back.
Lets narrow down to what version of iproute2 that things break - stick
with iptables 1.2.11
> I don't know if it's relevant but I am using gcc-2.95.3, which meant I
> had to change the dummy patch a bit as it doesn't (for me) like variable
> declarations in the middle of functions.
>
> drivers/net/dummy.c: In function `dummy_xmit':
> drivers/net/dummy.c:218: parse error before `from'
> drivers/net/dummy.c:219: `from' undeclared (first use in this function)
>
> So I changed to
>
> static int dummy_xmit(struct sk_buff *skb, struct net_device *dev)
> {
> struct dummy_private *dp = ((struct net_device *)dev)->priv;
> struct net_device_stats *stats = &dp->stats;
> int ret = 0;
> __u32 from;
>
> {
> stats->tx_packets++;
> stats->tx_bytes+=skb->len;
> }
> #ifdef CONFIG_NET_CLS_ACT
> from = G_TC_FROM(skb->tc_verd);
>
> Is there a switch for this? - or am I the only one who actually does
> kernel stuff with 2.95.3 (using LFS 5.1, which uses 3.3 by default but
> keeps 2.95.3 in /opt specially for kernels)
>
The change you have above is needed - dont recall of any gcc switches
which will resolve this.
I have fixed this for Remus as well back when he was testing (attached
dummy.c he is using); the stats are also a little misleading on whats rx
or tx. So those are fixed too in the attached version.
cheers,
jamal
dummy.c.gz
Description: GNU Zip compressed data
|