Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Karta sieciowa wskazuje odebrany pakiet w kolejce tylko wtedy, gdy przejdzie wszystkie testy pól filtru dla filtru ustawionego w tej kolejce. Aby uzyskać więcej informacji na temat testów filtrów, zobacz operacje filtrowania VMQ.
Jeśli sterownik protokołu nadrzędnego ustawia flagę NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION w Flags elementu struktury NDIS_RECEIVE_QUEUE_PARAMETERS, sterownik miniportu nie może mieszać struktur NET_BUFFER_LIST dla innych kolejek odbierania ze strukturami NET_BUFFER_LIST dla tej kolejki w jednym wywołaniu funkcji NdisMIndicateReceiveNetBufferLists. Ponadto sterownik musi ustawić flagę NDIS_RECEIVE_FLAGS_SINGLE_QUEUE w parametrze ReceiveFlags funkcji NdisMIndicateReceiveNetBufferLists.
Jeśli NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION nie został ustawiony, sterowniki miniportu mogą łączyć struktury NET_BUFFER_LIST pochodzące z ramek z różnych kolejek maszyn wirtualnych i sygnalizować je jednym wywołaniem do NdisMIndicateReceiveNetBufferLists. W tym przypadku wskazana lista połączona struktur NET_BUFFER_LIST nie musi być posortowana według numeru kolejki. NET_BUFFER_LIST struktury dla różnych kolejek nie muszą być grupowane.
Gdy sterownik protokołu ustawia NDIS_RETURN_FLAGS_SINGLE_QUEUE i zwraca bufor odbioru, wszystkie struktury NET_BUFFER_LIST w parametrze NetBufferLists funkcji NdisReturnNetBufferLists muszą należeć do tej samej kolejki maszyny wirtualnej. Jednak sterowniki protokołów nie muszą zwracać wszystkich struktur NET_BUFFER_LIST, które zostały wskazane w jednym wywołaniu do funkcji ProtocolReceiveNetBufferLists, w jednym wywołaniu do NdisReturnNetBufferLists. Ponadto zwracana lista może zawierać struktury NET_BUFFER_LIST z wielu wskaźników odbioru, jeśli należą do tej samej kolejki maszyny wirtualnej.
Sterowniki protokołu ustawiają bit NDIS_RETURN_FLAGS_SINGLE_QUEUE na parametrze ReturnFlags funkcji NdisReturnNetBufferLists, aby wskazać, że wszystkie zwrócone struktury NET_BUFFER_LIST należą do tej samej kolejki maszyny wirtualnej.
Sygnały odbierane przez VMQ muszą zawierać następujące informacje poza pasmem (OOB) w składowej NetBufferListInfo struktur NET_BUFFER_LIST.
Określ identyfikator kolejki w informacjach NetBufferListFilteringInfo.
Ustaw identyfikator filtru na zero w informacji NetBufferListFilteringInfo.
Informacje NetBufferListFilteringInfo są określone w strukturze NDIS_NET_BUFFER_LIST_FILTERING_INFO. Aby uzyskać dostęp do struktury NDIS_NET_BUFFER_LIST_FILTERING_INFO w danych NET_BUFFER_LIST OOB, sterownik NDIS wywołuje makro NET_BUFFER_LIST_INFO i określa NetBufferListFilteringInfo typ informacji.
Aby uzyskać bezpośredni dostęp do identyfikatora filtru i identyfikatora kolejki, użyj makr NET_BUFFER_LIST_RECEIVE_FILTER_ID i NET_BUFFER_LIST_RECEIVE_QUEUE_ID.
Wskaźniki odbioru VMQ muszą definiować informacje o pamięci współdzielonej w członku SharedMemoryInfo struktury NET_BUFFER.
Uwaga Gdy VMQ zostanie usunięty (na przykład podczas migracji na żywo maszyny wirtualnej), sterownik miniportu może otrzymać NBL, który zawiera nieprawidłową wartość QueueId. W takim przypadku miniport powinien zignorować nieprawidłowy identyfikator kolejki i zamiast tego użyć wartości 0 (kolejki domyślnej). QueueId znajduje się w części NetBufferListFilteringInfo danych OOB NBL i jest pobierany przy użyciu makra NET_BUFFER_LIST_RECEIVE_QUEUE_ID.
Aby wskazać, że wskaźnik NET_BUFFER_SHARED_MEMORY w SharedMemoryInfo jest prawidłowy, sterownik miniportu musi ustawić flagę NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID w parametrze ReceiveFlags funkcji NdisMIndicateReceiveNetBufferLists. Aby uzyskać więcej informacji na temat układu buforów pamięci udostępnionej w buforach odbioru VMQ, zobacz pamięć udostępniona w buforach odbioru.
Wskazanie odbioru musi zawierać następujące informacje w strukturze NET_BUFFER_SHARED_MEMORY.
NextSharedMemorySegment
Wskaźnik do następnej struktury NET_BUFFER_SHARED_MEMORY w liście połączonej zakończonej wartością NULLtakich struktur.
SharedMemoryHandle
Uchwyt pamięci udostępnionej NDIS, który NdisAllocateSharedMemory zwrócił.
SharedMemoryOffset
Przesunięcie (w bajtach) na początek danych od początku buforu pamięci udostępnionej.
SharedMemoryLength
Długość w bajtach segmentu pamięci udostępnionej.
Jeśli nadrzędny sterownik protokołu ustawił flagę NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED w Flags członka struktury NDIS_RECEIVE_QUEUE_PARAMETERS, każdy NET_BUFFER obejmuje:
Dwa MDL i odpowiadające im struktury SharedMemoryInfo.
Bufor post-lookahead z miejscem na wypełnienie.
W razie potrzeby sterownik protokołu kopiuje zawartość buforu lookahead do obszaru wypełniania. Jednak miejsce na wypełnienie musi istnieć nawet wtedy, gdy pakiet znajduje się całkowicie w buforze lookahead.
Jeśli sterownik nadrzędny nie ustawi flagi NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED, każda struktura NET_BUFFER zawiera pojedynczy MDL i jedną strukturę SharedMemoryInfo.
Liczba bajtów i przesunięcie bajtów w języku MDL oraz DataLength i DataOffset składowych w strukturze NET_BUFFER_DATA są ustawiane w taki sam sposób, jak dla sterowników, które nie używają vmQ. Elementy SharedMemoryLength i SharedMemoryOffset w strukturze SharedMemoryInfo można ustawić tylko raz podczas inicjalizacji. Sterownik miniportu nie musi aktualizować elementów członkowskich SharedMemoryLength i SharedMemoryOffset dla każdego odebranego pakietu, ponieważ nadrzędne sterowniki i NDIS mogą używać elementu członkowskiego NET_BUFFERDataLength i liczby bajtów MDL w celu określenia rozpoczęcia i rozmiaru pakietu.
Uwaga Począwszy od NDIS 6.30 i Windows Server 2012, dzielenie danych pakietów na oddzielne bufory wstępne (lookahead buffers) nie jest już obsługiwane. Nadrzędny sterownik protokołu nie ustawi flagi NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED.