Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Algemene segmentatie-offload (GSO) vertegenwoordigt gezamenlijk LSO- (Large Send Offload) en UDP Send Offload (USO).
Clientstuurprogramma's kunnen de segmentatie van TCP/UDP-pakketten die groter zijn dan de maximale transmissie-eenheid (MTU) van het netwerkmedium offloaden. Stuurprogramma's moeten deze mogelijkheid aangeven voor NetAdapterCx met behulp van de GSO-API's.
INF-trefwoorden voor het beheren van GSO
NetAdapterCx controleert de registertrefwoorden en respecteert deze bij het inschakelen van de actieve offload-functionaliteiten. De bestuurder hoeft geen verdere actie te ondernemen.
De LSO-trefwoorden die zijn opgegeven in Registerwaarden gebruiken om taakoffloading in en uit te schakelen kunnen worden gebruikt om de LSO-offload in of uit te schakelen met een registerinstelling.
De USO-trefwoorden die zijn opgegeven in UDP Segmentation Offload (USO) kunnen worden gebruikt om de USO-offload in of uit te schakelen met een registersleutelinstelling.
De trefwoordwaarden moeten van het type REG_SZzijn.
GSO configureren
Clientstuurprogramma's adverteren eerst de GSO-mogelijkheden van hun hardware tijdens de initialisatie van de netadapter. Dit kan gebeuren binnen de EvtDevicePrepareHardware callback voordat men een netwerkadapter start.
Om GSO te configureren, moet het clientstuurprogramma:
Wijst een NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES structuur toe.
Roept NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT aan om de structuur te initialiseren.
Roept NetAdapterOffloadSetGsoCapabilities aan om de structuur te registreren bij NetAdapterCx.
Tijdens het aanroepen van NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT geeft het clientstuurprogramma een aanwijzer naar de EVT_NET_ADAPTER_OFFLOAD_SET_GSO callback. Het systeem roept deze callback later aan als de actieve offloadmogelijkheden veranderen.
Regels voor het aangeven van hardware GSO-mogelijkheden
De volgende regels zijn van toepassing op de NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES structuur:
Het stuurprogramma moet de Layer3Flags- en Layer4Flags-instellen.
Als de NIC LSO ondersteunt, moet het stuurprogramma het veld Layer4Flags vullen met de
NetAdapterOffloadLayer4FlagTcpWithoutOptionsTCP-vlag.Als de NIC USO ondersteunt, moet het stuurprogramma het veld Layer4Flags vullen met de
NetAdapterOffloadLayer4FlagUdpUDP-vlag.MaximumOffloadSize en MinimumSegmentCount zijn verplichte velden.
Het veld Layer4OffsetLimit is optioneel. Als het besturingssysteem een pakket verzendt met een header-offset die groter is dan de opgegeven limiet, wordt niet gevraagd om GSO uit te voeren.
IP-/TCP-pakketten zonder opties/extensies moeten worden ondersteund als opties/extensies worden ondersteund.
In dit voorbeeld ziet u hoe een clientstuurprogramma de hardware-offloadmogelijkheden kan instellen.
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);
}
Bijwerken van hardware-offloadmogelijkheden
Als de TCP/IP-stack of een overliggend protocolstuurprogramma een wijziging aanvraagt in de actieve mogelijkheden van de netadapter, roept NetAdapterCx de EVT_NET_ADAPTER_OFFLOAD_SET_GSO callback van het clientstuurprogramma aan die is geregistreerd tijdens de initialisatie van de adapter. In deze functie levert het systeem bijgewerkte mogelijkheden in het NETOFFLOAD-object waarop het clientstuurprogramma query's uitvoert om de offloadmogelijkheden bij te werken.
Clientstuurprogramma's kunnen de volgende functies aanroepen om te bepalen welke offloads zijn ingeschakeld:
- NetOffloadIsLsoIPv4Enabled
- NetOffloadIsLsoIPv6Enabled
- NetOffloadIsUsoIPv4Enabled
- NetOffloadIsUsoIPv6Enabled
In het volgende voorbeeld ziet u hoe een clientstuurprogramma de GSO-offloadmogelijkheden kan bijwerken:
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);
}