Splitting Frames at the Beginning of the Upper Layer-Protocol Headers

An upper-layer protocol is an IP transport protocol such as TCP, UDP, or ICMP.

Note  IPsec is not considered an upper-layer-protocol in the header-data split requirements. For more information about splitting IPsec frames, see Splitting IPsec Frames.

If a NIC splits an Ethernet frame at the beginning of the upper-layer-protocol header, the indicated NET_BUFFER must contain exactly two MDLs. The buffer that the first MDL describes must begin with the first byte of the Ethernet frame (MAC header) and the buffer that the second MDL describes must start with the first byte of the upper-layer-protocol header.

Note  The NIC can split TCP and UDP frames at the TCP or UDP payload. For more information, see Splitting Frames at the TCP Payload and Splitting Frames at the UDP Payload.

If the header-data split provider splits the frame at the beginning of the upper-layer-protocol header, the indicated NET_BUFFER_LIST structures must have the NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER flag set in the NblFlags member. For more information about setting header-data split NET_BUFFER_LIST flags, see Setting NET_BUFFER_LIST Information.

The NIC must not split a frame if the resulting header buffer has a greater length than the maximum header size. For more information about splitting frames when the maximum header size is exceeded, see Allocating the Header Buffer.