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 ekstensje przekazywania przełącznika Hyper-V mogą określać dostarczanie pakietów do jednego lub więcej portów docelowych. Rozszerzenia te mogą również przekazywać pakiety do poszczególnych fizycznych kart sieciowych powiązanych z rozszerzalną zewnętrzną kartą sieciową przełącznika.
Uwaga Tylko rozszerzenie przekazujące lub sam przełącznik może przekazywać pakiety do portów przełącznika rozszerzalnego lub poszczególnych kart sieciowych.
Na poniższej ilustracji przedstawiono ścieżkę danych dla ruchu pakietów przez rozszerzalny stos sterowników przełącznika dla sieci NDIS 6.40 (Windows Server 2012 R2) i nowszych. Obie figury pokazują również ścieżkę danych dla ruchu pakietów do lub z kart sieciowych, które są podłączone do portów przełącznika rozszerzalnego.
Na poniższej ilustracji przedstawiono ścieżkę danych dla ruchu pakietów przez rozszerzony stos sterowników przełącznika sieciowego dla NDIS 6.30 (Windows Server 2012).
Każdy rozszerzalny port docelowy przełącznika jest określony przez element NDIS_SWITCH_PORT_DESTINATION w strukturze NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Ta tablica jest zawarta w kontekście przekazywania w trybie połączeń poza pasmem (OOB) struktury NET_BUFFER_LIST pakietu. Więcej informacji na temat tego kontekstu można znaleźć w kontekście przekazywania rozszerzalnego przełącznika Hyper-V.
Jeśli rozszerzenie przekazywania pakietów jest powiązane i włączone w stosie sterowników dla rozszerzalnego przełącznika, jest odpowiedzialne za określenie portów docelowych dla każdego pakietu uzyskanego ze ścieżki danych wejściowych przełącznika rozszerzalnego, chyba że pakiet jest pakietem NVGRE. Aby uzyskać więcej informacji na temat tej ścieżki danych, zobacz Omówienie ścieżki danych przełącznika rozszerzalnego Hyper-V. Aby uzyskać więcej informacji na temat pakietów NVGRE, zobacz Hybrydowe Przekazywanie.
Uwaga Jeśli rozszerzenie przekazywania nie jest powiązane lub włączone w stosie sterowników, rozszerzalny przełącznik określa porty docelowe dla pakietów, które uzyskuje ze ścieżki danych przychodzących.
Rozszerzenie przekazywania musi postępować zgodnie z tymi wytycznymi, gdy określa porty docelowe dla pakietu otrzymanego na ścieżce danych wejściowych.
Rozszerzenie musi zainicjować strukturę NDIS_SWITCH_PORT_DESTINATION w strukturze NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY z informacjami o porcie docelowym.
Jeśli port docelowy nie jest połączony z zewnętrzną kartą sieciową, rozszerzenie musi ustawić element członkowski NicIndex struktury NDIS_SWITCH_PORT_DESTINATION na NDIS_SWITCH_DEFAULT_NIC_INDEX.
Jeśli port docelowy jest połączony z kartą sieciową zewnętrznego przełącznika rozszerzalnego, rozszerzenie może określić indeks podstawowej fizycznej karty sieciowej, aby przekazać żądanie wysyłania dalej. Rozszerzenie to robi, ustawiając element NicIndex na wartość niezerową NDIS_SWITCH_NIC_INDEX karty sieciowej docelowej, która jest powiązana z kartą sieciową zewnętrzną.
Aby uzyskać więcej informacji, zobacz Przekazywanie pakietów do fizycznych kart sieciowych.
Dodatkowy moduł musi dodawać docelowe porty sieciowe do danych OOB pakietu tylko dla portów z aktywnymi połączeniami adaptera sieciowego. Jeśli rozszerzenie przekazało żądanie OID_SWITCH_NIC_DISCONNECT, nie może dodać portu docelowego skojarzonego z odłączonej karty sieciowej.
Aby zwiększyć wydajność, rozszerzenie musi dodawać tylko docelowe porty, które są prawidłowe do dostarczania pakietów. W takim przypadku rozszerzenie musi ustawić element członkowski IsExcluded w strukturze NDIS_SWITCH_PORT_DESTINATION portu docelowego na FALSE.
Aby zachować dane wirtualnej sieci lokalnej (VLAN) 802.1Q w pakiecie przed dostarczeniem go do portu, rozszerzenie ustawia członek PreserveVLAN na TRUE.
Aby usunąć dane wirtualnej sieci lokalnej (VLAN) 802.1Q w pakiecie przed dostarczeniem go do portu, rozszerzenie ustawia element członkowski PreserveVLAN na FALSE.
Aby zachować dane priorytetu 802.1Q w pakiecie przed dostarczeniem ich do portu, rozszerzenie ustawia członek PreservePriority na TRUE.
Aby usunąć dane priorytetu 802.1Q z pakietu przed dostarczeniem go do portu, rozszerzenie ustawia opcję PreservePriority na FALSE.
Jeśli rozszerzenie przekazujące dodaje wiele portów docelowych dla pakietu, należy wykonać następujące kroki:
Rozszerzenie najpierw uzyskuje dostęp do struktury NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO pakietu przy użyciu makra NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL. Następnie rozszerzenie odczytuje pole NumAvailableDestinations, aby określić, ile nieużywanych elementów portu docelowego jest dostępnych w tablicy portów docelowych. Jeśli rozszerzenie wymaga więcej portów docelowych niż są dostępne w tablicy, musi wywołać funkcję GrowNetBufferListDestinations, aby przydzielić miejsce dla dodatkowych portów docelowych w tablicy.
Gdy rozszerzenie wywołuje GrowNetBufferListDestinations, ustawia parametr NumberOfNewDestinations na liczbę nowych portów docelowych do dodania do pakietu.
Rozszerzenie ustawia również parametr NetBufferLists jako wskaźnik do struktury NET_BUFFER_LIST pakietu.
Uwaga Jeśli w tablicy są dostępne porty docelowe, rozszerzenie nie powinno wywoływać GrowNetBufferListDestinations.
Jeśli funkcja GrowNetBufferListDestinations zostanie pomyślnie zwrócona, dodano dodatkowe porty docelowe na końcu tablicy docelowej w strukturze NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Wskaźnik do tej struktury jest zwracany w parametrze Destinations.
Uwaga Jeśli funkcja GrowNetBufferListDestinations nie może przydzielić żądanej liczby portów docelowych, zwraca NDIS_STATUS_RESOURCES.
Rozszerzenie określa nowe elementy portów docelowych w strukturze NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Rozszerzenie inicjuje każdą nową strukturę portu docelowego jako strukturę NDIS_SWITCH_PORT_DESTINATION.
Rozszerzenie inicjuje nowe porty docelowe w tablicy, zaczynając od przesunięcia NumDestinations. NumDestinations jest członkiem struktury NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY.
Po zakończeniu dodawania lub modyfikowania elementów portów docelowych rozszerzenie musi wywołać UpdateNetBufferListDestinations, aby zatwierdzić te zmiany.
Jeśli rozszerzenie dodaje pojedynczy port docelowy dla pakietu, należy wykonać następujące kroki:
Rozszerzenie inicjuje informacje o porcie docelowym pakietu w strukturze NDIS_SWITCH_PORT_DESTINATION przydzielonej przez rozszerzenie.
Rozszerzenie wywołuje AddNetBufferListDestination, aby zatwierdzić zmiany w strukturze NET_BUFFER_LIST dla pakietu. Rozszerzenie przekazuje adres struktury NDIS_SWITCH_PORT_DESTINATION w parametrze Destination.
Uwaga Rozszerzenie nie powinno wywoływać funkcji UpdateNetBufferListDestinations w celu zatwierdzenia zmian w pakiecie mającego tylko jeden docelowy port.
Gdy rozszerzenie przekazujące wywołuje AddNetBufferListDestination lub UpdateNetBufferListDestinations, aby zatwierdzić zmiany portów docelowych, rozszerzalny interfejs przełącznika nie usunie rozszerzalnych portów przełącznika określonych w elementach struktury NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Po zakończeniu operacji wysyłania lub odbierania pakietu interfejs jest bezpłatny do usunięcia portu, jeśli jest to konieczne.
Uwaga Po tym, jak rozszerzenie przekazywania zatwierdzi zmiany dotyczące portów docelowych w kontekście przekazywania, nie można już usunąć portów docelowych, a zmieniać można tylko członka IsExcluded w strukturze portu docelowego NDIS_SWITCH_PORT_DESTINATION. Aby uzyskać więcej informacji, zobacz Wykluczanie dostarczania pakietów do portów docelowych przełącznika rozszerzalnego.
Rozszerzenie przekazujące musi synchronizować obsługę zapytań w ramach ustawień identyfikatora obiektu (OID) OID_SWITCH_NIC_DISCONNECT ze swoim kodem, który dodaje porty docelowe do rozłączonej karty sieciowej.
Jeśli rozszerzenie przekazywania FilterOidRequest jest wywoływane dla żądania OID_SWITCH_NIC_DISCONNECT, rozszerzenie może wykonać jedną z następujących czynności:
Jeśli rozszerzenie o nazwie NdisFOidRequest ma przekazać to żądanie OID, nie może określić portu odłączonej od sieci karty jako portu docelowego pakietu.
Uwaga Jeśli jedynym portem docelowym pakietu jest odłączona karta sieciowa, rozszerzenie musi usunąć pakiet.
Rozszerzenie może zwrócić wartość NDIS_STATUS_PENDING, aby asynchronicznie wykonać żądanie. Dzięki temu rozszerzenie może dodać port z odłączonej karty sieciowej jako port docelowy pakietu. To pozwala rozszerzeniu również wywoływać AddNetBufferListDestination lub UpdateNetBufferListDestinations i zakończyć dodawanie portów docelowych do pakietu.
Rozszerzenie może chcieć to zrobić w przypadku pakietów, które musi przekazać do portu, zanim zostanie on zburzony.
Uwaga Jeśli rozszerzenie zwróci NDIS_STATUS_PENDING, może również wywołać ReferenceSwitchPort, aby zwiększać licznik odwołania dla portu z odłączonym adapterem sieciowym. Jednak rozszerzenie nie może przekazać żądania OID, dopóki nie wywoła DereferenceSwitchPort, aby zmniejszyć licznik odwołań dla portu.
Jeśli liczba portów docelowych wynosi zero, rozszerzenie przekazujące musi wywołać NdisMSendNetBufferListsComplete, aby usunąć pakiet. Rozszerzenie musi również wywołać ReportFilteredNetBufferLists, aby powiadomić rozszerzalny interfejs przełącznika o porzuconym pakiecie.
Uwaga Jeśli rozszerzenie przekazujące uzyskało połączoną listę struktur NET_BUFFER_LIST dla wielu pakietów ze ścieżki danych przychodzących, powinna utworzyć oddzielną listę porzuconych pakietów. Dzięki temu rozszerzenie może wywoływać NdisMSendNetBufferListsComplete i ReportFilteredNetBufferLists tylko raz.
Jeśli liczba portów docelowych jest większa niż zero, rozszerzenie przekazywania musi wywołać NdisFSendNetBufferLists, aby przesłać pakiet przez ścieżkę danych ruchu przychodzącego do miniportu na krawędzi przełącznika rozszerzalnego.
Uwaga Jeśli rozszerzenie przekazujące uzyskało połączoną listę struktur NET_BUFFER_LIST dla wielu pakietów ze ścieżki danych przychodzących, powinna utworzyć oddzielną listę pakietów przekazywanych. Dzięki temu rozszerzenie może wywoływać NdisFSendNetBufferLists tylko raz, aby przekazać listę pakietów. Ponadto rozszerzenie powinno prowadzić oddzielne listy do przekazywania pakietów, które mają takie same porty docelowe. Aby uzyskać więcej informacji, zobacz Hyper-V Flagi Wysyłania i Odbierania Przełącznika Rozszerzalnego.