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


Пересылка запросов OID к физическим сетевым адаптерам

В этом разделе рассматривается, как расширения расширяемого коммутатора Hyper-V перенаправляет запросы идентификатора объекта (OID) для базовых физических адаптеров по пути управления расширяемым коммутатором Hyper-V. Расширение также может создавать запросы OID к базовым физическим сетевым адаптерам, следуя методам, описанным в этом разделе.

Например, внешний сетевой адаптер можно привязать к краю виртуального минипорта промежуточного драйвера мультиплексера NDIS (MUX). Драйвер MUX привязан к команде из одной или нескольких физических сетей на узле. Эта конфигурация называется командой расширяемых коммутаторов.

В этой конфигурации расширение расширяемого коммутатора предоставляется каждому сетевому адаптеру в команде. Это позволяет расширению управлять конфигурацией и использованием отдельных сетевых адаптеров в команде. Например, расширение переадресации может обеспечить поддержку решения балансировки нагрузки для отработки отказа (LBFO) в команде, переадресовав исходящие пакеты отдельным адаптерам. Расширение переадресации, которое управляет расширяемой командой коммутаторов, называется поставщиком группирования. Дополнительные сведения о поставщиках группирования см. в разделе Teaming Provider Extensions.

На следующем рисунке показан пример команды расширяемых коммутаторов для NDIS 6.40 (Windows Server 2012 R2) и более поздних версий.

схема пути управления oid для ndis 6.40.

На следующем рисунке показан пример расширяемой команды коммутаторов для NDIS 6.30 (Windows Server 2012).

схема расширяемой команды коммутаторов для ndis 6.30.

Примечание В интерфейсе расширяемого коммутатора Hyper-V драйверы фильтров NDIS называются расширениями коммутаторов , а стек драйверов называется стеком драйвера расширяемого коммутатора.

Запросы OID должны быть инкапсулированы для пересылки запроса базовому физическому сетевому адаптеру. Запросы OID сначала инкапсулируются в структуру NDIS_SWITCH_NIC_OID_REQUEST . Затем запросы OID перенаправляются по пути управления расширяемым переключателем с помощью запроса на набор OID OID_SWITCH_NIC_REQUEST.

Запросы OID к базовым физическим адаптерам выдаются следующим образом:

Интерфейс расширяемого коммутатора.
Запросы OID, такие как запросы на разгрузку оборудования, выдаются с помощью избыточного протокола или драйверов фильтров, которые выполняются в одном из следующих компонентов:

  • Операционная система управления, которая выполняется в родительском разделе Hyper-V.

  • Гостевая операционная система, работающая в дочернем разделе Hyper-V.

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

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

Когда расширение переадресации перенаправит запрос OID по пути управления, он получается внешним сетевым адаптером. На этом этапе запрос OID декапсулируется и пересылается указанному физическому сетевому адаптеру.

Примечание Начиная с Windows Server 2012 таким образом инкапсулируются и перенаправляются только запросы OID на разгрузку оборудования. Например, запросы OID разгрузки для очереди виртуальной машины (VMQ) или IPsec инкапсулируются и перенаправляются по пути управления расширяемым коммутатором. Дополнительные сведения см. в разделе Управление запросами аппаратной разгрузки OID в физические сетевые адаптеры.

Расширение переадресации.
Расширение переадресации может создавать собственные инкапсулированные запросы OID и пересылать их базовому физическому сетевому адаптеру. Расширение пересылки может инкапсулировать стандартные запросы NDIS OID. Расширение переадресации также может инкапсулировать частные запросы OID, определенные независимым поставщиком оборудования (IHV) для физических сетевых адаптеров. Это позволяет расширению переадресации, которое также было разработано IHV, чтобы включать или отключать собственные атрибуты на отдельных физических адаптерах в команде.

Кроме того, расширение переадресации может создавать инкапсулированные аппаратные запросы OID разгрузки для выделения ресурсов для указанного дочернего раздела Hyper-V. Например, расширение переадресации может создавать инкапсулированные запросы OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE для выделения VMQ для указанной дочерней секции. В этом случае расширение инкапсулирует запрос как исходящий из порта расширяемого коммутатора и подключения сетевого адаптера, связанного с секцией.

Примечание Расширение переадресации может создавать собственные инкапсулированные запросы OID разгрузки оборудования, только если оно фильтрует тот же запрос OID, который был выдан драйверами с превышением нагрузки. В этом случае расширение не должно пересылать исходный запрос OID. Вместо этого расширение должно вызвать NdisFOidRequestComplete для выполнения этого запроса, когда NDIS вызывает свой FilterOidRequestComplete для завершения исходного запроса OID.

Фильтрация или запись расширений
Расширение фильтрации или записи может создавать собственные инкапсулированные запросы OID и пересылать их в базовый физический сетевой адаптер. Эти расширения могут инкапсулировать стандартные запросы NDIS OID или частные запросы OID, определенные независимым поставщиком оборудования (IHV) для физических сетевых адаптеров.

