Administración de elementos de anillo de red
Siga las instrucciones de este tema para administrar las estructuras de NET_RING y sus elementos durante la transferencia de datos de red. Las reglas de este tema describen qué miembros de los controladores de cliente de elementos de anillo de red pueden modificar y cuándo, en función del escenario de ruta de acceso de datos, así como los controladores de cliente de información general deben tener en cuenta estas estructuras.
Importante
Los controladores de cliente deben cumplir estas instrucciones durante todas las fases de desarrollo. Si un controlador cliente no cumple estas instrucciones mientras se prueba con el Comprobador de controladores, el comprobador de controladores notifica una infracción y desencadena una comprobación de errores en el dispositivo sometido a prueba.
NET_RING
Cuando se inicia la cola de paquetes primario del NET_RING, todos los índices del anillo se inicializan en 0.
En la tabla siguiente se describen los miembros del anillo neto que los controladores de cliente pueden modificar.
Campo | Se permite modificar el controlador de cliente |
---|---|
OSReserved1 | No |
ElementStride | No |
NumberOfElements | No |
ElementIndexMask | No |
Endindex | No |
OSReserved0 | No |
OSReserved2 | No |
BeginIndex | Sí (obligatorio) |
NextIndex | Sí (opcional) Nota: El marco nunca lee NextIndex. |
Borrador | Sí (opcional) Nota: El marco nunca lee Scratch. |
Buffer | No |
Los controladores de cliente no deben modificar ningún miembro de solo lectura de esta estructura, ni tampoco deben incrementar BeginIndex más allá de EndIndex durante una llamada a EvtPacketQueueAdvance.
Para obtener más información sobre la propiedad del índice en anillos netos, consulte Introducción a los anillos netos.
NET_PACKET
Los campos de un NET_PACKET son sensibles a los diferentes contextos en los que funciona la ruta de acceso de datos. Si se establece el campo Omitir del paquete y si el controlador recibe (Rx) o transmite (Tx) el paquete cambia el conjunto de reglas que se aplica al paquete.
En la tabla siguiente se proporcionan instrucciones para los controladores en cada escenario.
Rx o Tx | Omitir campo está establecido por... | Notas |
---|---|---|
Rx | Controlador de cliente |
|
Tx | NetAdapterCx |
|
NET_PACKET_LAYOUT
Durante las operaciones rx, el campo Diseño del NET_PACKET está sujeto a las reglas siguientes:
- El controlador de cliente debe inicializar todos los campos excepto Reserved0 .
- Si Layer2Type está establecido en NetPacketLayer2TypeEthernet, Layer2HeaderLength debe ser 14 o superior.
- Si Layer2Type está establecido en NetPacketLayer2TypeNull, Layer2HeaderLength debe establecerse en 0.
- Si Layer3Type es un tipo IPv4, Layer3HeaderLength debe ser 20 o superior.
- Si Layer3Type es un tipo IPv6, Layer3HeaderLength debe ser 40 o superior.
- Si Layer4Type se establece en Tcp, Layer4HeaderLength debe ser 40 o superior.
- Si Layer4Type está establecido en Udp, Layer4HeaderLength debe ser 8 o superior.
- Los campos de tipo de capa deben estar dentro del intervalo de enumeración adecuado.
El diseño no se usa durante Tx.
NET_FRAGMENT
NET_FRAGMENT reglas de campo dependen de si el controlador está recibiendo o transmitiendo, y de si los búferes de fragmentos están conectados a los paquetes por el controlador o por el marco.
Rx o Tx | Notas |
---|---|
Rx |
|
Tx |
|