[LARTC] created new q_disc, inserted module,
tc tells me unknown qdisc
George P Nychis
gnychis at cmu.edu
Thu Apr 13 07:42:55 CEST 2006
> George P Nychis wrote:
>>
>>> George P Nychis wrote:
>>>>
>>>> Hi,
>>>>
>>>> I am trying to install a proprietary qdisc made for research, it is
>>>> not publically released yet, however its been used several times so
>>>> i know it works.
>>>>
>>>> The files included are: q_xcp.c: static int xcp_parse_opt() static
>>>> int xcp_print_opt() static int xcp_print_xstats() struct qdisc_util
>>>> xcp_util = { "NULL", "xcp" ..... };
>>>>
>>>> sch_xcp.c: static int xcp_enqueue() static int xcp_requeue() static
>>>> struct sk_buff * xcp_dequeue() .... .... struct Qdisc_ops
>>>> xcp_qdisc_ops ={ NULL,NULL,"xcp",.... };
>>>>
>>>> printk(KERN_INFO "XCP qdisc module loaded.\n"); return
>>>> register_qdisc(&xcp_qdisc_ops);
>>>>
>>>> So, i make everything successfully, it creates q_xcp.so and copies
>>>> it to /usr/lib and sch_xcp.o which it copies to /lib/modules/... so
>>>> then I "insmod sch_xcp" and i see in dmesg: "XCP qdisc module
>>>> loaded."
>>>>
>>>> I then try: "tc qdisc add dev eth0 root xcp capacity 10Mbit limit
>>>> 500" and get: "Unknown qdisc "xcp", hence option "capacity" is
>>>> unparsable"
>>>>
>>>> So then I read the INSTALL further to find some sort of solution
>>>> and it mentions: This again assumes "tc" version is 2.4.7. If your
>>>> "tc" is a different version, download the iproute2 source code, and
>>>> edit Makefile to point "TC_INCLUDE" to "-I..../iproute2/include
>>>> -I..../iproute2/tc"
>>>>
>>>> So, i did that, and i recompiled the q_xcp.so: lanthanum-ini
>>>> src-1.0.1 # make q_xcp.so cc -O2 -fPIC
>>>> -I/var/tmp/portage/iproute2-2.6.11.20050310-r1/work/iproute2-2.6.11
>>>> /inc lude/
>>>> -I/var/tmp/portage/iproute2-2.6.11.20050310-r1/work/iproute2-2.6.11
>>>> /tc_ include -o q_xcp.o -c q_xcp.c ld -shared -o q_xcp.so q_xcp.o rm
>>>> -f q_xcp.o
>>>>
>>>> But i still get the same error.... so then my very final last
>>>> effort was to move q_xcp.c to my iproute2 source code tc/ directory
>>>> and added this to the makefile: TCMODULES += q_xcp.o
>>>>
>>>> Then I compiled tc, and i check tc to see if the xcp qdisc
>>>> functions were loaded: lanthanum-ini tc # nm tc | grep xcp 080531ec
>>>> t xcp_parse_opt 080533e0 t xcp_print_opt 08053426 t xcp_print_xstats
>>>> 08070cc0 D xcp_util
>>>>
>>>>
>>>> And finally: lanthanum-ini tc # ./tc qdisc add dev ath0 root xcp
>>>> capacity 54Mbit limit 500 Unknown qdisc "xcp", hence option
>>>> "capacity" is unparsable
>>>>
>>>> I have no clue :( I figured that putting the .so into /usr/lib
>>>> would have been enough. Sorry for the long e-mail, I hope someone
>>>> can help, and thank you for your time even if you don't know the
>>>> solution but read this :)
>>>>
>>>> - George
>>>
>>> George,
>>>
>>> Please show us iproute/include/linux/pkt_sched.h
>>>
>>> There shouldn't be anything there the author wishes to keep private.
>>> -- gypsy
>>>
>>>
>>
>> They did not include the iproute source code that they used... they
>> only included the q_xcp.c to create the q_xcp.so ... therefore my
>> pkt_sched.h i am using is from this build: iproute2-2.6.11.20050310-r1
>>
>> I can certainly post it if you need, just let me know
>
> George,
>
> Then you probably need to revert to an iproute2 source that included xcp.
> In pkt_sched.h you need a struct that defines the parameters xcp can
> accept:
>
> enum { TCA_XCP_PARM1, TCA_XCP_PARM2, TCA_XCP_PARM3, };
>
> and in ~/tc/Makefile you need TCMODULES += q_xcp.o -- gypsy
>
>
I think what I'm most confused about this pkt_sched.h thing is that the code works with version 2.4.7 of iproute2 ... in 2.4.7 of iproute2 there is no pkt_sched.h anywhere to be found in the source code.
However in the newest version of iproute2 which I am trying to get this functionality to work in, there is a pkt_sched.h
My last observation, is that in q_xcp.h it includes pkt_sched_xcp.h which has:
struct tc_xcp_qopt
{
__u32 first_param;
__u32 second_param;
};
So I am assuming i need to add something like the enum thing to pkt_sched.h in the new iproute2 source... however what are the proper names I need to use in the enum? I don't expect you to know the names, however, what do i match them with?
Thanks!
George
--
More information about the LARTC
mailing list