Splitting Ethernet Frames Overview

This section describes the specific header-data split requirements that apply to header-data split providers, depending on the type of Ethernet frame that the provider is splitting.

Note  After you read the general requirements in this topic, you can use the subsequent topics to understand the specific requirements for each type of Ethernet frame. The later topics build on the requirements in the earlier topics. For example, if a frame contains IPv4 and UDP information, you should read the Splitting IPv4 Frames and Splitting Frames at the UDP Payload topics.

If the header-data split provider splits a frame in compliance with the header-data split requirements, the indicated NET_BUFFER_LIST structures must have the NDIS_NBL_FLAGS_HD_SPLIT flag set in the NblFlags member. If the header-data split provider does not split a frame, the frame must be indicated with the following flags cleared in NblFlags :

  • NDIS_NBL_FLAGS_HD_SPLIT

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD

For more information about setting header-data split NET_BUFFER_LIST flags and other receive indication requirements, see Receive Indications with Header-Data Split.

There are cases where a header-data split provider can split a received frame outside of the header-data split provider requirements. In these cases, the provider should never split Ethernet frames in the middle of the IP header, IPv4 options, IPsec headers, IPv6 extension headers, or upper-layer-protocol headers, unless the first MDL contains at least as many bytes as NDIS specified for the lookahead size. For more information about the lookahead size, see OID_GEN_CURRENT_LOOKAHEAD.

This section includes:

Splitting IPv4 Frames

Splitting IPv6 Frames

Splitting Fragmented IP Frames

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

Splitting Frames at the TCP Payload

Splitting Frames at the UDP Payload

Splitting Frames Other Than TCP and UDP