Примечание Только расширения переадресации могут создавать инкапсулированные запросы на набор OID к базовым физическим адаптерам.

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

  1. Если расширение переадресации является источником запроса OID, оно должно инициализировать структуру, выделенную расширением, NDIS_OID_REQUEST с информацией, связанной с запросом.

    Если расширение перенаправит запрос OID, оно не должно изменять существующую структуру NDIS_OID_REQUEST , на которую ссылается параметр OidRequest функции FilterOidRequest . Вместо этого расширение должно вызвать NdisAllocateCloneOidRequest , чтобы выделить память для новой структуры NDIS_OID_REQUEST и скопировать все сведения из существующей структуры NDIS_OID_REQUEST .

  2. Расширение присваивает членам структуры NDIS_SWITCH_NIC_OID_REQUEST , выделенной расширением, следующие значения:

    • Член DestinationPortId должен иметь идентификатор порта расширяемого коммутатора, к которому подключен внешний сетевой адаптер.

    • Член DestinationNicIndex должен иметь значение ненулевого индекса базового физического сетевого адаптера.

      Дополнительные сведения об этих значениях индекса см. в разделе Значения индекса сетевого адаптера.

    • Если расширение переадресации является источником запроса OID аппаратной разгрузки для дочерней секции Hyper-V, член SourcePortId должен иметь идентификатор порта, используемого секцией. Кроме того, для элемента SourceNicIndex необходимо задать индекс сетевого адаптера для сетевого подключения к такому порту.

      Если расширение переадресации отправляет стандартный или частный запрос OID для собственных целей, члены SourcePortId и SourceNicIndex должны иметь нулевое значение.

      Если расширение переадресации перенаправляет или перенаправляет запрос OID аппаратной разгрузки, оно должно сохранять значения членов SourcePortId и SourceNicIndex , заданные интерфейсом расширяемого коммутатора.

    • Элемент OidRequest должен иметь указатель на инициализированную структуру NDIS_OID_REQUEST для инкапсулированного запроса OID. Расширение пересылки либо выделяет и инициализирует эту структуру, либо использует клонированную копию структуры.

  3. Расширение присваивает членам структуры NDIS_OID_REQUEST , выделенной расширением, следующие значения:

    • Элемент Oid должен иметь значение OID_SWITCH_NIC_REQUEST.

    • Элемент InformationBuffer должен содержать указатель на буфер, содержащий созданные или отфильтрованные данные запроса OID.

    • Элемент InformationBufferLength должен содержать длину (в байтах) буфера, который содержит созданные или отфильтрованные данные запроса OID.

    Расширение задает другим членам значения, допустимые для структуры NDIS_OID_REQUEST .

  4. Расширение вызывает ReferenceSwitchNic для увеличения счетчика ссылок для индекса целевого физического сетевого адаптера. Это гарантирует, что расширяемый интерфейс коммутатора не будет удалять подключение физического сетевого адаптера, пока его счетчик ссылок не равен нулю.

    Когда расширение вызывает ReferenceSwitchNic, оно задает для параметра SwitchPortId значение, указанное для элемента DestinationPortId . Расширение также задает для параметра SwitchNicIndex значение, указанное для элемента DestinationNicIndex .

    Примечание Если ReferenceSwitchNic не возвращает NDIS_STATUS_SUCCESS, запрос OID не может быть переадресован в конечный физический сетевой адаптер.

  5. Если расширение переадресации является источником запроса OID аппаратной разгрузки для дочерней секции Hyper-V, оно также вызывает ReferenceSwitchNic для увеличения счетчика ссылок для индекса подключения исходного сетевого адаптера, связанного с секцией. Это гарантирует, что расширяемый интерфейс коммутатора не будет удалять подключение физического сетевого адаптера, пока его счетчик ссылок не равен нулю.

    Когда расширение вызывает ReferenceSwitchNic, оно задает для параметра SwitchPortId значение, указанное для элемента SourcePortId . Расширение также задает для параметра SwitchNicIndex значение, указанное для элемента SourceNicIndex .

    Примечание Если ReferenceSwitchNic не возвращает NDIS_STATUS_SUCCESS, запрос OID не может быть переадресован в конечный физический сетевой адаптер.

  6. Расширение вызывает NdisFOidRequest для перенаправления инкапсулированного запроса OID на указанный порт расширяемого коммутатора назначения и сетевой адаптер.

    Примечание Если расширение перенаправит отфильтрованный запрос OID, оно должно вызвать NdisFOidRequest в контексте вызова своей функции FilterOidRequest . Если расширение переадресовывает созданные запросы OID, оно вызывает NdisFIndicateStatus в состояниях Выполнение, Перезапуск, Приостановлено и Приостановка . Дополнительные сведения об этих состояниях см. в разделе Фильтрация состояний и операций модуля.

  7. Когда NDIS вызывает функцию FilterOidRequestComplete , расширение вызывает DereferenceSwitchNic , чтобы очистить счетчик ссылок для индекса целевого физического сетевого адаптера.

    Если расширение переадресации вызывает запрос OID аппаратной разгрузки для дочерней секции Hyper-V, оно также вызывает DereferenceSwitchNic , чтобы очистить счетчик ссылок для индекса подключения исходного сетевого адаптера для адаптера.

    В обоих случаях расширение задает для параметров SwitchPortId и SwitchNicIndex те же значения, что и при вызове ReferenceSwitchNic.

Дополнительные сведения о том, как расширение выдает запросы OID, см. в разделе Создание запросов OID из драйвера фильтра NDIS.

Дополнительные сведения о драйверах MUX см. в разделе NDIS MUX Intermediate Drivers.