Introdução aos anéis de rede

Visão geral do NET_RING

Um NET_RING é um buffer circular de dados de rede que é compartilhado entre o 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 pacote principal e um anel de fragmento para os descritores de fragmento de cada pacote.

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

Cada descritor de núcleo no anel de pacote 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 pacotes, 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, consulte Transmitir e receber filas.

Propriedade do elemento NET_RING

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

Nome do índice NET_RING Descrição Necessário para transferir dados de rede Modificação de
BeginIndex O início do intervalo de elementos no NET_RING que o driver do cliente NIC possui. BeginIndex também é o início da subseção de drenagem do NET_RING. Quando BeginIndex é incrementado, o driver drena os elementos do anel e transfere a propriedade deles para o sistema operacional. Yes Driver do cliente NIC
NextIndex O início da subseção de lançamento do NET_RING. O NextIndex divide a seção do anel que o driver do cliente possui nas subseções de lançamento e drenagem. Quando o NextIndex é incrementado, o driver lança os buffers no hardware e transfere os buffers para a seção de drenagem do anel. Não Driver do cliente NIC
EndIndex O fim do intervalo de elementos no NET_RING que o driver do cliente NIC possui. Os drivers de cliente possuem elementos até EndIndex - 1, inclusive. Yes NetAdapterCx

A manipulação desses índices durante o retorno de chamada EvtPacketQueueAdvance de uma fila de pacotes é a maneira como os drivers de cliente transferem dados de rede entre o sistema e o hardware da placa de adaptador 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 de cliente não possuirá nenhum elemento.

O NetAdapterCx lança elementos no buffer de anel incrementando EndIndex. Um driver de cliente drena os buffers e retorna a propriedade dos elementos avançando BeginIndex.

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

Os elementos com valores de índice entre NextIndex e EndIndex - 1, inclusive, pertencem ao cliente, mas ainda não foram lançados no hardware. Se NextIndex for igual a BeginIndex, o driver de cliente não terá nenhum buffer concluído para transferir para o sistema operacional. Se NextIndex for igual a EndIndex, o driver de cliente não terá nenhum buffer para lançar no hardware.

Como o anel líquido é circular, os valores de índice envolvem o final do buffer e voltam ao início. O NetAdapterCx manipula automaticamente encapsulando 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 elementos de anéis 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 como enviar e receber dados de rede em anéis de rede.

Enviar dados de rede com anéis de rede

Receber dados de rede com anéis de rede