Parameters

offset, in bytes, from the start of the IP header to the start of the checksum span

end

offset, in bytes, from the start of the IP header to the end of the checksum span

stuff

offset, in bytes, from the start of the IP header to the checksum field in the protocol header

value

hardware computed checksum value

flags

per-packet flags indicating the hardware checksumming to be performed on outbound packets, or the hardware checksumming performed on inbound packet

Interface Level

Solaris architecture specific (Solaris DDI)

Description

Hardware checksumming allows the checksum computation to be offloaded to the network
device hardware for lower CPU utilization. Hardware checksumming capabilities are advertised from
the driver's mc_getcapab(9E) entry point. The description of mc_getcapab() also includes more
information about the expected behavior of drivers for full and partial checksumming
offload.

For received traffic, the hardware can enable hardware checksumming, and the network
stack will know how to handle packets for which checksum computation or
verification has been performed. The mac_hcksum_set() function can be used by
a device driver to associate information related to the hardware checksumming performed on
the packet.

The flags argument can be a combination of the following:

HCK_FULLCKSUM

The full checksum was computed, and is passed through the value argument.

HCK_FULLCKSUM_OK

The full checksum was verified in hardware and is correct.

HCK_PARTIALCKSUM

Partial checksum computed and passed through the value argument. The start and end arguments specify the checksum span.

HCK_IPV4_HDRCKSUM_OK

IP header checksum was verified in hardware and is correct.

HCK_PARTIALCKSUM is mutually exclusive with the HCK_FULLCKSUM and HCK_FULLCKSUM_OK flags.

For outbound packets, hardware checksumming capabilities are queried via the mc_getcapab() entry
point. Hardware checksumming is enabled by the network stack based on the
MAC_CAPAB_HCKSUM capability. A device driver that advertised support for this capability can subsequently
receive outbound packets that may not have a fully computed checksum. It
is the responsibility of the driver to invoke mac_hcksum_get() to retrieve the
per-packet hardware checksumming metadata.

HCK_FULLCKSUM

Compute full checksum for this packet.

HCK_PARTIALCKSUM

Compute partial 1's complement checksum based on the start, stuff, and offset.

HCK_IPV4_HDRCKSUM

Compute the IP header checksum.

HCK_PARTIALCKSUM is mutually exclusive with HCK_FULLCKSUM.

The flags HCK_FULLCKSUM, HCK_FULLCKSUM_OK, and HCK_PARTIALCKSUM are used for both IPv4 and
IPv6 packets. The driver advertises support for IPv4 and/or IPv6 full checksumming
during capability negotiation. See mc_getcapab(9E).