estructura de NET_RING (ring.h)

Especifica un búfer formado por una o varias estructuras de NET_PACKET o NET_FRAGMENT .

Sintaxis

typedef struct _NET_RING {
  UINT16        OSReserved1;
  UINT16        ElementStride;
  UINT32        NumberOfElements;
  UINT32        ElementIndexMask;
  UINT32        EndIndex;
  union {
    UINT32 OSReserved0;
    void   *OSReserved2[4];
  } DUMMYUNIONNAME;
  UINT32        BeginIndex;
  UINT32        NextIndex;
  void          *Scratch;
  unsigned char Buffer[ANYSIZE_ARRAY];
} NET_RING;

Miembros

OSReserved1

Reservado. Los controladores de cliente no deben leer ni escribir en este valor.

ElementStride

Desplazamiento de bytes de solo lectura desde el inicio de un elemento hasta el inicio de la siguiente. Use ((BYTE*)p + ElementStride) para obtener la dirección del siguiente elemento.

NumberOfElements

Valor de solo lectura que indica el número de paquetes en el búfer de anillo, que siempre es una potencia de dos y mayor que uno.

ElementIndexMask

Máscara UINT32 de solo lectura que se puede usar para fijar eficazmente un índice en [0, NumberOfElements)]. El cliente puede usar este valor para calcular un índice que se encapsula alrededor del búfer de anillo. Use la identidad (x % NumberofElements) == (x & ElementIndexMask).

EndIndex

Especifica el índice de solo lectura del último elemento que pertenece al controlador de cliente en el intervalo inclusivo [0, NumberOfElements - 1].

DUMMYUNIONNAME

Unión que contiene los miembros OSReserved0 y OSReserved2 .

DUMMYUNIONNAME.OSReserved0

Reservado. Los controladores de cliente no deben leer ni escribir en este valor.

DUMMYUNIONNAME.OSReserved2[4]

Reservado. Los controladores de cliente no deben leer ni escribir en este valor.

BeginIndex

Especifica el índice del primer elemento que pertenece al controlador de cliente en el intervalo inclusivo [0, NumberOfElements - 1].

NextIndex

Especifica el índice del siguiente elemento que necesita procesamiento. Para el uso opcional del controlador de cliente.

Scratch

Puntero a un búfer que el controlador cliente puede usar para cualquier propósito.

Buffer[ANYSIZE_ARRAY]

Matriz de bytes que contiene los elementos del anillo neto. Normalmente, un controlador cliente llama a NetRingGetPacketAtIndex o NetRingGetFragmentAtIndex para acceder a los elementos del búfer de anillo.

Comentarios

La estructura NET_RING es un búfer de anillo genérico, optimizado para un acceso eficaz desde un único subproceso. Un NET_RING contiene elementos NET_PACKET o NET_FRAGMENT .

Para obtener más información sobre los búferes de anillo de paquetes y fragmentos, consulta Descriptores y extensiones de paquetes.

Para obtener más información sobre el uso de anillos netos, consulte Introducción a los anillos netos.

Requisitos

Requisito Value
Versión mínima de KMDF 1.29
Encabezado ring.h