NET_RING構造体 (ring.h)
1 つ以上の 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
1 つの要素の先頭から次の要素の先頭までの読み取り専用バイト オフセット。 を使用して ((BYTE*)p + ElementStride)
、次の要素のアドレスを取得します。
NumberOfElements
リング バッファー内のパケットの数を示す読み取り専用値。これは常に 2 の累乗であり、1 より大きい値です。
ElementIndexMask
インデックスを [0, NumberOfElements) に効率的にクランプするために使用できる読み取り専用 UINT32 マスク。 クライアントはこの値を使用して、リング バッファーを囲むインデックスを計算できます。 ID を使用します (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 |
Header | ring.h |