функция обратного вызова 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

Значение контекста, возвращаемое в элементе RequestContextструктуры NDK_RESULT_EX для этого запроса.

pSgl

Массив структур SGE (NDK_SGE), представляющих буферы, в которые помещаются данные для отправки.

[in] nSge

Количество структур SGE в массиве, указанном в параметре pSgl .

[in] Flags

Побитовое ИЛИ флагов, указывающих разрешенные операции. Поддерживаются следующие флаги:

Значение Значение
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
Указывает, что память, на которую ссылается SGEs, должна быть передана встроенной. Кроме того, значение MemoryRegionToken в записях NDK_SGE может быть недопустимым. Встроенным запросам не нужно ограничивать количество записей в списке 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 ), очередь завершения для однорангового узла создает уведомление. Уведомление создается после завершения запроса на получение. Этот флаг не имеет значения для получателя (однорангового узла), если получатель ранее не вызывал функцию NdkArmCq (NDK_FN_ARM_CQ) с типом уведомления, для которого задано значение NDK_CQ_NOTIFY_SOLICITED.

Примечание Запросы, завершающиеся ошибкой, всегда соответствуют типу уведомления NDK_CQ_NOTIFY_SOLICITED .
 
Потребитель NDK должен убедиться, что функция NdkSendAndInvalidate не вызывается, если принимающий одноранговый узел не поддерживает удаленную недействительность. Потребитель должен либо согласовать эту возможность с помощью внешнего механизма, либо не использовать эту функцию. Если потребитель нарушает это требование, поведение поставщика не определено.

Любая структура NDK_RESULT_EX , добавляемая в очередь завершения в результате вызова этой функции, должна указывать NdkOperationTypeSend для элемента Type . Обратите внимание, что не нужно указывать значение для элемента TypeSpecificCompletionOutput структуры NDK_RESULT_EX .

Требования

Требование Значение
Минимальная версия клиента Не поддерживается, поддерживается в NDIS 6.40 и более поздних версиях.
Минимальная версия сервера Windows Server 2012 R2
Целевая платформа Windows
Header ndkpi.h (включая Ndkpi.h)
IRQL <=DISPATCH_LEVEL

См. также раздел

Требования к обработке завершения NDKPI

Схема отложенной обработки NDKPI

Требования к публикации запросов на работу NDKPI

NDK_FN_ARM_CQ

NDK_QP

NDK_RESULT_EX

NDK_SGE