Introdução aos anéis de rede

visão geral NET_RING

Um NET_RING é um buffer circular de dados de rede que é compartilhado entre NetAdapterCx e um driver cliente. Cada fila de pacotes em um driver de cliente tem dois anéis: um anel de pacote para descritores de pacotes principais e um anel de fragmento para os descritores de fragmento de cada pacote.

Para obter mais informações sobre descritores de pacotes, consulte Descritores de pacote e extensões.

Cada descritor principal no anel de pacotes tem índices no anel de fragmento para localizar os descritores de fragmento desse pacote. Outra estrutura de dados, a NET_RING_COLLECTION, agrupa o anel de pacote e o anel de fragmento para uma determinada fila de pacotes, conforme mostrado no diagrama a seguir.

Diagrama que mostra o layout de vários anéis de uma estrutura NET_RING_COLLECTION, incluindo um anel de pacote e um anel de fragmento.

Cada fila de pacotes tem sua própria estrutura NET_RING_COLLECTION e, consequentemente, seu próprio anel de pacote, anel de fragmento e descritores nesses anéis. Portanto, a operação de transferência de dados de rede de cada fila de pacotes é completamente independente. Para saber mais sobre filas de pacotes, confira Transmitir e receber filas.

propriedade do elemento NET_RING

Cada elemento em um NET_RING pertence ao driver cliente ou netAdapterCx. A propriedade é controlada por três índices, que marcam seções do NET_RING. Esses índices são descritos na tabela a seguir. O ato de mover esses índices é descrito pela semântica pós e drenagem .

NET_RING nome do índice Descrição Necessário para transferir dados de rede Modificado por
BeginIndex O início do intervalo de elementos no NET_RING que o driver de cliente NIC possui. BeginIndex também é o início da subseção drain do NET_RING. Quando BeginIndex é incrementado, o driver esvazia os elementos do anel e transfere a propriedade deles para o sistema operacional. Sim Driver de cliente NIC
NextIndex O início da subseção pós-NET_RING. NextIndex divide a seção do anel que o driver cliente possui nas subseções post e drain. Quando NextIndex é incrementado, o driver posta os buffers no hardware e transfere os buffers para a seção esvaziar do anel. Não Driver de cliente NIC
Endindex O final do intervalo de elementos no NET_RING que o driver de cliente NIC possui. Os drivers de cliente possuem elementos até EndIndex – 1 inclusive. Sim NetAdapterCx

Manipular esses índices durante o retorno de chamada EvtPacketQueueAdvance de uma fila de pacotes é como os drivers de cliente transferem dados de rede entre o sistema e o hardware de cartão de interface de rede (NIC).

Os drivers de cliente possuem todos os elementos de BeginIndex a EndIndex – 1 inclusive. Por exemplo, se BeginIndex for 2 e EndIndex for 5, o driver cliente possuirá três elementos: os elementos com valores de índice 2, 3 e 4.

Se BeginIndex for igual a EndIndex, o driver cliente não possuirá nenhum elemento.

NetAdapterCx posta elementos no buffer de anéis incrementando EndIndex. Um driver cliente drena os buffers e retorna a propriedade dos elementos avançando BeginIndex.

NextIndex é opcional para os drivers de cliente usarem e é fornecido para conveniência na separação das subseções post e drenagem da seção do driver cliente do anel.

Elementos com valores de índice entre NextIndex e EndIndex – 1 inclusive pertencem ao cliente, mas ainda não foram postados no hardware. Se NextIndex for igual a BeginIndex, o driver cliente não terá buffers concluídos para transferir para o sistema operacional. Se NextIndex for igual a EndIndex, o driver cliente não terá buffers para postar no hardware.

Como o anel líquido é circular, eventualmente os valores de índice são encapsulados ao redor do final do buffer e voltam para o início. O NetAdapterCx manipula automaticamente os valores de índice ao redor do anel quando o driver do cliente chama o método apropriado.

Para obter informações específicas sobre como gerenciar os elementos em anéis de rede, consulte Gerenciamento de elemento de anel de rede.

Enviar e receber dados de rede com anéis de rede

Consulte os tópicos a seguir para obter mais informações e exemplos de código sobre o envio e o reexecimento de dados de rede em anéis de rede.

Enviando dados de rede com anéis de rede

Recebendo dados de rede com anéis de rede