NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2 结构 (ntddndis.h)
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2 结构包含虚拟可扩展 LAN (VXLAN) 任务卸载的数据包封装信息。 VXLAN 类似于 NVGRE 任务卸载,但协议不同。
此结构在 NDIS 6.50 及更高版本中的 NDIS_OFFLOAD 结构的封装包TaskOffloadVxlan 成员中使用。
语法
typedef struct _NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2 {
ULONG TransmitChecksumOffloadSupported : 4;
ULONG ReceiveChecksumOffloadSupported : 4;
ULONG LsoV2Supported : 4;
ULONG RssSupported : 4;
ULONG VmqSupported : 4;
ULONG UsoSupported : 4;
#if ...
ULONG Reserved : 8;
#else
ULONG Reserved : 12;
#endif
ULONG MaxHeaderSizeSupported;
union {
struct {
USHORT VxlanUDPPortNumber;
USHORT VxlanUDPPortNumberConfigurable : 1;
} VxlanInfo;
ULONG Value;
} EncapsulationProtocolInfo;
_ENCAPSULATION_PROTOCOL_INFO _ENCAPSULATION_PROTOCOL_INFO;
ULONG Reserved1;
ULONG Reserved2;
} NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2, *PNDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2;
成员
TransmitChecksumOffloadSupported
传输校验和的任务卸载设置。
ReceiveChecksumOffloadSupported
接收校验和的任务卸载设置。
LsoV2Supported
大型发送卸载版本 2 (LSOv2) 的任务卸载设置。
RssSupported
接收方缩放 (RSS) 的任务卸载设置。
VmqSupported
虚拟机队列 (VMQ) 的任务卸载设置。
UsoSupported
UDP 分段卸载的任务卸载设置 (USO) 。
Reserved
预留给系统使用。
MaxHeaderSizeSupported
此成员应设置为从数据包开头到内部 TCP 或 UDP 有效负载开头的最大标头大小, (TCP 或 UDP 内部标头) NIC 必须支持所有这些任务卸载的最后一个字节。 协议驱动程序预计不会卸载其合并封装标头超过此大小的数据包的处理。
提示
256 字节是一个很好的默认值,应涵盖所有可能的情况。
EncapsulationProtocolInfo
包含 VxlanInfo 成员和 Value 成员的联合。
EncapsulationProtocolInfo.VxlanInfo
包含 VxlanUDPPortNumber 成员和 VxlanUDPPortNumberConfigurable 成员的结构。
EncapsulationProtocolInfo.VxlanInfo.VxlanUDPPortNumber
用于 VXLAN UDP 目标端口的端口号。
EncapsulationProtocolInfo.VxlanInfo.VxlanUDPPortNumberConfigurable
描述 UDP 端口号是否可配置。
EncapsulationProtocolInfo.Value
此数据包的 UDP 校验和值。
_ENCAPSULATION_PROTOCOL_INFO
Reserved1
预留给系统使用。
Reserved2
预留给系统使用。
注解
在初始功能播发以及 NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 和 NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES 状态指示中,可以将 TransmitChecksumOffloadSupported、 ReceiveChecksumOffloadSupported、 LsoV2Supported、 RssSupported、 VmqSupported 和 UsoSupported 成员设置为以下标志的按位 OR:
术语 | 说明 |
---|---|
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_NOT_SUPPORTED | 指定微型端口适配器不支持成员指定的相应任务卸载功能。 |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV4 | 指定微型端口适配器支持成员指定封装数据包的内部 IP 标头为 IPv4 的位置的相应任务卸载功能。 |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV4 | 指定微型端口适配器支持成员指定封装数据包的外部 IP 标头为 IPv4 的位置的相应任务卸载功能。 |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV6 | 指定微型端口适配器支持成员指定封装数据包的内部 IP 标头为 IPv6 的位置的相应任务卸载功能。 |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV6 | 指定微型端口适配器支持成员指定封装数据包的外部 IP 标头为 IPv6 的位置的相应任务卸载功能。 |
例如,如果微型端口适配器和驱动程序仅支持 IPv6 标头作为外部 IP 标头,而不支持作为内部 IP 标头,则会将 TransmitChecksumOffloadSupported、 ReceiveChecksumOffloadSupported、 LsoV2Supported、 RssSupported、 VmqSupported 和 UsoSupported 设置为 NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV4 的按位 OR 值,NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV4和NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV6。
关于 IP 选项和 TCP 选项,对封装的数据包进行了以下假设:
- 如果 NIC 在正常校验和卸载和 LSOv2 播发中指定 IpOptions 和 TcpOptions 支持,则如果支持使用 VXLAN 任务卸载的网络虚拟化,则必须支持封装数据包的选项处理。 这意味着它将支持封装数据包中的内部和外部 IP 选项以及 TCP 选项。 对于特定于 VXLAN 任务卸载的功能,没有单独的功能播发。
协议驱动程序可以卸载“混合模式”数据包,这意味着内部和外部 IP 标头版本不同的数据包。 例如,数据包可以将外部 IP 标头作为 IPv6,将内部 IP 标头作为 IPv4。
有关 VXLAN 的详细信息,请参阅 RFC 7348。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | NDIS 6.50 |
标头 | ntddndis.h (包括 ndis.h) |