Gestión de los datos en tiempo de ejecución del conmutador extensible de Hyper-V

En este tema se describen las operaciones de guardado y restauración para extensiones de conmutador extensible de Hyper-V. Estas operaciones permiten a una extensión guardar y restaurar datos en tiempo de ejecución para adaptadores de red de conmutador extensible individuales (NIC). Estas operaciones se realizan cuando se detiene o se inicia una partición secundaria de Hyper-V que tiene una conexión de adaptador de red a un puerto de conmutador extensible.

Guardado de los datos en tiempo de ejecución del conmutador extensible de Hyper-V

En esta sección se describe la operación por la que una extensión de conmutador extensible de Hyper-V puede guardar los datos en tiempo de ejecución para adaptadores de red individuales (NIC). Esta operación se realiza cuando se detiene una partición secundaria de Hyper-V con una conexión de adaptador de red a un puerto de conmutador extensible o se guarda su estado.

Control de la solicitud OID_SWITCH_NIC_SAVE

Cuando se detiene una partición secundaria de Hyper-V con una conexión de adaptador de red a un puerto de conmutador extensible o se guarda su estado, se notifica a la interfaz del conmutador extensible de Hyper-V. Esto hace que el borde del protocolo del conmutador extensible emita una solicitud de método de identificador de objeto (OID) OID_SWITCH_NIC_SAVE a la pila de controladores de conmutador extensible. Cuando una extensión de conmutador extensible recibe esta solicitud OID, puede guardar sus datos en tiempo de ejecución para la conexión del adaptador de red especificada que está conectada a la partición secundaria.

El miembro InformationBuffer de la estructura NDIS_OID_REQUEST para la solicitud OID_SWITCH_NIC_SAVE contiene un puntero a una estructura NDIS_SWITCH_NIC_SAVE_STATE. Esta estructura se asigna mediante el borde del protocolo del conmutador extensible y se inicializa de la siguiente manera:

  • El miembro Header se inicializa para contener el tipo actual, la revisión de la estructura NDIS_SWITCH_NIC_SAVE_STATE. El tamaño se establece en el tamaño completo del búfer.

  • El miembro PortId contiene el identificador único del puerto de conmutador extensible para el que se realiza la operación de guardado.

Cuando recibe la solicitud del método OID_SWITCH_NIC_SAVE, la extensión hace lo siguiente:

  1. La extensión lee el miembro PortId de la estructura NDIS_SWITCH_NIC_SAVE_STATE.

  2. Si la extensión tiene datos en tiempo de ejecución para guardar en la NIC especificada, guarda sus datos dentro de la estructura NDIS_SWITCH_NIC_SAVE_STATE a partir de SaveDataOffset bytes desde el principio de la estructura. A continuación, la extensión completa la solicitud del método OID con NDIS_STATUS_SUCCESS.

  3. Si la estructura NDIS_SWITCH_NIC_SAVE_STATE no proporciona un búfer suficiente para contener el estado en tiempo de ejecución, la extensión establece el campo BytesNeededed de la estructura del método en NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 más la cantidad de búfer necesario para almacenar los datos guardados y completa el OID con NDIS_STATUS_BUFFER_TOO_SHORT. El OID se volverá a emitir con el tamaño necesario.

  4. Si la extensión no tiene datos en tiempo de ejecución para guardar en la NIC especificada, debe llamar a NdisFOidRequest. Esto reenvía la solicitud del método OID a los controladores subyacentes en la pila de controladores de conmutador extensible. Para obtener más información sobre este procedimiento, consulte Filtrado de solicitudes OID en un controlador de filtro NDIS.

Si la extensión tiene datos de puerto en tiempo de ejecución que se van a guardar, debe seguir estas instrucciones cuando guarde los datos de puerto en tiempo de ejecución dentro de la estructura NDIS_SWITCH_NIC_SAVE_STATE:

  1. La extensión establece el miembro ExtensionId en el valor GUID que identifica de forma única el controlador.

  2. La extensión establece el miembro ExtensionFriendlyName con el nombre del controlador.

    Nota El tipo de datos NDIS_SWITCH_EXTENSION_FRIENDLYNAME viene definido por la estructura IF_COUNTED_STRING. Una cadena definida por esta estructura no tiene que terminar en null. Sin embargo, la longitud de la cadena debe establecerse en el miembro Length de esta estructura. Si la cadena está terminada en NULL, el miembro Length no debe incluir el carácter NULL de terminación.

  3. Si una clase de característica está asociada a los datos en tiempo de ejecución guardados, la extensión establece FeatureClassId con el GUID que identifica de forma única la clase.

    Nota Si una clase de característica no está asociada a los datos en tiempo de ejecución guardados, la extensión establece FeatureClassId en cero.

  4. La extensión copia los datos en tiempo de ejecución en el miembro SaveData y establece el miembro SaveDataSize con el tamaño, en bytes, de los datos en tiempo de ejecución.

