как писать пакеты в пространстве ядра - PullRequest
1 голос
/ 02 апреля 2012

Я фильтрую пакеты, используя netfilter.Теперь мне нужно поместить эти пакетные данные в файл.Я знаю, что мы не можем напрямую читать / записывать файлы из ядра (заражать, мы не должны), но недавно я узнал, что мы можем сделать это с помощью соединения.

Ранее я пытался скопировать всепакеты в пространство пользователя, а затем выгрузить их в файл, но он работал очень медленно, и мне не хватало пакетов.Я попытался использовать netlink, а также попытался использовать стандартные сокеты udp для копирования из пространства ядра в пространство пользователя.Я не получил хороших результатов, используя этот метод, потому что у меня очень высокая скорость передачи пакетов.

Пожалуйста, предложите мне один хороший способ записи пакетов в файл в пространстве ядра.Если у кого-то есть идея / пример использования соединения, это будет очень цениться.Thnx.

1 Ответ

0 голосов
/ 04 октября 2013

Вы пытались повысить приоритет сокета с помощью необработанных сокетов?Это обычно помогает, если требуется более быстрая работа сокета.Я все еще чувствую, что запись файлов из пространства ядра - плохая идея, особенно если вам нужно выгрузить пакетные данные в файл.

если вы думаете, что задержка copy_to_user является причиной задержки (в идеале это не должно, но в крайних случаях, да), попробуйте выделить кусок памяти из ядра и отобразить в пространство пользователя.И сделайте выделение skbuff из этого пула.А затем сделайте обычную розетку или нетлинк на дверной звонок.Затем из пространства пользователя вы можете напрямую получить доступ к пакету из этой области.Это какая-то работа, но она должна помочь в экстремальных условиях.

Однако, если вы все равно хотите это сделать, вот хорошая статья - http://www.linuxjournal.com/node/8110/print

...