Я недавно пытался ознакомиться с Сетевым стеком Linux, и драйверы устройств (оба так же назвали книги O'Reilly) с возможной целью разгрузки UDP. Я уже реализовал UDP на NIC, но теперь твердой части...
Вместо того, чтобы просить помощи на этой большей цели, я надеялся, что кто-то мог разъяснить для меня конкретный отрывок, я нашел, что это - часть LKM, который регистрирует новый протокол (OTP), который действует как фильтр между драйвером устройства и сетевым стеком.
(Примечание: эта статья 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 и драйвером устройства? Или, например, я мог заставить такую фильтрацию произойти между прикладными и транспортными уровнями (проанализируйте параметры сокета), использование того же процесса?
Я приношу извинения, если это сбивает с толку - я испытываю некоторые затруднения при обертывании моей головы вокруг большего изображения когда дело доходит до модулей, изменяющих функциональность стопки ядра.
Спасибо