Sdílet prostřednictvím


Stavy front a operace

Pro každou frontu musí síťový adaptér podporovat následující sadu provozních stavů:

nedefinováno
Fronta není přidělena. K přidělení fronty odešle nadřazený ovladač požadavek OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID.

přiděleno
Stav Přiděleno je počáteční stav fronty. Pokud je fronta ve stavu Přiděleno, nadřazený ovladač obvykle nastaví filtry ve frontě s OID_RECEIVE_FILTER_SET_FILTER identifikátorem OID nebo dokončí přidělení fronty pomocí požadavku OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE identifikátoru.

sada
Ve stavu Set má fronta přidělen alespoň jeden filtr, ale nadřazený ovladač neodeslal OID OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE.

Běh
Ve stavu Spuštěno má fronta nastavené filtry, přidělení fronty je dokončené a adaptér miniportu indikuje příjem paketů pro frontu.

Pozastaveno
Ve stavu Pozastaveno síťový adaptér nezoznačuje přijatá síťová data pro frontu. Buď nebyly ve frontě nastaveny žádné filtry před požadavkem OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, nebo všechny filtry nastavené ve frontě byly odstraněny pomocí požadavku OID_RECEIVE_FILTER_CLEAR_FILTER OID.

DMA zastaveno
Ve stavu DMA zastaveno přijal ovladač miniportu požadavek OID_RECEIVE_FILTER_FREE_QUEUE identifikátoru. Když se DMA zastaví a ovladač vydá indikátor stavu DMA-stop (s NDIS_STATUS_RECEIVE_QUEUE_STATE), ovladač přejde do stavu Uvolnění.

Uvolnění
Ve stavu Uvolnění miniportový ovladač dokončí operace nezbytné k zastavení odesílání a příjímání ve frontě a uvolní s nimi spojené prostředky. Po dokončení všech nevyřízených indikátorů příjmu se fronta odstraní a fronta je nedefinovaná.

V následující tabulce nadpisy představují stavy fronty. Hlavní události jsou uvedeny v prvním sloupci. Zbývající položky v tabulce určují další stav, do kterého fronta přejde po události, která nastane ve stavu. Prázdné položky představují neplatné kombinace událostí a stavů.

Událost \ Stav Nedefinovaný Přidělený Nastavit Běhání Pozastaveno Zastavte DMA Osvobozující

OID_RECEIVE_FILTER_ALLOCATE_QUEUE – metoda (set)

Přidělený

OID_RECEIVE_FILTER_QUEUE_PARAMETERS – požadavek metody (dotazu)

Přidělený

Nastavit

Běhání

Pozastaveno

OID_RECEIVE_FILTER_QUEUE_PARAMETERS – nastavení požadavku

Přidělený

Nastavit

Běhání

Pozastaveno

OID_RECEIVE_FILTER_SET_FILTER – metoda (nastavení) žádost

Nastavit

Nastavit

Běhání

Běhání

OID_RECEIVE_FILTER_CLEAR_FILTER – nastavení požadavku (poslední filtr)

Přidělený

Pozastaveno

OID_RECEIVE_FILTER_CLEAR_FILTER – požadavek na nastavení (není poslední filtr)

Nastavit

Běhání

OID_RECEIVE_FILTER_ENUM_FILTERS – metoda (požadavek dotazu)

Přidělený

Nastavit

Běhání

Pozastaveno

OID_RECEIVE_FILTER_PARAMETERS – požadavek metody (dotaz)

Nastavit

Běhání

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE – požadavek metody (set)

Pozastaveno

Běhání

Příjem paketů

Běhání

OID_RECEIVE_FILTER_FREE_QUEUE nastavení požadavku

Zastavte DMA

Zastavte DMA

DMA je zastavené a byla odeslána indikace stavu NDIS_STATUS_RECEIVE_QUEUE_STATE (přičemž DMA už pravděpodobně bylo zastaveno ve stavu přidělené nebo pozastavené).

Osvobozující

Všechny indikátory příjmu jsou dokončené a prostředky fronty se uvolní.

Nedefinovaný

Poznámka Události uvedené v předchozí tabulce zahrnují některé sekundární události, které nemají za následek změnu stavu. Tyto sekundární události jsou zahrnuty v tabulce a určují stavy, ve kterých jsou tyto události platné.

Události primární fronty jsou definovány takto:

OID_RECEIVE_FILTER_ALLOCATE_QUEUE – požadavek metody (set)
Nadřazený ovladač přidělil frontu. Další informace o přidělování front najdete v tématu Přidělování a uvolnění front virtuálních počítačů.

OID_RECEIVE_FILTER_SET_FILTER – metoda (nastavení) žádosti
Nadřízený ovladač nastavil filtr ve frontě. Pokud nadřazený ovladač neodeslal OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID, fronta je ve stavu „Set“. V opačném případě je fronta ve stavu Běží. Další informace o nastavení filtrů ve frontách najdete v tématu Nastavení a vymazání filtrů VMQ.

OID_RECEIVE_FILTER_CLEAR_FILTER – nastavení požadavku
Překrývající ovladač odstranil filtr ve frontě. Pokud byl poslední filtr vymazán ve spuštěné frontě, může být DMA zastaveno; jsou zastaveny indikace příjmu a fronta by měla být vymazána z přijatých dat, pokud nějaká existují. Další informace o vymazání filtrů ve frontách naleznete v tématu Nastavení a vymazání filtrů VMQ.

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE – požadavek metody (set)
Nadřazený ovladač dokončil alokaci fronty. Pokud jsou ve frontě nastavené filtry, je ve stavu Spuštěno a může začít příjem signálů. Další informace o dokončení přidělování front najdete v tématu přidělování a uvolnění front virtuálních počítačů.

Přijmout paket
Ovladač miniportu může označit pouze příjem paketů pro frontu, která je ve stavu Běží. Další informace o označování přijatých dat pro fronty naleznete v tématu VMQ Send and Receive Operations.

OID_RECEIVE_FILTER_FREE_QUEUE nastavit požadavek.
Nadřazený ovladač uvolnil frontu. Ovladač vydá indikaci stavu zastavení DMA (s NDIS_STATUS_RECEIVE_QUEUE_STATE), ovladač přejde do stavu Uvolnění. Pokud jsou všechny nevyřízené indikace příjmu dokončené a prostředky fronty jsou uvolněny, fronta není definována.