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


Управление данными во время выполнения расширяемого коммутатора Hyper-V

В этом разделе описываются операции сохранения и восстановления для расширений расширяемого коммутатора Hyper-V. Эти операции позволяют расширению сохранять и восстанавливать данные во время выполнения для отдельных расширяемых сетевых адаптеров коммутаторов (сетевых адаптеров). Эти операции выполняются при остановке или запуске дочерней секции Hyper-V с подключением сетевого адаптера к порту расширяемого коммутатора.

Сохранение данных во время выполнения расширяемого коммутатора Hyper-V

В этом разделе описывается операция, с помощью которой расширение Расширяемого коммутатора Hyper-V может сохранять данные во время выполнения для отдельных сетевых адаптеров (сетевых адаптеров). Эта операция выполняется при остановке дочернего раздела Hyper-V с подключением сетевого адаптера к порту расширяемого коммутатора или его состояния.

Обработка запроса OID_SWITCH_NIC_SAVE

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

Элемент InformationBuffer структуры NDIS_OID_REQUEST для запроса OID_SWITCH_NIC_SAVE содержит указатель на структуру NDIS_SWITCH_NIC_SAVE_STATE. Эта структура выделяется пограничным протоколом расширяемого коммутатора и инициализирован следующим образом:

  • Элемент заголовка инициализируется для хранения текущего типа, редакции структуры NDIS_SWITCH_NIC_SAVE_STATE . Размер имеет полный размер буфера.

  • Член PortId содержит уникальный идентификатор расширяемого порта коммутатора, для которого выполняется операция сохранения.

При получении запроса метода OID_SWITCH_NIC_SAVE расширение выполняет следующее:

  1. Расширение считывает член PortId структуры NDIS_SWITCH_NIC_SAVE_STATE .

  2. Если расширение содержит данные во время выполнения для сохранения для указанного сетевого адаптера, он сохраняет свои данные в структуре NDIS_SWITCH_NIC_SAVE_STATE начиная с SaveDataOffset байтов с начала структуры. Затем расширение завершает запрос метода OID с NDIS_STATUS_SUCCESS.

  3. Если структура NDIS_SWITCH_NIC_SAVE_STATE не предоставляет достаточно буфера для хранения состояния среды выполнения, расширение устанавливает поле структуры метода BytesNeed для NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 плюс объем буфера, необходимого для хранения сохраненных данных, и завершает OID с NDIS_STATUS_BUFFER_TOO_SHORT. OID будет повторно выдан с требуемым размером.

  4. Если у расширения нет данных времени выполнения для сохранения для указанного сетевого адаптера, он должен вызвать NdisFOidRequest. Это перенаправит запрос метода OID в базовые драйверы в стеке расширяемого драйвера коммутатора. Дополнительные сведения об этой процедуре см. в разделе "Фильтрация запросов OID" в драйвере фильтра NDIS.

Если расширение содержит данные порта времени выполнения для сохранения, то при сохранении данных порта во время выполнения в структуре NDIS_SWITCH_NIC_SAVE_STATE необходимо выполнить следующие рекомендации.

  1. Расширение задает член ExtensionId значение GUID, которое однозначно идентифицирует драйвер.

  2. Расширение задает элемент ExtensionFriendlyName именем драйвера.

    Обратите внимание , что тип данных NDIS_SWITCH_EXTENSION_FRIENDLYNAME определяется структурой IF_COUNTED_STRING . Строка, определяемая этой структурой, не должна быть завершена null. Однако длина строки должна быть задана в элементе Length этой структуры. Если строка завершается null, элемент Length не должен включать завершающий символ NULL.

  3. Если класс компонентов связан с сохраненными данными времени выполнения, расширение задает FeatureClassId с идентификатором GUID, который однозначно идентифицирует класс.

    Обратите внимание , что если класс компонентов не связан с сохраненными данными времени выполнения, расширение устанавливает Для FeatureClassId значение нулю.

  4. Расширение копирует данные во время выполнения в член SaveData и задает элемент SaveDataSize размеру в байтах данных во время выполнения.

Обратите внимание , что расширение не должно изменять элементы заголовка или PortId структуры NDIS_SWITCH_NIC_SAVE_STATE .

Запросы метода OID OID_SWITCH_NIC_SAVE в конечном счете обрабатываются базовым краем минипорта расширяемого коммутатора. После переадресации этого запроса метода OID на мини-порт драйвер через стек драйверов расширяемого коммутатора драйвер минипорта завершает запрос OID с NDIS_STATUS_SUCCESS. Это уведомляет пограничный протокол расширяемого коммутатора о том, что все расширения в стеке драйверов расширяемого коммутатора были запрошены для данных порта во время выполнения. Пограничный протокол расширяемого коммутатора затем выдает запрос набора OID OID_SWITCH_NIC_SAVE_COMPLETE для завершения операции сохранения.

Обработка запроса OID_SWITCH_NIC_SAVE_COMPLETE

Если дочерний раздел Hyper-V с подключением сетевого адаптера к расширяемым порту коммутатора приостанавливается или сохраняется его состояние, интерфейс расширяемого коммутатора Hyper-V уведомляется. Это приводит к тому, что пограничный протокол расширяемого коммутатора выдает запрос метода идентификатора объекта (OID) OID_SWITCH_NIC_SAVE вниз по стеку расширяемого драйвера коммутатора.

Когда каждое расширение расширяемого коммутатора Hyper-V сохранило данные во время выполнения, пограничный протокол расширяемого коммутатора уведомляет базовые расширения о завершении операции сохранения. Пограничный протокол делает это путем выдачи запроса набора OID OID_SWITCH_NIC_SAVE_COMPLETE вниз стек расширяемого драйвера коммутатора.

Примечание. При запуске операции сохранения во время выполнения для расширяемого подключения сетевого адаптера коммутатора еще одна операция сохранения для того же подключения сетевого адаптера не будет выполнена до тех пор, пока запрос OID_SWITCH_NIC_SAVE_COMPLETE не будет выдан. Однако операции сохранения для других подключений сетевого адаптера могут возникать в течение этого времени.

Элемент InformationBuffer структуры NDIS_OID_REQUEST для запроса OID_SWITCH_NIC_SAVE_COMPLETE содержит указатель на структуру NDIS_SWITCH_NIC_SAVE_STATE. Эта структура выделяется краем протокола расширяемого коммутатора.

Когда он получает запрос набора OID OID_SWITCH_NIC_SAVE_COMPLETE, расширение должно соответствовать следующим рекомендациям:

  • Расширение не должно изменять структуру NDIS_SWITCH_NIC_SAVE_STATE , связанную с запросом OID.

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

    Обратите внимание , что расширение должно отслеживать состояние завершения этого запроса OID. Расширение делает это, чтобы определить, успешно ли выполнена операция сохранения.

Запросы метода OID OID_SWITCH_NIC_SAVE_COMPLETE в конечном счете обрабатываются базовым краем минипорта расширяемого коммутатора. После получения этим запросом метода OID по краю мини-порта он завершает запрос OID с NDIS_STATUS_SUCCESS. Это уведомляет пограничный протокол расширяемого коммутатора, что все расширения в стеке драйверов расширяемого коммутатора завершили операцию сохранения.

Восстановление данных во время выполнения расширяемого коммутатора Hyper-V

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

Элемент InformationBuffer структуры NDIS_OID_REQUEST для запроса OID_SWITCH_NIC_RESTORE содержит указатель на структуру NDIS_SWITCH_NIC_SAVE_STATE. Эта структура выделяется краем протокола расширяемого коммутатора.

Когда он получает запрос набора OID OID_SWITCH_NIC_RESTORE, расширение расширяемого коммутатора должно сначала определить, принадлежит ли он данным во время выполнения. Это расширение выполняется путем сравнения значения члена ExtensionId структуры NDIS_SWITCH_NIC_SAVE_STATE со значением GUID, которое используется расширением для идентификации себя.

Если расширение владеет данными во время выполнения для расширяемого сетевого адаптера коммутатора, он восстанавливает эти данные следующим образом:

  1. Расширение копирует данные во время выполнения в члене SaveData в выделенное драйвером хранилище.

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

  2. Расширение завершает запрос набора OID с NDIS_STATUS_SUCCESS.

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

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

  • Если он владеет данными во время выполнения в новом запросе OID, расширение восстанавливает дополнительные данные во время выполнения в структуре NDIS_SWITCH_NIC_SAVE_STATE. Затем расширение завершает запрос OID с NDIS_STATUS_SUCCESS.

  • Если он не владеет данными во время выполнения в новом запросе OID, расширение вызывает NdisFOidRequest для пересылки этого запроса набора OID базовым драйверам.

OID_SWITCH_NIC_RESTORE_COMPLETE
Расширяемый интерфейс коммутатора сигнализирует о пограничном протоколе расширяемого коммутатора для выдачи этого идентификатора при завершении операции восстановления данных во время выполнения для расширяемого сетевого адаптера коммутатора.

Этот запрос OID уведомляет расширение о завершении операции восстановления только для указанного расширяемого сетевого адаптера.

Дополнительные сведения об этом запросе OID см. в OID_SWITCH_NIC_RESTORE_COMPLETE.

Примечание. Если запрос набора OID_SWITCH_NIC_RESTORE получен краем минипорта расширяемого коммутатора, он завершает запрос OID с NDIS_STATUS_SUCCESS. Это уведомляет пограничный протокол расширяемого коммутатора о том, что расширение не владеет данными во время выполнения. В этом случае расширяемый интерфейс коммутатора регистрирует событие, которое документирует значения членов ExtensionId и PortId для расширения, которое первоначально сохранило данные порта выполнения.