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
인덱스를 [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]
net 링의 요소를 포함하는 바이트 배열입니다. 일반적으로 클라이언트 드라이버는 NetRingGetPacketAtIndex 또는 NetRingGetFragmentAtIndex 를 호출하여 링 버퍼의 요소에 액세스합니다.
설명
NET_RING 구조는 단일 스레드에서 효율적으로 액세스하기 위해 최적화된 제네릭 링 버퍼입니다. NET_RINGNET_PACKET 또는 NET_FRAGMENT 요소를 포함합니다.
패킷 및 조각 링 버퍼에 대한 자세한 내용은 패킷 설명자 및 확장을 참조하세요.
Net 링 사용에 대한 자세한 내용은 Net 링 소개를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
최소 KMDF 버전 | 1.29 |
최소 UMDF 버전 | 2.33 |
머리글 | ring.h |