| 197 | } while (/*CONSTCOND*/ 0) |
| 198 | |
| 199 | void |
| 200 | in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset) |
| 201 | { |
| 202 | u_short csum; |
| 203 | |
| 204 | csum = in_cksum_skip(m, offset + plen, offset); |
| 205 | if (m->m_pkthdr.csum_flags & CSUM_UDP_IPV6 && csum == 0) |
| 206 | csum = 0xffff; |
| 207 | offset += m->m_pkthdr.csum_data; /* checksum offset */ |
| 208 | |
| 209 | if (offset + sizeof(csum) > m->m_len) |
| 210 | m_copyback(m, offset, sizeof(csum), (caddr_t)&csum); |
| 211 | else |
| 212 | *(u_short *)mtodo(m, offset) = csum; |
| 213 | } |
| 214 | |
| 215 | static int |
| 216 | ip6_output_delayed_csum(struct mbuf *m, struct ifnet *ifp, int csum_flags, |
no test coverage detected