W_TCP_OFFLOAD_FORWARD_HANDLER 콜백 함수(ndischimney.h)

[TCP 굴뚝 오프로드 기능은 더 이상 사용되지 않으며 사용하면 안 됩니다.]

NDIS는 MiniportTcpOffloadForward 함수를 호출하여 승인되지 않은 수신된 TCP 세그먼트를 오프로드 대상으로 전달합니다.

구문

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

NDIS_STATUS WTcpOffloadForwardHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

매개 변수

[in] MiniportAdapterContext

오프로드 대상이 어댑터의 이 instance 대한 상태 정보를 유지하는 오프로드 대상 할당 컨텍스트 영역에 대한 핸들입니다. 미니포트 드라이버는 호출할 때 NDIS에 이 핸들을 제공했습니다. NdisMSetMiniportAttributes MiniportInitializeEx 함수입니다.

[in] MiniportOffloadContext

PVOID 값이 포함된 메모리 위치에 대한 포인터입니다. 이 PVOID 값은 TCP 세그먼트가 전달되는 TCP 연결에 대한 상태 개체를 포함하는 미니포트 오프로드 컨텍스트를 참조합니다. 오프로드 대상은 TCP 연결 상태 개체를 오프로드할 때 이 PVOID 값을 제공했습니다.

[in] NetBufferList

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 이 구조체는 독립 실행형 구조체이거나 NET_BUFFER_LIST 구조체의 연결된 목록에서 첫 번째 구조체일 수 있습니다. 목록의 각 NET_BUFFER_LIST 구조체는 하나의 NET_BUFFER 구조를 설명합니다. 각 NET_BUFFER 구조체는 MDL(메모리 설명자 목록) 체인에 매핑됩니다. NET_BUFFER 구조체와 연결된 MDL에는 오프로드 대상으로 전달되는 TCP 세그먼트가 하나만 포함됩니다. 첫 번째 MDL의 첫 번째 바이트는 TCP 헤더의 첫 번째 바이트입니다. NET_BUFFER_LIST 및 관련 구조체는 잠겨 있으므로 실제 메모리에 상주합니다. 그러나 시스템 메모리에 매핑되지 않습니다.

반환 값

NDIS_STATUS_PENDING 유일한 허용 반환 값입니다. 오프로드 대상은 항상 를 호출하여 정방향 요청을 비동기적으로 완료합니다. NdisTcpOffloadForwardComplete 함수.

설명

호스트 스택은 수신되었지만 다음 상황에서 승인되지 않은 하나 이상의 TCP 세그먼트를 전달합니다.

  • 호스트 스택은 오프로드 대상에 오프로드되는 TCP 연결에서 세그먼트를 수신했습니다. 연결이 완전히 오프로드되지 않았기 때문에 오프로드 대상은 당시 TCP 세그먼트를 처리할 수 없습니다.
  • 호스트 스택은 TCP 연결이 오프로드된 네트워크 인터페이스 이외의 네트워크 인터페이스에서 세그먼트를 받은 다중 호스트 시스템에 있습니다.
  • 오프로드 대상은 이전에 IP 옵션이 설정되었거나 다시 어셈블리가 필요한 조각인 수신된 패킷을 표시했습니다. IP 옵션을 처리하거나 패킷을 성공적으로 다시 조립한 후 호스트 스택은 TCP 세그먼트를 오프로드 대상으로 전달합니다.
호스트 스택은 다음과 같은 경우 TCP 연결에 대한 TCP 세그먼트를 전달하려고 시도하지 않습니다.
  • 해당 연결이 오프로드되고 있습니다. 호스트 스택은 항상 해당 연결에 대한 패킷을 전달하기 전에 연결의 오프로드가 완료되기를 기다립니다. 호스트 스택은 연결의 오프로드가 완료된 후 가능한 한 빨리 TCP 세그먼트를 전달합니다. 그러나 이러한 세그먼트를 전달하기 위한 시간 제한은 없습니다.
  • 해당 연결의 오프로드가 종료되고 있습니다. 이 경우 호스트 스택은 오프로드 종료가 완료될 때까지 데이터를 버퍼링한 다음 세그먼트를 처리합니다.
호스트 스택은 IP 데이터그램이 아닌 TCP 세그먼트를 오프로드 대상으로 전달합니다. 따라서 호스트 스택이 각 세그먼트에 대해 제공하는 유일한 헤더는 TCP 헤더(있는 모든 TCP 옵션 포함)입니다. 이는 오프로드 대상이 수신된 세그먼트를 처리하는 데 필요한 모든 헤더 정보입니다.

TCP 세그먼트를 전달할 때 호스트 스택은 NET_BUFFER 구조당 하나의 TCP 세그먼트를 전송합니다. 호스트 스택은 하나의 NET_BUFFER 구조만 연결되므로 연결된 목록의 각 NET_BUFFER_LIST 구조와 하나의 전달된 TCP 세그먼트를 연결합니다.

호스트 스택은 NDIS가 MiniportTcpOffloadForward 함수에 전달하는 NET_BUFFER_LIST 및 연결된 구조를 할당합니다. 오프로드 대상은 에 전달될 때까지 이러한 리소스를 소유합니다. NdisTcpOffloadForwardComplete 함수. 이러한 리소스를 소유하는 동안 오프로드 대상은 처리를 위해 자유롭게 큐에 대기할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 ndischimney.h(Ndischimney.h 포함)
IRQL 모든 수준

추가 정보

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete