Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описаны операции сохранения и восстановления для расширений расширяемого коммутатора Hyper-V. Эти операции позволяют расширению сохранять и восстанавливать данные времени выполнения для отдельных сетевых адаптеров расширяемого коммутатора (NICs). Эти операции выполняются при остановке или запуске дочернего раздела Hyper-V, подключённого к порту расширяемого коммутатора.
Сохранение данных расширяемого коммутатора Hyper-V Run-Time
В этом разделе описывается процесс, с помощью которого расширение расширяемого коммутатора Hyper-V может сохранять данные в процессе выполнения для отдельных сетевых адаптеров (NIC). Эта операция выполняется, когда происходит остановка 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 расширение выполняет следующее:
Расширение считывает элемент PortId структуры NDIS_SWITCH_NIC_SAVE_STATE.
Если расширение имеет рабочие данные для сохранения для указанного NIC, оно сохраняет эти данные в структуре NDIS_SWITCH_NIC_SAVE_STATE, начиная с SaveDataOffset байт от начала структуры. Затем расширение завершает запрос метода OID с NDIS_STATUS_SUCCESS.
Если структура NDIS_SWITCH_NIC_SAVE_STATE не предоставляет достаточно буфера для хранения состояния среды выполнения, расширение задаёт поле BytesNeeded структуры метода равным NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 плюс объем буфера, необходимого для хранения сохранённых данных, и завершает OID с помощью NDIS_STATUS_BUFFER_TOO_SHORT. OID будет повторно выдан с требуемым размером.
Если расширение не имеет данных времени выполнения для сохранения указанных сетевых параметров, оно должно вызывать NdisFOidRequest. Это перенаправит запрос метода OID в базовые драйверы в стеке расширяемого драйвера коммутатора. Дополнительную информацию об этой процедуре см. в разделе Фильтрация запросов OID в фильтрующем драйвере NDIS.
Если расширению необходимо сохранить данные порта во время выполнения, оно должно следовать этим рекомендациям при сохранении данных в структуре NDIS_SWITCH_NIC_SAVE_STATE.
Расширение устанавливает элемент ExtensionId в значение GUID, которое однозначно идентифицирует драйвер.
Расширение задает член ExtensionFriendlyName имени драйвера.
Примечание Тип данных NDIS_SWITCH_EXTENSION_FRIENDLYNAME определяется структурой IF_COUNTED_STRING. Строка, определяемая этой структурой, не обязательно должна оканчиваться нулевым символом. Однако длина строки должна быть задана в элементе Length этой структуры. Если строка NULL-завершённая, элемент Length не должен включать завершающий символ NULL.
Если класс компонентов связан с сохраненными данными времени выполнения, расширение задает FeatureClassId с идентификатором GUID, который однозначно идентифицирует класс.
Примечание Если класс компонентов не связан с сохраненными данными времени выполнения, расширение задает FeatureClassId нулю.
Расширение копирует данные времени выполнения в элемент 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 Run-Time
Когда 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, используемым этим расширением для его идентификации.
Если расширение владеет данными времени выполнения для сетевого адаптера расширяемого коммутатора, оно восстанавливает эти данные следующим образом:
Расширение копирует данные исполнения из элемента SaveData в выделенное драйвером хранилище.
Примечание Значение элемента PortId структуры NDIS_SWITCH_NIC_SAVE_STATE может отличаться от значения PortId на момент сохранения данных выполнения. Это может произойти, если данные во время выполнения были сохранены во время динамической миграции с одного узла на другой. Однако конфигурация расширяемого сетевого адаптера коммутатора сохраняется во время динамической миграции. Это позволяет расширению восстанавливать данные времени выполнения в расширяемый коммутатор NIC с помощью нового значения PortId.
Расширение завершает выполнение запроса на установку 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 получен минипортом на краю расширяемого коммутатора, он завершается с NDIS_STATUS_SUCCESS. Это сообщает граничный протокол расширяемого коммутатора о том, что ни одно расширение не владеет данными во время работы. В этом случае расширяемый интерфейс коммутатора регистрирует событие, которое документирует значения ExtensionId и PortId для расширения, которое первоначально сохранило данные рабочего времени порта.