NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2 structure (ntddndis.h)
The NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_V2 structure contains packet encapsulation information for Virtual Extensible LAN (VXLAN) task offload. VXLAN is similar to NVGRE task offload, but with a different protocol.
This structure is used in the EncapsulatedPacketTaskOffloadVxlan member of the NDIS_OFFLOAD structure in NDIS 6.50 and later.
Syntax
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;
Members
TransmitChecksumOffloadSupported
Task offload settings for transmit checksum.
ReceiveChecksumOffloadSupported
Task offload settings for receive checksum.
LsoV2Supported
Task offload settings for large send offload version 2 (LSOv2).
RssSupported
Task offload settings for receive side scaling (RSS).
VmqSupported
Task offload settings for virtual machine queue (VMQ).
UsoSupported
Task offload settings for UDP segmentation offload (USO).
Reserved
Reserved for system use.
MaxHeaderSizeSupported
This member should be set to the maximum header size from the beginning of the packet to the beginning of the inner TCP or UDP payload (the last byte of TCP or UDP inner header) that the NIC must support for all of these task offloads. The protocol driver is expected to not offload processing of a packet whose combined encapsulation headers exceed this size.
Tip
256 bytes is a good default value that should cover all possible cases.
EncapsulationProtocolInfo
A union that contains the VxlanInfo member and the Value member.
EncapsulationProtocolInfo.VxlanInfo
A struct that contains the VxlanUDPPortNumber member and the VxlanUDPPortNumberConfigurable member.
EncapsulationProtocolInfo.VxlanInfo.VxlanUDPPortNumber
The port number to use for the VXLAN UDP destination port.
EncapsulationProtocolInfo.VxlanInfo.VxlanUDPPortNumberConfigurable
Describes whether the UDP port number is configurable.
EncapsulationProtocolInfo.Value
The UDP checksum value for this packet.
_ENCAPSULATION_PROTOCOL_INFO
Reserved1
Reserved for system use.
Reserved2
Reserved for system use.
Remarks
In the initial capability advertisement and in NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG and NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES status indications, the TransmitChecksumOffloadSupported, ReceiveChecksumOffloadSupported, LsoV2Supported, RssSupported, VmqSupported, and UsoSupported members can be set to a bitwise OR of the following flags:
Term | Description |
---|---|
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_NOT_SUPPORTED | Specifies that the miniport adapter does not support the corresponding task offload feature that the member specifies. |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV4 | Specifies that the miniport adapter supports the corresponding task offload feature that the member specifies where the inner IP header of an encapsulated packet is IPv4. |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV4 | Specifies that the miniport adapter supports the corresponding task offload feature that the member specifies where the outer IP header of an encapsulated packet is IPv4. |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV6 | Specifies that the miniport adapter supports the corresponding task offload feature that the member specifies where the inner IP header of an encapsulated packet is IPv6. |
NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV6 | Specifies that the miniport adapter supports the corresponding task offload feature that the member specifies where the outer IP header of an encapsulated packet is IPv6. |
As an example, if a miniport adapter and driver only support an IPv6 header as outer IP header but not as inner IP header, it will set TransmitChecksumOffloadSupported, ReceiveChecksumOffloadSupported, LsoV2Supported, RssSupported, VmqSupported, and UsoSupported to the value of the bitwise OR of NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV4, NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV4 and NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV6.
Regarding IP options and TCP options, the following assumption was made for encapsulated packets:
- If the NIC specifies IpOptions and TcpOptions support in normal checksum offload and LSOv2 advertisement, it must support the option processing for encapsulated packets if Network Virtualization using VXLAN task offload is supported. This means it will support both inner and outer IP options and TCP options inside the encapsulated packets. There is no separate capability advertisement for these specific to only VXLAN task offload.
It is possible for a protocol driver to offload "mixed mode" packets which means packets in which the inner and outer IP header versions are different. For example, a packet could have outer IP header as IPv6 and the inner IP header as IPv4.
For more information about VXLAN, see RFC 7348.
Requirements
Requirement | Value |
---|---|
Minimum supported client | NDIS 6.50 |
Header | ntddndis.h (include ndis.h) |