Общие сведения о портах расширяемого коммутатора Hyper-V
Каждое сетевое подключение к расширяемым коммутатором Hyper-V представлено портом. Интерфейс расширяемого коммутатора создает и настраивает порт перед подключением к сети. После разрыва сетевого подключения интерфейс может удалить порт или повторно использовать его для другого сетевого подключения.
Каждой дочерней секции Hyper-V, настроенной с помощью сетевого интерфейса, назначается порт расширяемого коммутатора. При запуске дочернего раздела Hyper-V интерфейс расширяемого коммутатора создает порт перед предоставлением сетевого адаптера виртуальной машины в гостевой операционной системе. После предоставления и инициализации сетевого адаптера виртуальной машины интерфейс расширяемого коммутатора создает сетевое подключение между сетевым адаптером виртуальной машины и портом расширяемого коммутатора. Если дочерняя секция остановлена, интерфейс расширяемого коммутатора сначала удаляет сетевое подключение, а затем порт расширяемого коммутатора.
При создании порта расширяемого коммутатора он настраивается с уникальным идентификатором и именем. После создания порт расширяемого коммутатора можно подготовить с помощью политик, определяющих различные атрибуты для управления трафиком пакетов через порт. Например, стандартные политики портов можно определить для атрибутов виртуальной локальной сети (VLAN) и ограничений доступа для трафика портов. Кроме того, независимые поставщики программного обеспечения (ISV) могут определять пользовательские политики, с помощью которыми можно подготавливать отдельные порты. Дополнительные сведения см. в разделе Политики портов.
Порты расширяемого коммутатора состоят из следующих типов:
Порты проверки
Порты проверки используются для проверки и проверки параметров порта. Эти порты являются временными и создаются при определенных условиях.
Например, при создании или перенастройки дочернего раздела Hyper-V для доступа к сети интерфейс расширяемого коммутатора создает порт проверки. Интерфейс использует этот порт для проверки параметров сетевого подключения к сетевому адаптеру виртуальной машины раздела. После завершения проверки порт проверки удаляется и создается рабочий порт.
Дополнительные сведения см. в разделе Порты проверки.
Рабочие порты
Рабочие порты создаются для размещения подключения расширяемого сетевого адаптера коммутатора. При создании рабочего порта ему назначается тип порта. Этот тип порта действует после создания порта и перед его сносом. Для портов, назначенных дочерним секциям Hyper-V, тип рабочего порта остается в силе во время работы секции.
Дополнительные сведения см. в разделе Операционные порты.
Расширения расширяемого коммутатора получают уведомления о создании, обновлении и удалении порта с помощью следующих запросов OID:
OID_SWITCH_PORT_CREATE
Граница протокола расширяемого коммутатора выдает запрос на набор OID OID_SWITCH_PORT_CREATE для уведомления расширений расширяемого коммутатора о создании порта расширяемого коммутатора.
Расширение может наказать вето на уведомление о создании, возвращая STATUS_DATA_NOT_ACCEPTED для запроса OID. Например, если расширению не удается выделить ресурсы для применения настроенных политик в порте, расширение применяет вето к уведомлению о создании.
Если расширение принимает уведомление о создании, оно должно пересылать запрос OID в стек драйвера расширяемого коммутатора. Расширение отслеживает состояние завершения этого запроса OID, чтобы определить, наложены ли базовые расширения вето на уведомление о создании порта.
Расширения не могут пересылать пакеты на только что созданный порт, пока не будет создано сетевое подключение. Дополнительные сведения об этом процессе см. в статье Расширяемые сетевые адаптеры Коммутатора Hyper-V.
OID_SWITCH_PORT_UPDATED
Граница протокола расширяемого коммутатора выдает запрос на набор OID OID_SWITCH_PORT_UPDATED для уведомления расширений расширяемого коммутатора об обновлении параметров порта расширяемого коммутатора. OID будет выдан только для портов, которые уже были созданы и еще не начали процесс удаления или удаления. В настоящее время только поле PortFriendlyName может обновляться после создания.
Пограничный протокол расширяемого коммутатора выдает этот запрос OID, когда предыдущее сетевое подключение к порту было сорвано и все запросы OID к порту были завершены.
Примечание Этот запрос OID может быть выдан, если подключение сетевого адаптера не было ранее установлено к порту.
Расширение должно всегда пересылать этот запрос на набор OID в стек драйвера расширяемого коммутатора. Расширение не должно завершаться сбоем запроса.
OID_SWITCH_PORT_TEARDOWN
Граница протокола расширяемого коммутатора выдает запрос на набор OID OID_SWITCH_PORT_TEARDOWN для уведомления расширений расширяемого коммутатора об удалении порта расширяемого коммутатора. Пограничный протокол расширяемого коммутатора выдает этот запрос OID, когда предыдущее сетевое подключение к порту было сорвано и все запросы OID к порту были завершены.
Примечание Этот запрос OID может быть выдан, если подключение сетевого адаптера не было ранее установлено к порту.
Расширение должно всегда пересылать этот запрос на набор OID в стек драйвера расширяемого коммутатора. Расширение не должно завершаться сбоем запроса.
После того как расширение перенаправит этот запрос OID, оно больше не сможет выдавать запросы OID для удаляемого порта.
OID_SWITCH_PORT_DELETE
Граница протокола расширяемого коммутатора выдает запрос на набор OID OID_SWITCH_PORT_DELETE для уведомления расширений расширяемого коммутатора об удалении порта расширяемого коммутатора. Пограничный протокол расширяемого коммутатора выдает этот запрос OID после того, как он выдает запрос OID_SWITCH_PORT_TEARDOWN и запросы OID, предназначенные для порта, были завершены.
Расширение должно всегда пересылать этот запрос на набор OID в стек драйвера расширяемого коммутатора. Расширение не должно завершаться сбоем запроса.
Всем расширяемым портам коммутатора, созданным для сетевых подключений, назначается идентификатор, превышающий NDIS_SWITCH_DEFAULT_PORT_ID. Идентификатор NDIS_SWITCH_DEFAULT_PORT_ID зарезервирован и используется следующими способами.
Идентификатор исходного порта для пакета хранится в контексте внеполосной пересылки (OOB) пакета, связанном с его NET_BUFFER_LIST структурой. Идентификатор исходного порта NDIS_SWITCH_DEFAULT_PORT_ID указывает, что пакет поступил из расширения расширяемого коммутатора, а не из порта расширяемого коммутатора. Пакет с идентификатором исходного порта NDIS_SWITCH_DEFAULT_PORT_ID является доверенным и обходит расширяемые политики портов коммутатора, такие как списки управления доступом (ACL) и качество обслуживания (QoS).
Расширение может захотеть, чтобы пакет обрабатывался так, как если бы он поступил из определенного порта. Это позволяет применять политики для этого порта к пакету. Расширение вызывает SetNetBufferListSource , чтобы изменить исходный порт для пакета.
Однако могут возникнуть ситуации, когда расширению может потребоваться назначить идентификатор исходного порта пакета NDIS_SWITCH_DEFAULT_PORT_ID. Например, расширение может захотеть задать идентификатор исходного порта , чтобы NDIS_SWITCH_DEFAULT_PORT_ID для собственных управляющих пакетов, которые отправляются на устройство во внешней сети.
Дополнительные сведения о контексте переадресации см. в разделе Контекст переадресации расширяемого коммутатора Hyper-V.
Запросы идентификаторов объектов (OID) OID_SWITCH_NIC_REQUEST выдаются интерфейсом расширяемого коммутатора для инкапсуляции запросов OID, которые выдаются внешнему сетевому адаптеру расширяемого коммутатора. Например, запросы OID аппаратной разгрузки инкапсулируются интерфейсом перед их выдачей в стеке драйвера расширяемого коммутатора.
Расширение также может выдавать инкапсулированные запросы OID, чтобы перенаправлять запросы по пути управления расширяемым переключателем. Это позволяет расширениям запрашивать или настраивать возможности базового физического сетевого адаптера.
Элемент InformationBuffer структуры NDIS_OID_REQUEST для этого запроса OID содержит указатель на структуру NDIS_SWITCH_NIC_OID_REQUEST . Если для элемента SourcePortId задано значение NDIS_SWITCH_DEFAULT_PORT_ID, это указывает, что запрос OID был создан интерфейсом расширяемого коммутатора. Если параметр DestinationPortId имеет значение NDIS_SWITCH_DEFAULT_PORT_ID, это указывает, что запрос OID предназначен для обработки расширением в стеке драйвера расширяемого коммутатора.
Дополнительные сведения о пути элемента управления для запросов OID см. в статье Hyper-V Extensible Switch Control Path for OID Requests.
Индикаторы состояния NDIS NDIS_STATUS_SWITCH_NIC_STATUS выдаются краем мини-порта расширяемого коммутатора для инкапсуляции состояния внешнего сетевого адаптера расширяемого коммутатора.
Расширение также может выдавать инкапсулированные индикаторы состояния NDIS, чтобы перенаправлять их вверх по пути управления расширяемым переключателем. Это позволяет расширениям изменять сообщаемые возможности базового физического сетевого адаптера.
Элемент StatusBuffer структуры NDIS_STATUS_INDICATION для этого указания содержит указатель на структуру NDIS_SWITCH_NIC_STATUS_INDICATION . Если для элемента SourcePortId задано значение NDIS_SWITCH_DEFAULT_PORT_ID, это указывает, что индикатор состояния был создан интерфейсом расширяемого коммутатора. Если параметр DestinationPortId имеет значение NDIS_SWITCH_DEFAULT_PORT_ID, это указывает, что запрос OID предназначен для обработки расширением в стеке драйвера расширяемого коммутатора.
Дополнительные сведения о пути элемента управления для указаний состояния NDIS см. в разделе Hyper-V Extensible Switch Control Path for NDIS Status Indications.
Интерфейс расширяемого коммутатора поддерживает счетчик ссылок для каждого созданного порта. Порт не будет удален, если его счетчик ссылок имеет ненулевое значение. Интерфейс предоставляет следующие функции обработчика для увеличения или уменьшения ссылочных счетчиков порта расширяемого коммутатора:
ReferenceSwitchPort
Расширение расширяемого коммутатора вызывает эту функцию для увеличения счетчика ссылок на порт. Хотя счетчик ссылок имеет ненулевое значение, край протокола расширяемого коммутатора не будет выдавать запрос на набор идентификатора объекта (OID) OID_SWITCH_PORT_DELETE для удаления порта расширяемого коммутатора.
Расширение должно вызвать ReferenceSwitchPort , прежде чем выполнять любую операцию, требующую, чтобы порт был в активном состоянии. Например, расширение должно вызвать ReferenceSwitchPort , прежде чем будет выполнять запрос метода OID для OID_SWITCH_PORT_PROPERTY_ENUM.
Примечание Расширение не должно вызывать ReferenceSwitchPort для порта после получения запроса на набор OID OID_SWITCH_PORT_TEARDOWN для этого порта.
РазыменовываниеSwitchPort
Расширение расширяемого коммутатора вызывает эту функцию для уменьшения счетчика ссылок на порт.
Расширение должно вызывать DereferenceSwitchPort после завершения операции, выполняемой с портом. Например, если расширение называется ReferenceSwitchPort до отправки запроса OID_SWITCH_PORT_PROPERTY_ENUM , расширение должно вызвать DereferenceSwitchPort после завершения запроса OID.
Примечание Порты NDIS и порты расширяемого коммутатора — это разные объекты. Пакеты, которые перемещаются по пути данных расширяемого коммутатора, всегда назначаются номеру порта NDIS NDIS_DEFAULT_PORT_NUMBER. Однако номер порта расширяемого коммутатора источника и назначения пакета может иметь значение NDIS_SWITCH_DEFAULT_PORT_ID или больше. Дополнительные сведения см. в статье Путь к данным расширяемого коммутатора Hyper-V.