I want to write a new tc queuing discipline for the linux kernel. The goal is to queue up eg. ten packets and then send them all out (I know, that's not really a good thing for networking, but I want to do some research with that).
So, what's already done: I have a skeleton of a new sched-module (enqueue, dequeue functions and so on), which is also correctly compiling and correctly working (one packet queued, one packet send out- nothing special). I'm compiling it on ubuntu maverick with the same sources as the running kernel and put my module in the Makefile and Kconfig.
I figured out, that every time the enqueue function is called, thereafter the dequeue function is called by qdisc_restart (in sch_generic.c)- and only one packet is sent out.
My problem is: how can I send more than one packet from my module to the network interface, like I collected for eg. 10 packets and now I want to send them all out?
I tried to call the sch_direct_xmit function (from sch_generic.c) with the same parameters as in qdisc_restart (and locking mechanisms)- but then, the compilation of my module fails: unknown symbol sch_direct_xmit (but greping /proc/kallsyms for that gives me a result). Any idea, what's wrong with that? If some code is required, just let me know (I included the same .h as in sched_generic.c)
BR Christoph