Поделиться через


Определение возможностей фильтрации получения

В этом разделе описывается, как NDIS и слишком многоуровневые драйверы определяют возможности фильтрации получения сетевого адаптера, поддерживающего виртуализацию однокорневого ввода-вывода (SR-IOV). В этом разделе содержатся следующие сведения:

Возможности фильтрации получения отчетов во время MiniportInitializeEx

Запрос возможностей фильтрации получения путем превышения драйверов

Примечание Только драйвер минипорта для физической функции PCI Express (PCIe) сетевого адаптера SR-IOV может сообщать о возможностях фильтрации приема. Драйверы минипорта для виртуальных функций PCIe не должны сообщать о возможностях фильтрации получения адаптера SR-IOV.

Возможности фильтрации получения отчетов во время MiniportInitializeEx

Когда NDIS вызывает функцию MiniportInitializeEx драйвера PF miniport, драйвер предоставляет следующие возможности фильтрации получения:

  • Все возможности фильтрации получения оборудования, которые может поддерживать сетевой адаптер.

  • Возможности фильтрации приема для интерфейсов, которые в настоящее время включены в сетевом адаптере.

Драйвер мини-порта сообщает о полных возможностях фильтрации приема оборудования базового сетевого адаптера с помощью структуры NDIS_RECEIVE_FILTER_CAPABILITIES , которая инициализирована следующим образом:

  1. Драйвер мини-порта инициализирует элемент Header . Драйвер задает элемент Typeзаголовка NDIS_OBJECT_TYPE_DEFAULT.

    Начиная с версии NDIS 6.30 драйвер мини-порта устанавливает для элемента Редакциизаголовка значение NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, а для элемента Size — NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.

  2. Драйвер мини-порта задает другим членам структуры NDIS_RECEIVE_FILTER_CAPABILITIES диапазон значений для возможностей фильтрации приема сетевого адаптера SR-IOV. Например, драйвер мини-порта устанавливает соответствующие флаги в SupportedFilterTests , чтобы указать операции тестирования фильтра, поддерживаемые драйвером мини-порта.

  3. Помимо SR-IOV, фильтрация получения также используется в следующих интерфейсах:

    Если драйвер мини-порта поддерживает любой из этих интерфейсов, он также должен задать для членов структуры NDIS_RECEIVE_FILTER_CAPABILITIES диапазон значений фильтрации получения, относящихся к интерфейсу. Например, если драйвер поддерживает объединение пакетов NDIS и SR-IOV, он должен установить флаг NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE в члене SupportedQueueProperties .

Драйвер мини-порта сообщает о включенных в настоящее время возможностях фильтрации получения базового сетевого адаптера с помощью структуры NDIS_RECEIVE_FILTER_CAPABILITIES , которая инициализирована следующим образом:

  1. Драйвер мини-порта инициализирует элемент Header . Драйвер задает элемент Typeзаголовка NDIS_OBJECT_TYPE_DEFAULT.

    Начиная с версии NDIS 6.30 драйвер мини-порта устанавливает для элемента Редакциизаголовка значение NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, а для элемента Size — NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2.

  2. Драйвер мини-порта задает для других членов структуры NDIS_RECEIVE_FILTER_CAPABILITIES диапазон значений для возможностей фильтрации приема интерфейсов, которые включены в данный момент. Например, если включено объединение пакетов NDIS, драйвер должен задать только члены, относящиеся к этой технологии.

    Интерфейсы, использующие фильтрацию получения, включаются или отключаются с помощью стандартизированных ключевых слов INF. Дополнительные сведения о включении объединения пакетов NDIS см. в разделе Стандартизированные ключевые слова INF для объединения пакетов. Дополнительные сведения о включении SR-IOV и VMQ см. в разделе Обработка стандартизированных ключевых слов SR-IOV, VMQ и RSS.

Когда NDIS вызывает функцию MiniportInitializeEx драйвера miniport , драйвер регистрирует возможности фильтрации приема сетевого адаптера, выполнив следующие действия:

  1. Драйвер мини-порта инициализирует структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

    Драйвер мини-порта задает для элемента HardwareReceiveFilterCapabilities адрес структуры NDIS_RECEIVE_FILTER_CAPABILITIES . Эта структура была инициализирована ранее с помощью полной фильтрации приема оборудования сетевого адаптера.

  2. Если объединение пакетов VMQ, SR-IOV и NDIS в настоящее время отключено на сетевом адаптере, драйвер мини-порта устанавливает для элемента CurrentReceiveFilterCapabilities значение NULL.

  3. Если на сетевом адаптере в настоящее время включено объединение пакетов VMQ, SR-IOV или NDIS, драйвер мини-порта должен сделать следующее:

    • Драйвер мини-порта должен инициализировать другую структуру NDIS_RECEIVE_FILTER_CAPABILITIES с текущими возможностями фильтрации приема для интерфейсов, которые в настоящее время включены в сетевом адаптере.

      Если интерфейс SR-IOV включен, бывают ситуации, когда драйвер мини-порта должен задать членам структуры NDIS_RECEIVE_FILTER_CAPABILITIES одинаковые или разные значения. Это связано с тем, что интерфейс SR-IOV предоставляет механизм очередей, аналогичный VMQ, но использует виртуальные порты (VPorts) вместо очередей получения виртуальных машин.

      Например, драйвер мини-порта должен установить флаг NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED в члене EnabledFilterTypes , если включен интерфейс VMQ или SR-IOV. Однако драйвер мини-порта должен задать для элемента NumQueues нулевое значение, если включен интерфейс SR-IOV, и ненулевое значение, если интерфейс VMQ включен.

    • Драйвер мини-порта задает для элемента CurrentReceiveFilterCapabilities адрес структуры NDIS_RECEIVE_FILTER_CAPABILITIES , которая содержит текущие возможности фильтрации получения для интерфейса с поддержкой в данный момент.

  4. Если на сетевом адаптере в настоящее время включено объединение пакетов VMQ, SR-IOV или NDIS, драйвер мини-порта задает для элемента HardwareReceiveFilterCapabilities адрес структуры NDIS_RECEIVE_FILTER_CAPABILITIES . Эта структура была инициализирована ранее с помощью включенных в настоящее время возможностей фильтрации получения сетевого адаптера.

  5. Драйвер вызывает NdisMSetMiniportAttributes и задает параметру MiniportAttributes указатель на структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES .

Дополнительные сведения о процессе инициализации адаптера см. в разделе Инициализация адаптера miniport.

Запрос возможностей фильтрации получения путем превышения драйверов

NDIS передает возможности фильтрации приема сетевого адаптера, включенные в настоящее время, в более уровневые драйверы, которые привязываются к сетевому адаптеру следующим образом:

  • Когда NDIS вызывает функцию FilterAttach драйвера чрезмерного фильтра, NDIS передает возможности коммутатора сетевого адаптера через параметр AttachParameters . Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS . Элемент ReceiveFilterCapabilities этой структуры содержит указатель на NDIS_RECEIVE_FILTER_CAPABILITIES структуру.

  • Когда NDIS вызывает функцию ProtocolBindAdapterEx драйвера протокола, NDIS передает возможности коммутатора сетевого адаптера через параметр BindParameters . Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS . Элемент ReceiveFilterCapabilities этой структуры содержит указатель на NDIS_RECEIVE_FILTER_CAPABILITIES структуру.

NDIS также возвращает структуру NDIS_RECEIVE_FILTER_CAPABILITIES при обработке запросов идентификатора объекта (OID) OID_RECEIVE_FILTER_CURRENT_CAPABILITIES и OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES , которые выдаются драйверами протокола или фильтра.