Я хочу написать новую дисциплину очередей tc для ядра linux. Цель состоит в том, чтобы стоять в очереди, например. десять пакетов, а затем отправить их все (я знаю, это не очень хорошая вещь для работы в сети, но я хочу провести некоторое исследование с этим).
Итак, что уже сделано: у меня есть скелет нового модуля sched (постановка в очередь, функции удаления из очереди и т. Д.), Который также правильно компилируется и работает правильно (один пакет поставлен в очередь, один пакет отправлен - ничего особенного) , Я собираю его на Ubuntu Maverick с теми же источниками, что и работающее ядро, и помещаю свой модуль в Makefile и Kconfig.
Я выяснил, что каждый раз, когда вызывается функция enqueue, после этого функция dequeue вызывается qdisc_restart (в sch_generic.c) - и отправляется только один пакет.
Моя проблема: как я могу отправить более одного пакета из моего модуля в сетевой интерфейс, как я собрал, например, для. 10 пакетов, и теперь я хочу отправить их все?
Я пытался вызвать функцию sch_direct_xmit (из sch_generic.c) с теми же параметрами, что и в qdisc_restart (и механизмах блокировки) - но затем компиляция моего модуля завершается неудачно: неизвестный символ sch_direct_xmit (но greping / proc / kallsyms для это дает мне результат). Есть идеи, что с этим не так? Если какой-то код требуется, просто дайте мне знать (я включил тот же .h, что и в sched_generic.c)
BR
Christoph