Introducción a anillos de red

Información general sobre NET_RING

Un NET_RING es un búfer circular de datos de red que se comparte entre un controlador NetAdapterCx y un controlador cliente. Cada cola de paquetes de un controlador cliente tiene dos anillos: un anillo de paquete para descriptores de paquetes principales y un anillo de fragmento para los descriptores de fragmentos de cada paquete.

Para obtener más información acerca de los descriptores de paquetes, consulte Descriptores y extensiones de paquetes.

Cada descriptor principal del anillo de paquetes tiene índices en el anillo de fragmento para localizar los descriptores de fragmentos de ese paquete. Otra estructura de datos, NET_RING_COLLECTION, agrupa el anillo de paquetes y el anillo de fragmentos para una cola de paquetes determinada, como se muestra en el diagrama siguiente.

Diagrama que muestra el diseño de varios anillos de una estructura NET_RING_COLLECTION, incluido un anillo de paquete y un anillo de fragmento.

Cada cola de paquetes tiene su propia estructura NET_RING_COLLECTION y, por consiguiente, su propio anillo de paquetes, anillo de fragmento y descriptores en esos anillos. Por lo tanto, la operación de transferencia de datos de red de cada cola de paquetes es completamente independiente. Para más información sobre las colas de paquetes, consulte Colas de transmisión y recepción.

Propiedad del elemento NET_RING

Cada elemento de un NET_RING es propiedad del controlador cliente o NetAdapterCx. La propiedad se controla mediante tres índices, que marcan secciones de NET_RING. Estos índices se describen en la siguiente tabla. El acto de mover estos índices se describe mediante la semántica post y drain.

Nombre de índice de NET_RING Descripción Necesario para transferir datos de red Autor de la modificación
BeginIndex El principio del intervalo de elementos de NET_RING que posee el controlador de cliente NIC. BeginIndex también es el principio de la subsección drain de NET_RING. Cuando se incrementa BeginIndex, el controlador purga los elementos del anillo y transfiere la propiedad de ellos al sistema operativo. Controlador de cliente NIC
NextIndex Principio de la subsección post de NET_RING. NextIndex divide la sección del anillo que posee el controlador cliente en las subsecciones post y drain. Cuando se incrementa NextIndex, el controlador publica los búferes al hardware y transfiere los búferes a la sección de purga del anillo. No Controlador de cliente NIC
EndIndex El final del intervalo de elementos de NET_RING que posee el controlador de cliente NIC. Los controladores cliente poseen elementos hasta EndIndex: 1 ambos incluidos. NetAdapterCx

Manipular estos índices durante la devolución de llamada EvtPacketQueueAdvance de una cola de paquetes es cómo los controladores cliente transfieren datos de red entre el sistema y el hardware de la tarjeta de interfaz de red (NIC).

Los controladores de cliente poseen todos los elementos de BeginIndex en EndIndex: 1 ambos incluidos. Por ejemplo, si BeginIndex es 2 y EndIndex es 5, el controlador cliente posee tres elementos: los elementos con valores de índice 2, 3 y 4.

Si BeginIndex es igual a EndIndex, el controlador cliente no posee ningún elemento.

NetAdapterCx publica elementos en el búfer de anillo incrementando EndIndex. Un controlador cliente purga los búferes y devuelve la propiedad de los elementos avanzando BeginIndex.

NextIndex es opcional para que los controladores cliente los usen y se proporciona para mayor comodidad al separar las subsecciones post y drain de la sección del controlador cliente del anillo.

Los elementos con valores de índice entre NextIndex y EndIndex: 1 ambos incluidos son propiedad del cliente, pero aún no se han publicado en hardware. Si NextIndex es igual a BeginIndex, el controlador cliente no tiene ningún búfer completado para transferir al sistema operativo. Si NextIndex es igual a EndIndex, el controlador cliente no tiene ningún búfer para publicar en hardware.

Dado que el anillo de red es circular, los valores de índice se ajustan alrededor del final del búfer y vuelven al principio. NetAdapterCx controla automáticamente el ajuste de los valores de índice alrededor del anillo cuando el controlador cliente llama al método adecuado.

Para obtener información específica sobre cómo administrar los elementos en anillos de red, consulte Administración de elementos de anillo de red.

Envío y recepción de datos de red con anillos de red

Consulte los temas siguientes para obtener más información y ejemplos de código sobre cómo enviar y recibir datos de red en anillos de red.

Envío de datos de red con anillos de red

Recepción de datos de red con anillos de red