Verwenden der virtuellen Switch-Filterung
Übersicht über die virtuelle Switch-Filterung
Die virtuelle Switch-Filterung wird in Windows 8 und höheren Versionen von Windows unterstützt.
Diese WFP-Funktion ermöglicht das Filtern nach Feldern des MAC-Headers, des IP-Headers und der oberen Protokollports sowie nach virtuellen Switch-spezifischen Feldern wie dem virtuellen Port (VPort) und der Kennung der virtuellen Maschine (VM-ID). Diese Ebenen werden pro Paket für alle Pakete aufgerufen, die den virtuellen Switch durchlaufen. Auf diese Ebenen wird über einen Virtuellen Switch-Erweiterungsfilter zugegriffen – ein Typ des LWF-Treibers (NDIS Lightweight Filter).
Ein Callout-Treiber ruft die Funktion FwpsvSwitchEventsSubscribe0 auf, um Rückruf-Einstiegspunkte für virtuelle Switch-Layer-Ereignisse zu registrieren.
Die Einstiegspunkte für die Rückrufbenachrichtigungsfunktionen werden in einer FWPS_VSWITCH_EVENT_DISPATCH_TABLE0-Struktur angegeben. Die verfügbaren Rückruffunktionen umfassen:
- 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
Die FWPS_VSWITCH_EVENT_TYPE-Aufzählung definiert die Werte für den eventType-Parameter der Benachrichtigungsfunktionen für virtuelle Switche.
Der Callout-Treiber muss schließlich FwpsvSwitchEventsUnsubscribe0 aufrufen, um die Systemressourcen freizugeben.
Wenn ein Callout-Treiber STATUS_PENDING von einer WFP-Benachrichtigungsfunktion zurückgibt, gibt WFP STATUS_PENDING an den OID-Anforderungshandler zurück. Der Popuptreiber muss die FwpsvSwitchNotifyComplete0-Funktion aufrufen, um den ausstehenden Vorgang abzuschließen. Nach dem FwpsvSwitchNotifyComplete0-Aufruf ruft WFP die NdisFOidRequestComplete-Funktion auf, um das OID für den virtuellen Switch abzuschließen.
Rückrufe sollten WFP-Filter nicht synchron im Kontext der Benachrichtigungsfunktionen hinzufügen oder löschen. Wenn die Benachrichtigungsfunktion außerdem zulässt, dass der Rückruf STATUS_PENDING zurückgibt, und der Callout STATUS_PENDING zurückgibt, sollte der Callout keine WFP-Filter hinzufügen oder löschen, bevor die Benachrichtigung abgeschlossen ist.
WFP Virtual Switch Filter Layer und Felder
Zu den Laufzeitfilterungsebenenbezeichnern für die Filterung virtueller Switches gehören:
- 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
Zu den Datenfeldbezeichnern für die Filterung virtueller Switches gehören:
- 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
Leitfaden für WFP Virtual Switch Callout Writers
Port 0 Datenverkehr
Bei Beschriftungen für virtuelle WFP-Switches ist der Datenverkehr von Port 0 (die Standardport-ID) vertrauenswürdig und sollte nicht gefiltert werden. Dies liegt daran, dass der Datenverkehr über Port 0 aus anderen Erweiterungen im Treiberstapel stammt und somit vom Datenpfad als privilegierte und vertrauenswürdig behandelt wird. Virtuelle Switch-Erweiterungen verwenden Port 0 sparsam, beispielsweise beim Senden eines Steuerpakets, das von keiner der zugrunde liegenden Erweiterungen gefiltert und abgelehnt werden sollte. Weitere Informationen zur Änderung des erweiterbaren Switch-Quellports in Hyper-V finden Sie unter Ändern der Extensible Switch Source Port Data eines Pakets.
Callout-Übereinstimmungsregeln
Beim Definieren einer Übereinstimmungsregel zum Filtern sollten virtuelle Switch-Callouts die MAC-Adresse nicht als Vergleichsgrundlage verwenden. MAC-Adressen können zur Laufzeit geändert werden, und einige Ports generieren möglicherweise Datenverkehr von mehreren MAC-Adressen. Stattdessen sollten Callouts eine dauerhaftere Übereinstimmungsregel wie die NIC-ID verwenden, die sich nicht ändert.
I/O-Virtualisierung (IOV) und WFP-Koexistenz
WFP kann nicht auf einem IOV-Switch aktiviert werden und wird vom Betriebssystem blockiert, wenn versucht wird, es zu aktivieren.
Aktivieren oder Deaktivieren von WFP
Installationsprogramme für WFP-Callouts für virtuelle Switches sollten den aktivierten Status der WFP-Erweiterung nicht ändern. Das heißt, sie sollten WFP selbst weder aktivieren noch deaktivieren.