NDIS_UDP_SEGMENTATION_OFFLOAD 结构 (ntddndis.h)

NDIS_UDP_SEGMENTATION_OFFLOAD结构在NDIS_OFFLOAD结构中提供 UDP 分段卸载 (USO ) 信息。

语法

typedef struct _NDIS_UDP_SEGMENTATION_OFFLOAD {
  struct {
    ULONG Encapsulation;
    ULONG MaxOffLoadSize;
    ULONG MinSegmentCount : 6;
    ULONG SubMssFinalSegmentSupported : 1;
#if ...
    ULONG Reserved : 25;
#else
    ULONG Reserved : 26;
#endif
  } IPv4;
  struct {
    ULONG Encapsulation;
    ULONG MaxOffLoadSize;
    ULONG MinSegmentCount : 6;
    ULONG SubMssFinalSegmentSupported : 1;
#if ...
    ULONG Reserved1 : 25;
#else
    ULONG Reserved1 : 26;
#endif
    ULONG IpExtensionHeadersSupported : 2;
    ULONG Reserved2 : 30;
  } IPv6;
} NDIS_UDP_SEGMENTATION_OFFLOAD, *PNDIS_UDP_SEGMENTATION_OFFLOAD;

成员

IPv4

NDIS_UDP_SEGMENTATION_OFFLOAD 中的一个结构,指定 IPv4 信息,包含以下成员:

IPv4.Encapsulation

IPv4 的封装设置。 有关此成员的详细信息,请参阅以下“备注”部分。

IPv4.MaxOffLoadSize

传输可以在单个数据包中传递到微型端口驱动程序的用户数据的最大字节数。 传输不会将数据包传递到包含超出 MaxOffLoadSize 指定的用户数据字节的微型端口驱动程序。 如果必须传输此类数据包,则传输本身会将数据包分段成较小的数据包。

IPv4.MinSegmentCount

大型 UDP 数据包必须被除的最小段数,然后传输才能将其卸载到硬件进行分段。 传输不会将大型数据包卸载到微型端口驱动程序进行分段,除非微型端口驱动程序可以创建至少与 MinSegmentCount 从数据包指定的段数一样多。 如果大型 UDP 数据包不符合最小段要求,TCP/IP 传输本身会将数据包分段成较小的数据包。

IPv4.SubMssFinalSegmentSupported

一个 ULONG 值,该值指定微型端口驱动程序派生自大型 UDP 数据包的所有段是否 (MSS) 的最大段大小是否相同。 如果微型端口驱动程序未设置 SubMssFinalSegmentSupported 功能,则传输卸载的每个大型 UDP 数据包都必须具有 长度 % MSS == 0。 也就是说,大数据包可分为 N 个数据包,每个数据包段包含完全 包含 MSS 用户字节。 如果微型端口驱动程序设置了 SubMssFinalSegmentSupported 功能,则传输上的此数据包长度可分性条件不适用。 换句话说,最终段可以小于 MSS

如果微型端口能够分段 UDP 发送,则驱动程序应将 SubMssFinalSegmentSupported 的值设置为 NDIS_OFFLOAD_SUPPORTED 其中大型数据包的总长度在被 MSS 除以非零余数时。 通过此标志指示微型端口驱动程序支持时,允许协议驱动程序发出大型 UDP 发送,其中最终分段数据包的 UDP 有效负载长度小于 MSS

有关详细信息,请参阅 UDP 分段卸载 (USO)

IPv4.Reserved

保留。 微型端口驱动程序不得读取或写入此字段。

IPv6

NDIS_UDP_SEGMENTATION_OFFLOAD中的一个结构,用于指定 IPv6 信息,包含以下成员:

IPv6.Encapsulation

IPv6 的封装设置。 有关此成员的详细信息,请参阅以下“备注”部分。

IPv6.MaxOffLoadSize

传输可以在单个数据包中传递到微型端口驱动程序的用户数据的最大字节数。 传输不会将数据包传递到包含超出 MaxOffLoadSize 指定的用户数据字节的微型端口驱动程序。 如果必须传输此类数据包,则传输本身会将数据包分段成较小的数据包。

IPv6.MinSegmentCount

大型 UDP 数据包必须被除的最小段数,然后传输才能将其卸载到硬件进行分段。 传输不会将大型数据包卸载到微型端口驱动程序进行分段,除非微型端口驱动程序可以创建至少与 MinSegmentCount 从数据包指定的段数一样多。 如果大型 UDP 数据包不符合最小段要求,TCP/IP 传输本身会将数据包分段成较小的数据包。

IPv6.SubMssFinalSegmentSupported

一个 ULONG 值,该值指定微型端口驱动程序派生自大型 UDP 数据包的所有段是否 (MSS) 的最大段大小是否相同。 如果微型端口驱动程序未设置 SubMssFinalSegmentSupported 功能,则传输卸载的每个大型 UDP 数据包都必须具有 长度 % MSS == 0。 也就是说,大数据包可分为 N 个数据包,每个数据包段包含完全 包含 MSS 用户字节。 如果微型端口驱动程序设置了 SubMssFinalSegmentSupported 功能,则传输上的此数据包长度可分性条件不适用。 换句话说,最终段可以小于 MSS

如果微型端口能够分段 UDP 发送,则驱动程序应将 SubMssFinalSegmentSupported 的值设置为 NDIS_OFFLOAD_SUPPORTED 其中大型数据包的总长度在被 MSS 除以非零余数时。 通过此标志指示微型端口驱动程序支持时,允许协议驱动程序发出大型 UDP 发送,其中最终分段数据包的 UDP 有效负载长度小于 MSS

有关详细信息,请参阅 UDP 分段卸载 (USO)

IPv6.Reserved1

保留。 微型端口驱动程序不得读取或写入此字段。

IPv6.IpExtensionHeadersSupported

微型端口驱动程序设置为指示微型端口适配器可以分段其 IP 标头包含 IPv6 扩展标头的大型 UDP 数据包的 ULONG 值。

IPv6.Reserved2

保留。 微型端口驱动程序不得读取或写入此字段。

注解

微型端口驱动程序应设置此结构的字段和封装要求的值,类似于 NDIS_TCP_LARGE_SEND_OFFLOAD_V2 结构。

NDIS_UDP_SEGMENTATION_OFFLOAD 结构在 NDIS_OFFLOAD 结构的 UdpSegmentation 成员中使用。 NDIS_UDP_SEGMENTATION_OFFLOAD 指定微型端口适配器提供的当前或受支持的服务,用于将大型 UDP 数据包分段为较小的数据包。

NDIS_OFFLOAD 用于 NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES 结构、 NDIS_BIND_PARAMETERS 结构、 NDIS_FILTER_ATTACH_PARAMETERS 结构、 OID_TCP_OFFLOAD_CURRENT_CONFIG OID 和 NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 状态指示。

对于OID_TCP_OFFLOAD_CURRENT_CONFIG,NDIS_OFFLOAD结构指定微型端口适配器支持的任务卸载功能。 如果当前卸载功能发生更改,微型端口驱动程序在 NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 状态指示中报告新功能。

NDIS_UDP_SEGMENTATION_OFFLOAD封装成员定义微型端口适配器的 UDP 封装设置。

为了响应 OID_TCP_OFFLOAD_CURRENT_CONFIG 查询请求,NDIS 在每个封装成员中提供封装标志的按位 OR,这些标志指示支持的 封装 设置。 微型端口驱动程序必须提供以太网封装 (NDIS_ENCAPSULATION_IEEE_802_3) 。 其他类型的封装是可选的。

对于 NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 状态指示,微型端口驱动程序在每个 封装成员中 提供封装标志的按位 OR,指示当前功能。

封装 成员定义了以下标志:

NDIS_ENCAPSULATION_NOT_SUPPORTED
指定不支持封装卸载。

NDIS_ENCAPSULATION_NULL
指定 NULL 封装。

NDIS_ENCAPSULATION_IEEE_802_3
指定 IEEE 802.3 封装。

NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q
指定 IEEE 802.3p 和 IEEE 802.3q 封装。

NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB
指定在每个 NET_BUFFER_LIST 结构的 NetBufferListInfo 成员中指定 IEEE 802.3p 和 IEEE 802.3q 封装设置。

NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED
为路由协议指定逻辑链接控制 (LLC) 封装,如 RFC 1483 中所述。 此标志还用于指示以太网 LLC/SNAP 封装。

要求

要求
最低受支持的客户端 Windows 10版本 1912
标头 ntddndis.h

另请参阅

UDP 分段卸载 (USO)