Недавно я пытался ознакомиться с сетевым стеком Linux и драйверами устройств (обе книги с одинаковым названием O'Reilly) с возможной целью разгрузки UDP. Я уже реализовал UDP на сетевой карте, но теперь сложная часть ...
Вместо того, чтобы просить помощи в достижении этой более крупной цели, я надеялся, что кто-то сможет прояснить для меня определенный фрагмент, который я обнаружил, который является частью LKM, который регистрирует новый протокол (OTP), который действует как фильтр между драйвером устройства и сетью. стек.
http://www.phrack.org/archives/55/p55_0x0c_Building%20Into%20The%20Linux%20Network%20Layer_by_lifeline%20&%20kossak.txt
(Примечание: эта статья Phrack содержит три разных модуля, код для OTP находится внизу страницы)
В функции init его примера он имеет:
otp_proto.type = htons(ETH_P_ALL);
otp_proto.func = otp_func;
dev_add_pack(&otp_proto);
который (если я правильно понимаю) должен зарегистрировать otp_proto в качестве анализатора пакетов и поместить его в структуру данных ptype_all. Мой вопрос по поводу dev_add_pack.
Это тот случай, когда протокол, зарегистрированный в качестве фильтра, всегда будет размещаться на этом уровне между L2 и драйвером устройства? Или, например, можно ли сделать такую фильтрацию между прикладным и транспортным уровнями (проанализировать параметры сокета), используя один и тот же процесс?
Я прошу прощения, если это сбивает с толку - у меня возникают некоторые проблемы, когда я зацикливаюсь на большей картине, когда речь идет о модулях, изменяющих функциональность стека ядра.
Спасибо