Exclusión de la entrega de paquetes a puertos de destino de conmutador extensible
En este tema se describe cómo las extensiones de conmutador extensible de Hyper-V pueden excluir la entrega de paquetes a puertos de conmutador extensibles. Los puertos de destino de un paquete se especifican dentro del contexto de reenvío fuera de banda (OOB) dentro de la estructura NET_BUFFER_LIST del paquete. Para obtener más información sobre este contexto, consulte Contexto de reenvío extensible de conmutador de Hyper-V.
Nota En esta página se da por supuesto que está familiarizado con la información y los diagramas de Información general del conmutador extensible de Hyper-V y el reenvío híbrido.
Nota En la interfaz de conmutador extensible, los controladores de filtro NDIS se conocen como extensiones de conmutador extensible y la pila de controladores se conoce como pila de controladores de conmutador extensible. Para obtener más información sobre las extensiones, consulte Extensiones de conmutador extensible de Hyper-V.
Las extensiones de filtrado y reenvío pueden excluir la entrega de paquetes obtenidos en las rutas de acceso de datos de entrada o salida del conmutador extensible. La exclusión de la entrega de paquetes se puede realizar de las siguientes maneras:
La extensión puede quitar el paquete completando la solicitud de paquete o la indicación. Esto excluye la entrega de un paquete a cualquier puerto de conmutador extensible. Este método se puede usar en paquetes que tienen uno o varios puertos de destino.
Para los paquetes obtenidos en la ruta de acceso de datos de entrada del conmutador extensible, la extensión completa la solicitud de envío de paquetes llamando a NdisFSendNetBufferListsComplete.
Para los paquetes obtenidos en la ruta de acceso de datos de salida del conmutador extensible, la extensión completa la indicación de recepción de paquetes llamando a NdisFReturnNetBufferLists.
Para los paquetes obtenidos en la ruta de acceso de datos de salida con varios puertos de destino, la extensión puede excluir la entrega de paquetes modificando los datos de uno o varios puertos de destino. La extensión lo hace estableciendo el miembro IsExcluded de la estructura NDIS_SWITCH_PORT_DESTINATION del puerto de destino en un valor de uno. Este método permite que el paquete se entregue a esos puertos cuyo valor IsExcluded está establecido en cero.
Nota Los paquetes obtenidos en la ruta de acceso de datos de entrada no contienen puertos de destino. Estos datos solo están disponibles después de que el conmutador extensible reenvíe el paquete hacia arriba la ruta de acceso de datos de salida.
Una vez que la extensión ha modificado el valor IsExcluded del puerto de destino, debe reenviar el paquete en la ruta de acceso de datos de salida a extensiones excesivas. Sin embargo, si los datos IsExcluded de todos los puertos de destino del paquete se establecen en uno, la extensión debe quitar el paquete completando la indicación de recepción del paquete en lugar de reenviarla.
Nota Una vez que una extensión ha establecido el valor IsExcluded del puerto de destino en uno, las extensiones excesivas en la ruta de acceso de datos de salida no pueden cambiar este valor a cero.
Nota La captura de extensiones no puede excluir la entrega de paquetes a puertos de conmutador extensibles.
Las extensiones de filtrado y reenvío deben seguir estas directrices para excluir la entrega de paquetes a puertos de conmutador extensibles:
En la ruta de acceso de datos de entrada extensible del conmutador, las extensiones de filtrado y reenvío pueden excluir la entrega de paquetes en función de los criterios de directiva para el puerto o los datos de origen de un paquete.
La información del puerto de origen se almacena en la unión NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO en los datos OOB de la estructura NET_BUFFER_LIST del paquete. La extensión obtiene los datos mediante la macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL .
Si la extensión excluye la entrega de un paquete obtenido de la ruta de acceso de datos de entrada, debe quitar el paquete completando la solicitud de envío de paquetes.
En la ruta de acceso de datos de entrada extensible del conmutador, las extensiones de reenvío determinan los puertos de destino de un paquete y agregan esta información a los datos de OOB del paquete. En función de los criterios de directiva aplicados por la extensión, puede excluir la entrega de paquetes a un puerto agregando su información de puerto de destino a los datos de OOB.
Para obtener más información sobre este procedimiento, vea Agregar datos de puerto de destino de conmutador extensible a un paquete.
En la ruta de acceso de datos de salida extensible del conmutador, las extensiones de filtrado y reenvío pueden excluir la entrega del paquete en función de los criterios de directiva. Por ejemplo, las extensiones de filtrado pueden excluir la entrega de paquetes en función de los criterios de directiva para los puertos de origen o de destino de un paquete.
Las extensiones excluyen la entrega de un paquete a los puertos de destino siguiendo estos pasos:
La extensión obtiene los puertos de destino del paquete llamando a GetNetBufferListDestinations. Si la llamada devuelve NDIS_STATUS_SUCCESS, el parámetro Destinations contiene un puntero a una estructura de NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY . Esta estructura especifica los puertos de destino del conmutador extensible del paquete. Cada puerto de destino tiene el formato de estructura NDIS_SWITCH_PORT_DESTINATION .
Nota Si el miembro NumDestinations de la estructura de NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY contiene un valor de cero, el paquete no tiene datos para los puertos de destino.
La extensión excluye la entrega de paquetes a un puerto de conmutador extensible estableciendo el miembro IsExcluded de la estructura NDIS_SWITCH_PORT_DESTINATION del puerto de destino en un valor de uno.
Nota Si la extensión excluye la entrega del paquete a todos sus puertos de destino, la extensión debe quitar el paquete completando la indicación de recepción del paquete.
Si la extensión excluye la entrega a uno o todos los puertos de destino de un paquete, debe hacer lo siguiente:
La extensión debe llamar a UpdateNetBufferListDestinations para confirmar estos cambios en los datos OOB del paquete.
La extensión debe llamar a ReportFilteredNetBufferLists. Cuando se llama a esta función, la interfaz de conmutador extensible incrementa los contadores y registra eventos para el paquete excluido. La extensión debe realizar esta llamada antes de reenviar el paquete en la ruta de acceso de datos del conmutador extensible desde la que obtuvo el paquete.
Del mismo modo, si la extensión completa la solicitud de envío de paquetes o indicación para excluir la entrega a todos los puertos del paquete, también debe llamar a ReportFilteredNetBufferLists.
Nota La extensión puede crear una lista vinculada de estructuras de NET_BUFFER_LIST para paquetes que la extensión está excluyendo. Cuando la extensión llama a ReportFilteredNetBufferLists, establece el parámetro NetBufferLists en un puntero a la lista vinculada.
Para obtener más información sobre las rutas de acceso de datos de entrada y salida extensibles del conmutador, consulte Ruta de acceso de datos de conmutador extensible de Hyper-V.