Nota La extensión no debe cambiar los miembros Header o PortId de la estructura NDIS_SWITCH_NIC_SAVE_STATE.

Las solicitudes de método OID de OID_SWITCH_NIC_SAVE se controlan en última instancia mediante el borde de minipuerto subyacente del conmutador extensible. Una vez que esta solicitud de método OID se ha reenviado al controlador de minipuerto a través de la pila de controladores de conmutador extensible, el controlador de minipuerto completa la solicitud OID con NDIS_STATUS_SUCCESS. Esto notifica al borde del protocolo del conmutador extensible que se han consultado todas las extensiones de la pila del controlador de conmutador extensible para los datos del puerto en tiempo de ejecución. A continuación, el borde del protocolo del conmutador extensible emite una solicitud de conjunto de OID OID_SWITCH_NIC_SAVE_COMPLETE para completar la operación de guardado.

Control de la solicitud OID_SWITCH_NIC_SAVE_COMPLETE

Cuando se pausa una partición secundaria de Hyper-V que tiene una conexión de adaptador de red a un puerto de conmutador extensible o se está guardado su estado, se notifica a la interfaz del conmutador extensible de Hyper-V. Esto hace que el borde del protocolo del conmutador extensible emita una solicitud de método de identificador de objeto (OID) OID_SWITCH_NIC_SAVE a la pila de controladores de conmutador extensible.

Cuando cada extensión de conmutador extensible de Hyper-V ha guardado sus datos en tiempo de ejecución, el borde del protocolo del conmutador extensible notifica a las extensiones subyacentes que la operación de guardado ha completado. El borde del protocolo lo hace mediante la emisión de una solicitud de conjunto de OID OID_SWITCH_NIC_SAVE_COMPLETE a la pila de controladores de conmutador extensible.

Nota Cuando se inicia una operación de ahorro en tiempo de ejecución para una conexión de adaptador de red de conmutador extensible, no se realizará otra operación de guardado para la misma conexión del adaptador de red hasta que se emita la solicitud OID_SWITCH_NIC_SAVE_COMPLETE. Sin embargo, las operaciones de guardado para otras conexiones del adaptador de red podrían producirse durante este tiempo.

El miembro InformationBuffer de la estructura NDIS_OID_REQUEST para la solicitud OID_SWITCH_NIC_SAVE_COMPLETE contiene un puntero a una estructura NDIS_SWITCH_NIC_SAVE_STATE. Esta estructura se asigna mediante el borde del protocolo del conmutador extensible.

Cuando recibe la solicitud de conjunto de OID OID_SWITCH_NIC_SAVE_COMPLETE, la extensión debe seguir estas instrucciones:

  • La extensión no debe modificar la estructura NDIS_SWITCH_NIC_SAVE_STATE asociada a la solicitud de OID.

  • La extensión debe llamar a NdisFOidRequest para reenviar esta solicitud de OID a través de la pila de extensiones de conmutador extensible. La extensión no debe producir un error en la solicitud de OID.

    Nota La extensión debe supervisar el estado de finalización de esta solicitud de OID. La extensión lo hace para detectar si la operación de guardado se ha completado correctamente.

Las solicitudes de método OID de OID_SWITCH_NIC_SAVE_COMPLETE se controlan en última instancia mediante el borde de minipuerto subyacente del conmutador extensible. Una vez que el borde de minipuerto recibe esta solicitud de método OID, completa la solicitud de OID con NDIS_STATUS_SUCCESS. Esto notifica al borde del protocolo del conmutador extensible que todas las extensiones de la pila del controlador de conmutador extensible han completado la operación de guardado.

Restauración de los datos en tiempo de ejecución de conmutador extensible de Hyper-V

