Création d’un port virtuel
Un port virtuel (VPort) est un objet de données qui représente un port interne sur le commutateur de carte réseau d’une carte réseau qui prend en charge la virtualisation d’E/S racine unique (SR-IOV). Chaque commutateur de carte réseau possède les ports suivants pour la connectivité réseau :
Un port physique externe pour la connectivité au réseau physique externe.
Une ou plusieurs VPorts internes qui sont connectés à la fonction physique (PF) ou aux fonctions virtuelles (VF) PCI Express (PCIe).
Le pf est attaché à la partition parente Hyper-V et est exposé en tant que carte réseau virtuelle dans le système d’exploitation de gestion qui s’exécute dans cette partition.
Une VF est attachée à la partition enfant Hyper-V et exposée en tant que carte réseau virtuelle dans le système d’exploitation invité qui s’exécute dans cette partition.
Il existe deux types de VPorts :
VPort par défaut
Le VPort par défaut fournit une connectivité réseau aux composants réseau qui s’exécutent dans le système d’exploitation de gestion. Le VPort par défaut a un identificateur de NDIS_DEFAULT_VPORT_ID.
Lorsque le pilote pf miniport crée et configure le commutateur de carte réseau par défaut, le pilote crée implicitement le VPort par défaut et l’attache au pf. Le VPort par défaut ne peut pas être attaché à une VF.
Le VPort par défaut est toujours dans un état activé et ne peut pas être supprimé explicitement. Le pilote pf miniport supprime implicitement le VPort par défaut uniquement lorsqu’il supprime le commutateur de carte réseau par défaut.
Pour plus d’informations sur la création d’un commutateur de carte réseau et sur le VPort par défaut sur le commutateur, consultez Création d’un commutateur de carte réseau.
VPort non par défaut
Les VPorts non par défaut ne sont pas créés implicitement lorsque le commutateur de carte réseau est créé. Un pilote trop important, tel que la pile de virtualisation, crée explicitement ces ports en émettant des demandes de méthode OID de OID_NIC_SWITCH_CREATE_VPORT. Les VPorts non par défaut peuvent être attachés au PF ou à une VF, et ne peuvent être créés qu’après la création du commutateur de carte réseau.
Un VPort non par défaut qui est attaché à une VF fournit une connectivité réseau aux composants réseau qui s’exécutent dans le système d’exploitation invité. Une fois qu’il a été créé et attaché à la VF, le VPort non par défaut est dans un état activé.
Un VPort non par défaut qui est attaché au pf fournit des fonctionnalités de déchargement réseau supplémentaires aux composants réseau qui s’exécutent dans le système d’exploitation de gestion. Par exemple, les VPorts non par défaut sur le PF peuvent être utilisés pour fournir des fonctionnalités de déchargement similaires à l’interface de file d’attente de machines virtuelles (VMQ).
Note Les VPorts non par défaut ne peuvent être créés qu’après la création du commutateur de carte réseau.
Un pilote qui se superpose émet une demande de méthode d’identificateur d’objet (OID) de OID_NIC_SWITCH_CREATE_VPORT pour créer un VPort non par défaut sur un commutateur de carte réseau spécifié. Cette demande OID attache également le VPort créé au PF de la carte réseau ou à une VF précédemment allouée.
Le membre InformationBuffer de la structure NDIS_OID_REQUEST contient un pointeur vers la structureNDIS_NIC_SWITCH_VPORT_PARAMETERS . Après un retour réussi à partir de la demande de OID_NIC_SWITCH_CREATE_VPORT , le membre VPortId de la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS a un identificateur VPort unique parmi les VPorts sur le commutateur de carte réseau.
Le pilote qui se superpose initialise la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS avec les informations de configuration sur le VPort non par défaut à créer. Les informations de configuration incluent la fonction PCIe à laquelle le VPort non par défaut est attaché et le nombre de paires de files d’attente pour le VPort non par défaut.
Lorsqu’il initialise la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS , le pilote en sur-position doit effectuer les opérations suivantes :
Le membre SwitchId doit être défini sur l’identificateur d’un commutateur de carte réseau créé précédemment sur la carte réseau via une demande de méthode OID de OID_NIC_SWITCH_CREATE_SWITCH.
Note À compter de Windows Server 2012, l’interface SR-IOV ne prend en charge qu’un seul commutateur de carte réseau sur la carte réseau. Ce commutateur est appelé commutateur de carte réseau par défaut. Lors de la création d’un VPort non par défaut, le pilote qui surclasse doit définir le membre SwitchId sur l’identificateur NDIS_DEFAULT_SWITCH_ID.
Le membre VPortId doit être défini sur NDIS_DEFAULT_VPORT_ID.
Le membre AttachedFunctionId doit être défini sur l’identificateur de la VF ou pf sur laquelle le VPort non par défaut doit être attaché.
Une valeur de NDIS_PF_FUNCTION_ID spécifie le PF. Sinon, la valeur doit être définie sur l’identificateur d’une VF dont les ressources ont été précédemment allouées via une demande de méthode OID de OID_NIC_SWITCH_ALLOCATE_VF.
Note La pièce jointe d’un VPort non par défaut à un VF ou PF ne peut pas être modifiée une fois que le VPort non par défaut a été créé.
Le pilote en surclassement peut également spécifier le nombre de paires de files d’attente attribuées au VPort. Une paire de files d’attente est une file d’attente de transmission et de réception sur la carte réseau affectée au VPort. Si la carte réseau prend en charge les paires de files d’attente asymétriques pour les VPorts non par défaut, le pilote qui surclasse peut spécifier un nombre différent de paires de files d’attente pour chaque VPort créé par le pilote. Pour plus d’informations, consultez Attribution symétrique et asymétrique de paires de files d’attente.
Le pilote qui se superpose appelle NdisOidRequest pour émettre la demande OID_NIC_SWITCH_CREATE_VPORT au pilote pf miniport sous-jacent. Avant que NDIS ne transfère la demande de méthode OID au pilote miniport, il effectue les opérations suivantes :
NDIS valide les paramètres au sein de la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS . Si les paramètres sont en erreur, NDIS échoue à la demande de méthode OID et ne transmet pas la demande au pilote pf miniport.
NDIS affecte un identificateur pour le VPort non par défaut dans la plage comprise entre un et (NumVPorts– 1), où NumVPorts correspond au nombre de VPorts que le pilote miniport a configurés sur la carte réseau. Le pilote spécifie ce nombre dans le membre NumVPorts de la structure NDIS_NIC_SWITCH_INFO . Le pilote retourne cette structure par le biais d’une requête OID de OID_NIC_SWITCH_ENUM_SWITCHES.
Note Un identificateur VPort de NDIS_DEFAULT_VPORT_ID est réservé au VPort par défaut attaché au pf sur le commutateur de carte réseau par défaut.
L’identificateur VPort attribué identifie de manière unique le VPort non par défaut sur le commutateur de carte réseau de la carte réseau.
- NDIS définit le membre VPortId de la structure NDIS_NIC_SWITCH_VPORT_PARAMETERS avec l’identificateur VPort attribué.
Lorsque le pilote pf miniport reçoit la requête OID, le pilote alloue les ressources matérielles et logicielles associées au VPort non par défaut spécifié. Une fois toutes les ressources correctement allouées, le pilote pf miniport termine l’OID avec succès en retournant NDIS_STATUS_SUCCESS à partir de MiniportOidRequest.
Si la demande de OID_NIC_SWITCH_CREATE_VPORT est effectuée correctement, le pilote pf miniport et le pilote qui se superpose doivent conserver la valeur VPortId du VPort non par défaut pour les opérations successives. La valeur VPortId est utilisée pendant ces opérations :
NDIS et les pilotes qui se superposent utilisent la valeur VPortId pour identifier le VPort non par défaut dans les requêtes OID successives liées à ce VPort, telles que OID_NIC_SWITCH_VPORT_PARAMETERS et OID_NIC_SWITCH_DELETE_VPORT.
Pendant les opérations d’envoi, NDIS spécifie la valeur VPortId pour identifier le VPort à partir duquel un paquet a été envoyé. Cette valeur est spécifiée dans les données hors bande (OOB) NDIS_NET_BUFFER_LIST_FILTERING_INFO de la structure NET_BUFFER_LIST .
Pendant les opérations de réception, le pilote pf miniport spécifie la valeur VPortId vers laquelle un paquet doit être transféré. Cette valeur est également spécifiée dans les données OOB NDIS_NET_BUFFER_LIST_FILTERING_INFO de la structure NET_BUFFER_LIST .
Les points suivants s’appliquent à la création de VPorts non par défaut :
Les filtres de réception pour les identificateurs MAC (Media Access Control) et VLAN (Virtual LAN) sont configurés sur le VPort après sa création. Les pilotes trop définis dynamiquement ces filtres de réception en émettant des demandes de méthode OID de OID_RECEIVE_FILTER_SET_FILTER. Les filtres de réception peuvent également être déplacés d’un VPort à un autre via des demandes de jeu OID de OID_RECEIVE_FILTER_MOVE_FILTER.
Un VPort non par défaut attaché à la VF est à l’état activé lors de sa création. Le VPort ne peut pas être désactivé s’il est attaché à la VF.
Un VPort non par défaut attaché au pf est à l’état désactivé lors de sa création. Un pilote overlying, tel que le module de commutateur extensible Hyper-V, active explicitement le VPort non par défaut attaché au PF une fois que le VPort a été créé avec succès. Pour ce faire, vous devez envoyer une demande de méthode OID de OID_NIC_SWITCH_VPORT_PARAMETERS au pilote pf miniport.
Lorsque le pilote en sur-position émet cette requête OID, il transmet une structure NDIS_NIC_SWITCH_VPORT_PARAMETERS avec le membre VPortState défini sur NdisNicSwitchVPortStateActivated.
Une fois qu’un VPort non par défaut est activé, le pilote pf miniport peut allouer de la mémoire partagée pour le VPort en appelant NdisAllocateSharedMemory. Le pilote doit définir le membre VPortId dans la structure NDIS_SHARED_MEMORY_PARAMETERS sur la valeur d’identificateur du VPort.
Note Lorsqu’un VPort non par défaut est activé, il n’est défini sur un état désactivé que lorsqu’il est supprimé par le biais d’une demande de jeu d’OID de OID_NIC_SWITCH_DELETE_VPORT.