Настройка сведений NET_BUFFER_LIST
Поставщик разделения заголовков и данных должен задать флаги разделения заголовков и данных в элементе NblFlagsструктур NET_BUFFER_LIST для указания получения. Для разделенных кадров сетевая карта также должна предоставить физический адрес части данных полученного кадра в элементе DataPhysicalAddress каждой структуры NET_BUFFER .
Примечание Драйвер мини-порта может задать элемент DataPhysicalAddress структуры NET_BUFFER, даже если NET_BUFFER не связан с разделенным кадром. В этом случае DataPhysicalAddress содержит физический адрес заголовка MDL.
Поставщик разделения заголовков и данных объединяет флаги в элементе NblFlags с побитовой операцией OR.
Поставщик разделения заголовков и данных может установить следующие флаги, даже если он не разделяет кадр:
NDIS_NBL_FLAGS_IS_IPV4
Все кадры в NET_BUFFER_LIST являются кадрами IPv4. Если этот флаг установлен, флаг NDIS_NBL_FLAGS_IS_IPV6 устанавливать нельзя.
NDIS_NBL_FLAGS_IS_IPV6
Все кадры в NET_BUFFER_LIST являются кадрами IPv6. Если этот флаг установлен, флаг NDIS_NBL_FLAGS_IS_IPV4 устанавливать нельзя.
NDIS_NBL_FLAGS_IS_TCP
Все кадры в NET_BUFFER_LIST являются кадрами TCP. Если этот флаг установлен, NDIS_NBL_FLAGS_IS_UDP не следует задавать. Кроме того, необходимо задать NDIS_NBL_FLAGS_IS_IPV4 или NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_UDP
Все кадры в NET_BUFFER_LIST являются кадрами UDP. Если этот флаг установлен, NDIS_NBL_FLAGS_IS_TCP не следует задавать. Кроме того, необходимо задать NDIS_NBL_FLAGS_IS_IPV4 или NDIS_NBL_FLAGS_IS_IPV6.
Любой драйвер NDIS может задать предыдущие флаги для отладки, тестирования или других целей. Если драйвер устанавливает эти флаги, значения должны точно описывать содержимое полученного кадра. Рекомендуется задать эти флаги.
Поставщик разделения заголовков и данных может задать следующие флаги разделения заголовков и данных:
NDIS_NBL_FLAGS_HD_SPLIT
Заголовок и данные разделены на все кадры Ethernet, связанные со структурой NET_BUFFER_LIST .
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
Все кадры в структуре NET_BUFFER_LIST разбиваются в начале заголовка верхнего уровня протокола. Если этот флаг установлен, необходимо задать NDIS_NBL_FLAGS_IS_IPV4 или NDIS_NBL_FLAGS_IS_IPV6. Кроме того, можно задать NDIS_NBL_FLAGS_IS_TCP или NDIS_NBL_FLAGS_IS_UDP. И NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD не следует задавать.
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
Все кадры в структуре NET_BUFFER_LIST разбиваются в начале полезных данных TCP или в начале полезных данных UDP. Если этот флаг установлен, необходимо задать NDIS_NBL_FLAGS_IS_IPV4 или NDIS_NBL_FLAGS_IS_IPV6. Необходимо задать NDIS_NBL_FLAGS_IS_TCP или NDIS_NBL_FLAGS_IS_UDP. Кроме того, не следует задавать NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER.
Если поставщик разделения заголовков и данных не разделяет кадр, он должен быть обозначен следующими флагами, снятыми в NblFlags :
NDIS_NBL_FLAGS_HD_SPLIT
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD