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.
Ogólne odciążanie segmentacji (GSO) łącznie reprezentuje duże odciążanie wysyłania (LSO) i odciążanie wysyłania UDP (USO).
Sterowniki klienta mogą odciążać segmentację pakietów TCP/UDP, które są większe niż maksymalna jednostka transmisji (MTU) nośnika sieciowego. Sterowniki muszą wskazywać tę możliwość w NetAdapterCx przy użyciu interfejsów API GSO.
Słowa kluczowe INF do kontrolowania GSO
NetAdapterCx sprawdza słowa kluczowe rejestru i honoruje je podczas włączania aktywnych funkcji odciążania. Kierowca nie musi podejmować żadnych dalszych działań.
Słowa kluczowe LSO określone w Używanie wartości rejestru do włączania i wyłączania odciążania zadań można użyć do włączenia/wyłączenia odciążania LSO za pomocą ustawień klucza rejestru.
Słowa kluczowe USO określone w Odciążanie segmentacji UDP (USO) mogą służyć do włączania/wyłączania odciążania USO przy użyciu ustawienia klucza rejestru.
Wartości słowa kluczowego muszą być typu REG_SZ.
Konfigurowanie GSO
Sterowniki urządzeń klienckich najpierw informują o możliwościach GSO sprzętu podczas inicjowania karty sieciowej. Może to wystąpić w ramach EvtDevicePrepareHardware callbacku przed uruchomieniem adaptera sieciowego.
Aby skonfigurować GSO, sterownik klienta:
Przydziela strukturę NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES.
Wywołuje NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT, aby zainicjować strukturę.
Wywołuje NetAdapterOffloadSetGsoCapabilities, aby zarejestrować strukturę w NetAdapterCx.
Podczas wywołania NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT, sterownik klienta udostępnia wskaźnik do wywołania zwrotnego EVT_NET_ADAPTER_OFFLOAD_SET_GSO. System wywołuje ten callback później, gdy zmienią się aktywne możliwości odciążania.
Zasady wskazujące możliwości sprzętowe GSO
Do struktury NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES mają zastosowanie następujące reguły:
Sterownik musi ustawić Layer3Flags i Layer4Flags.
Jeśli karta sieciowa obsługuje LSO, sterownik musi wypełnić pole Layer4Flags flagą
NetAdapterOffloadLayer4FlagTcpWithoutOptionsTCP.Jeśli karta sieciowa obsługuje USO, sterownik musi wypełnić pole Layer4Flags flagą
NetAdapterOffloadLayer4FlagUdpUDP.MaximumOffloadSize i MinimumSegmentCount są polami obowiązkowymi.
Pole Layer4OffsetLimit jest opcjonalne. Jeśli system operacyjny wysyła pakiet z przesunięciem nagłówka większym niż określony limit, nie poprosi o wykonanie operacji GSO.
Pakiety IP/TCP bez opcji/rozszerzeń muszą być obsługiwane, jeśli obsługiwane są opcje/rozszerzenia.
W tym przykładzie pokazano, jak sterownik klienta może skonfigurować swoje możliwości odciążania sprzętowego.
VOID
MyAdapterSetOffloadCapabilities(
NETADAPTER NetAdapter
)
{
// Configure the hardware's GSO offload capabilities
NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES gsoOffloadCapabilities;
auto const layer3Flags = NetAdapterOffloadLayer3FlagIPv4NoOptions |
NetAdapterOffloadLayer3FlagIPv4WithOptions |
NetAdapterOffloadLayer3FlagIPv6NoExtensions |
NetAdapterOffloadLayer3FlagIPv6WithExtensions;
auto const layer4Flags = NetAdapterOffloadLayer4FlagTcpNoOptions |
NetAdapterOffloadLayer4FlagTcpWithOptions;
NetAdapterOffloadLayer4FlagUdp;
NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT(
&gsoOffloadCapabilities,
layer3Flags,
layer4Flags,
MY_GSO_OFFLOAD_MAX_SIZE,
MY_GSO_OFFLOAD_MIN_SEGMENT_COUNT,
EvtAdapterOffloadSetGso);
gsoOffloadCapabilities.Layer4OffsetLimit = 127;
// Set the current GSO offload capabilities and register the callback for future changes in active capabilities
NetAdapterOffloadSetGsoCapabilities(NetAdapter, &gsoOffloadCapabilities);
}
Aktualizowanie odciążeń sprzętu
Jeśli stos TCP/IP lub sterownik wierzchniego protokołu żąda zmiany w aktywnych funkcjach karty sieciowej, NetAdapterCx wywołuje funkcję zwrotną sterownika klienta EVT_NET_ADAPTER_OFFLOAD_SET_GSO, która została zarejestrowana podczas inicjowania karty. W tej funkcji system dostarcza zaktualizowane możliwości w obiekcie NETOFFLOAD, które sterownik klienta pobiera, aby zaktualizować jego możliwości odciążania.
Sterowniki klienta mogą wywoływać następujące funkcje, aby określić, które odciążania są włączone:
- NetOffloadIsLsoIPv4Enabled
- NetOffloadIsLsoIPv6Enabled
- NetOffloadIsUsoIPv4Enabled
- NetOffloadIsUsoIPv6Enabled
W poniższym przykładzie pokazano, jak sterownik klienta może zaktualizować jego możliwości odciążania GSO:
VOID
MyEvtAdapterOffloadSetGso(
NETADAPTER NetAdapter,
NETOFFLOAD Offload
)
{
PMY_NET_ADAPTER_CONTEXT adapterContext = MyGetNetAdapterContext(NetAdapter);
// Store the updated information in the context
adapterContext->LSOv4 = NetOffloadIsLsoIPv4Enabled(Offload) ?
GsoOffloadEnabled : GsoOffloadDisabled;
adapterContext->LSOv6 = NetOffloadIsLsoIPv6Enabled(Offload) ?
GsoOffloadEnabled : GsoOffloadDisabled;
adapterContext->USOv4 = NetOffloadIsUsoIPv4Enabled(Offload) ?
GsoOffloadEnabled : GsoOffloadDisabled;
adapterContext->USOv6 = NetOffloadIsUsoIPv6Enabled(Offload) ?
GsoOffloadEnabled : GsoOffloadDisabled;
// Enable hardware checksum if LSO/USO is enabled
MyUpdateHardwareChecksum(adapterContext);
}