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

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

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_CONFIGNDIS_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)