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
一个只读值,指示环形缓冲区中的数据包数,始终为 2 的幂,大于 1。
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元素。
有关数据包和片段环缓冲区的详细信息,请参阅 数据包描述符和扩展。
有关使用网络环的详细信息,请参阅 Net Ring 简介。
要求
要求 | 值 |
---|---|
最低 KMDF 版本 | 1.29 |
最低 UMDF 版本 | 2.33 |
标头 | ring.h |