структура 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 |