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.
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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de