Kernel Functions for Drivers mac_hcksum_get(9F) NAME mac_hcksum_set, mac_hcksum_get -- Hardware checksumming offload routines SYNOPSIS #include void mac_hcksum_get(mblk_t *mp, uint32_t *start, uint32_t *stuff, uint32_t *end, uint32_t *value, uint32_t *flags); void mac_hcksum_set(mblk_t *mp, uint32_t start, uint32_t stuff, uint32_t end, uint32_t value, uint32_t *flags); INTERFACE LEVEL Solaris architecture specific (Solaris DDI). PARAMETER mp Pointer to a message block. start 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. 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(9E) 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() routine 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 The HCK_FULLCKSUM and HCK_FULLCKSUM_OK are mutually exclusive, i.e. if the HCK_FULLCKSUM is set, the network stack will use the specified checksum value to verify that it matches the checksum found in the packet. If the HCK_FULLCKSUM_OK is specified, the stack will assume that the hardware checksum was verified in hardware. HCK_PARTIALCKSUM is mutually exclusive with the HCK_FULLCKSUM and HCK_FULLCKSUM flags. For outbound packets, hardware checksumming capabilities are queried via the mc_getcapab(9E) entry point. Hardware checksumming is enabled by the network stack based on the MAC_CAPAB_HCKSUM capability. A device driver which advertised support for this capability can subsequently received outbound packets which 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 meta-data. 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. NOTES Note that 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). ATTRIBUTES See attributes(5) for descriptions of the following attri- butes: ____________________________________________________________ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | |_____________________________|_____________________________| | Availability | SUNWhea | |_____________________________|_____________________________| | Interface Stability | Committed | |_____________________________|_____________________________| SEE ALSO mac(9E), attributes(5)