-#define DEBUG_HWCKSUM 1 /* IPv6 Hardware checksum on/off */
-/*
- * in6_cksum_phdr:
- *
- * Compute significant parts of the IPv6 checksum pseudo-header
- * for use in a delayed TCP/UDP checksum calculation.
- *
- * Args:
- *
- * src Source IPv6 address
- * dst Destination IPv6 address
- * len htonl(proto-hdr-len)
- * nxt htonl(next-proto-number)
- *
- * NOTE: We expect the src and dst addresses to be 16-bit
- * aligned!
- */
-static __inline u_int16_t __unused
-in6_cksum_phdr(const struct in6_addr *src, const struct in6_addr *dst,
- u_int32_t len, u_int32_t nxt)
-{
- u_int32_t sum = 0;
- const u_int16_t *w;
-
- /*LINTED*/
- w = (const u_int16_t *) src;
- sum += w[0];
- if (!IN6_IS_SCOPE_LINKLOCAL(src))
- sum += w[1];
- sum += w[2]; sum += w[3]; sum += w[4]; sum += w[5];
- sum += w[6]; sum += w[7];
-
- /*LINTED*/
- w = (const u_int16_t *) dst;
- sum += w[0];
- if (!IN6_IS_SCOPE_LINKLOCAL(dst))
- sum += w[1];
- sum += w[2]; sum += w[3]; sum += w[4]; sum += w[5];
- sum += w[6]; sum += w[7];
-
- sum += (u_int16_t)(len >> 16) + (u_int16_t)(len /*& 0xffff*/);
-
- sum += (u_int16_t)(nxt >> 16) + (u_int16_t)(nxt /*& 0xffff*/);
-
- sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
-
- if (sum > 0xffff)
- sum -= 0xffff;
-
- return (sum);
-}