Partager via


Gestion des données runtime des commutateurs extensibles Hyper-V

Cette rubrique décrit les opérations d’enregistrement et de restauration pour les extensions de commutateurs extensibles Hyper-V. Elles permettent à une extension d’enregistrer et de restaurer des données runtime pour des cartes réseau de commutateurs extensibles individuelles. Elles sont effectuées lorsqu’une partition enfant Hyper-V qui a une connexion de carte réseau à un port de commutateur extensible est arrêtée ou démarrée.

Enregistrement des données runtime des commutateurs extensibles Hyper-V

Cette section décrit l’opération par laquelle une extension de commutateur extensible Hyper-V peut enregistrer des données runtime pour des cartes réseau individuelles. Cette opération est effectuée lorsqu’une partition enfant Hyper-V qui a une connexion de carte réseau à un port de commutateur extensible est arrêtée ou que son état est enregistré.

Traitement de la demande OID_SWITCH_NIC_SAVE

Lorsqu’une partition enfant Hyper-V avec une connexion de carte réseau à un port de commutateur extensible est arrêtée ou que son état est enregistré, l’interface de commutateur extensible Hyper-V est avertie. Alors, l’interface protocole du commutateur extensible émet une demande de méthode d’identificateur d’objet (OID) de OID_SWITCH_NIC_SAVE vers la pile de pilotes du commutateur extensible. Lorsqu’une extension de commutateur extensible reçoit cette demande OID, elle peut enregistrer ses données runtime pour la connexion de carte réseau spécifiée qui est attachée à la partition enfant.

Le membre InformationBuffer de la structure NDIS_OID_REQUEST de la requête OID_SWITCH_NIC_SAVE contient un pointeur vers une structure NDIS_SWITCH_NIC_SAVE_STATE. Cette dernière est allouée par l’interface de protocole du commutateur extensible et initialisée de la manière suivante :

  • Le membre Header est initialisé pour contenir le type actuel, révision de la structure NDIS_SWITCH_NIC_SAVE_STATE. La taille est définie sur la taille maximale de la mémoire tampon.

  • Le membre PortId contient l’identificateur unique du port de commutateur extensible pour lequel l’opération d’enregistrement est en cours d’exécution.

Lorsqu’elle reçoit la demande de méthode OID_SWITCH_NIC_SAVE, l’extension effectue les opérations suivantes :

  1. L’extension lit le membre PortId de la structure NDIS_SWITCH_NIC_SAVE_STATE.

  2. Si l’extension a des données runtime à enregistrer pour la carte réseau spécifiée, elle enregistre ses données dans la structure NDIS_SWITCH_NIC_SAVE_STATE en commençant par les octets SaveDataOffset à partir du début de la structure. L’extension termine ensuite la requête de méthode OID avec NDIS_STATUS_SUCCESS.

  3. Si la structure NDIS_SWITCH_NIC_SAVE_STATE ne fournit pas de mémoire tampon suffisante pour contenir l’état d’exécution, l’extension définit le champ BytesNeededed de la structure de méthode sur NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 plus la quantité de mémoire tampon nécessaire pour contenir les données d’enregistrement, puis termine l’OID avec NDIS_STATUS_BUFFER_TOO_SHORT. L’OID sera émis à nouveau avec la taille requise.

  4. Si l’extension n’a pas de données d’exécution à enregistrer pour la carte réseau spécifiée, elle doit appeler NdisFOidRequest. Ce dernier transfère la demande de méthode OID aux pilotes sous-jacents dans la pile de pilotes de commutateurs extensibles. Pour en savoir plus sur cette procédure, consultez Filtrage des requêtes OID dans un pilote de filtre NDIS.

Si l’extension a des données de port runtime à enregistrer, elle doit suivre ces instructions quand elle les enregistre dans la structure NDIS_SWITCH_NIC_SAVE_STATE :

  1. L’extension définit le membre ExtensionId sur la valeur GUID qui identifie de manière unique le pilote.

  2. Elle définit le membre ExtensionFriendlyName sur le nom du pilote.

    Remarque le type de données NDIS_SWITCH_EXTENSION_FRIENDLYNAME est défini par la structure IF_COUNTED_STRING. Une chaîne définie par cette structure n’a pas besoin d’être terminée par une valeur null. Toutefois, la longueur de cette chaîne doit être définie dans le membre Length de cette structure. Si la chaîne est terminée par une valeur NULL, le membre Length ne doit pas inclure le caractère NULL de fin.

  3. Si une classe d’entités est associée aux données runtime enregistrées, l’extension définit la FeatureClassId avec le GUID qui identifie de manière unique la classe.

    Remarque Si une classe d’entités n’est pas associée aux données runtime enregistrées, l’extension définit la featureClassId sur zéro.

  4. L’extension copie les données runtime dans le membre SaveData et définit le membre SaveDataSize sur la taille, en octets, des données runtime.

