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.
W tym temacie opisano, jak Hyper-V rozszerzenia przełącznika rozszerzalnego klonują lub duplikują pakiety i wprowadzają je do ścieżki danych przełącznika rozszerzalnego. Aby uzyskać więcej informacji na temat klonowania pakietów, zobacz Cloned NET_BUFFER_LIST Structures.
Uwaga Ta strona zakłada, że jesteś zaznajomiony z informacjami i diagramami zawartymi w Przeglądzie rozłącznego przełącznika Hyper-V oraz Przekazywania hybrydowego.
Uwaga W interfejsie rozszerzalnego przełącznika sterowniki filtrów NDIS są znane jako rozszerzenia przełącznika rozszerzalnego , a stos sterowników jest znany jako rozszerzalny stos sterowników przełącznika. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Hyper-V Rozszerzalne rozszerzenia przełącznika.
Moduły rozszerzalnego przełącznika filtracji i przekazywania mogą wprowadzać sklonowane pakiety do ścieżki danych przychodzących lub wychodzących w rozszerzalnym przełączniku, postępując zgodnie z następującymi wytycznymi:
Rozszerzenie musi najpierw przydzielić NET_BUFFER_LIST strukturę dla sklonowanego pakietu. Rozszerzenie musi następnie skopiować dane pakietu z oryginalnego pakietu do sklonowanego pakietu. Aby uzyskać więcej informacji na temat klonowania pakietów, zobacz Pochodne struktury NET_BUFFER_LIST.
Po przydzieleniu struktury NET_BUFFER_LIST, rozszerzenie musi wywołać funkcję obsługi AllocateNetBufferListForwardingContext, aby przydzielić kontekst przekazywania rozszerzalnego przełącznika dla pakietu.
Kontekst przekazywania znajduje się w danych poza pasmem (OOB) pakietu. Zawiera informacje przekazywania dla pakietu, takie jak port źródłowy i tablica jednego lub większej liczby portów docelowych.
Aby uzyskać więcej informacji na temat kontekstu przekazywania, zobacz Hyper-V Rozszerzalny Kontekst Przekazywania Przełącznika.
Rozszerzenie musi skopiować dane OOB, w tym istniejący port źródłowy, z oryginalnego pakietu do sklonowanego pakietu, wywołując CopyNetBufferListInfo. Jeśli rozszerzenie planuje wstrzyknąć pakiet do ścieżki danych przychodzących, musi również skopiować porty docelowe z danych OOB oryginalnego pakietu.
Podczas kopiowania danych OOB rozszerzenie musi postępować zgodnie z następującymi wytycznymi:
Jeśli rozszerzenie filtrowania planuje wstrzyknąć pakiet do ścieżki danych przychodzących, musi wywołać CopyNetBufferListInfo z flagą NDIS_SWITCH_COPY_NBL_INFO_FLAGS_PRESERVE_DESTINATIONS nieokreśloną. Powoduje to, że porty docelowe oryginalnego pakietu nie są kopiowane do sklonowanych pakietów. Gdy rozszerzenie filtrowania wprowadza ten pakiet do ścieżki danych wejściowych, porty docelowe zostaną dodane do pakietu za pomocą podstawowego rozszerzenia przekazywania (jeśli jest włączone w stosie sterownika) lub miniportu na krawędzi przełącznika rozszerzalnego.
Jeśli rozszerzenie filtrowania planuje wstrzyknąć pakiet do ścieżki danych wychodzących, musi wywołać CopyNetBufferListInfo z flagą NDIS_SWITCH_COPY_NBL_INFO_FLAGS_PRESERVE_DESTINATIONS. Powoduje to skopiowanie portów docelowych oryginalnego pakietu do sklonowanych pakietów.
Jeśli rozszerzenie filtrowania klonuje lub duplikuje pakiet uzyskany ze ścieżki danych wychodzącej, może zmienić porty docelowe pakietu po wywołaniu CopyNetBufferListInfo z określoną flagą NDIS_SWITCH_COPY_NBL_INFO_FLAGS_PRESERVE_DESTINATIONS. Aby uzyskać więcej informacji na temat tej procedury, zobacz Modyfikowanie rozszerzalnych danych portu źródłowego przełącznika pakietu.
Jeśli rozszerzenie przekazywania klonuje lub duplikuje pakiet uzyskany ze ścieżki danych wejściowej, musi przypisać nowe porty docelowe dla pakietu, zanim prześle pakiet do ścieżki danych wejściowej. Aby uzyskać więcej informacji na temat tej procedury, zobacz Dodawanie rozszerzalnych danych portów docelowych przełącznika do pakietu.
Po wywołaniu rozszerzenia CopyNetBufferListInfo, pakiet otrzyma te same informacje o porcie źródłowym, które były zawarte w oryginalnym pakiecie.
Rozszerzenie może wywoływać SetNetBufferListSource, aby zmienić informacje o porcie źródłowym w danych poza pasmem (OOB).
Rozszerzenie może chcieć, aby pakiet był traktowany tak, jakby pochodził z określonego portu. Dzięki temu zasady dla tego portu są stosowane do pakietu. Rozszerzenie wywołuje SetNetBufferListSource, aby zmienić port źródłowy pakietu.
Mogą jednak wystąpić sytuacje, w których rozszerzenie może chcieć przypisać identyfikator portu źródłowego pakietu do NDIS_SWITCH_DEFAULT_PORT_ID. Na przykład rozszerzenie może chcieć ustawić identyfikator portu źródłowego na NDIS_SWITCH_DEFAULT_PORT_ID dla zastrzeżonych pakietów kontrolnych wysyłanych do urządzenia w sieci zewnętrznej.
W standardowej ścieżce danych NDIS nierozszerzalne dane OOB przełącznika często mają różne wartości w zależności od tego, czy pakiet jest traktowany jako wysyłanie, czy odbieranie. Na przykład dane NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO OOB są połączeniem struktur specyficznych dla wysyłania i odbioru.
W rozszerzalnej ścieżce danych przełącznika wszystkie pakiety przechodzą przez stos sterowników rozszerzeń w miarę wysyłania i odbierania. W związku z tym dane OOB przełącznika nie rozszerzalnego w strukturze NET_BUFFER_LIST pakietu będą mieć format wysyłania lub odbierania przez czas trwania przepływu przez stos sterowników.
Format tych danych OOB zależy od źródłowego rozszerzalnego portu przełącznika, z którego pakiet dotarł do rozszerzalnego przełącznika. Jeśli port źródłowy jest połączony z zewnętrzną kartą sieciową, dane OOB przełącznika nie rozszerzalnego będą mieć format odbioru. W przypadku innych portów te dane OOB będą w formacie wysyłkowym.
Informacje o porcie źródłowym są przechowywane w unii NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO w danych OOB struktury NET_BUFFER_LIST pakietu. Rozszerzenie uzyskuje dane przy użyciu makra NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL.
Uwaga Jeśli rozszerzenie sklonuje strukturę NET_BUFFER_LIST pakietu, należy uwzględnić niedodawalne dane OOB przełącznika, zwłaszcza gdy dodaje się lub modyfikuje dane OOB. Rozszerzenie może wywołać CopyNetBufferListInfo, aby skopiować wszystkie dane OOB z pakietu źródłowego do sklonowanego pakietu. Ta funkcja będzie utrzymywać format wysyłania lub odbierania OOB podczas kopiowania danych do pakietu.
Gdy rozszerzenie sklonuje pakiet, sklonowane dane pakietu znajdują się w lokalnej lub zaufanej pamięci w nadrzędnym systemie operacyjnym partycji Hyper-V. Nie można uzyskać dostępu do tej pamięci przez partycję podrzędną. W związku z tym jest uważany za "bezpieczny" od niezsynchronizowanych aktualizacji przez system operacyjny gościa, który działa w tej partycji.
Po sklonowaniu oryginalnego pakietu, rozszerzenie musi uzyskać unię NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO w sklonowanym pakiecie, używając makra NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL. Rozszerzenie musi ustawić element członkowski IsPacketDataSafe na TRUE. Określa to, że wszystkie dane pakietów znajdują się w zaufanej pamięci.
Rozszerzenia filtrowania i przesyłania dalej muszą być zgodne z tymi wytycznymi dotyczącymi wstrzykiwania sklonowanych pakietów do ścieżki danych wejściowych lub wyjściowych.
Rozszerzenie musi wywołać NdisFSendNetBufferLists, aby wprowadzić sklonowany pakiet do ścieżki przychodzącej danych. Rozszerzenie musi ustawić SendFlags parametr z odpowiednimi rozszerzalnymi ustawieniami flagi przełącznika. Aby uzyskać więcej informacji o tych ustawieniach flag, zobacz Hyper-V Przełączniki rozszerzalne flagi wysyłania i odbierania.
Gdy usługa NDIS wywołuje funkcję FilterSendNetBufferListsComplete rozszerzenia w celu ukończenia żądania wysyłania sklonowanego pakietu, rozszerzenie musi wywołać FreeNetBufferListForwardingContext, aby zwolnić przydzielony kontekst przekazywania. Rozszerzenie musi to zrobić przed zwolnieniem lub ponownym użyciem struktury NET_BUFFER_LIST pakietu.
Uwaga Rozszerzenie musi wstrzyknąć sklonowany pakiet do ścieżki danych przychodzących, jeśli modyfikuje dane pakietu lub port źródłowy dla pakietu uzyskanego ze ścieżki danych wychodzących. Należy również wstrzyknąć sklonowany pakiet do ścieżki danych przychodzącego, jeśli porty docelowe pakietu nie są zachowywane.
Rozszerzenie musi wywołać NdisFIndicateReceiveNetBufferLists, aby wstrzyknąć sklonowany pakiet do ścieżki danych wychodzących. Rozszerzenie musi ustawić parametr ReceiveFlags z odpowiednimi rozszerzalnymi ustawieniami flagi przełącznika.
Gdy usługa NDIS wywołuje funkcję FilterReturnNetBufferLists w celu zakończenia przyjmowania żądania sklonowanego pakietu, rozszerzenie musi wywołać funkcję FreeNetBufferListForwardingContext przed zwolnieniem lub ponownym użyciem struktury NET_BUFFER_LIST dla pakietu.
Uwaga Przed wywołaniem rozszerzenia przesyłania dalej NdisFIndicateReceiveNetBufferLists, musi określić sklonowane porty docelowe pakietu i dodać te dane do danych OOB pakietu.
Jeśli rozszerzenie sklonuje strukturę NET_BUFFER_LIST pakietu, musi zachować własność struktury NET_BUFFER_LIST oryginalnego pakietu do momentu ukończenia sklonowanego żądania wysyłania lub odbierania pakietu. Rozszerzenie musi używać składowej ParentNetBufferList sklonowanego pakietu w strukturze NET_BUFFER_LIST, aby połączyć ją ze strukturą NET_BUFFER_LIST oryginalnego pakietu.
Uwaga w NDIS 6.30 (Windows Server 2012), rozszerzenie może użyć członu ParentNetBufferList, aby połączyć z oryginalnym pakietem, ale nie jest to wymagane. W systemie NDIS 6.40 (Windows Server 2012 R2) lub nowszym rozszerzenie jest wymagane do użycia elementu członkowskiego ParentNetBufferList, aby połączyć się z oryginalnym pakietem.
Po zakończeniu sklonowanego żądania wysyłania lub odbierania pakietu rozszerzenie musi ukończyć żądanie wysyłania lub odbierania oryginalnego pakietu.
Uwaga Jeśli rozszerzenie sklonowało strukturę NET_BUFFER_LIST pakietu, może ukończyć żądanie wysyłania lub odbierania oryginalnego pakietu po tym, jak został sklonowany.
Jeśli rozszerzenie sklonuje pakiet, może ukończyć żądanie wysyłania lub odbierania oryginalnego pakietu, gdy tylko zostanie sklonowany.
Jeśli rozszerzenie przekazywania lub filtrowania uzyskuje pakiet w ścieżce danych wychodzących, nie może wstrzyknąć sklonowanej wersji pakietu w tej ścieżce danych, jeśli rozszerzenie zmodyfikowało dane pakietu lub zmieniło port źródłowy. Jednak rozszerzenie może wprowadzić te pakiety do ścieżki wejściowej danych. Dzięki temu pakiet może być prawidłowo przekazywany i filtrowany przez rozszerzalną ścieżkę danych przełącznika.
Uwaga Rozszerzenia filtrowania mogą wprowadzać tylko sklonowane pakiety do ścieżki danych przychodzących, jeśli porty docelowe pakietu nie są zachowywane.
Załóżmy na przykład, że pakiet z wieloma portami docelowymi został uzyskany w rozszerzonej ścieżce danych wychodzących przełącznika. Jeśli jeden port docelowy wymaga specjalnej obsługi, takiej jak hermetyzacja danych, rozszerzenie przekazywania lub filtrowania obsługuje to, wykonując następujące kroki:
Wyklucz dostarczanie pakietów do portu, który wymaga specjalnej obsługi. Rozszerzenie dokonuje tego, ustawiając element członkowski IsExcluded struktury NDIS_SWITCH_PORT_DESTINATION portu docelowego na wartość jeden. Aby uzyskać więcej informacji na temat tej procedury, zobacz Wykluczanie dostarczania pakietów do rozszerzalnych portów docelowych przełącznika.
Sklonuj oryginalny pakiet i wykonaj wymaganą obsługę danych pakietu.
Uwaga Rozszerzenie filtrowania nie może dodać portu docelowego dla sklonowanego pakietu. Te dane zostaną dodane później przez rozszerzenie przekazujące lub krawędź miniportu przełącznika rozszerzalnego.
Przekaż oryginalny pakiet na ścieżce danych wychodzących, wywołując NdisMIndicateReceiveNetBufferLists.
Wstrzyknij sklonowany pakiet na ścieżce danych ruchu przychodzącego, wywołując NdisFSendNetBufferLists.
Aby uzyskać więcej informacji na temat ścieżek danych przychodzących i wychodzących rozszerzalnego przełącznika, zobacz Hyper-V ścieżki danych rozszerzalnego przełącznika.
Uwaga Przechwytywanie rozszerzeń nie może kopiować ruchu sieciowego. Mogą jednak inicjować ruch pakietów. Aby uzyskać więcej informacji, zobacz pochodzenie ruchu pakietów.