Драйвер протокола NDIS...
От: Cloudo  
Дата: 06.06.12 13:24
Оценка:
Есть реализованный драйвер протокола. При отправке сообщения с 3го кольца передается буфер с данными, на него накладывается IP и Ethernet заголовки, при этом в поле Protocol Field IP заголовка прописывается определенное число, не входящее в число известных (well-known), например 0xAA.

При принятии происходит всё наоборот, и принятый буфер передается клиенту протокола. Проблема заключается в том, что так как в Ethernet заголовке верхний протокол — IP, то, по всей видимости, стандартный драйвер стека TCP/IP винды также получает принятый пакет и пытается его обработать. В результате, встретив в поле Protocol Field неизвестное значение (0xAA), отправителю посылается ICMP с кодом 3 (Protocol Unreachable).

Получается, что на каждый принятый пакет, помимо ответа от моего протокола посылается ещё и icmp пакет, что, естественно, недопустимо.

(выделенное курсивом — мои догадки, если я не правильно думаю, поправьте, пожалуйста...)

За основу протокола был взят ddk'шный (версии 3790.1830) ndisprot. ОС — WinXP SP3 (Ndis 5.1).

Просьба подсказать, есть ли способ решения этой проблемы... например, каким-то образом сказать NDIS'у, что пакет обработан, дабы не заставлять ICMP ругаться (хотя по идее об этом говорит возврат SUCCESS кода из ProtReceive)... Пока что я вижу только способ — взять за основу passthru и в нем отслеживать, отдавать пакеты стеку TCP/IP или обрабатывать самому, но хотелось бы решение, не столь меняющее архитектуру драйвера...
driver protocol ndis tcpip
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.