Udostępnij za pośrednictwem


Ustawianie filtru odbierania na porcie wirtualnym

Po utworzeniu portu wirtualnego (VPort) na przełączniku karty sieciowej, nakładające się sterowniki mogą ustawić filtry odbierania na VPort. Tylko sterownik, który utworzył port VPort, może ustawić filtr odbierania dla tego VPortu.

Ten temat zawiera następujące informacje:

Ustawienie Filtru Odbierania na VPort

Używanie flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO

Korzystanie z identyfikatora filtru

Obsługa filtrów odbierania w VPort

Aby uzyskać więcej informacji na temat tworzenia portu VPort, zobacz Tworzenie portu wirtualnego.

Uwaga Ponieważ domyślny VPort zawsze istnieje i nigdy nie jest jawnie tworzony, każdy nadrzędny sterownik może ustawić filtr odbiorczy na domyślnym VPort. Sterowniki nakładające się nie są właścicielem domyślnego VPort. W związku z tym wszystkie sterowniki protokołu powiązane z kartą sieciową mogą używać domyślnego portu VPort. Domyślny port VPort ma wartość identyfikatora NDIS_DEFAULT_VPORT_ID.

Ustawianie filtru odbierania w programie VPort

Aby ustawić i skonfigurować filtr w programie VPort, nadmierny sterownik wystawia żądanie metody identyfikatora obiektu (OID) OID_RECEIVE_FILTER_SET_FILTER. Członek InformationBuffer struktury NDIS_OID_REQUEST początkowo zawiera wskaźnik do struktury NDIS_RECEIVE_FILTER_PARAMETERS.

Zanim nadrzędny sterownik wystawi żądanie tej metody OID, musi zainicjować strukturę NDIS_RECEIVE_FILTER_PARAMETERS. Sterownik musi ustawić elementy członkowskie tej struktury w następujący sposób:

  • Element członkowski FilterType musi być ustawiony na wartość wyliczenia NDIS_RECEIVE_FILTER_TYPE.

    Uwaga Począwszy od NDIS 6.30, obsługiwane są tylko typy filtrów NdisReceiveFilterTypeVMQueue dla interfejsu wirtualizacji we/wy pojedynczego korzenia (SR-IOV).

  • Element QueueId musi być ustawiony na wartość NDIS_DEFAULT_RECEIVE_QUEUE_ID.

  • Element VPortId musi być ustawiony na identyfikator skojarzony z VPort. Sterownik nadrzędny uzyskuje identyfikator VPort za pomocą jednego z następujących sposobów:

  • Członek FilterId musi być ustawiony na NDIS_DEFAULT_RECEIVE_FILTER_ID.

    Uwaga NDIS przypisuje unikatowy identyfikator filtru w tym elemencie, zanim przekaże żądanie OID do sterownika miniportu na potrzeby przetwarzania.

  • FieldParametersArrayOffset, FieldParametersArrayNumElementsi FieldParametersArrayElementSize składowych struktury NDIS_RECEIVE_FILTER_PARAMETERS należy ustawić odpowiednio, aby zdefiniować tablicę struktur NDIS_RECEIVE_FILTER_FIELD_PARAMETERS. Każda struktura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS w tablicy ustawia kryterium testu filtru dla jednego pola w nagłówku sieci.

    Dla interfejsu SR-IOV zdefiniowano następujące parametry testu pola:

    • Adres kontroli dostępu do nośnika docelowego (MAC) w pakiecie jest równy określonemu adresowi MAC.

    • Identyfikator wirtualnej sieci LAN (VLAN) w pakiecie jest równy określonemu identyfikatorowi sieci VLAN.

Po pomyślnym wykonaniu żądania metody OID InformationBuffer element struktury NDIS_OID_REQUEST zawiera wskaźnik do struktury NDIS_RECEIVE_FILTER_PARAMETERS z nowym identyfikatorem filtru.

Używanie flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO

Flagi elementu członkowskiego struktury NDIS_RECEIVE_FILTER_FIELD_PARAMETERS określają akcje do wykonania dla filtru odbierania. Do flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO mają zastosowanie następujące kwestie:

  • Jeśli flaga NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO jest ustawiona w elemencie Flags, karta sieciowa musi wskazywać tylko odebrane pakiety zgodne ze wszystkimi następującymi kryteriami testowymi:

    • Pakiet z pasującym adresem MAC.

    • Pakiet, który nie ma tagu sieci VLAN lub ma identyfikator sieci VLAN o wartości zero.

    Jeśli ustawiona jest flaga NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO, karta sieciowa nie może sygnalizować pakietów, które mają pasujący adres MAC i niezerowy identyfikator VLAN.

    Uwaga Jeśli stos wirtualizacji ustawia filtr adresu MAC i żaden filtr identyfikatora sieci VLAN nie jest skonfigurowany przez żądanie zestawu OID_RECEIVE_FILTER_SET_FILTER, przełącznik ustawia również flagę NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO.

  • Począwszy od NDIS 6.30, jeśli flaga NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO nie jest ustawiona i nie ma filtru identyfikatora sieci VLAN skonfigurowanego przez żądanie metody OID_RECEIVE_FILTER_SET_FILTER, sterownik miniportu musi wykonać jedną z następujących czynności:

    • Sterownik miniportu musi zwrócić stan błędu dla żądania metody OID_RECEIVE_FILTER_SET_FILTER.

    • Sterownik miniportu musi skonfigurować kartę sieciową do sprawdzania i filtrowania określonych pól adresów MAC. Jeśli tag sieci VLAN znajduje się w odebranym pakiecie, karta sieciowa musi usunąć go z danych pakietu. Sterownik miniportu musi umieścić tag sieci VLAN w NDIS_NET_BUFFER_LIST_8021Q_INFO, który jest skojarzony ze strukturą NET_BUFFER_LIST pakietu.

  • Jeśli sterownik protokołu ustawia filtr adresu MAC i filtr identyfikatora sieci VLAN z żądaniem metody OID_RECEIVE_FILTER_SET_FILTER, nie ustawia flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO w jednym z pól filtru. W takim przypadku sterownik miniportu powinien wskazywać pakiety zgodne zarówno z określonym adresem MAC, jak i identyfikatorem sieci VLAN. Oznacza to, że sterownik miniportu nie powinien wskazywać pakietów z pasującym adresem MAC, które mają zerowy identyfikator sieci VLAN lub są pakietami bez tagów.

Korzystanie z identyfikatora filtru

NDIS przypisuje identyfikator filtru w FilterId członie struktury NDIS_RECEIVE_FILTER_PARAMETERS i przekazuje żądanie metody OID OID_RECEIVE_FILTER_SET_FILTER do bazowego sterownika miniportu. Każdy filtr ustawiony na VPort ma unikatowy identyfikator filtru dla karty sieciowej. Oznacza to, że identyfikatory filtrów nie są duplikowane w różnych kolejkach, którymi zarządza karta sieciowa.

Sterownik overlying musi użyć identyfikatora filtru, który NDIS zapewnia w kolejnych żądaniach OID, aby zmienić parametry filtru lub zwolnić filtr.

Gdy usługa NDIS otrzymuje żądanie OID, aby ustawić filtr na VPort, weryfikuje parametry filtru. Po przydzieleniu niezbędnych zasobów i identyfikatora filtru, NDIS przesyła żądanie OID do bazowej karty sieciowej. Jeśli karta sieciowa może pomyślnie przydzielić niezbędne zasoby oprogramowania i sprzętu dla filtru, kończy żądanie OID za pomocą NDIS_STATUS_SUCCESS.

Sterownik miniportu musi zachować identyfikatory filtrów dla przydzielonych filtrów odbiorczych. NDIS używa identyfikatora filtru przy późniejszych żądaniach OID, aby zmienić parametry filtru odbierania lub wyczyścić filtr odbierania. Aby uzyskać więcej informacji na temat zmieniania parametrów i czyszczenia filtrów, zobacz Uzyskiwanie i aktualizowanie parametrów kolejki maszyny wirtualnej i Czyszczenie filtru kolejki maszyny wirtualnej (VMQ).

Obsługa filtrów odbiorczych w programie VPort

Sterownik miniportu programuje kartę sieciową na podstawie filtrów w następujący sposób:

  • Wszystkie parametry testu pola dla określonego filtru muszą być zgodne, aby przypisać pakiet do programu VPort.

  • Wiele filtrów można ustawić w porcie wirtualnym.

  • Pakiety muszą być przypisane do VPort, jeśli którykolwiek z filtrów zostanie spełniony.

Karta sieciowa łączy wyniki ze wszystkich testów pól za pomocą operacji logicznego AND i. Oznacza to, że jeśli jakikolwiek test pola uwzględniony w tablicy struktur NDIS_RECEIVE_FILTER_FIELD_PARAMETERS zakończy się niepowodzeniem, pakiet sieciowy nie spełnia określonego kryterium filtru.

Gdy karta sieciowa testuje odebrany pakiet pod kątem tych kryteriów filtrowania, musi ignorować wszystkie pola w pakiecie, dla których nie określono kryteriów testu.