Trafic de paquets d’origine
Cette rubrique décrit comment les extensions Hyper-V proviennent de nouveaux paquets et les injectent dans le chemin de données du commutateur extensible.
Note Cette page suppose que vous êtes familiarisé avec les informations et les diagrammes dans Vue d’ensemble du commutateur extensible Hyper-V et du transfert hybride.
Note Dans l’interface de commutateur extensible, les pilotes de filtre NDIS sont appelés extensions de commutateur extensible et la pile de pilotes est appelée pile de pilotes de commutateur extensible. Pour plus d’informations sur les extensions, consultez Extensions de commutateur extensible Hyper-V.
Les extensions de commutateur extensible ne peuvent injecter que de nouveaux paquets dans le chemin de données d’entrée du commutateur extensible. Cela garantit que l’interface de commutateur extensible peut filtrer et transférer ces paquets correctement. Les extensions doivent suivre ces instructions pour injecter de nouveaux paquets dans le chemin de données d’entrée :
L’extension doit d’abord allouer une structure NET_BUFFER_LIST pour un nouveau paquet.
Une fois que l’extension alloue une structure NET_BUFFER_LIST pour un nouveau paquet, elle doit appeler la fonction gestionnaire AllocateNetBufferListForwardingContext pour allouer le contexte de transfert de commutateur extensible pour le paquet.
Le contexte de transfert réside dans les données hors bande (OOB) du paquet. Il contient des informations de transfert pour le paquet, telles que son port source et un tableau d’un ou plusieurs ports de destination.
Pour plus d’informations sur le contexte de transfert, consultez Contexte de transfert de commutateur extensible Hyper-V.
Une fois que l’extension a appelé AllocateNetBufferListForwardingContext, le port source du paquet est défini sur NDIS_SWITCH_DEFAULT_PORT_ID. Un paquet avec un identificateur de port source de NDIS_SWITCH_DEFAULT_PORT_ID est approuvé et contourne les stratégies de port de commutateur extensibles, telles que les listes de contrôle d’accès (ACL) et la qualité de service (QoS).
L’extension peut souhaiter que le paquet soit traité comme s’il provient d’un port particulier. Cela permet d’appliquer les stratégies de ce port au paquet. L’extension appelle SetNetBufferListSource pour modifier le port source du paquet.
Toutefois, il peut arriver que l’extension souhaite affecter l’identificateur de port source du paquet à NDIS_SWITCH_DEFAULT_PORT_ID. Par exemple, l’extension peut vouloir définir l’identificateur de port source sur NDIS_SWITCH_DEFAULT_PORT_ID pour les paquets de contrôle propriétaires envoyés à un appareil sur le réseau externe.
Si l’extension de transfert envoie un nouveau paquet sur le chemin de données d’entrée, elle doit déterminer les ports de destination du paquet. Pour plus d’informations sur cette procédure, consultez Ajout de données de port de destination de commutateur extensible à un paquet.
Note Une extension de capture ou de filtrage ne peut pas ajouter de nouveaux ports de destination au nouveau paquet.
Lorsque l’extension crée un paquet, les données de paquet se trouvent dans la mémoire locale ou approuvée dans le système d’exploitation parent de la partition parente Hyper-V. Cette mémoire n’est pas accessible par la partition enfant. Par conséquent, il est considéré comme « sécurisé » contre les mises à jour non synchronisées par le système d’exploitation invité qui s’exécute dans cette partition.
L’extension doit obtenir l’union NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO pour le nouveau paquet à l’aide de la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL . L’extension doit définir le membre IsPacketDataSafe sur TRUE. Cela spécifie que toutes les données de paquet se trouvent dans la mémoire approuvée.
Lorsque l’extension appelle NdisFSendNetBufferLists pour injecter le paquet dans le chemin de données d’entrée, elle doit définir le paramètre Flags avec les paramètres d’indicateur de commutateur extensible appropriés. Pour plus d’informations sur ces paramètres d’indicateur, consultez Indicateurs d’envoi et de réception du commutateur extensible Hyper-V.
Lorsque NDIS appelle la fonction FilterSendNetBufferListsComplete de l’extension pour terminer la demande d’envoi du nouveau paquet, l’extension doit appeler FreeNetBufferListForwardingContext pour libérer le contexte de transfert alloué. L’extension doit effectuer cette opération avant de libérer ou de réutiliser la structure NET_BUFFER_LIST pour le paquet.
Pour plus d’informations sur les chemins de données d’entrée et de sortie des commutateurs extensibles, consultez Chemin des données de commutateur extensible Hyper-V.