Сетевой стек Linux: добавление протоколов с LKM и dev_add_pack

Я недавно пытался ознакомиться с Сетевым стеком Linux, и драйверы устройств (оба так же назвали книги O'Reilly) с возможной целью разгрузки UDP. Я уже реализовал UDP на NIC, но теперь твердой части...

Вместо того, чтобы просить помощи на этой большей цели, я надеялся, что кто-то мог разъяснить для меня конкретный отрывок, я нашел, что это - часть 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 и драйвером устройства? Или, например, я мог заставить такую фильтрацию произойти между прикладными и транспортными уровнями (проанализируйте параметры сокета), использование того же процесса?

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

Спасибо

7
задан Andrew G 12 May 2010 в 20:07
поделиться