Remarque L’extension ne doit pas modifier les membres Header ou PortId de la structure NDIS_SWITCH_NIC_SAVE_STATE.

Les requêtes de méthode OID de OID_SWITCH_NIC_SAVE sont finalement gérées par l’interface miniport sous-jacente du commutateur extensible. Une fois que cette demande de méthode OID a été transférée au pilote de miniport à travers la pile de pilotes du commutateur extensible, le pilote de miniport termine la requête OID par NDIS_STATUS_SUCCESS. Ainsi, l’interface de protocole du commutateur extensible est informée du fait que toutes les extensions de la pile de pilotes du commutateur extensible ont été interrogées pour les données de port runtime. L’interface protocole du commutateur extensible émet ensuite une demande de définition OID de OID_SWITCH_NIC_SAVE_COMPLETE pour terminer l’opération d’enregistrement.

Traitement de la demande d’OID_SWITCH_NIC_SAVE_COMPLETE

Lorsqu’une partition enfant Hyper-V avec une connexion de carte réseau à un port de commutateur extensible est suspendue ou que son état est en cours d’enregistrement, l’interface de commutateur extensible Hyper-V est avertie. Alors, l’interface protocole du commutateur extensible émet une demande de méthode d’identificateur d’objet (OID) de OID_SWITCH_NIC_SAVE vers la pile de pilotes du commutateur extensible.

Lorsque chaque extension des commutateurs extensibles Hyper-V a enregistré ses données runtime, l’interface protocole du commutateur extensible avertit les extensions sous-jacentes que l’opération d’enregistrement est terminée. Pour cette opération, l’interface protocole émet une demande de définition OID de OID_SWITCH_NIC_SAVE_COMPLETE vers la pile de pilotes de commutateurs extensibles.

Remarque Lorsqu’une opération d’enregistrement runtime est lancée pour une connexion de carte réseau de commutateur extensible, une autre opération d’enregistrement pour la même connexion de carte réseau n’est pas effectuée tant que la demande de OID_SWITCH_NIC_SAVE_COMPLETE n’est pas émise. Toutefois, les opérations d’enregistrement pour d’autres connexions de cartes réseau peuvent se produire pendant cette période.

Le membre InformationBuffer de la structure NDIS_OID_REQUEST de la requête OID_SWITCH_NIC_SAVE_COMPLETE contient un pointeur vers une structure NDIS_SWITCH_NIC_SAVE_STATE. Cette structure est allouée par l’interface protocole du commutateur extensible.

Lorsqu’elle reçoit la demande de définition OID de OID_SWITCH_NIC_SAVE_COMPLETE, l’extension doit respecter les instructions suivantes :

  • L’extension ne doit pas modifier la structure NDIS_SWITCH_NIC_SAVE_STATE associée à la requête OID.

  • L’extension doit appeler NdisFOidRequest pour transférer cette requête OID à travers la pile d’extension de commutateurs extensibles. L’extension ne doit pas faire échouer la requête OID.

    Remarque L’extension doit surveiller l’état d’achèvement de cette requête OID. L’extension le fait pour détecter si l’opération d’enregistrement s’est terminée correctement.

Les requêtes de méthode OID_SWITCH_NIC_SAVE_COMPLETE sont finalement gérées par l’interface miniport sous-jacente du commutateur extensible. Une fois que cette demande de méthode OID a été reçue par l’interface miniport, elle termine la requête OID par NDIS_STATUS_SUCCESS. Ce dernier avertit l’interface protocole du commutateur extensible que toutes les extensions de la pile de pilotes de commutateurs extensibles ont terminé l’opération d’enregistrement.

Restauration des données runtime des commutateurs extensibles Hyper-V

