OID_RECEIVE_FILTER_SET_FILTER

Избыточный драйвер отправляет запрос метода OID для OID_RECEIVE_FILTER_SET_FILTER, чтобы задать фильтр для сетевого адаптера.

Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на буфер, выделенный вызывающим объектом. Этот буфер имеет следующий формат:

  • Структура NDIS_RECEIVE_FILTER_PARAMETERS , указывающая параметры для фильтра получения NDIS.

  • Массив NDIS_RECEIVE_FILTER_FIELD_PARAMETERS структур, указывающий критерий проверки фильтра для поля в заголовке сетевого пакета.

После успешного возврата из запроса метода OID элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_RECEIVE_FILTER_PARAMETERS . Если драйвер overlying создает новый фильтр получения, NDIS обновляет эту структуру новым идентификатором фильтра.

Комментарии

Фильтры получения NDIS используются в следующих интерфейсах NDIS:

Запрос метода OID OID_RECEIVE_FILTER_SET_FILTER является обязательным для драйверов минипорта, которые поддерживают объединение пакетов NDIS, SR-IOV или интерфейс VMQ.

Драйвер overlying инициализирует структуру NDIS_RECEIVE_FILTER_PARAMETERS с запрошенной конфигурацией фильтра. NDIS назначает идентификатор фильтра в элементе FilterId структуры NDIS_RECEIVE_FILTER_PARAMETERS и передает запрос метода базовому драйверу мини-порта.

Каждый фильтр, заданный в очереди получения, имеет уникальный идентификатор фильтра для сетевого адаптера. То есть идентификаторы фильтров не дублируются в разных очередях, которыми управляет сетевой адаптер. Когда NDIS получает запрос OID на настройку фильтра в очереди получения, он проверяет параметры фильтра. После того как NDIS выделяет необходимые ресурсы и идентификатор фильтра, он отправляет запрос OID базовому сетевому адаптеру. Если сетевой адаптер может успешно выделить необходимые программные и аппаратные ресурсы для фильтра, он завершает запрос OID с состоянием возврата NDIS_STATUS_SUCCESS.

Примечание Начиная с версии NDIS 6.30 фильтр получения объединения пакетов поддерживается только в очереди получения по умолчанию сетевого адаптера. Эта очередь получения имеет идентификатор NDIS_DEFAULT_RECEIVE_QUEUE_ID.

Драйвер мини-порта должен сохранить идентификаторы фильтров для выделенных фильтров получения. NDIS использует идентификатор фильтра в последующих запросах OID для изменения параметров фильтра получения или очистки фильтра получения.

После того как драйвер мини-порта получит запрос OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE и у него есть фильтры, заданные в очереди, очередь находится в состоянии Выполняется . В этом состоянии драйвер мини-порта может запускать указания пакетов в очереди, вызвав NdisMIndicateReceiveNetBufferLists.

Дополнительные рекомендации по интерфейсу SR-IOV

Следующие моменты относятся к драйверам miniport, поддерживающим интерфейс SR-IOV:

  • Для интерфейса SR-IOV очередь получения создается на виртуальном порте по умолчанию или не через виртуальный порт (VPort).

    Примечание Начиная с Windows Server 2012 интерфейс SR-IOV поддерживает только очередь получения VPort по умолчанию.

    После выделения VPort SR-IOV с помощью запроса на набор OID OID_NIC_SWITCH_CREATE_VPORT, более уровневые драйверы могут устанавливать фильтры в VPort с запросами OID OID_RECEIVE_FILTER_SET_FILTER.

    Примечание Только драйвер, выделяющий VPort, может задать фильтр для этого VPort.

  • Так как VPort по умолчанию существует всегда, слишком избыточные драйверы всегда могут задать фильтр для VPort по умолчанию.

  • При создании VPort фильтры получения для него не задаются. В этом случае драйвер мини-порта не должен указывать какие-либо пакеты получения в этом VPort до того, как драйвер мини-порта получит запрос OID OID_RECEIVE_FILTER_SET_FILTER для VPort. После выдачи этого запроса OID драйвер мини-порта может указать пакеты в этом VPort.

    Примечание Если драйвер мини-порта указывает пакеты в VPort во время обработки запроса OID OID_RECEIVE_FILTER_SET_FILTER, он должен завершить запрос OID и вернуть код состояния NDIS_STATUS_SUCCESS.

Дополнительные рекомендации по интерфейсу VMQ

Следующие моменты относятся к драйверам miniport, поддерживающим интерфейс VMQ:

  • После выделения очереди получения VMQ избыточные драйверы могут задавать фильтры в очереди получения с запросами OID OID_RECEIVE_FILTER_SET_FILTER.

    Примечание Только драйвер протокола, который выделил очередь получения, может установить фильтр для этой очереди.

  • Так как очередь по умолчанию существует всегда, слишком много драйверов всегда можно задать фильтр для очереди по умолчанию. Если сетевой адаптер поддерживает очередь удаления, для нее может быть установлен фильтр для более низверных драйверов.

    Избыточным драйверам не принадлежат очереди по умолчанию или очереди удаления. Поэтому все драйверы протокола, привязанные к сетевому адаптеру, используют очередь по умолчанию или очередь удаления.

  • При создании очереди получения фильтры получения для нее не задаются. В этом случае драйвер мини-порта не должен указывать какие-либо пакеты получения в этой очереди, прежде чем драйвер минипорта получит запрос OID OID_RECEIVE_FILTER_SET_FILTER для очереди получения. После выдачи этого запроса OID драйвер мини-порта может указать пакеты в этой очереди получения.

    Примечание Если драйвер мини-порта указывает пакеты в очереди во время обработки запроса OID OID_RECEIVE_FILTER_SET_FILTER, он должен завершить запрос OID и вернуть код состояния NDIS_STATUS_SUCCESS.

Коды состояния возврата

Драйвер мини-порта возвращает один из следующих кодов состояния для запроса метода OID OID_RECEIVE_FILTER_SET_FILTER:

NDIS_STATUS_SUCCESS
Фильтр успешно установлен в очереди. Информационный буфер содержит обновленную структуру NDIS_RECEIVE_FILTER_PARAMETERS .

NDIS_STATUS_PENDING
Запрос ожидает завершения. Окончательный код состояния и результаты будут переданы обработчику завершения запроса OID вызывающего объекта.

NDIS_STATUS_INVALID_PARAMETER
Один или несколько параметров, предоставленных драйвером overlying, были недопустимыми.

NDIS_STATUS_INVALID_LENGTH
Буфер сведений был слишком коротким. NDIS задает значение DATA. METHOD_INFORMATION. Элемент BytesNeeded в NDIS_OID_REQUEST структуру до минимального требуемого размера буфера.

NDIS_STATUS_NOT_SUPPORTED
Версия NDIS драйвера мини-порта является более ранней, чем 6.20.

NDIS_STATUS_FAILURE
Сбой запроса по другим причинам.

Требования

Версия

Поддерживается в NDIS 6.20 и более поздних версиях.

Заголовок

Ntddndis.h (включая Ndis.h)

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

NdisMIndicateReceiveNetBufferLists

NDIS_OID_REQUEST

NDIS_RECEIVE_FILTER_PARAMETERS

NET_BUFFER_LIST

NET_BUFFER_LIST_RECEIVE_FILTER_ID

OID_NIC_SWITCH_CREATE_VPORT

OID_RECEIVE_FILTER_CLEAR_FILTER

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE