Reporting a NIC's Checksum Capabilities

An NDIS miniport driver reports whether a NIC is currently configured to calculate and validate IP, TCP, and UDP checksums in an NDIS_TCP_IP_CHECKSUM_OFFLOAD structure. Miniport drivers must include the current checksum offload configuration in the NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES structure. Miniport drivers call the NdisMSetMiniportAttributes function from the MiniportInitializeEx function and pass in the information in NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES.

Miniport drivers must report changes in the current checksum offload configuration, if any, in the NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG status indication.

In response to a query of OID_TCP_OFFLOAD_CURRENT_CONFIG, NDIS includes the NDIS_TCP_IP_CHECKSUM_OFFLOAD structure in the NDIS_OFFLOAD structure that NDIS returns in the InformationBuffer member of the NDIS_OID_REQUEST structure. NDIS uses the information that the miniport driver provided.

A miniport driver indicates the following checksum information for IPv4 and IPv6 send and receive packets:

  • The types of checksums (IP, TCP, or UDP) that a NIC can calculate for send packets and can validate for receive packets.

  • Encapsulation settings, in the Encapsulation member. For more information about this member, see the Remarks section in NDIS_TCP_IP_CHECKSUM_OFFLOAD.

  • Whether the NIC can calculate or validate (or calculate and validate) checksums for a packet whose IP headers contain IPv4 options.

  • Whether the NIC can calculate or validate (or calculate and validate) checksums for an IPv6 packet whose IP headers contain IPv6 extension headers.

  • Whether the NIC can calculate or validate (or calculate and validate) checksums for a packet whose TCP header contain TCP options.

Determining Task Offload Capabilities