我想为 linux 内核编写一个新的 tc 排队规则。目标是排队,例如。十个数据包,然后将它们全部发送出去(我知道,这对于网络来说并不是一件好事,但我想对此进行一些研究)。
那么,已经完成了什么:我有一个新的 sched 模块(入队、出队函数等)的骨架,它也可以正确编译和正常工作(一个数据包排队,一个数据包发送出去——没什么特别的)。我正在使用与运行内核相同的源代码在 ubuntu maverick 上编译它,并将我的模块放在 Makefile 和 Kconfig 中。
我发现,每次调用 enqueue 函数时,之后 qdisc_restart (在 sch_generic.c 中)都会调用 dequeue 函数,并且只发送一个数据包。
我的问题是:我怎样才能将多个数据包从我的模块发送到网络接口,就像我收集的那样。10个包,现在我想把它们都寄出去?
我尝试使用与 qdisc_restart (和锁定机制)相同的参数调用 sch_direct_xmit 函数(来自 sch_generic.c)- 但是,我的模块的编译失败:未知符号 sch_direct_xmit (但是 greping /proc/kallsyms 给了我结果)。任何想法,这有什么问题?如果需要一些代码,请告诉我(我包含与 sched_generic.c 中相同的 .h)
克里斯托夫