Lorsqu’une partition enfant Hyper-V avec une connexion de carte réseau à un port de commutateur extensible est relancé après une mise en pause, l’interface de commutateur extensible Hyper-V est avertie. Alors, l’interface protocole du commutateur extensible émet une demande de définition d’identificateur d’objet (OID) de OID_SWITCH_NIC_SAVE vers la pile de pilotes du commutateur extensible. Lorsqu’une extension reçoit cette requête OID, elle peut restaurer ses données runtime pour le port de commutateur extensible utilisé par la partition enfant.

Le membre InformationBuffer de la structure NDIS_OID_REQUEST de la requête OID_SWITCH_NIC_RESTORE contient un pointeur vers une structure NDIS_SWITCH_NIC_SAVE_STATE. Cette structure est allouée par l’interface protocole du commutateur extensible.

Lorsqu’elle reçoit la demande de définition OID de OID_SWITCH_NIC_RESTORE, l’extension de commutateur extensible doit d’abord déterminer si elle possède les données runtime. Pour ce faire, elle compare la valeur du membre ExtensionId de la structure NDIS_SWITCH_NIC_SAVE_STATE à la valeur GUID utilisée par l’extension pour s’identifier.

Si l’extension possède les données runtime d’une carte réseau de commutateur extensible, elle les restaure de la manière suivante :

  1. L’extension copie les données runtime contenues dans le membre SaveData dans le stockage alloué au pilote.

    Remarque La valeur du membre PortId de la structure NDIS_SWITCH_NIC_SAVE_STATE peut être différente de la valeur PortId au moment où les données runtime ont été enregistrées. Cela peut arriver si les données runtime ont été enregistrées pendant une migration dynamique d’un hôte vers un autre. La configuration de la carte réseau du commutateur extensible est toutefois conservée pendant la migration dynamique. Ainsi, l’extension peut restaurer les données runtime sur la carte réseau du commutateur extensible à l’aide de la nouvelle valeur PortId.

  2. L’extension termine la demande de définition OID avec NDIS_STATUS_SUCCESS.

Si l’extension ne possède pas les données runtime spécifiées à enregistrer, elle appelle NdisFOidRequest Ce dernier transfère la demande de définition OID aux pilotes sous-jacents dans la pile de pilotes de commutateurs extensibles. Dans ce cas, l’extension ne doit pas modifier la structure NDIS_SWITCH_NIC_SAVE_STATE associée à la requête OID. Pour en savoir plus sur la façon de transférer des requêtes OID, consultez Filtrage des requêtes OID dans un pilote de filtre NDIS.

Si la demande de définition OID de OID_SWITCH_NIC_RESTORE est terminée par NDIS_STATUS_SUCCESS, l’interface protocole du commutateur extensible en émet une autre. Lorsqu’elle reçoit cette nouvelle demande de définition OID, l’extension peut effectuer l’une des opérations suivantes :

  • Si elle possède les données runtime dans la nouvelle requête OID, elle restaure les données runtime supplémentaires dans la structure NDIS_SWITCH_NIC_SAVE_STATE. L’extension termine alors la demande de définition OID par NDIS_STATUS_SUCCESS.

  • Si elle ne possède pas les données runtime dans la nouvelle requête OID, l’extension appelle NdisFOidRequest pour transférer cette demande de définition OID aux pilotes sous-jacents.

OID_SWITCH_NIC_RESTORE_COMPLETE
L’interface de commutateur extensible signale à l’interface protocole du commutateur extensible d’émettre cet OID à la fin de l’opération de restauration des données runtime pour une carte réseau de commutateur extensible.

Cette requête OID avertit l’extension que l’opération de restauration s’est terminée uniquement pour une carte réseau de commutateur extensible spécifiée.

Pour en savoir plus sur cette requête OID, consultez OID_SWITCH_NIC_RESTORE_COMPLETE.

Remarque Si la demande de définition OID_SWITCH_NIC_RESTORE est reçue par l’interface miniport du commutateur extensible, elle termine la requête OID par NDIS_STATUS_SUCCESS. Ainsi, l’interface protocole du commutateur extensible est averti qu’aucune extension ne possède les données runtime. Dans ce cas, l’interface du commutateur extensible enregistre un événement qui documente les valeurs des membres ExtensionId et PortId pour l’extension qui a enregistré initialement les données de port runtime.