Gerenciamento de elementos de anel de rede
Siga as diretrizes neste tópico para gerenciar suas estruturas de NET_RING e seus elementos durante a transferência de dados de rede. As regras neste tópico descrevem quais membros dos elementos de anel líquido os drivers de cliente podem modificar e quando, dependendo do cenário de caminho de dados, bem como os drivers de cliente de informações gerais devem ter em mente para essas estruturas.
Importante
Os drivers de cliente devem seguir essas direções durante todas as fases de desenvolvimento. Se um driver cliente não aderir a essas direções durante o teste com o Verificador de Driver, o Verificador de Driver relatará uma violação e disparará um bug marcar no dispositivo em teste.
NET_RING
Quando a fila de pacotes pai do NET_RING é iniciada, todos os índices no anel são inicializados como 0.
A tabela a seguir descreve quais membros do anel de rede que os drivers de cliente podem modificar.
Campo | O driver do cliente tem permissão para modificar |
---|---|
OSReserved1 | No |
ElementStride | No |
Numberofelements | No |
ElementIndexMask | Não |
Endindex | No |
OSReserved0 | No |
OSReserved2 | Não |
BeginIndex | Sim (Obrigatório) |
NextIndex | Sim (opcional) Observação: a estrutura nunca lê NextIndex. |
Rascunho | Sim (opcional) Observação: a estrutura nunca lê Scratch. |
Buffer | No |
Os drivers cliente não devem modificar nenhum membro somente leitura dessa estrutura, nem devem incrementar BeginIndex após EndIndex durante uma chamada para EvtPacketQueueAdvance.
Para obter mais informações sobre a propriedade do índice em anéis líquidos, consulte Introdução aos anéis de rede.
NET_PACKET
Os campos em uma NET_PACKET são sensíveis aos diferentes contextos nos quais o caminho de dados opera. Se o campo Ignorar do pacote está definido e se o driver está recebendo (Rx) ou transmitindo (Tx), o pacote altera o conjunto de regras aplicado ao pacote.
A tabela a seguir fornece instruções para drivers em cada cenário.
Rx ou Tx | Ignorar campo é definido por... | Observações |
---|---|---|
Rx | Driver do cliente |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Durante as operações Rx, o campo Layout do NET_PACKET está sujeito às seguintes regras:
- Todos os campos, exceto Reserved0 , devem ser inicializados pelo driver cliente.
- Se Layer2Type estiver definido como NetPacketLayer2TypeEthernet, Layer2HeaderLength deverá ser 14 ou maior.
- Se Layer2Type estiver definido como NetPacketLayer2TypeNull, Layer2HeaderLength deverá ser definido como 0.
- Se Layer3Type for um tipo IPv4, Layer3HeaderLength deverá ser 20 ou maior.
- Se Layer3Type for um tipo IPv6, Layer3HeaderLength deverá ser 40 ou maior.
- Se Layer4Type estiver definido como Tcp, Layer4HeaderLength deverá ser 40 ou maior.
- Se Layer4Type estiver definido como Udp, Layer4HeaderLength deverá ser 8 ou maior.
- Os campos de tipo de camada devem estar dentro do intervalo de enumeração apropriado.
O layout não é usado durante o Tx.
NET_FRAGMENT
NET_FRAGMENT regras de campo dependem se o driver está recebendo ou transmitindo e se os buffers de fragmento são anexados aos pacotes pelo driver ou pela estrutura.
Rx ou Tx | Observações |
---|---|
Rx |
|
Tx |
|