Module Name: src Committed By: yamt Date: Mon Apr 25 22:07:57 UTC 2011
Modified Files: src/sys/netinet6: in6_offload.c Log Message: ip6_undefer_csum: - don't forget ntohs - KNF To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/netinet6/in6_offload.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet6/in6_offload.c diff -u src/sys/netinet6/in6_offload.c:1.5 src/sys/netinet6/in6_offload.c:1.6 --- src/sys/netinet6/in6_offload.c:1.5 Sat Dec 11 22:37:47 2010 +++ src/sys/netinet6/in6_offload.c Mon Apr 25 22:07:57 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_offload.c,v 1.5 2010/12/11 22:37:47 matt Exp $ */ +/* $NetBSD: in6_offload.c,v 1.6 2011/04/25 22:07:57 yamt Exp $ */ /*- * Copyright (c)2006 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_offload.c,v 1.5 2010/12/11 22:37:47 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_offload.c,v 1.6 2011/04/25 22:07:57 yamt Exp $"); #include <sys/param.h> #include <sys/mbuf.h> @@ -195,22 +195,27 @@ void ip6_undefer_csum(struct mbuf *m, size_t hdrlen, int csum_flags) { + const size_t ip6_plen_offset = + hdrlen + offsetof(struct ip6_hdr, ip6_plen); + size_t l4hdroff; + size_t l4offset; + uint16_t plen; + uint16_t csum; + KASSERT(m->m_flags & M_PKTHDR); KASSERT((m->m_pkthdr.csum_flags & csum_flags) == csum_flags); KASSERT(csum_flags == M_CSUM_UDPv6 || csum_flags == M_CSUM_TCPv6); - const size_t ip6_plen_offset = hdrlen + offsetof(struct ip6_hdr, ip6_plen); - uint16_t plen; - if (__predict_true(hdrlen + sizeof(struct ip6_hdr) <= m->m_len)) { plen = *(uint16_t *)(mtod(m, char *) + ip6_plen_offset); } else { m_copydata(m, ip6_plen_offset, sizeof(plen), &plen); } + plen = ntohs(plen); - const size_t l4hdroff = M_CSUM_DATA_IPv6_HL(m->m_pkthdr.csum_data); - size_t l4offset = hdrlen + l4hdroff; - uint16_t csum = in6_cksum(m, 0, l4offset, plen - l4hdroff); + l4hdroff = M_CSUM_DATA_IPv6_HL(m->m_pkthdr.csum_data); + l4offset = hdrlen + l4hdroff; + csum = in6_cksum(m, 0, l4offset, plen - l4hdroff); if (csum == 0 && (csum_flags & M_CSUM_UDPv6) != 0) csum = 0xffff;