Поделиться через


структура NET_RING (ring.h)

Задает буфер, состоящий из одной или нескольких NET_PACKET или NET_FRAGMENT структур.

Синтаксис

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;

Члены

OSReserved1

Зарезервировано. Клиентские драйверы не должны выполнять чтение или запись в это значение.

ElementStride

Смещение байтов только для чтения от начала одного элемента к началу следующего. Используйте ((BYTE*)p + ElementStride) для получения адреса следующего элемента.

NumberOfElements

Значение, доступное только для чтения, указывающее количество пакетов в кольцевом буфере, которое всегда равно двум и больше одного.

ElementIndexMask

Маска UINT32, доступная только для чтения, которая может использоваться для эффективного закрепления индекса в [0, NumberOfElements). Клиент может использовать это значение для вычисления индекса, который выполняет оболочку вокруг кольцевого буфера. Используйте удостоверение (x % NumberofElements) == (x & ElementIndexMask).

EndIndex

Указывает доступный только для чтения индекс последнего элемента, который принадлежит драйверу клиента в инклюзивном диапазоне [0, NumberOfElements - 1].

DUMMYUNIONNAME

Объединение, содержащее элементы OSReserved0 и OSReserved2 .

DUMMYUNIONNAME.OSReserved0

Зарезервировано. Клиентские драйверы не должны выполнять чтение или запись в это значение.

DUMMYUNIONNAME.OSReserved2[4]

Зарезервировано. Клиентские драйверы не должны выполнять чтение или запись в это значение.

BeginIndex

Указывает индекс первого элемента, принадлежащего драйверу клиента, в инклюзивном диапазоне [0, NumberOfElements - 1].

NextIndex

Указывает индекс следующего элемента, который требует обработки. Для необязательного использования драйвером клиента.

Scratch

Указатель на буфер, который драйвер клиента может использовать для любых целей.

Buffer[ANYSIZE_ARRAY]

Массив байтов, содержащий элементы в чистом кольце. Как правило, драйвер клиента вызывает NetRingGetPacketAtIndex или NetRingGetFragmentAtIndex для доступа к элементам кольцевого буфера.

Комментарии

Структура NET_RING представляет собой универсальный кольцевой буфер, оптимизированный для эффективного доступа из одного потока. NET_RING содержит NET_PACKET или NET_FRAGMENT элементы.

Дополнительные сведения о буферах кругов пакетов и фрагментов см. в разделе Дескрипторы и расширения пакетов.

Дополнительные сведения об использовании сетевых кругов см. в статье Введение в круги сетки.

Требования

Требование Значение
Минимальная версия KMDF 1.29
Минимальная версия UMDF 2.33
Верхняя часть ring.h