Re: created new q_disc, inserted module, tc tells me unknown qdisc

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 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



-- 

_______________________________________________
LARTC mailing list
LARTC@xxxxxxxxxxxxxxx
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux