// ndis.h
typedef struct _NDIS_HD_SPLIT_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG HardwareCapabilities;
ULONG CurrentCapabilities;
ULONG HDSplitFlags;
ULONG BackfillSize;
ULONG MaxHeaderSize;
} NDIS_HD_SPLIT_ATTRIBUTES, *PNDIS_HD_SPLIT_ATTRIBUTES;
View the official Windows Driver Kit DDI reference
No description available.
The NDIS_HD_SPLIT_ATTRIBUTES structure defines header-data split attributes, if any, that are associated with a miniport adapter.
Header
The NDIS_OBJECT_HEADER structure for the provider characteristics structure (NDIS_HD_SPLIT_ATTRIBUTES). The driver sets the Type member of the structure that Header specifies to NDIS_OBJECT_TYPE_HD_SPLIT_ATTRIBUTES, the Revision member to NDIS_OBJECT_HD_SPLIT_ATTRIBUTES_REVISION_1, and the Size member to NDIS_SIZEOF_HD_SPLIT_ATTRIBUTES_REVISION_1.
HardwareCapabilities
The header-data split hardware capabilities that the miniport adapter supports. These capabilities should include capabilities that are currently disabled by INF file settings or through the Advanced properties page. The value of HardwareCapabilities is a bitwise OR of the following flags:
The miniport adapter can split the header and data into separate MDLs that meet the requirements for header-data split support.
The miniport adapter can split IPv4 Ethernet frames that include IPv4 options. The miniport adapter can support splitting some IPv4 options while not splitting others.
Note The NIC must not split IPv4 frames that contain unsupported IPv4 options. If an IPv4 frame is split, the header portion of the split frame must contain the entire IPv4 header and all of the IPv4 options that are present.
The miniport adapter can split IPv6 Ethernet frames that include IPv6 extension headers. The miniport adapter can support some IPv6 extension headers while not supporting others.
Note The NIC must not split IPv6 frames that contain unsupported IPv6 extension headers. If an IPv6 frame is split, the header portion of the split frame must contain the entire IPv6 header and all of the IPv6 extension headers that are present.
The miniport adapter can split TCP frames with other TCP options in addition to the timestamp option. The miniport adapter can support some TCP options and not support others.
Note If the only TCP option in a frame is the timestamp option, the data-split provider must be able to split the frame.
Note If a TCP header contains an unsupported TCP option, the NIC must split the frame at the beginning of the TCP header or must not split the frame.
CurrentCapabilities
The current header-data split capabilities that the miniport adapter supports. The miniport driver uses the same flags that are defined for the HardwareCapabilities member. In this case, the flags are set to indicate the current capabilities that depend on the current configuration settings.
HDSplitFlags
A set of flags that control the status of header-data split for a miniport adapter. The miniport driver should set this member to zero before calling the NdisMSetMiniportAttributes function. After NdisMSetMiniportAttributes successfully returns, the driver must check the flags and configure the hardware accordingly. NDIS sets this member with a bitwise OR of the following flags:
If this flag is set, the miniport driver should enable header-data split in the hardware. Otherwise, header-data split is disabled. If the computer uses header-data split and the miniport driver also set the NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT flag in the CurrentCapabilities member, NDIS sets NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT.
BackfillSize
The backfill size, in bytes, for the data portion of a split frame. The miniport driver should set BackfillSize to zero before calling NdisMSetMiniportAttributes. NDIS sets this member if the miniport driver must pre-allocate backfill storage in the data portion for split frames. After NdisMSetMiniportAttributes successfully returns, the driver must use the BackfillSize value that NDIS set to pre-allocate the data buffers.
MaxHeaderSize
The maximum size, in bytes, for the header portion of a split frame. The miniport driver should set MaxHeaderSize to zero before calling NdisMSetMiniportAttributes. NDIS sets this member to the maximum size for the header buffer for split frames. After NdisMSetMiniportAttributes successfully returns, the driver must use the value that NDIS provided.
Note If the length of a header exceeds MaxHeaderSize because of the presence of IPv4 options, IPSec headers, or IPv6 extension headers, the frame must not be split. If a header that includes a TCP or UDP header exceeds MaxHeaderSize because of the presence of TCP header, TCP options, or UDP header, the NIC must split the frame at the beginning of the upper layer protocol header or must not split the frame.
To support header-data split, a miniport driver passes a pointer to an NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES structure in the MiniportAttributes parameter of the NdisMSetMiniportAttributes function. The HDSplitAttributes member of NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES contains a pointer to the NDIS_HD_SPLIT_ATTRIBUTES structure. A miniport driver calls NdisMSetMiniportAttributes from its MiniportInitializeEx function during initialization.
NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES