Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po przydzieleniu kolejki odbierania, sterowniki nadrzędne mogą ustawiać filtry w tej kolejce. Tylko sterownik, który przydzielił kolejkę odbierania, może ustawić filtr w tej kolejce.
Uwaga Ponieważ domyślna kolejka odbierania (NDIS_DEFAULT_RECEIVE_QUEUE_ID) zawsze istnieje, nadmierne sterowniki zawsze mogą ustawić filtr odbierania w kolejce domyślnej. Sterowniki nadrzędne nie posiadają kolejki domyślnej. W związku z tym wszystkie sterowniki protokołu powiązane z kartą sieciową mogą używać kolejki domyślnej.
Ustawianie filtru w kolejce odbierania
Aby ustawić filtr w kolejce odbierania z początkowym zestawem parametrów konfiguracji, nadrzędny sterownik wystawia żądanie metodą identyfikatora obiektu (OID) OID_RECEIVE_FILTER_SET_FILTER. Element członkowski InformationBuffer struktury NDIS_OID_REQUEST początkowo zawiera wskaźnik do struktury NDIS_RECEIVE_FILTER_PARAMETERS. Po zakończeniu zapytania metody OID, element InformationBuffer struktury NDIS_OID_REQUEST zawiera wskaźnik do struktury NDIS_RECEIVE_FILTER_PARAMETERS z nowym identyfikatorem filtru.
Nadrzędny sterownik inicjuje strukturę NDIS_RECEIVE_FILTER_PARAMETERS z następującymi parametrami konfiguracji filtru dla kolejki odbiorczej.
Typ filtru, który jest określony za pomocą wartości wyliczeniowej NDIS_RECEIVE_FILTER_TYPE.
Uwaga Począwszy od NDIS 6.20, obsługiwane są tylko typy filtrów NdisReceiveFilterTypeVMQueue dla interfejsu kolejki maszyn wirtualnych (VMQ).
Identyfikator kolejki.
Jeden lub więcej parametrów testu polowego, które sformatowane są jako struktury NDIS_RECEIVE_FILTER_FIELD_PARAMETERS. Dla maszyny wirtualnej VMQ 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.
Struktura NDIS_RECEIVE_FILTER_PARAMETERS jest używana z identyfikatorem OID OID_RECEIVE_FILTER_PARAMETERS i identyfikatorem OID OID_RECEIVE_FILTER_SET_FILTER do określenia parametrów konfiguracji filtru.
FieldParametersArrayOffset, FieldParametersArrayNumElementsi FieldParametersArrayElementSize członkowie struktury NDIS_RECEIVE_FILTER_PARAMETERS definiują tablicę struktur NDIS_RECEIVE_FILTER_FIELD_PARAMETERS. Każda struktura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS w tablicy ustawia kryterium testowania filtru dla jednego pola w nagłówku sieci.
Flags element członkowski struktury NDIS_RECEIVE_FILTER_FIELD_PARAMETERS określa akcje, które mają być wykonywane dla filtru odbierania. Do flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO mają zastosowanie następujące punkty:
Jeśli flaga NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO jest ustawiona w Flags elementu struktury NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, karta sieciowa musi informować tylko o odebranych pakietach spełniających wszystkie poniższe kryteria testowe:
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 ustawiono flagę NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO, karta sieciowa nie powinna wskazywać pakietów, które mają zgodny adres MAC i niezerowy identyfikator sieci VLAN.
Uwaga Jeśli przełącznik rozszerzalny Hyper-V ustawia filtr adresu MAC i nie skonfigurowano filtru identyfikatora sieci VLAN w OID_RECEIVE_FILTER_SET_FILTER, przełącznik ustawia również flagę NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO.
Jeśli flaga NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO nie jest ustawiona i nie ma filtru identyfikatora VLAN skonfigurowanego przez żądanie ustawienia OID OID_RECEIVE_FILTER_SET_FILTER, sterownik miniportu musi wykonać jedną z następujących czynności:
Jeśli sterownik miniportu obsługuje NDIS 6.20, musi zwrócić stan niepowodzenia dla żądania identyfikatora OID OID_RECEIVE_FILTER_SET_FILTER.
Jeśli sterownik miniportu obsługuje NDIS 6.30 lub nowsze wersje NDIS, 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 powiązany z NET_BUFFER_LIST strukturą pakietu.
Jeśli sterownik protokołu ustawia filtr adresu MAC i filtr identyfikatora sieci VLAN za pomocą identyfikatora OID_RECEIVE_FILTER_SET_FILTER, nie ustawia flagi NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO w żadnym 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 składnika struktury NDIS_RECEIVE_FILTER_PARAMETERS i przekazuje żądanie metody OID OID_RECEIVE_FILTER_SET_FILTER do sterownika miniportu warstwy dolnej. Każdy filtr ustawiony w kolejce odbiorczej ma unikalny identyfikator filtru dla karty sieciowej. Oznacza to, że identyfikatory filtrów nie są duplikowane w różnych kolejkach zarządzanych przez kartę sieciową.
Sterownik nakładający się musi użyć identyfikatora filtru, który NDIS udostępnia w kolejnych żądaniach OID, na przykład, aby zmodyfikować parametry filtru lub zwolnić filtr.
Gdy usługa NDIS odbiera żądanie identyfikatora OID w celu ustawienia filtru w kolejce odbierania, 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, finalizuje żądanie OID za pomocą NDIS_STATUS_SUCCESS.
Sterownik miniportu musi zachować identyfikatory filtrów dla przydzielonych filtrów odbiorczych. NDIS używa identyfikatora filtru w późniejszych żądaniach OID w celu zmiany parametrów filtru odbierania lub wyczyszczenia filtru 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 VMQ.
Obsługa filtru w kolejce odbierania
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 w celu przypisania pakietu do kolejki.
W kolejce można ustawić wiele filtrów.
Pakiety muszą być przyporządkowane do kolejki odbierania, jeśli którykolwiek z filtrów przejdzie.
Adapter sieciowy łączy wyniki ze wszystkich testów w polu za pomocą operacji logicznej 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 zignorować wszystkie pola w pakiecie, które nie mają określonych kryteriów filtrowania.
Odbieranie pakietów z kolejki odbierania
Po tym jak sterownik miniportu odbierze żądanie OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE i ustawi filtry na kolejce, kolejka znajduje się w stanie Uruchomiona. Gdy kolejka jest w tym stanie, sterownik miniportu może wskazywać pakiety w kolejce. Aby uzyskać więcej informacji na temat stanów kolejki, zobacz Queue States and Operations.
Jeśli sterownik miniportu otrzymał żądanie OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID dla kolejki, ale nie ma żadnych filtrów ustawionych w kolejce, sterownik miniportu nie powinien sygnalizować odbieranych pakietów w tej kolejce. W takim przypadku, gdy sterownik miniportu otrzymuje żądanie OID dla kolejki OID_RECEIVE_FILTER_SET_FILTER, i prawdopodobnie zanim ukończy to żądanie OID, może wskazywać pakiety w tej kolejce. Jeśli sterownik miniportu wskazuje pakiety w kolejce podczas przetwarzania żądania identyfikatora OID OID_RECEIVE_FILTER_SET_FILTER, sterownik miniportu musi zakończyć żądanie OID_RECEIVE_FILTER_SET_FILTER, które ma kod zwrotny NDIS_STATUS_SUCCESS.