Condividi tramite


struttura NET_RING (ring.h)

Specifica un buffer costituito da una o più strutture NET_PACKET o NET_FRAGMENT .

Sintassi

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;

Members

OSReserved1

Riservato. I driver client non devono leggere o scrivere in questo valore.

ElementStride

Offset di byte di sola lettura dall'inizio di un elemento all'inizio del successivo. Utilizzare ((BYTE*)p + ElementStride) per ottenere l'indirizzo dell'elemento successivo.

NumberOfElements

Valore di sola lettura che indica il numero di pacchetti nel buffer circolare, che è sempre una potenza di due e maggiore di uno.

ElementIndexMask

Maschera UINT32 di sola lettura che può essere utilizzata per bloccare in modo efficiente un indice a [0, NumberOfElements). Il client può usare questo valore per calcolare un indice che esegue il wrapping intorno al buffer circolare. Usare l'identità (x % NumberofElements) == (x & ElementIndexMask).

EndIndex

Specifica l'indice di sola lettura dell'ultimo elemento di proprietà del driver client nell'intervallo inclusivo [0, NumberOfElements - 1].

DUMMYUNIONNAME

Unione che contiene i membri OSReserved0 e OSReserved2 .

DUMMYUNIONNAME.OSReserved0

Riservato. I driver client non devono leggere o scrivere in questo valore.

DUMMYUNIONNAME.OSReserved2[4]

Riservato. I driver client non devono leggere o scrivere in questo valore.

BeginIndex

Specifica l'indice del primo elemento di proprietà del driver client nell'intervallo inclusivo [0, NumberOfElements - 1].

NextIndex

Specifica l'indice dell'elemento successivo che richiede l'elaborazione. Per l'uso facoltativo da parte del driver client.

Scratch

Puntatore a un buffer che il driver client può usare per qualsiasi scopo.

Buffer[ANYSIZE_ARRAY]

Matrice di byte che contiene gli elementi nell'anello di rete. In genere, un driver client chiama NetRingGetPacketAtIndex o NetRingGetFragmentAtIndex per accedere agli elementi del buffer circolare.

Commenti

La struttura NET_RING è un buffer circolare generico, ottimizzato per l'accesso efficiente da un singolo thread. Un NET_RING contiene elementi NET_PACKET o NET_FRAGMENT .

Per altre info sui buffer circolari di pacchetti e frammenti, vedi Descrittori di pacchetti ed estensioni.

Per altre info sull'uso degli anelli di rete, vedi Introduzione agli anelli di rete.

Requisiti

Requisito Valore
Versione KMDF minima 1.29
Versione UMDF minima 2.33
Intestazione ring.h