Определение возможностей коммутатора сетевых адаптеров
В этом разделе описывается, как NDIS и вышележащие драйверы определяют возможности коммутатора сетевого интерфейса адаптера, поддерживающего виртуализацию единого корневого ввода-вывода (SR-IOV). В этом разделе содержатся следующие сведения:
Отчет о возможностях переключения NIC в ходе MiniportInitializeEx
Запрос возможностей переключения сетевых адаптеров драйверами верхнего уровня
Примечание Только минипорт-драйвер физической функции PCI Express (PCIe) сетевого адаптера SR-IOV может сообщать о возможностях коммутатора сетевого адаптера. Минипорт драйверы для виртуальных функций PCIe (VFs) не должны сообщать о возможностях коммутатора сетевого интерфейсного контроллера SR-IOV.
Дополнительные сведения о коммутаторах сетевого адаптера см. в .
Отчет о возможностях переключения сетевых адаптеров во время MiniportInitializeEx
Когда NDIS вызывает функцию минипорта MiniportInitializeEx, драйвер предоставляет следующие возможности коммутатора сетевого адаптера:
Полный набор аппаратных возможностей для коммутатора сетевого адаптера, который может поддерживать сетевой адаптер.
Примечание Начиная с NDIS 6.30, на сетевом адаптере создается только один переключатель сетевого интерфейса (NIC). Этот переключатель называется переключателем сетевого адаптера по умолчанию .
Возможности коммутатора сетевого адаптера, которые в настоящее время активированы.
Драйвер минипорта сообщает о возможностях аппаратного коммутатора сетевого адаптера через структуру NDIS_NIC_SWITCH_CAPABILITIES, которая инициализируется следующим образом:
Драйвер минипорта инициализирует элемент заголовка. Драйвер задает элемент typeзаголовка NDIS_OBJECT_TYPE_DEFAULT.
Начиная с версии NDIS 6.30, драйвер минипорта задает элемент редакции заголовка значение NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 и член размера NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2.
Драйвер минипорта устанавливает соответствующие флаги в члене NicSwitchCapabilities структуры NDIS_NIC_SWITCH_CAPABILITIES в соответствии с возможностями коммутатора сетевого адаптера SR-IOV. Например, драйвер минипорта задает флаг NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED, если коммутатор NIC поддерживает модерацию прерываний на каждом виртуальном порту (VPort), созданном на коммутаторе.
Драйвер минипорта задает другим членам структуры NDIS_NIC_SWITCH_CAPABILITIES диапазон значений для возможностей коммутатора сетевого адаптера SR-IOV. Например, драйвер минипорта устанавливает MaxNumVFs и MaxNumVPorts в максимальное количество виртуальных функций и виртуальных портов, которые может поддерживать адаптер.
Примечание В зависимости от доступных аппаратных ресурсов сетевого адаптера драйвер минипорта может задать элемент MaxNumVFs значением, которое меньше ключевого слова *NumVFs. Дополнительные сведения об этом ключевом слове см. в разделе Стандартные ключевые слова INF для SR-IOV.
Когда NDIS вызывает функцию минипорта MiniportInitializeEx, драйвер регистрирует возможности коммутатора сетевого адаптера, выполнив следующие действия.
Драйвер минипорта инициализирует структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES.
Драйвер минипорта задает элемент HardwareNicSwitchCapabilities как указатель на структуру NDIS_NIC_SWITCH_CAPABILITIES, которая была ранее инициализирована.
Если параметр реестра для ключевого слова INF *SRIOV INF равен единице, сетевой адаптер сейчас включен для создания и настройки коммутатора. Драйвер минипорта задает CurrentNicSwitchCapabilities элементам указатель на ту же NDIS_NIC_SWITCH_CAPABILITIES структуру.
Если параметр реестра для ключевого слова INF *SRIOV INF имеет значение нуля, сетевой адаптер в настоящее время не включен для создания и настройки коммутатора сетевого адаптера. Минипорт-драйвер должен задать для CurrentNicSwitchCapabilities значение NULL.
Дополнительные сведения о ключевом слове INF *SRIOV см. в разделе Стандартные INF-ключевые слова дляSR-IOV.
Драйвер вызывает NdisMSetMiniportAttributes и устанавливает параметр MiniportAttributes как указатель на структуру NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES.
Дополнительные сведения о процессе инициализации адаптера см. в разделе «Инициализация минипорт-адаптера».
Создание коммутатора сетевого адаптера без SR-IOV
Драйверы минипорта в NDIS 6.60 и более поздних версиях должны соответствовать следующим требованиям для сосуществования коммутатора сетевого адаптера и возможностей VMQ, если SR-IOV не включен. Если включена SR-IOV, минипорт-драйвер должен соответствовать существующим требованиям в предыдущем разделе.
- Драйвер минипорта рекламирует поддержку как коммутатора сетевого адаптера, так и функций виртуальной очереди машин (VMQ).
- Сетевой адаптер может переключаться между коммутатором сетевого адаптера и режимом VMQ без перезапуска сетевого адаптера.
- При первоначальном запуске сетевого адаптера он готов к работе в любом режиме (создание коммутатора сетевого адаптера или создание очередей VMQ).
- Если создан коммутатор сетевого интерфейса, минипорт завершает ошибкой все последующие обратные вызовы распределения очередей VMQ.
- Если очередь VMQ создается сначала, драйвер минипорта успешно выполняет выделение очереди VMQ, но не удается выполнить вызовы выделения для переключения сетевых адаптеров.
- При удалении коммутатора сетевого адаптера или удаления всех очередей VMQ драйвер минипорта возвращается в исходное состояние и готов снова перейти в любой из этих режимов.
- При первоначальном запуске сетевого адаптера он готов к работе в любом режиме (создание коммутатора сетевого адаптера или создание очередей VMQ).
Чтобы указать, что коммутатор сетевого адаптера может быть создан без использования SR-IOV, драйвер минипорта устанавливает флаг NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED в члене структуры NicSwitchCapabilitiesNDIS_NIC_SWITCH_CAPABILITIES.
Запрос возможностей коммутатора сетевых интерфейсов с использованием накладывающих драйверов
NDIS передает возможности коммутатора NIC, которые в данный момент включены, вышележащим драйверам, которые привязываются к сетевому адаптеру следующим образом:
Когда NDIS вызывает функцию фильтра верхнего уровня FilterAttach, он передает возможности коммутатора сетевого адаптера через параметр AttachParameters. Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS. Элемент этой структуры NicSwitchCapabilities содержит указатель на структуру NDIS_NIC_SWITCH_CAPABILITIES.
Когда NDIS вызывает функцию ProtocolBindAdapterEx драйвера верхнего уровня , NDIS передает возможности NIC коммутатора сетевого адаптера через параметр BindParameters. Этот параметр содержит указатель на структуру NDIS_FILTER_ATTACH_PARAMETERS. Элемент этой структуры NicSwitchCapabilities содержит указатель на структуру NDIS_NIC_SWITCH_CAPABILITIES.
NDIS также возвращает структуру NDIS_NIC_SWITCH_CAPABILITIES при обработке запросов идентификатора объекта (OID) OID_NIC_SWITCH_HARDWARE_CAPABILITIES и OID_NIC_SWITCH_CURRENT_CAPABILITIES, выдаваемых вышележащими протоколами или драйверами фильтров.