Festlegen eines Empfangsfilters für einen virtuellen Port
Nachdem ein virtueller Port (VPort) auf dem NIC-Switch des Netzwerkadapters erstellt wurde, können überlastende Treiber Empfangsfilter für den VPort festlegen. Nur der Treiber, der den VPort erstellt hat, kann einen Empfangsfilter für diesen VPort festlegen.
Dieses Thema enthält folgende Informationen:
Festlegen eines Empfangsfilters für einen VPort
Verwenden des NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flags
Verwenden des Filterbezeichners
Behandeln von Empfangsfiltern auf einem VPort
Weitere Informationen zum Erstellen eines VPorts finden Sie unter Erstellen eines virtuellen Ports.
Hinweis Da der Standard-VPort immer vorhanden ist und nie explizit erstellt wird, kann jeder überlastende Treiber einen Empfangsfilter für den Standard-VPort festlegen. Überlastende Treiber besitzen nicht den Standard-VPort. Daher können alle Protokolltreiber, die an einen Netzwerkadapter gebunden sind, den Standard-VPort verwenden. Der Standard-VPort weist den Bezeichnerwert NDIS_DEFAULT_VPORT_ID auf.
Festlegen eines Empfangsfilters für einen VPort
Um einen Filter für einen VPort festzulegen und zu konfigurieren, gibt ein übersteigender Treiber eine OID-Methodenanforderung (Object Identifier) von OID_RECEIVE_FILTER_SET_FILTER aus. Das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur enthält zunächst einen Zeiger auf eine NDIS_RECEIVE_FILTER_PARAMETERS-Struktur .
Bevor der überlastende Treiber diese OID-Methodenanforderung ausgibt, muss er eine NDIS_RECEIVE_FILTER_PARAMETERS-Struktur initialisieren. Der Treiber muss die Member dieser Struktur wie folgt festlegen:
Das FilterType-Element muss auf einen NDIS_RECEIVE_FILTER_TYPE Enumerationswert festgelegt werden.
Hinweis Ab NDIS 6.30 werden nur NdisReceiveFilterTypeVMQueue-Filtertypen für die SR-IOV-Schnittstelle (Single Root E/O Virtualization) unterstützt.
Das QueueId-Element muss auf NDIS_DEFAULT_RECEIVE_QUEUE_ID festgelegt werden.
Das VPortId-Element muss auf den Bezeichner festgelegt werden, der dem VPort zugeordnet ist. Der überlastende Treiber ruft den VPort-Bezeichner über eine der folgenden Methoden ab:
Aus einer vorherigen OID-Methodenanforderung von OID_NIC_SWITCH_CREATE_VPORT.
Aus einer vorherigen OID-Methodenanforderung von OID_NIC_SWITCH_ENUM_VPORTS.
Das FilterId-Element muss auf NDIS_DEFAULT_RECEIVE_FILTER_ID festgelegt werden.
Hinweis NDIS weist einen eindeutigen Filterbezeichner in diesem Member zu, bevor die OID-Anforderung zur Verarbeitung an den Miniporttreiber weitergeleitet wird.
Die Elemente FieldParametersArrayOffset, FieldParametersArrayNumElements und FieldParametersArrayElementSize der NDIS_RECEIVE_FILTER_PARAMETERS-Struktur müssen entsprechend festgelegt werden, um ein Array von NDIS_RECEIVE_FILTER_FIELD_PARAMETERS Strukturen zu definieren. Jede NDIS_RECEIVE_FILTER_FIELD_PARAMETERS Struktur im Array legt das Filtertestkriterium für ein Feld in einem Netzwerkheader fest.
Für die SR-IOV-Schnittstelle werden die folgenden Feldtestparameter definiert:
Die MAC-Adresse (Zielmedienzugriffssteuerung) im Paket entspricht der angegebenen MAC-Adresse.
Der VLAN-Bezeichner (Virtual LAN) im Paket entspricht dem angegebenen VLAN-Bezeichner.
Nach erfolgreicher Rückgabe der OID-Methodenanforderung enthält das InformationBuffer-Element der NDIS_OID_REQUEST-Struktur einen Zeiger auf eine NDIS_RECEIVE_FILTER_PARAMETERS-Struktur mit einem neuen Filterbezeichner.
Verwenden des NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flags
Das Flags-Element der NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Struktur gibt Aktionen an, die für den Empfangsfilter ausgeführt werden sollen. Die folgenden Punkte gelten für das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag :
Wenn das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag im Flags-Element festgelegt ist, muss der Netzwerkadapter nur empfangene Pakete angeben, die allen folgenden Testkriterien entsprechen:
Ein Paket mit einer übereinstimmenden MAC-Adresse.
Ein Paket, das kein VLAN-Tag oder einen VLAN-Bezeichner von 0 aufweist.
Wenn das Flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO festgelegt ist, darf der Netzwerkadapter keine Pakete angeben, die eine übereinstimmende MAC-Adresse und einen nichtzero-VLAN-Bezeichner aufweisen.
Hinweis Wenn der Virtualisierungsstapel den MAC-Adressfilter festlegt und kein VLAN-Bezeichnerfilter durch die OID_RECEIVE_FILTER_SET_FILTER Set-Anforderung konfiguriert wird, legt der Switch auch das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag fest.
Wenn ab NDIS 6.30 das flag NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO nicht festgelegt ist und kein VLAN-Bezeichnerfilter durch die OID_RECEIVE_FILTER_SET_FILTER-Methodenanforderung konfiguriert ist, muss der Miniporttreiber eine der folgenden Aktionen ausführen:
Der Miniporttreiber muss eine fehlerhafte status für die OID_RECEIVE_FILTER_SET_FILTER-Methodenanforderung zurückgeben.
Der Miniporttreiber muss den Netzwerkadapter konfigurieren, um die angegebenen MAC-Adressfelder zu überprüfen und zu filtern. Wenn im empfangenen Paket ein VLAN-Tag vorhanden ist, muss es vom Netzwerkadapter aus den Paketdaten entfernt werden. Der Miniporttreiber muss das VLAN-Tag in einem NDIS_NET_BUFFER_LIST_8021Q_INFO platzieren, das der NET_BUFFER_LIST Struktur des Pakets zugeordnet ist.
Wenn ein Protokolltreiber einen MAC-Adressfilter und einen VLAN-Bezeichnerfilter mit der OID_RECEIVE_FILTER_SET_FILTER-Methodenanforderung festlegt, wird das NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO-Flag in keinem der Filterfelder festgelegt. In diesem Fall sollte der Miniporttreiber Pakete angeben, die sowohl der angegebenen MAC-Adresse als auch dem VLAN-Bezeichner entsprechen. Das heißt, der Miniporttreiber sollte keine Pakete mit einer übereinstimmenden MAC-Adresse angeben, die einen VLAN-Bezeichner null aufweisen oder nicht markierte Pakete sind.
Verwenden des Filterbezeichners
NDIS weist einen Filterbezeichner im FilterId-Member der NDIS_RECEIVE_FILTER_PARAMETERS-Struktur zu und übergibt die OID-Methodenanforderung von OID_RECEIVE_FILTER_SET_FILTER an den zugrunde liegenden Miniporttreiber. Jeder Filter, der für einen VPort festgelegt ist, verfügt über einen eindeutigen Filterbezeichner für einen Netzwerkadapter. Das heißt, die Filterbezeichner werden nicht in verschiedenen Warteschlangen dupliziert, die der Netzwerkadapter verwaltet.
Der überlastende Treiber muss den Filterbezeichner verwenden, den NDIS in späteren OID-Anforderungen bereitstellt, um die Filterparameter zu ändern oder einen Filter freizusetzen.
Wenn NDIS eine OID-Anforderung empfängt, um einen Filter für einen VPort festzulegen, überprüft es die Filterparameter. Nachdem NDIS die erforderlichen Ressourcen und den Filterbezeichner zugewiesen hat, sendet es die OID-Anforderung an den zugrunde liegenden Netzwerkadapter. Wenn der Netzwerkadapter die erforderlichen Software- und Hardwareressourcen für den Filter erfolgreich zuordnen kann, schließt er die OID-Anforderung mit NDIS_STATUS_SUCCESS ab.
Der Miniporttreiber muss die Filterbezeichner für die zugeordneten Empfangsfilter beibehalten. NDIS verwendet den Filterbezeichner eines Filters mit späteren OID-Anforderungen, um die Empfangsfilterparameter zu ändern oder den Empfangsfilter zu löschen. Weitere Informationen zum Ändern von Parametern und Löschen von Filtern finden Sie unter Abrufen und Aktualisieren von VM-Warteschlangenparametern und Löschen eines VMQ-Filters.
Behandeln von Empfangsfiltern auf einem VPort
Der Miniporttreiber programmiert den Netzwerkadapter basierend auf den Filtern wie folgt:
Alle Feldtestparameter für einen bestimmten Filter müssen übereinstimmen, um dem VPort ein Paket zuzuweisen.
Auf einem VPort können mehrere Filter festgelegt werden.
Pakete müssen dem VPort zugewiesen werden, wenn einer der Filter erfolgreich ist.
Der Netzwerkadapter kombiniert die Ergebnisse aller Feldtests mit einem logischen AND-Vorgang . Das heißt, wenn ein Feldtest, der im Array der NDIS_RECEIVE_FILTER_FIELD_PARAMETERS-Strukturen enthalten ist, fehlschlägt, erfüllt das Netzwerkpaket das angegebene Filterkriterium nicht.
Wenn ein Netzwerkadapter ein empfangenes Paket anhand dieser Filterkriterien testet, muss er alle Felder im Paket ignorieren, für die keine Testkriterien angegeben wurden.