Cuando se reanuda tras una pausa una partición secundaria de Hyper-V que tiene una conexión de adaptador de red a un puerto de conmutador extensible, se notifica a la interfaz del conmutador extensible de Hyper-V. Esto hace que el borde del protocolo del conmutador extensible emita una solicitud de establecimiento de identificador de objeto (OID) OID_SWITCH_NIC_RESTORE a la pila de controladores de conmutador extensible. Cuando una extensión recibe esta solicitud de OID, puede restaurar sus datos en tiempo de ejecución para el puerto de conmutador extensible que usa la partición secundaria.

El miembro InformationBuffer de la estructura NDIS_OID_REQUEST para la solicitud OID_SWITCH_NIC_RESTORE contiene un puntero a una estructura NDIS_SWITCH_NIC_SAVE_STATE. Esta estructura se asigna mediante el borde del protocolo del conmutador extensible.

Cuando recibe la solicitud de establecimiento de OID OID_SWITCH_NIC_RESTORE, la extensión de conmutador extensible primero debe determinar si posee los datos en tiempo de ejecución. Para ello, compara el valor del miembro ExtensionId de la estructura NDIS_SWITCH_NIC_SAVE_STATE con el valor GUID que usa la extensión para identificarse.

Si la extensión posee los datos en tiempo de ejecución de una NIC de conmutador extensible, restaura estos datos de la siguiente manera:

  1. La extensión copia los datos en tiempo de ejecución del miembro SaveData en el almacenamiento asignado por el controlador.

    Nota El valor del miembro PortId de la estructura NDIS_SWITCH_NIC_SAVE_STATE puede ser diferente del valor PortId en el momento en que se guardaron los datos en tiempo de ejecución. Esto puede ocurrir si los datos en tiempo de ejecución se guardaron durante una migración en vivo de un host a otro. Sin embargo, la configuración de la NIC de conmutador extensible se conserva durante la migración en vivo. Esto permite que la extensión restaure los datos en tiempo de ejecución a la NIC del conmutador extensible mediante el nuevo valor PortId.

  2. La extensión completa la solicitud de establecimiento de OID con NDIS_STATUS_SUCCESS.

Si la extensión no posee los datos en tiempo de ejecución especificados para guardarlos, la extensión llama a NdisFOidRequest. Esto reenvía la solicitud de establecimiento de OID a los controladores subyacentes en la pila de controladores de conmutador extensible. En este caso, la extensión no debe modificar la estructura NDIS_SWITCH_NIC_SAVE_STATE asociada a la solicitud de OID. Para obtener más información sobre cómo reenviar solicitudes de OID, consulte Filtrado de solicitudes de OID en un controlador de filtro NDIS.

Si la solicitud de establecimiento de OID OID_SWITCH_NIC_RESTORE se completa con NDIS_STATUS_SUCCESS, el borde del protocolo del conmutador extensible emite otra solicitud de establecimiento de OID. Cuando recibe esta nueva solicitud de establecimiento de OID, la extensión puede realizar una de las siguientes acciones:

  • Si posee los datos en tiempo de ejecución en la nueva solicitud de OID, la extensión restaura los datos adicionales en tiempo de ejecución dentro de la estructura NDIS_SWITCH_NIC_SAVE_STATE. A continuación la extensión completa la solicitud de OID con NDIS_STATUS_SUCCESS.

  • Si no posee los datos en tiempo de ejecución en la nueva solicitud de OID, la extensión llama a NdisFOidRequest para reenviar esta solicitud de conjunto de establecimiento de OID a los controladores subyacentes.

OID_SWITCH_NIC_RESTORE_COMPLETE
La interfaz de conmutador extensible indica al borde del protocolo del conmutador extensible que emita este OID al finalizar la operación de restauración de datos en tiempo de ejecución para un adaptador de red de conmutador extensible.

Esta solicitud de OID notifica a la extensión que la operación de restauración se ha completado solo para una NIC de conmutador extensible especificada.

Para obtener más información sobre esta solicitud de OID, consulte OID_SWITCH_NIC_RESTORE_COMPLETE.

Nota Si el borde de minipuerto del conmutador extensible recibe la solicitud de establecimiento OID_SWITCH_NIC_RESTORE, completa la solicitud de OID con NDIS_STATUS_SUCCESS. Esto notifica al borde del protocolo del conmutador extensible que ninguna extensión posee los datos en tiempo de ejecución. Si esto sucede, la interfaz de conmutador extensible registra un evento que documenta los valores de los miembros ExtensionId y PortId para la extensión que originalmente guardó los datos del puerto en tiempo de ejecución.