Compartilhar via


Configurando informações de NET_BUFFER_LIST

Um provedor de divisão de dados de cabeçalho deve definir os sinalizadores de divisão de dados de cabeçalho no membro NblFlags das estruturasde NET_BUFFER_LIST para receber indicações. Para quadros divididos, uma NIC também deve fornecer o endereço físico da parte de dados do quadro recebido no membro DataPhysicalAddress de cada estrutura NET_BUFFER .

Nota Um driver de miniporta pode definir o membro DataPhysicalAddress da estrutura NET_BUFFER, mesmo que o NET_BUFFER não esteja associado a um quadro dividido. Nesse caso, DataPhysicalAddress contém o endereço físico do cabeçalho MDL.

O provedor de divisão de dados de cabeçalho combina os sinalizadores no membro NblFlags com uma operação OR bit a bit.

O provedor de divisão de dados de cabeçalho pode definir os seguintes sinalizadores mesmo que ele não divida um quadro:

NDIS_NBL_FLAGS_IS_IPV4
Todos os quadros no NET_BUFFER_LIST são quadros IPv4. Se esse sinalizador estiver definido, o sinalizador NDIS_NBL_FLAGS_IS_IPV6 não deverá ser definido.

NDIS_NBL_FLAGS_IS_IPV6
Todos os quadros no NET_BUFFER_LIST são quadros IPv6. Se esse sinalizador estiver definido, o sinalizador NDIS_NBL_FLAGS_IS_IPV4 não deverá ser definido.

NDIS_NBL_FLAGS_IS_TCP
Todos os quadros no NET_BUFFER_LIST são quadros TCP. Se esse sinalizador estiver definido, NDIS_NBL_FLAGS_IS_UDP não deverá ser definido. E NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 devem ser definidos.

NDIS_NBL_FLAGS_IS_UDP
Todos os quadros no NET_BUFFER_LIST são quadros UDP. Se esse sinalizador estiver definido, NDIS_NBL_FLAGS_IS_TCP não deverá ser definido. E NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 devem ser definidos.

Qualquer driver NDIS pode definir os sinalizadores anteriores para depuração, teste ou outras finalidades. Se um driver definir esses sinalizadores, os valores deverão descrever com precisão o conteúdo do quadro recebido. É recomendável definir esses sinalizadores.

O provedor de divisão de dados de cabeçalho pode definir os seguintes sinalizadores de divisão de dados de cabeçalho:

NDIS_NBL_FLAGS_HD_SPLIT
O cabeçalho e os dados são divididos em todos os quadros Ethernet associados à estrutura NET_BUFFER_LIST .

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
Todos os quadros na estrutura NET_BUFFER_LIST são divididos no início do cabeçalho de protocolo de camada superior. Se esse sinalizador estiver definido, NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 deverão ser definidos. Além disso, NDIS_NBL_FLAGS_IS_TCP ou NDIS_NBL_FLAGS_IS_UDP podem ser definidos. E NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD não deve ser definido.

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
Todos os quadros em uma estrutura NET_BUFFER_LIST são divididos no início da carga TCP ou no início do conteúdo UDP. Se esse sinalizador estiver definido, NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 deverão ser definidos. É necessário definir NDIS_NBL_FLAGS_IS_TCP ou NDIS_NBL_FLAGS_IS_UDP. Além disso, NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER não deve ser definido.

Se o provedor de divisão de dados de cabeçalho não dividir um quadro, o quadro deverá ser indicado com os seguintes sinalizadores limpos em NblFlags :

  • NDIS_NBL_FLAGS_HD_SPLIT

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD