Udostępnij przez


Stany i operacje kolejki

Dla każdej kolejki karta sieciowa musi obsługiwać następujący zestaw stanów operacyjnych:

niezdefiniowane
Kolejka nie jest przydzielona. Aby przydzielić kolejkę, sterownik warstwy wyższej wysyła żądanie OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE.

Przydzielone
Początkowym stanem kolejki jest stan Przydzielony. Gdy kolejka znajduje się w stanie przydzielonym, sterownik nadrzędny ustawia zazwyczaj filtry w kolejce za pomocą identyfikatora OID_RECEIVE_FILTER_SET_FILTER OID lub kończy alokację kolejki za pomocą żądania OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID.

zestaw
W stanie Ustaw kolejka ma co najmniej jeden filtr przydzielony, ale sterownik nadrzędny nie wysłał OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE.

uruchomiona
W stanie Uruchomiony kolejka ma ustawione filtry, alokacja kolejki jest ukończona, a karta miniportu wskazuje pakiety odbierane dla tej kolejki.

Wstrzymano
W stanie Wstrzymana karta sieciowa nie wskazuje odebranych danych sieciowych dla kolejki. Nie ustawiono filtrów w kolejce przed żądaniem identyfikatora OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE lub wszystkie filtry ustawione w kolejce zostały wyczyszczone za pomocą żądania identyfikatora OID OID_RECEIVE_FILTER_CLEAR_FILTER.

Zatrzymana usługa DMA
W stanie Zatrzymano DMA sterownik miniportu otrzymał żądanie OID_RECEIVE_FILTER_FREE_QUEUE. Kiedy DMA zostaje zatrzymane i sterownik zgłasza wskaźnik stanu zatrzymania DMA (z NDIS_STATUS_RECEIVE_QUEUE_STATE), sterownik przechodzi w stan zwalniania zasobów.

zwalnianie
W stanie Zwalnianie sterownik miniportu wykonuje operacje konieczne do zatrzymania operacji wysyłania i odbierania związanych z kolejką, a następnie zwalnia powiązane zasoby. Po zakończeniu wszystkich zaległych operacji odbioru kolejka zostaje usunięta, a kolejka staje się niezdefiniowana.

W poniższej tabeli nagłówki przedstawiają stany kolejki. Główne zdarzenia są wyświetlane w pierwszej kolumnie. Pozostałe wpisy w tabeli określają następny stan, w który kolejka wchodzi, gdy w stanie wystąpi zdarzenie. Puste wpisy reprezentują nieprawidłowe kombinacje zdarzeń/stanów.

Zdarzenie \ Stan Niezdefiniowane Przydzielone Ustawienie Bieganie Wstrzymano Zatrzymaj DMA Zwalnianie

OID_RECEIVE_FILTER_ALLOCATE_QUEUE — metoda (set)

Przydzielone

OID_RECEIVE_FILTER_QUEUE_PARAMETERS — żądanie metody (query)

Przydzielone

Ustawienie

Bieganie

Wstrzymano

OID_RECEIVE_FILTER_QUEUE_PARAMETERS — ustawienie żądania

Przydzielone

Ustawienie

Bieganie

Wstrzymano

OID_RECEIVE_FILTER_SET_FILTER — żądanie metody (ustawienie)

Ustawienie

Ustawienie

Bieganie

Bieganie

OID_RECEIVE_FILTER_CLEAR_FILTER — ustawienie żądania (ostatni filtr)

Przydzielone

Wstrzymano

OID_RECEIVE_FILTER_CLEAR_FILTER — ustawienie żądania (nie ostatniego filtru)

Ustawienie

Bieganie

OID_RECEIVE_FILTER_ENUM_FILTERS — metoda (żądanie)

Przydzielone

Ustawienie

Bieganie

Wstrzymano

OID_RECEIVE_FILTER_PARAMETERS – żądanie metody (zapytanie)

Ustawienie

Bieganie

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE — żądanie metody (set)

Wstrzymano

Bieganie

Odbieranie pakietu

Bieganie

OID_RECEIVE_FILTER_FREE_QUEUE ustawić żądanie

Zatrzymaj DMA

Zatrzymaj DMA

DMA jest zatrzymany i wskazanie statusu NDIS_STATUS_RECEIVE_QUEUE_STATE zostało wysłane (DMA prawdopodobnie został już zatrzymany w stanie Przydzielone lub Wstrzymane) Uwaga.

Zwalnianie

Wszystkie wskazania odbioru są kompletne, a zasoby kolejki są zwalniane

Niezdefiniowane

Nuta Zdarzenia wymienione w poprzedniej tabeli zawierają niektóre zdarzenia pomocnicze, które nie powodują zmiany stanu. Te zdarzenia pomocnicze znajdują się w tabeli, aby określić stany, w których te zdarzenia są prawidłowe.

Zdarzenia kolejki podstawowej są definiowane w następujący sposób:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE — żądanie metody (ustawienia)
Nadrzędny sterownik przydziela kolejkę. Aby uzyskać więcej informacji na temat przydzielania kolejek, zobacz Przydzielanie i zwalnianie kolejek maszyn wirtualnych.

OID_RECEIVE_FILTER_SET_FILTER — żądanie metody (ustawiania)
Sterownik nadrzędny ustawił filtr w kolejce. Jeśli nadrzędny sterownik nie wysłał OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, kolejka jest w stanie Ustawienia. W przeciwnym razie kolejka jest w stanie 'Działa'. Aby uzyskać więcej informacji na temat ustawiania filtrów w kolejkach, zobacz Ustawianie i czyszczenie filtrów VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER — ustawianie żądania
Nadrzędny sterownik usunął filtr w kolejce. Jeśli ostatni filtr został wyczyszczony w uruchomionej kolejce, można zatrzymać DMA; wskazania odbioru są zatrzymywane, a kolejka powinna zostać wyczyszczona z odebranych danych, jeśli takowe istnieją. Aby uzyskać więcej informacji na temat czyszczenia filtrów w kolejkach, zobacz Ustawianie i czyszczenie filtrów VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE — żądanie metody (ustawienie)
Nadrzędny sterownik dokonał alokacji kolejki. Jeśli w kolejce są ustawione filtry, jest w stanie Działania i może zostać rozpoczęte odbieranie wskazań. Aby uzyskać więcej informacji na temat zakończenia przydzielania kolejek, zobacz Przydzielanie i zwalnianie kolejek maszyn wirtualnych.

Odbieranie pakietu
Sterownik miniportu może wskazywać tylko pakiety odebrane dla kolejki, która znajduje się w stanie Działania. Aby uzyskać więcej informacji na temat wskazywania odebranych danych dla kolejek, zobacz VmQ Send and Receive Operations (Operacje wysyłania i odbierania maszyn wirtualnych VMQ).

OID_RECEIVE_FILTER_FREE_QUEUE ustawić żądanie.
Nadrzędny sterownik zwolnił kolejkę. Sterownik wykazuje status zatrzymania DMA (z NDIS_STATUS_RECEIVE_QUEUE_STATE), sterownik przechodzi w stan uwalniania zasobów. Gdy wszystkie zaległe wskazania odbioru zostaną ukończone, a zasoby kolejki zostaną zwolnione, kolejka staje się niezdefiniowana.