Acessando informações de NET_BUFFER_LIST de descarregamento de TCP/IP
As versões NDIS 6.0 e posteriores fornecem dados OOB (descarregamento de TCP/IP fora de banda) no membro NetBufferListInfo da estrutura NET_BUFFER_LIST , que especifica uma lista vinculada de estruturas de NET_BUFFER . O membro NetBufferListInfo é uma matriz de valores que contêm informações comuns a todas as estruturas NET_BUFFER na lista.
Use os seguintes identificadores com a macro NET_BUFFER_LIST_INFO para definir e obter os dados OOB de descarregamento de TCP/IP na matriz NetBufferListInfo :
TcpIpChecksumNetBufferListInfo
Especifica informações de soma de verificação usadas no descarregamento de tarefas de soma de verificação do protocolo TCP/IP para um driver de miniporto. Quando você especifica TcpIpChecksumNetBufferListInfo, NET_BUFFER_LIST_INFO retorna uma estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO (não um ponteiro para a estrutura). Essa estrutura contém uma união que permite que as informações de soma de verificação sejam acessadas como um único valor PVOID ou como campos de bit.
IPsecOffloadV1NetBufferListInfo
Especifica informações de descarregamento de IPsec (segurança de protocolo de Internet) usadas no descarregamento de tarefas IPsec do protocolo TCP/IP para um driver de miniporto. Quando você especifica IPsecOffloadV1NetBufferListInfo, NET_BUFFER_LIST_INFO retorna uma estrutura NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO .
TcpLargeSendNetBufferListInfo
Especifica informações usadas no descarregamento da segmentação de um pacote TCP grande do protocolo TCP/IP para um driver de miniporto. Quando você especifica TcpLargeSendNetBufferListInfo, NET_BUFFER_LIST_INFO retorna uma estrutura NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO (não um ponteiro para a estrutura). Essa estrutura contém uma união que permite que as informações sejam acessadas como um único valor PVOID ou como campos de bit.
Ieee8021QNetBufferListInfo
Especifica informações de 802.1Q sobre um pacote. Quando você especifica Ieee8021QNetBufferListInfo, NET_BUFFER_LIST_INFO retorna o membro Value de uma estrutura NDIS_NET_BUFFER_LIST_8021Q_INFO . Essa estrutura pode especificar informações de identificador de prioridade 802.1p e VLAN (LAN virtual). As informações de prioridade 802.1p são usadas para estabelecer prioridade de pacote em redes de mídia compartilhada 802.
Se um driver de miniporta relatar suporte para o encapsulamento NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB, ele deverá inserir os dados Ieee8021QNetBufferListInfo em pacotes LSOV1 (grande descarregamento de envio versão 1) e Ethernet LSOV2 (grande descarregamento de envio versão 2).
TcpOffloadBytesTransferred
Especifica o número de bytes de dados que foram transferidos em uma operação de envio, recebimento ou desconexão de descarregamento de chaminé TCP.
TcpReceiveNoPush
Especifica um valor booliano que representa o modo de push de uma solicitação de recebimento de descarregamento de chaminé TCP. Se TRUE, a solicitação de recebimento estará no modo não push. Caso contrário, a solicitação de recebimento estará no modo push.
Para os tipos de descarregamento LSOV1, LSOV2, soma de verificação e IPsec, um driver de miniporta executa o descarregamento de tarefas com base no tipo de dados OOB e nos recursos de descarregamento relatados. Por exemplo, se um driver de protocolo exigir serviços LSOV1 para um pacote IPv4, cada solicitação de envio que o driver de protocolo fornece incluirá as informações do membro LsoV1Transmit na NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO dados OOB. Observe que o driver de protocolo deve verificar se o driver de miniporto dá suporte a IPv4, com o tipo de encapsulamento especificado, antes de fazer a solicitação de envio.
A estrutura NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO contém o MSS (tamanho máximo do segmento). O membro TcpHeaderOffset especifica o local do cabeçalho TCP para que o driver de miniporto não precise analisar cabeçalhos IP, opções de IP ou cabeçalhos de extensão IP.
Um driver de miniporta NDIS 6.0 e posterior que dá suporte a LSOV2 e LSOV1 deve marcar o membro Type do NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO para determinar se a pilha de driver está usando LSOV2 ou LSOV1 e deve executar o descarregamento apropriado.
Para LSOv1, antes que um driver de miniporto conclua o envio de um pacote TCP grande que ele segmentou em pacotes menores usando LSO, o driver grava o número de bytes de conteúdo TCP enviados nos pacotes segmentados no membro TcpPayload de NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO.
Se um driver de miniporta especificar o sinalizador NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q em seus recursos, o driver poderá executar serviços de descarregamento de tarefas para estruturas de NET_BUFFER_LIST que contêm o cabeçalho VLAN nos dados do buffer. No caso de dados recebidos, esse sinalizador indica que o driver de miniporta executará o cálculo de soma de verificação de recebimento e colocará o cabeçalho VLAN no pacote Ethernet.
Se um driver de miniporto especificar o sinalizador NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB em seus recursos, o driver poderá executar o descarregamento em estruturas NET_BUFFER_LIST que contêm o cabeçalho VLAN nos dados OOB Ieee8021QnetBufferListInfo . No caso de descarregamento de soma de verificação de recebimento, o miniporto insere o cabeçalho VLAN nos dados OOB Ieee8021QnetBufferListInfo .