Instructions de gestion des paquets pour le chemin de données du commutateur extensible
Cette rubrique décrit les instructions que les extensions de commutateur extensible Hyper-V doivent suivre pour gérer les paquets obtenus sur le chemin de données du commutateur extensible.
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.
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.
Les extensions doivent suivre ces instructions pour la gestion des paquets dans le chemin de données du commutateur extensible :
Les extensions qui proviennent des paquets doivent appeler NdisFSendNetBufferLists pour lancer une demande d’envoi sur le chemin des données d’entrée. Cette opération doit être effectuée de cette façon pour permettre un transfert approprié du paquet via le commutateur extensible.
Une extension de capture peut surveiller les paquets sur le chemin de données d’entrée et de sortie du commutateur extensible. Toutefois, ce type d’extension doit toujours transférer les paquets et ne doit pas supprimer les paquets. En outre, l’extension de capture ne doit pas modifier les données de paquet avant de transférer le paquet.
Sur le chemin de données d’entrée du commutateur extensible, les extensions de filtrage et de transfert peuvent effectuer les opérations suivantes :
Les extensions de filtrage peuvent filtrer le trafic de paquets et appliquer uniquement des stratégies de port ou de commutateur personnalisées pour la remise de paquets via le commutateur extensible. Lorsque l’extension filtre les paquets dans le chemin des données d’entrée, elle ne peut appliquer des règles de filtrage basées que sur le port source et la connexion de carte réseau d’où provient le paquet. Ces informations sont stockées dans les données OOB de la structure NET_BUFFER_LIST d’un paquet et peuvent être obtenues à l’aide de la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Note Les paquets obtenus sur le chemin des données d’entrée ne contiennent pas de ports de destination. Le filtrage des paquets en fonction des ports de destination ne peut être effectué que sur les paquets obtenus sur le chemin des données de sortie.
Les extensions de transfert peuvent filtrer le trafic de paquets et appliquer des stratégies de port ou de commutateur personnalisées et standard pour la remise de paquets via le commutateur extensible. Lorsque l’extension de transfert filtre les paquets dans le chemin des données d’entrée, elle applique des règles de filtrage basées sur le port source ainsi que sur les ports de destination que l’extension de transfert affecte au paquet.
Sur le chemin de données de sortie du commutateur extensible, les extensions de filtrage et de transfert peuvent effectuer les opérations suivantes :
Les extensions de filtrage peuvent filtrer le trafic de paquets et appliquer uniquement des stratégies de port ou de commutateur personnalisées pour la remise de paquets via le commutateur extensible. Lorsque l’extension de filtrage filtre les paquets dans le chemin des données de sortie, elle peut appliquer des règles de filtrage basées uniquement sur les ports de destination d’un paquet.
Les données de port de destination sont stockées dans les données OOB de la structure NET_BUFFER_LIST d’un paquet. Les extensions obtiennent ces informations en appelant la fonction GetNetBufferListDestinations .
Les extensions de transfert peuvent filtrer le trafic de paquets et appliquer des stratégies de port ou de commutateur personnalisées et standard pour la remise de paquets via le commutateur extensible. Lorsque l’extension de transfert filtre les paquets dans le chemin des données de sortie, elle peut appliquer des règles de filtrage basées sur les ports source ou de destination d’un paquet.
En fonction des stratégies appliquées sur un paquet, l’extension de filtrage ou de transfert peut exclure la remise du paquet à une ou plusieurs destinations. Pour plus d’informations sur cette procédure, consultez Exclusion de la remise de paquets vers les ports de destination du commutateur extensible.
En fonction des stratégies appliquées sur un paquet, l’extension de transfert peut exclure la remise du paquet à une ou plusieurs destinations. Pour plus d’informations, consultez Transfert hybride.
Sur le chemin de données de sortie du commutateur extensible, les extensions de filtrage et de transfert ne doivent pas effectuer les opérations suivantes :
Modifiez les données du paquet avant de transférer le paquet sur le chemin de données de sortie.
Si une extension de filtrage doit modifier les données d’un paquet, elle doit d’abord cloner le paquet sans conserver les destinations de port. Ensuite, l’extension doit injecter le paquet modifié dans le chemin des données d’entrée. Cela permet aux extensions sous-jacentes d’appliquer des stratégies sur le paquet modifié et l’extension de transfert peut ajouter des destinations de port.
Si l’extension de transfert doit modifier les données d’un paquet, elle doit d’abord cloner le paquet avant d’attribuer des destinations de port. Une fois le paquet modifié et les destinations de port affectées, l’extension doit injecter le paquet modifié dans le chemin des données d’entrée.
Pour plus d’informations, consultez Clonage du trafic de paquets.
Note Si l’extension clone un paquet obtenu sur le chemin de données de sortie, elle peut injecter le nouveau paquet dans le chemin de données de sortie uniquement si elle n’a pas modifié les données du paquet et a conservé les données de port de destination d’origine.
Ajoutez des ports de destination au paquet avant de transférer le paquet.
Note Les extensions de transfert sont autorisées à ajouter des ports de destination aux paquets obtenus sur le chemin des données d’entrée.
Injectez des paquets de données nouveaux ou cloné dans le chemin de données de sortie.
Dans le chemin de données NDIS standard, les données OOB de commutateur non extensibles ont souvent des formats différents selon que le paquet est indiqué en tant qu’envoi ou réception. Par exemple, les données OOB NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO sont une union de structures spécifiques à l’envoi et à la réception.
Dans le chemin de données du commutateur extensible, tous les paquets transitent par la pile du pilote d’extension à la fois en tant qu’envois et réceptions. Pour cette raison, les données OOB de commutateur non extensible dans la structure NET_BUFFER_LIST du paquet seront au format d’envoi ou de réception pendant la durée du flux via la pile de pilotes.
Le format de ces données OOB dépend du port du commutateur extensible source à partir duquel le paquet est arrivé au commutateur extensible. Si le port source est connecté à la carte réseau externe, les données OOB du commutateur non extensible sont dans un format de réception. Pour les autres ports, ces données OOB seront au format d’envoi.
Note Si l’extension clone la structure NET_BUFFER_LIST d’un paquet, elle doit tenir compte des données OOB du commutateur non extensible si elle ajoute ou modifie les données OOB. L’extension doit appeler CopyNetBufferListInfo pour copier les données OOB associées au chemin de données de commutateur extensible d’un paquet source vers un paquet cloné. Cette fonction conserve le format d’envoi ou de réception OOB lorsque les données sont copiées dans le paquet cloné.
Si une extension supprime un paquet du chemin d’entrée des données de sortie, elle doit appeler ReportFilteredNetBufferLists. Lorsque cette fonction est appelée, l’interface de commutateur extensible incrémente les compteurs et journalise les événements pour les paquets supprimés ou exclus.