Exclusion de la remise de paquets vers les ports de destination du commutateur extensible

Cette rubrique décrit comment les extensions de commutateur extensible Hyper-V peuvent exclure la remise de paquets aux ports de commutateur extensibles. Les ports de destination d’un paquet sont spécifiés dans le contexte de transfert hors bande (OOB) au sein de la structure NET_BUFFER_LIST du paquet. Pour plus d’informations sur ce contexte, consultez Contexte de transfert 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.

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 filtrage et de transfert peuvent exclure la remise de paquets obtenus sur les chemins de données d’entrée ou de sortie du commutateur extensible. L’exclusion de la remise de paquets peut être effectuée des manières suivantes :

  • L’extension peut supprimer le paquet en effectuant la demande ou l’indication du paquet. Cela exclut la remise d’un paquet à n’importe quel port de commutateur extensible. Cette méthode peut être utilisée sur les paquets qui ont un ou plusieurs ports de destination.

    Pour les paquets obtenus sur le chemin des données d’entrée du commutateur extensible, l’extension termine la demande d’envoi de paquets en appelant NdisFSendNetBufferListsComplete.

    Pour les paquets obtenus sur le chemin de données de sortie du commutateur extensible, l’extension termine l’indication de réception de paquets en appelant NdisFReturnNetBufferLists.

  • Pour les paquets obtenus sur le chemin de données de sortie avec plusieurs ports de destination, l’extension peut exclure la remise de paquets en modifiant les données d’un ou plusieurs ports de destination. Pour ce faire, l’extension définit le membre IsExcluded de la structure NDIS_SWITCH_PORT_DESTINATION du port de destination sur une valeur de un. Cette méthode permet de remettre le paquet aux ports dont la valeur IsExcluded est définie sur zéro.

    Note Les paquets obtenus sur le chemin des données d’entrée ne contiennent pas de ports de destination. Ces données ne sont disponibles qu’une fois que le commutateur extensible a transféré le paquet vers le haut du chemin de données de sortie.

Une fois que l’extension a modifié la valeur IsExcluded du port de destination, elle doit transférer le paquet dans le chemin de données de sortie vers les extensions excessives. Toutefois, si les données IsExcluded de tous les ports de destination du paquet sont définies sur un, l’extension doit supprimer le paquet en terminant l’indication de réception de paquets au lieu de le transférer.

Note Une fois qu’une extension a défini la valeur IsExcluded du port de destination sur une valeur, les extensions excessives sur le chemin de données de sortie ne peuvent pas remplacer cette valeur par zéro.

Note La capture d’extensions ne peut pas exclure la remise de paquets aux ports de commutateur extensibles.

Les extensions de filtrage et de transfert doivent suivre ces instructions pour exclure la remise de paquets vers des ports de commutateur extensibles :

  • Sur le chemin des données d’entrée du commutateur extensible, les extensions de filtrage et de transfert peuvent exclure la remise de paquets en fonction d’un critère de stratégie pour le port source ou les données d’un paquet.

    Les informations de port source sont stockées dans l’union NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO dans les données OOB de la structure NET_BUFFER_LIST du paquet. L’extension obtient les données à l’aide de la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .

    Si l’extension exclut la remise d’un paquet obtenu à partir du chemin des données d’entrée, elle doit supprimer le paquet en effectuant la demande d’envoi de paquets.

  • Sur le chemin des données d’entrée du commutateur extensible, les extensions de transfert déterminent les ports de destination d’un paquet et ajoutent ces informations aux données OOB du paquet. En fonction des critères de stratégie appliqués par l’extension, elle peut exclure la remise de paquets à un port en n’ajoutant pas ses informations de port de destination aux données OOB.

    Pour plus d’informations sur cette procédure, consultez Ajout de données de port de destination de commutateur extensible à un paquet.

  • Sur le chemin de données de sortie du commutateur extensible, les extensions de filtrage et de transfert peuvent exclure la remise du paquet en fonction de critères de stratégie. Par exemple, les extensions de filtrage peuvent exclure la remise de paquets en fonction des critères de stratégie pour le port source ou les ports de destination d’un paquet.

    Les extensions excluent la remise d’un paquet aux ports de destination en procédant comme suit :

    1. L’extension obtient les ports de destination du paquet en appelant GetNetBufferListDestinations. Si l’appel retourne NDIS_STATUS_SUCCESS, le paramètre Destinations contient un pointeur vers une structure NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . Cette structure spécifie les ports de destination du commutateur extensible du paquet. Chaque port de destination est mis en forme en tant que structure NDIS_SWITCH_PORT_DESTINATION .

      Note Si le membre NumDestinations de la structure NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY contient une valeur de zéro, le paquet n’a pas de données pour les ports de destination.

  1. L’extension exclut la remise de paquets vers un port de commutateur extensible en définissant le membre IsExcluded de la structure NDIS_SWITCH_PORT_DESTINATION du port de destination sur une valeur de un.

    Note Si l’extension exclut la remise du paquet à tous ses ports de destination, l’extension doit supprimer le paquet en terminant l’indication de réception du paquet.

  2. Si l’extension exclut la remise à un ou à tous les ports de destination d’un paquet, elle doit effectuer les opérations suivantes :

    • L’extension doit appeler UpdateNetBufferListDestinations pour valider ces modifications dans les données OOB du paquet.

    • L’extension doit appeler ReportFilteredNetBufferLists. Lorsque cette fonction est appelée, l’interface de commutateur extensible incrémente les compteurs et journalise les événements pour le paquet exclu. L’extension doit effectuer cet appel avant de transférer le paquet dans le chemin de données du commutateur extensible à partir duquel elle a obtenu le paquet.

    De même, si l’extension termine la demande ou l’indication d’envoi de paquets pour exclure la remise à tous les ports du paquet, elle doit également appeler ReportFilteredNetBufferLists.

    Note L’extension peut créer une liste liée de structures NET_BUFFER_LIST pour les paquets que l’extension exclut. Lorsque l’extension appelle ReportFilteredNetBufferLists, elle définit le paramètre NetBufferLists sur un pointeur vers la liste liée.

Pour plus d’informations sur les chemins de données d’entrée et de sortie du commutateur extensible, consultez Chemin des données de commutateur extensible Hyper-V.