NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체(ndischimney.h)
[TCP 굴뚝 오프로드 기능은 더 이상 사용되지 않으며 사용해서는 안 됩니다.]
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조는 TCP 굴뚝 오프로드 상태 트리의 기본 구성 요소입니다. 오프로드 상태 트리에는 하나 이상의 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체가 포함될 수 있습니다.
통사론
typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST {
IN NDIS_OBJECT_HEADER Header;
IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
#endif
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[2];
IN OUT PVOID *MiniportOffloadContext;
IN NDIS_HANDLE NdisOffloadHandle;
IN PVOID ProtocolReserved[2];
IN PVOID MiniportReserved[2];
IN PVOID ImReserved[2];
IN PVOID Scratch[2];
IN PVOID SourceHandle;
IN NDIS_PORT_NUMBER PortNumber;
IN OUT PNET_BUFFER_LIST NetBufferListChain;
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
회원
Header
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 헤더입니다. 헤더의 형식은 NDIS_OBJECT_HEADER 구조체로 지정됩니다. NDIS_OBJECT_HEADER 구조체에는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 수정 번호, 메모리의 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조 바로 뒤에 있는 오프로드 상태 유형 및 헤더를 포함한 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 크기(바이트)가 포함됩니다.
NDIS_OBJECT_HEADER 구조체의 형식 멤버는 오프로드 상태의 형식을 나타내며, 메모리의 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조 바로 뒤에 있는 특정 오프로드 상태 구조(또는 구조체)를 의미합니다.
지원되는 OFFLOAD_STATE_TYPE 값은 다음과 같습니다.
NeighborOffloadConstState
상수 인접 상태를 지정합니다. 이 상태는
NeighborOffloadCachedState
캐시된 인접 상태를 지정합니다. 이 상태는
NeighborOffloadDelegatedState
위임된 인접 상태를 지정합니다. 이 상태는
NeighborOffloadState
상수, 캐시됨 및 위임된 인접 상태를 포함하여 모든 인접 상태 정보를 지정합니다. 이 상태는 NEIGHBOR_OFFLOAD_STATE_CONST 구조체로 형식이 지정되고 NEIGHBOR_OFFLOAD_STATE_CACHED 구조와 NEIGHBOR_OFFLOAD_STATE_DELEGATED 구조가 뒤따릅니다.
Ip4OffloadConstState
상수 경로 상태(IPv4)를 지정합니다. 이 상태는
Ip4OffloadCachedState
캐시된 경로 상태(IPv4)를 지정합니다. 이 상태는
Ip4OffloadDelegatedState
위임된 경로 상태(IPv4)를 지정합니다. 이 상태는
Ip4OffloadState
상수, 캐시됨 및 위임된 경로 상태를 포함하여 모든 경로 상태(IPv4)를 지정합니다. 이 상태는 PATH_OFFLOAD_STATE_CONST 구조체로 형식이 지정되고 그 뒤에 PATH_OFFLOAD_STATE_CACHED 구조체와 PATH_OFFLOAD_STATE_DELEGATED 구조가 뒤따릅니다.
Ip6OffloadConstState
상수 경로 상태(IPv6)를 지정합니다. 이 상태는 PATH_OFFLOAD_STATE_CONST 구조체로 형식이 지정됩니다.
Ip6OffloadCachedState
캐시된 경로 상태(IPv6)를 지정합니다. 이 상태는 PATH_OFFLOAD_STATE_CACHED 구조체로 형식이 지정됩니다.
Ip6OffloadDelegatedState
위임된 경로 상태(IPv6)를 지정합니다. 이 상태는 PATH_OFFLOAD_STATE_DELEGATED 구조체로 형식이 지정됩니다. 현재 위임된 경로 상태가 없습니다. PATH_OFFLOAD_STATE_DELEGATED 구조체에는 변수가 없습니다.
Ip6OffloadState
상수, 캐시됨 및 위임된 경로 상태를 포함하여 모든 경로 상태 정보(IPv6)를 지정합니다. 이 상태는 PATH_OFFLOAD_STATE_CONST 구조체로 형식이 지정되고 그 뒤에 PATH_OFFLOAD_STATE_CACHED 구조체와 PATH_OFFLOAD_STATE_DELEGATED 구조가 뒤따릅니다.
TcpOffloadConstState
상수 TCP 상태를 지정합니다. 이 상태는
TcpOffloadCachedState
캐시된 TCP 상태를 지정합니다. 이 상태는
TcpOffloadDelegatedState
위임된 TCP 상태를 지정합니다. 이 상태는
TcpOffloadResourceState
예약. 이 OFFLOAD_STATE_TYPE 값과 TCP_OFFLOAD_RESOURCE_STATE 구조체는 현재 사용되지 않습니다.
TcpOffloadState
상수, 캐시됨 및 위임된 TCP 상태를 포함하여 모든 TCP 상태 정보를 지정합니다. 이 상태는 TCP_OFFLOAD_STATE_CONST 구조체로 형식이 지정되고 그 다음에 TCP_OFFLOAD_STATE_CACHED 구조체와 TCP_OFFLOAD_STATE_DELEGATED 구조가 뒤따릅니다.
FilterReservedOffloadState
필터 드라이버용으로 예약되어 있습니다.
NextBlock
헤더 멤버의 Type 멤버가 나타내는 오프로드 상태 계층(인접, 경로 또는 TCP)의 다음 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체에 대한 포인터입니다. NextBlock 포인터를 통해 연결된 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체는 항상 오프로드 상태의 동일한 계층에 있습니다. NULLNextBlock 값은 이 수준에서 추가적인 다음 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조가 없음을 나타냅니다.
_NDIS_MINIPORT_OFFLOAD_BLOCK_LIST
DependentBlockList
오프로드 상태의 종속 계층(오프로드 상태 트리의 상위 계층)에 있는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체에 대한 포인터입니다. TCP 굴뚝 오프로드의 경우:
- 인접 계층에 있는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 DependentBlockList 멤버는 경로 계층의 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조만 가리킬 수 있습니다.
- 경로 계층에 있는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 DependentBlockList 멤버는 TCP 계층의 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조만 가리킬 수 있습니다.
- TCP 계층에서 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 DependentBlockList 멤버는 항상 NULL .
Status
오프로드 시작, 쿼리 오프로드, 업데이트 오프로드, 오프로드 무효화 또는 오프로드 종료 작업의 완료 상태는 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결되거나 참조된 상태에서 수행되는 오프로드 작업을 종료합니다. 작업에 따라 오프로드 대상은 다음 NDIS_STATUS 값 중 하나를 Status 멤버에 씁니다.
NDIS_STATUS_SUCCESS
오프로드 시작: 오프로드 대상은 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태와 즉시 종속된 모든 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 성공적으로 오프로드했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 오프로드 대상은 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결되거나 참조되는 상태에서 작업을 성공적으로 수행했습니다.
NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS
오프로드 시작: 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 성공적으로 오프로드했지만 즉시 종속된 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체 중 하나 이상과 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_FAILURE
오프로드 시작: 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다. 오류의 원인은 분류할 수 없습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결되거나 참조된 상태에서 작업을 수행하지 못했습니다.
NDIS_STATUS_RESOURCES
오프로드 시작: 오프로드 대상이 충분한 호스트 메모리를 할당할 수 없으므로 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_TCP_ENTRIES
오프로드 시작: 오프로드 대상이 TCP 연결 상태 개체를 할당할 수 없으므로 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_PATH_ENTRIES
오프로드 시작: 오프로드 대상이 경로 상태 개체를 할당할 수 없기 때문에 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES
오프로드 시작: 오프로드 대상이 인접 상태 개체를 할당할 수 없기 때문에 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES
오프로드 시작: 호스트 스택이NULLDlSourceAddress 멤버를 지정했기 때문에 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다. NEIGHBOR_OFFLOAD_STATE_CONST 구조와 오프로드 대상은 구성 가능한 원본 MAC 주소를 지원하지 않거나 추가 원본 MAC 주소를 수락할 수 없습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES
오프로드 시작: 오프로드 대상에서 SourceAddress 포인터에서 참조하는 원본 IP 주소에 대한 데이터 구조를 할당할 수 없으므로 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다. PATH_OFFLOAD_STATE_CONST 구조체입니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER
오프로드 시작: 오프로드 대상이 충분한 TCP 전송 버퍼를 할당할 수 없으므로 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER
오프로드 시작: 오프로드 대상이 충분한 TCP 수신 버퍼를 할당할 수 없으므로 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 오프로드하지 못했습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW
오프로드 시작: InitialRcvWnd 멤버가 지정된 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체와 연결된 상태를 오프로드하지 못했습니다. TCP_OFFLOAD_STATE_CACHED 구조는 오프로드 대상이 지원할 수 있는 것보다 큽니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_VLAN_ENTRIES
오프로드 시작: 오프로드 대상에 추가 VLAN ID를 추적하기 위한 리소스가 부족합니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_VLAN_MISMATCH
오프로드 시작: 인접 VlanId 0이 아니고 인터페이스 VLAN ID 중 하나와 일치하지 않습니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NDIS_STATUS_OFFLOAD_PATH_MTU
TCP 연결의 경로 MTU가 오프로드 대상에서 지원하는 것보다 큽니다.
오프로드 쿼리, 업데이트, 무효화 또는 종료: 허용되는 상태 값이 아닙니다.
NdisReserved[2]
NDIS에서 사용하도록 예약되었습니다.
MiniportOffloadContext
오프로드 대상이 PVOID 값을 쓰는 메모리 위치에 대한 포인터입니다. PVOID 값은 오프로드 대상이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 상태를 저장하는 오프로드 컨텍스트 영역을 참조합니다. 상태가 오프로드 대상에 의해 오프로드될 새 상태인 경우 MiniportOffloadContext 가리키는 메모리 위치에 NULL 값이 포함됩니다. 상태를 오프로드한 후 오프로드 대상은 이 메모리 위치에 PVOID 값을 씁니다. 오프로드 대상에서 제공하는 PVOID 값은 상태가 오프로드된 오프로드 컨텍스트 영역을 참조합니다. MiniportOffloadContext 멤버 자체가 NULL 경우 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체는 오프로드 상태 트리의 자리 표시자입니다.
NdisOffloadHandle
오프로드 대상이 다음에 호출할 때 제공하는 핸들입니다. NdisTcpOffloadEventHandler 함수 또는 NdisTcpOffloadReceiveHandler는 이 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 오프로드 상태를 표시할 때 함수를.
ProtocolReserved[2]
프로토콜 드라이버에서 사용하도록 예약되어 있으며, 이 영역은 고유한 용도로 사용할 수 있습니다. 오프로드 대상은 이 값을 수정해서는 안 됩니다.
MiniportReserved[2]
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조와 연결된 오프로드 상태를 큐에 대기하는 등 고유한 용도로 이 영역을 사용할 수 있는 오프로드 대상에서 사용하도록 예약됩니다.
ImReserved[2]
중간 드라이버에서 사용하도록 예약되어 있으며, 이 영역은 고유한 용도로 사용할 수 있습니다. 오프로드 대상은 이 값을 수정해서는 안 됩니다.
Scratch[2]
오프로드 대상은 내부 추적에 이 영역을 사용할 수 있습니다. 이 영역의 정보는 오프로드 대상에 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 소유권이 있는 경우에만 유효합니다.
SourceHandle
이 멤버는 오프로드 대상에 중요하지 않습니다. 오프로드 대상은 이 멤버를 수정해서는 안됩니다.
PortNumber
미니포트 어댑터 포트를 식별하는 포트 번호입니다. 미니포트 어댑터 포트 번호를 할당하려면 NdisMAllocatePort 함수를 호출합니다. 0 값은 미니포트 어댑터의 기본 포트를 식별합니다. 미니포트 드라이버에서 지정된 어댑터에 대한 포트를 할당하지 않은 경우 기본 포트를 사용합니다.
NetBufferListChain
호스트 스택이 NULL 값을 지정하는 경우 NetBufferListChain 중요하지 않으며 오프로드 대상에서 무시할 수 있습니다.
호스트 스택이NULL이 아닌 값을 지정하면 NetBufferListChain 독립 실행형 구조체 또는 이러한 구조체의 연결된 목록의 첫 번째 구조체일 수 있는 NET_BUFFER_LIST 구조를 가리킵니다. 연결된 목록의 각 NET_BUFFER_LIST 구조체는 하나의 NET_BUFFER 구조를 설명합니다. NET_BUFFER 구조체는 MDL(메모리 설명자 목록) 체인에 매핑됩니다. NET_BUFFER_LIST 및 관련 구조체는 물리적 메모리에 계속 상주할 수 있도록 잠겨 있습니다. 그러나 시스템 메모리에 매핑되지 않습니다.
NET_BUFFER 구조와 연결된 MDL에는 호스트 스택이 오프로드 작업의 일부로 오프로드 대상에 전달하는 데이터가 포함됩니다. 오프로드 대상은 적절한 NdisTcpOffloadXxxComplete 함수를 호출하여 이러한 데이터를 호스트 스택으로 비동기적으로 다시 완료합니다. 현재 연결된 목록에는 한 가지 유형의 데이터(미해결 송신 데이터)만 포함될 수 있습니다. 자세한 내용은 오프로드 작업 중 및 후 미해결 송신 데이터 처리참조하세요.
오프로드 대상은 TCP 연결의 오프로드를 종료할 때 호스트 스택에 미해결 송신 데이터를 전달할 수 있습니다. 이 경우 오프로드 대상은 호출할 때 NetBufferListChain 멤버에 대해NULL이 아닌 값을 지정합니다. NdisMTerminateOffloadComplete 함수입니다. 오프로드 대상이 종료되는 TCP 연결에 대한 전송 데이터를 전달하지 않는 경우 NetBufferListChain 멤버에 NULL 값을 지정해야 합니다.
발언
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조를 함께 연결하여 상태 트리 오프로드할TCP 굴뚝의 프레임워크를 빌드할 수 있습니다.
NDIS를 통해 호스트 스택은 오프로드 대상의 다음 함수 중 하나에 오프로드 상태 트리를 참조하는 OffloadBlockList 포인터를 전달합니다.
- NdisMInitiateOffloadComplete
- NdisMQueryOffloadStateComplete
- NdisMInvalidateOffloadComplete
- NdisMTerminateOffloadComplete
호스트 스택 및 오프로드 대상은 *MiniportOffloadContext 사용하고 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 멤버를 NdisOffloadHandle 사용하여 오프로드된 상태를 참조합니다. 자세한 내용은 오프로드된 상태 저장 및 참조하는참조하세요.
NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체는 오프로드 상태 트리에서 여러 함수 중 하나를 수행할 수 있습니다. 자리 표시자, 링커로 작동하거나 오프로드 대상에 의해 오프로드될 새 상태를 전달할 수 있습니다. 자세한 내용은 자리 표시자, 링커 및 새 오프로드 참조하세요.
오프로드 시작, 쿼리 오프로드, 업데이트 오프로드, 오프로드 무효화 또는 오프로드 작업을 종료하기 전에 오프로드 대상은 상태 트리에 있는 각 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조의 상태 멤버에 완료 상태를 기록해야 합니다.
요구 사항
요구 | 값 |
---|---|
헤더 | ndischimney.h(Ndischimney.h 포함) |