Introducción a los anillos netos

Información general de NET_RING

Un NET_RING es un búfer circular de datos de red que se comparten entre NetAdapterCx y un controlador de 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 sobre los descriptores de paquetes, vea Descriptores de paquetes y extensiones.

Cada descriptor principal del anillo de paquetes tiene índices en el anillo de fragmentos para localizar los descriptores de fragmentos de ese paquete. Otra estructura de datos, el NET_RING_COLLECTION, agrupa el anillo de paquetes y el anillo de fragmento 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 de NET_RING_COLLECTION, incluido un anillo de paquetes y un anillo de fragmento.

Cada cola de paquetes tiene su propia estructura de 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 obtener más información sobre las colas de paquetes, consulte Transmisión y recepción de colas.

propiedad del elemento NET_RING

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

NET_RING nombre de índice Descripción Necesario para transferir datos de red Modificado por
BeginIndex El principio del intervalo de elementos de la NET_RING que posee el controlador de cliente NIC. BeginIndex también es el principio de la subsección de purga del 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 posterior de la NET_RING. NextIndex divide la sección del anillo que posee el controlador de cliente en las subsecciones posteriores y de purga. Cuando se incrementa NextIndex , el controlador envía los búferes al hardware y transfiere los búferes a la sección de purga del anillo. No Controlador de cliente NIC
Endindex Final del intervalo de elementos de la NET_RING que posee el controlador de cliente NIC. Los controladores de cliente poseen elementos hasta EndIndex: 1 inclusive. NetAdapterCx

Manipular estos índices durante la devolución de llamada EvtPacketQueueAdvance de una cola de paquetes es cómo los controladores de 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 a EndIndex: 1 inclusive. Por ejemplo, si BeginIndex es 2 y EndIndex es 5, el controlador de cliente posee tres elementos: los elementos con valores de índice 2, 3 y 4.

Si BeginIndex es igual a EndIndex, el controlador de 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 los controladores de cliente que se van a usar y se proporciona para mayor comodidad al separar las subsecciones post y drenar de la sección del controlador de cliente del anillo.

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

Dado que el anillo neto 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 netos, consulte Administración de elementos de anillo de red.

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

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

Envío de datos de red con anillos netos

Recepción de datos de red con anillos netos