NDK_FN_SEND_AND_INVALIDATE 콜백 함수(ndkpi.h)

NdkSendAndInvalidate(NDK_FN_SEND_AND_INVALIDATE) 함수는 NDK 큐 쌍(QP)에 송신 요청을 게시하고 수신 완료 시 원격 피어에서 무효화할 토큰을 제공합니다.

구문

NDK_FN_SEND_AND_INVALIDATE NdkFnSendAndInvalidate;

NTSTATUS NdkFnSendAndInvalidate(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
                 const NDK_SGE *pSgl,
  [in]           ULONG nSge,
  [in]           ULONG Flags,
  [in]           UINT32 RemoteToken
)
{...}

매개 변수

[in] pNdkQp

NDK QP(큐 쌍) 개체(NDK_QP)에 대한 포인터입니다.

[in, optional] RequestContext

이 요청에 대한 NDK_RESULT_EX 구조체의 RequestContext 멤버에 반환할 컨텍스트 값입니다.

pSgl

보낼 데이터를 보유하는 버퍼를 나타내는 SGE(NDK_SGE) 구조체의 배열입니다.

[in] nSge

pSgl 매개 변수에 지정된 배열의 SGE 구조체 수입니다.

[in] Flags

허용되는 작업을 지정하는 플래그의 비트 OR입니다. 지원되는 플래그는 다음과 같습니다.

의미
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
이 요청이 성공하면 아웃바운드 완료 큐에 완료 이벤트가 생성되지 않습니다. 그러나 실패하면 아웃바운드 완료 큐에 완료 이벤트가 생성됩니다.
NDK_OP_FLAG_READ_FENCE
0x00000002
하드웨어가 이 요청 처리를 시작하기 전에 모든 이전 읽기 요청을 완료해야 합니다.
NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT
0x00000004
피어에 대한 완료 큐는 알림을 생성합니다. NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT 대한 자세한 내용은 설명 섹션을 참조하세요.
NDK_OP_FLAG_INLINE
0x00000040
SGE에서 참조하는 메모리를 인라인으로 전송해야 했음을 나타냅니다. 또한 NDK_SGE 항목의 MemoryRegionToken 값이 잘못되었을 수 있습니다. 인라인 요청은 SGE 목록의 항목 수를 큐 쌍을 만들 때 지정된 MaxInitiatorRequestSge 값으로 제한할 필요가 없습니다. 인라인으로 전송되는 메모리 양은 큐 쌍의 인라인 데이터 제한 내에 있어야 합니다.
NDK_OP_FLAG_DEFER
0x00000200
처리를 위해 하드웨어에 대한 요청을 나타내는 것을 연기할 수 있음을 NDK 공급자에게 나타냅니다. 이 플래그에 대한 자세한 내용은 NDKPI 지연 처리 체계를 참조하세요.

참고 이 플래그는 NDKPI 1.2(Windows Server 2012 R2) 이상에서만 지원됩니다.

[in] RemoteToken

수신 완료 시 피어에서 무효화할 원격 토큰입니다. 받는 피어에서 잘못된 토큰을 지정한 경우 수신 피어의 NDK 공급자는 하위 계층 전송 규칙에 지정된 대로 연결을 중단해야 합니다.

반환 값

NdkSendAndInvalidate 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
요청이 성공적으로 게시되었습니다. 완료 항목은 작업 요청이 완료되면 CQ(완료 큐)에 큐에 대기됩니다.
STATUS_CONNECTION_INVALID
큐 쌍(QP)이 연결되지 않았습니다.
기타 상태 코드
오류가 발생했습니다.

설명

관련된 여러 송신 요청을 발급하는 경우 NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT 플래그를 사용할 수 있습니다. 그룹의 마지막 요청에 대해 이 플래그를 설정합니다.

NDK 소비자는 관련된 여러 송신 요청을 실행할 때 이 플래그를 사용할 수 있습니다. NDK 소비자는 마지막 관련 송신 요청에서만 이 플래그를 설정합니다. 피어는 모든 송신 요청을 정상적으로 수신합니다. 그러나 피어가 마지막 보내기 요청( NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT 플래그가 설정된 요청)을 받으면 피어에 대한 완료 큐가 알림을 생성합니다. 알림은 수신 요청이 완료된 후에 생성됩니다. 이 플래그는 수신기가 이전에 알림 유형이 NDK_CQ_NOTIFY_SOLICITED 설정된 NdkArmCq(NDK_FN_ARM_CQ) 함수를 호출하지 않는 한 수신기(피어)에 의미가 없습니다.

참고 오류로 완료된 요청은 항상 NDK_CQ_NOTIFY_SOLICITED 알림 유형과 일치합니다.
 
수신 피어가 원격 무효화를 지원하지 않는 경우 NDK 소비자는 NdkSendAndInvalidate 함수가 호출되지 않도록 해야 합니다. 소비자는 대역 외 메커니즘을 사용하여 이 기능을 협상하거나 이 함수를 사용하지 않아야 합니다. 소비자가 이 요구 사항을 위반하는 경우 공급자의 동작은 정의되지 않습니다.

이 함수에 대한 호출의 결과로 완료 큐에 추가되는 모든 NDK_RESULT_EX 구조체는 Type 멤버에 대해 NdkOperationTypeSend를 지정해야 합니다. NDK_RESULT_EX 구조체의 TypeSpecificCompletionOutput 멤버에 대한 값을 지정할 필요가 없습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되지 않음, NDIS 6.40 이상에서 지원됨
지원되는 최소 서버 Windows Server 2012 R2
대상 플랫폼 Windows
헤더 ndkpi.h(Ndkpi.h 포함)
IRQL <=DISPATCH_LEVEL

추가 정보

NDKPI 완료 처리 요구 사항

NDKPI 지연 처리 체계

NDKPI 작업 요청 게시 요구 사항

NDK_FN_ARM_CQ

NDK_QP

NDK_RESULT_EX

NDK_SGE