Поделиться через


Поддержка обработки необработанных IP-пакетов в МБ

Минипортные драйверы МБ, поддерживающие необработанные IP-пакеты в пути отправки и получения данных, должны соблюдать следующие рекомендации:

Флаги сетевого списка буферов (NBL) для обработки пакетов RAW IP

  • Для пакетов IPv4:

    NblFlags элемент структуры NET_BUFFER_LIST должен иметь значение NDIS_NBL_FLAGS_IS_IPV4.

    Элемент NetBufferListFrameType структуры NET_BUFFER_LIST должен иметь значение 0x0800 (Ethertype IPv4) в порядке байтов сети.

  • Для пакетов IPv6:

    NblFlags элемент структуры NET_BUFFER_LIST должен иметь значение NDIS_NBL_FLAGS_IS_IPV6.

    Элемент NetBufferListFrameType структуры NET_BUFFER_LIST должен иметь значение 0x86dd (Ethertype IPv6) в сетевом порядке байтов.

Драйверы минипорта могут использовать макрос NdisSetNblFlag для задания флагов в списке сетевых буферов. В следующей строке показано, как установить флаг пакета IPv4 в списке сетевых буферов.

NdisSetNblFlag(pNbl, NDIS_NBL_FLAGS_IS_IPV4);

Драйверы минипорта могут использовать NET_BUFFER_LIST_INFO для получения и установки информации в списке сетевых буферов. В следующей строке показано, как изменить NetBufferListFrameType OOB в списке сетевых буферов для пакетов IPV4:

Value = ConvertToNetworkByteOrder(0x0800);
NET_BUFFER_LIST_INFO(pNbl, NetBufferListFrameType) = Value;

Отправка обработки путей

Служба МБ устанавливает эти флаги в NBL перед передачей списка в драйвер минипорта для отправки по сети. Минипорт-драйвер может проверить флаги в входной NBL.

Обработка канала приёма

Драйверы минипортов должны задавать флаги в NBL перед передачей его в службу MB для полученных пакетов.

Если ваш минипорт-драйвер реализует обработку необработанных IP-пакетов на этапе разработки драйверов, но по-прежнему включен спуфинг DHCP-сервера (EnableDhcp = 1), ваш минипорт-драйвер должен обеспечить следующее:

  • Аппаратный адрес и его длина в ответе DHCP от драйвера минипорта должны соответствовать значениям CurrentMacAddress и MacAddressLength членов, указанных драйвером минипорта в структуре NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES.

  • Идентификатор транзакции (участник xid) в ответе DHCP от минипорт-драйвера должен точно совпадать с идентификатором транзакции, указанным в DHCP-запросе клиента.