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
머리글 ring.h