Uso del filtrado de conmutadores virtuales
Información general sobre el filtrado de conmutadores virtuales
El filtrado de conmutadores virtuales se admite en Windows 8 y versiones posteriores de Windows.
Esta característica de WFP permite filtrar por campos del encabezado MAC, el encabezado IP y los puertos de protocolo superior, así como por campos específicos del conmutador virtual, como el puerto virtual (VPort) y el identificador de máquina virtual (ID de máquina virtual). Estas capas se invocan por paquete para todos los paquetes que atraviesan el conmutador virtual. Se accede a estas capas desde un filtro de extensión de conmutador virtual, un tipo de controlador de filtro ligero NDIS (LWF).
Un controlador de llamada llama a la función FwpsvSwitchEventsSubscribe0 para registrar puntos de entrada de devolución de llamada para eventos de capa de conmutador virtual.
Los puntos de entrada de las funciones de notificación de devolución de llamada se especifican en una estructura FWPS_VSWITCH_EVENT_DISPATCH_TABLE0. Las funciones de devolución de llamada disponibles incluyen:
- FWPS_VSWITCH_FILTER_ENGINE_REORDER_CALLBACK0
- FWPS_VSWITCH_INTERFACE_EVENT_CALLBACK0
- FWPS_VSWITCH_LIFETIME_EVENT_CALLBACK0
- FWPS_VSWITCH_POLICY_EVENT_CALLBACK0
- FWPS_VSWITCH_PORT_EVENT_CALLBACK0
- FWPS_VSWITCH_RUNTIME_STATE_RESTORE_CALLBACK0
- FWPS_VSWITCH_RUNTIME_STATE_SAVE_CALLBACK0
La enumeración FWPS_VSWITCH_EVENT_TYPE define los valores del parámetro eventType de las funciones de notificación del conmutador virtual.
El controlador de llamada debe llamar finalmente a FwpsvSwitchEventsUnsubscribe0 para liberar los recursos del sistema.
Si un controlador de llamada devuelve STATUS_PENDING de una función de notificación de WFP, WFP devolverá STATUS_PENDING al controlador de solicitudes de OID. El controlador de llamada debe llamar a la función FwpsvSwitchNotifyComplete0 para completar la operación pendiente. Después de la llamada FwpsvSwitchNotifyComplete0, WFP llama a la función NdisFOidRequestComplete para completar el OID del conmutador virtual.
Las devoluciones de llamada no deben agregar ni eliminar filtros WFP de forma sincrónica en el contexto de las funciones de notificación. Además, si la función de notificación permite que la devolución de llamada devuelva STATUS_PENDING y la llamada devuelve STATUS_PENDING, la llamada no debe agregar ni eliminar filtros de WFP antes de completar la notificación.
Capa y campos de filtro de conmutador virtual de WFP
Los identificadores de la capa de filtrado en tiempo de ejecución para el filtrado de conmutadores virtuales incluyen:
- FWPS_LAYER_INGRESS_VSWITCH_ETHERNET
- FWPS_LAYER_EGRESS_VSWITCH_ETHERNET
- FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V4
- FWPS_LAYER_INGRESS_VSWITCH_TRANSPORT_V6
- FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V4
- FWPS_LAYER_EGRESS_VSWITCH_TRANSPORT_V6
Los identificadores de campo de datos para el filtrado de conmutadores virtuales incluyen:
- FWPS_FIELDS_EGRESS_VSWITCH_ETHERNET
- FWPS_FIELDS_EGRESS_VSWITCH_TRANSPORT_V4
- FWPS_FIELDS_EGRESS_VSWITCH_TRANSPORT_V6
- FWPS_FIELDS_INGRESS_VSWITCH_ETHERNET
- FWPS_FIELDS_INGRESS_VSWITCH_TRANSPORT_V4
- FWPS_FIELDS_INGRESS_VSWITCH_TRANSPORT_V6
Guía para escritores de llamadas de conmutador virtual de WFP
Tráfico del puerto 0
En el caso de las llamadas de conmutador virtual de WFP, el tráfico del puerto 0 (el identificador de puerto predeterminado) es de confianza y no debe filtrarse. Esto se debe a que, por lo general, el tráfico a través del puerto 0 se origina en otras extensiones de la pila de controladores y, por lo tanto, la ruta de acceso de datos se trata como con privilegios y de confianza. Las extensiones de conmutador virtual usarán con moderación el puerto 0 para situaciones como la creación de un paquete de control, que no debe filtrarse ni rechazarse por ninguna extensión subyacente. Para obtener más información sobre la modificación del puerto de origen del conmutador extensible de Hyper-V, consulte Modificación de los datos de puerto de origen de conmutador extensible de un paquete.
Reglas de coincidencia de llamadas
Al definir una regla de coincidencia para el filtrado, las llamadas de conmutador virtual no deben usar la dirección MAC como base para la comparación. Las direcciones MAC pueden cambiar en tiempo de ejecución y algunos puertos pueden generar tráfico a partir de varias direcciones MAC. En su lugar, las llamadas deben usar una regla de coincidencia más duradera, como el identificador de NIC, que no cambiará.
Virtualización de E/S (IOV) y coexistencia de WFP
WFP no se puede habilitar en un conmutador IOV y está bloqueado por el sistema operativo si se intenta habilitarlo.
Habilitación o deshabilitación de WFP
Los instaladores para llamadas de conmutador virtual de WFP no deben modificar el estado habilitado para la extensión de WFP; es decir, no deben habilitar ni deshabilitar el propio WFP.