다음을 통해 공유


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

OSReserved0OSReserved2 멤버를 포함하는 공용 구조체입니다.

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