_NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure

The NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure specifies information used in offloading checksum tasks from the TCP/IP transport to a NIC. The NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure is part of the NET_BUFFER_LIST information (out-of-band data) that is associated with a NET_BUFFER_LIST structure.

Syntax

typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
  union {
    struct {
      ULONG IsIPv4  :1;
      ULONG IsIPv6  :1;
      ULONG TcpChecksum  :1;
      ULONG UdpChecksum  :1;
      ULONG IpHeaderChecksum  :1;
      ULONG Reserved  :11;
      ULONG TcpHeaderOffset  :10;
    } Transmit;
    struct {
      ULONG TcpChecksumFailed  :1;
      ULONG UdpChecksumFailed  :1;
      ULONG IpChecksumFailed  :1;
      ULONG TcpChecksumSucceeded  :1;
      ULONG UdpChecksumSucceeded  :1;
      ULONG IpChecksumSucceeded  :1;
      ULONG Loopback  :1;
#if (NDIS_SUPPORT_NDIS630)
      ULONG TcpChecksumValueInvalid  :1;
      ULONG IpChecksumValueInvalid  :1;
#endif 
    } Receive;
    PVOID  Value;
  };
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;

Members

Remarks

The NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure specifies information that is used in offloading checksum tasks from the TCP/IP transport to a NIC. The NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure is part of the NET_BUFFER_LIST information (out-of-band data) that is associated with a NET_BUFFER_LIST structure.

Before the TCP/IP transport passes to the miniport driver a TCP/IP packet on which the miniport driver will perform checksum tasks, the TCP/IP transport updates the NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure that is associated with the NET_BUFFER_LIST structure. Specifically, the TCP/IP transport sets the IsIPv4 or IsIPv6 flag to indicate that the send packet is an IPv4 or IPv6 packet. If the TCP/IP transport does not set either the IsIPv4 or IsIPv6 flag, the miniport driver should not perform checksum tasks on the packet. If the TCP/IP transport sets the IsIPv4 or IsIPv6 flag, it also sets the IpHeaderChecksum, TcpChecksum, or UdpChecksum flags that are required to indicate which checksums the miniport driver should calculate for the packet.

Before indicating up a receive TCP/IP packet on which it performs checksum tasks, a miniport driver sets the appropriate XxxChecksumFailed or XxxChecksumSucceeded flags in the NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure.

Note Checksum offload is disabled until the miniport receives OID_OFFLOAD_ENCAPSULATION. After it receives this OID, the miniport is then permitted to start validating the checksums on some received packets. The miniport is not required to validate the checksum on every packet; if both the XxxChecksumFailed and XxxChecksumSucceeded flags are clear, the OS will fall back to validating the checksum in software.
To obtain the NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO structure, a driver should call the NET_BUFFER_LIST_INFO macro with an _Id of TcpIpChecksumNetBufferListInfo.

Requirements

   
Windows version Supported in NDIS 6.0 and later. Supported in NDIS 6.0 and later.
Header ndis.h (include Ndis.h)

See Also

NET_BUFFER_LIST

Indicating Coalesced Segments

Indicating Coalesced Segments

Send comments about this topic to Microsoft