[LARTC] Problem setting shift value in tcindex filter on big endian
machine
Ole Reinartz
ole.reinartz at gmx.de
Sun Apr 1 14:44:52 CEST 2007
Hi all,
I'm trying to get some DiffServ QoS shaping to work on an XScale
machine, running big endian. I'm setting it up with tc. Using the
tcindex filter I found that regardless what shift value I enter, only
'0' is returned when I list the filters afterwards. The very same rules
work fine on my (little endian) PC.
Looking at the code (iproute2-2.6.18-061002) I found that tc (in
tc/f_tcindex.c, line 72 and after) sends the shift value to the kernel
as an int. The kernel, however, expects it as a 'u16'
(net/sched/cls_tcindex.c, around line 250 depending on the exact kernel
version). I checked 2.6 kernel versions back until 2.6.11.
So... do we have a type mismatch here? As 'shift' is the last parameter
in the buffer, this works still very well on a little endian machine,
however on a big endian machine allways 0 is received in the kernel. To
check that I changed the type of the shift value to unsigned short in
tc, and that fixed it for me.
Someone interested in a patch?
Regards
Ole
More information about the LARTC
mailing list