NET_RING 结构 (ring.h)

指定由一个或多个 NET_PACKETNET_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

包含 OSReserved0OSReserved2 成员的 联合。

DUMMYUNIONNAME.OSReserved0

保留。 客户端驱动程序不得读取或写入此值。

DUMMYUNIONNAME.OSReserved2[4]

保留。 客户端驱动程序不得读取或写入此值。

BeginIndex

指定包含范围 [0, NumberOfElements - 1] 中客户端驱动程序拥有的第一个元素的索引。

NextIndex

指定需要处理的下一个元素的索引。 供客户端驱动程序可选使用。

Scratch

指向客户端驱动程序可用于任何目的的缓冲区的指针。

Buffer[ANYSIZE_ARRAY]

包含网络环中的元素的字节数组。 通常,客户端驱动程序调用 NetRingGetPacketAtIndexNetRingGetFragmentAtIndex 来访问环形缓冲区的元素。

注解

NET_RING 结构是通用环形缓冲区,针对从单个线程进行高效访问而优化。 NET_RING包含NET_PACKETNET_FRAGMENT元素。

有关数据包和片段环缓冲区的详细信息,请参阅 数据包描述符和扩展

有关使用网络环的详细信息,请参阅 Net Ring 简介

要求

要求
最低 KMDF 版本 1.29
标头 ring.h