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 de NET_BUFFER_LIST del paquete. Para obtener más información sobre este contexto, consulte Contexto de reenvío de conmutadores extensibles de Hyper-V.
Nota En esta página se asume que está familiarizado con la información y los diagramas de Información general sobre el conmutador extensible Hyper-V y 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, vea Hyper-V Extensiones de conmutador extensible.
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 descartar el paquete al completar la solicitud o indicación del paquete. 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 datos de salida del conmutador extensible, la extensión completa la indicación de recepción del paquete 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 logra al establecer 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 cuya IsExcluded valor se establece 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 envíe el paquete por la ruta de salida de datos.
Una vez que la extensión ha modificado el valor de IsExcluded del puerto de destino, debe reenviar el paquete en la ruta de acceso de datos de salida a las extensiones superpuestas. Sin embargo, si el valor de 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 reenviarlo.
Nota Después de que una extensión haya establecido el valor de IsExcluded del puerto de destino en uno, las extensiones superpuestas en la ruta de acceso de datos de salida no pueden cambiar este valor a cero.
Nota Extensiones de captura no pueden 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 trayectoria de datos de entrada del conmutador extensible, las extensiones de filtrado y de reenvío pueden excluir la entrega de paquetes en función de los criterios de política para el puerto de origen o los datos de un paquete.
La información del puerto de origen se almacena en la unión NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO dentro de los datos OOB de la estructura NET_BUFFER_LIST del paquete. La extensión obtiene los datos usando 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 descartar el paquete al completar la solicitud de envío del paquete.
En la ruta de acceso de datos de entrada del conmutador extensible, 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 si no agrega 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 el camino de datos de salida del conmutador extensible, las extensiones de filtrado y reenvío pueden excluir la entrega del paquete en función de los criterios de política. Por ejemplo, las extensiones de filtrado pueden excluir la entrega de paquetes en función de los criterios de directiva para el puerto de origen o los puertos 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 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 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 conmutador extensible estableciendo el campo 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 de 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 los eventos del paquete excluido. Antes de reenviar el paquete, la extensión debe realizar esta llamada en el tránsito de datos del switch extensible desde donde se 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 enlazada.
Para obtener más información sobre las rutas de acceso de datos de ingreso y egreso del conmutador extensible, consulte Hyper-V Extensible Switch Data Path.