Partager via


NET_RING structure (ring.h)

Spécifie une mémoire tampon composée d’une ou plusieurs structures NET_PACKET ou NET_FRAGMENT .

Syntaxe

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;

Membres

OSReserved1

Réservé. Les pilotes clients ne doivent pas lire ou écrire dans cette valeur.

ElementStride

Décalage d’octets en lecture seule du début d’un élément au début du suivant. Utilisez ((BYTE*)p + ElementStride) pour obtenir l’adresse de l’élément suivant.

NumberOfElements

Valeur en lecture seule qui indique le nombre de paquets dans la mémoire tampon en anneau, qui est toujours une puissance de deux et supérieure à un.

ElementIndexMask

Masque UINT32 en lecture seule qui peut être utilisé pour fixer efficacement un index à [0, NumberOfElements) . Le client peut utiliser cette valeur pour calculer un index qui encapsule la mémoire tampon en anneau. Utilisez l’identité (x % NumberofElements) == (x & ElementIndexMask).

EndIndex

Spécifie l’index en lecture seule du dernier élément appartenant au pilote client dans la plage inclusive [0, NumberOfElements - 1].

DUMMYUNIONNAME

Union qui contient les membres OSReserved0 et OSReserved2 .

DUMMYUNIONNAME.OSReserved0

Réservé. Les pilotes clients ne doivent pas lire ou écrire dans cette valeur.

DUMMYUNIONNAME.OSReserved2[4]

Réservé. Les pilotes clients ne doivent pas lire ou écrire dans cette valeur.

BeginIndex

Spécifie l’index du premier élément appartenant au pilote client dans la plage inclusive [0, NumberOfElements - 1].

NextIndex

Spécifie l’index de l’élément suivant qui doit être traité. Pour une utilisation facultative par le pilote client.

Scratch

Pointeur vers une mémoire tampon que le pilote client peut utiliser à n’importe quel usage.

Buffer[ANYSIZE_ARRAY]

Tableau d’octets qui contient les éléments dans l’anneau net. En règle générale, un pilote client appelle NetRingGetPacketAtIndex ou NetRingGetFragmentAtIndex pour accéder aux éléments de la mémoire tampon en anneau.

Remarques

La structure NET_RING est une mémoire tampon en anneau générique, optimisée pour un accès efficace à partir d’un seul thread. Un NET_RING contient des éléments NET_PACKET ou NET_FRAGMENT .

Pour plus d’informations sur les tampons d’anneau de paquets et de fragments, consultez Extensions et descripteurs de paquets.

Pour plus d’informations sur l’utilisation des anneaux réseau, consultez Présentation des anneaux de réseau.

Configuration requise

Condition requise Valeur
Version KMDF minimale 1.29
Version UMDF minimale 2,33
En-tête ring.h