Lines Matching refs:m
242 static void ipsec4_get_ulp(struct mbuf *m, struct secpolicyindex *, int);
244 static void ipsec6_get_ulp(struct mbuf *m, struct secpolicyindex *, int);
300 ipsec4_getpolicybysock(struct mbuf *m, in ipsec4_getpolicybysock() argument
311 if (m == NULL || so == NULL || error == NULL) { in ipsec4_getpolicybysock()
317 return ipsec4_getpolicybyaddr(m, dir, 0, error); in ipsec4_getpolicybysock()
331 return ipsec4_getpolicybyaddr(m, dir, 0, error); in ipsec4_getpolicybysock()
339 *error = ipsec4_setspidx_inpcb(m, sotoinpcb(so)); in ipsec4_getpolicybysock()
343 *error = ipsec6_setspidx_in6pcb(m, sotoin6pcb(so)); in ipsec4_getpolicybysock()
502 ipsec4_getpolicybyaddr(struct mbuf *m, in ipsec4_getpolicybyaddr() argument
516 if (m == NULL || error == NULL) { in ipsec4_getpolicybyaddr()
526 *error = ipsec_setspidx_mbuf(&spidx, dir, AF_INET, m, in ipsec4_getpolicybyaddr()
570 ipsec4_getpolicybyinterface(struct mbuf *m, in ipsec4_getpolicybyinterface() argument
584 if (m == NULL || ipoa == NULL || sp == NULL) { in ipsec4_getpolicybyinterface()
596 error = ipsec_setspidx_interface(&spidx, dir, m, (*flags & IP_FORWARDING) ? 0 : 1, in ipsec4_getpolicybyinterface()
641 ipsec6_getpolicybysock(struct mbuf *m, in ipsec6_getpolicybysock() argument
653 if (m == NULL || so == NULL || error == NULL) { in ipsec6_getpolicybysock()
666 return ipsec6_getpolicybyaddr(m, dir, 0, error); in ipsec6_getpolicybysock()
670 ipsec6_setspidx_in6pcb(m, sotoin6pcb(so)); in ipsec6_getpolicybysock()
818 ipsec6_getpolicybyaddr(struct mbuf *m, in ipsec6_getpolicybyaddr() argument
828 if (m == NULL || error == NULL) { in ipsec6_getpolicybyaddr()
838 *error = ipsec_setspidx_mbuf(&spidx, dir, AF_INET6, m, in ipsec6_getpolicybyaddr()
878 ipsec6_getpolicybyinterface(struct mbuf *m, in ipsec6_getpolicybyinterface() argument
893 if (m == NULL || sp == NULL || noipsec == NULL || ip6oap == NULL) { in ipsec6_getpolicybyinterface()
907 error = ipsec_setspidx_interface(&spidx, dir, m, (flag & IP_FORWARDING) ? 0 : 1, in ipsec6_getpolicybyinterface()
955 struct mbuf *m, in ipsec_setspidx_mbuf() argument
961 if (spidx == NULL || m == NULL) { in ipsec_setspidx_mbuf()
967 error = ipsec_setspidx(m, spidx, needport, 0); in ipsec_setspidx_mbuf()
985 struct mbuf *m, in ipsec_setspidx_interface() argument
993 if (spidx == NULL || m == NULL) { in ipsec_setspidx_interface()
999 error = ipsec_setspidx(m, spidx, needport, ip_version); in ipsec_setspidx_interface()
1020 ipsec4_setspidx_inpcb(struct mbuf *m, struct inpcb *pcb) in ipsec4_setspidx_inpcb() argument
1044 error = ipsec_setspidx(m, spidx, 1, 0); in ipsec4_setspidx_inpcb()
1051 error = ipsec_setspidx(m, spidx, 1, 0); in ipsec4_setspidx_inpcb()
1066 ipsec6_setspidx_in6pcb(struct mbuf *m, struct in6pcb *pcb) in ipsec6_setspidx_in6pcb() argument
1086 error = ipsec_setspidx(m, spidx, 1, 0); in ipsec6_setspidx_in6pcb()
1093 error = ipsec_setspidx(m, spidx, 1, 0); in ipsec6_setspidx_in6pcb()
1113 ipsec_setspidx(struct mbuf *m, in ipsec_setspidx() argument
1125 if (m == NULL) { in ipsec_setspidx()
1135 for (n = m; n; n = n->m_next) { in ipsec_setspidx()
1138 if (m->m_pkthdr.len != len) { in ipsec_setspidx()
1143 len, m->m_pkthdr.len)); in ipsec_setspidx()
1147 if (m->m_pkthdr.len < sizeof(struct ip)) { in ipsec_setspidx()
1151 m->m_pkthdr.len)); in ipsec_setspidx()
1155 if (m->m_len >= sizeof(*ip)) { in ipsec_setspidx()
1156 ip = mtod(m, struct ip *); in ipsec_setspidx()
1158 m_copydata(m, 0, sizeof(ipbuf), (caddr_t)&ipbuf); in ipsec_setspidx()
1173 error = ipsec4_setspidx_ipaddr(m, spidx); in ipsec_setspidx()
1177 ipsec4_get_ulp(m, spidx, needport); in ipsec_setspidx()
1180 if (m->m_pkthdr.len < sizeof(struct ip6_hdr)) { in ipsec_setspidx()
1184 "ignored.\n", m->m_pkthdr.len)); in ipsec_setspidx()
1187 error = ipsec6_setspidx_ipaddr(m, spidx); in ipsec_setspidx()
1191 ipsec6_get_ulp(m, spidx, needport); in ipsec_setspidx()
1202 ipsec4_get_ulp(struct mbuf *m, struct secpolicyindex *spidx, int needport) in ipsec4_get_ulp() argument
1212 if (m == NULL) { in ipsec4_get_ulp()
1215 if (m->m_pkthdr.len < sizeof(ip)) { in ipsec4_get_ulp()
1224 m_copydata(m, 0, sizeof(ip), (caddr_t)&ip); in ipsec4_get_ulp()
1236 while (off < m->m_pkthdr.len) { in ipsec4_get_ulp()
1243 if (off + sizeof(struct tcphdr) > m->m_pkthdr.len) { in ipsec4_get_ulp()
1246 m_copydata(m, off, sizeof(th), (caddr_t)&th); in ipsec4_get_ulp()
1255 if (off + sizeof(struct udphdr) > m->m_pkthdr.len) { in ipsec4_get_ulp()
1258 m_copydata(m, off, sizeof(uh), (caddr_t)&uh); in ipsec4_get_ulp()
1263 if (off + sizeof(ip6e) > m->m_pkthdr.len) { in ipsec4_get_ulp()
1266 m_copydata(m, off, sizeof(ip6e), (caddr_t)&ip6e); in ipsec4_get_ulp()
1281 ipsec4_setspidx_ipaddr(struct mbuf *m, struct secpolicyindex *spidx) in ipsec4_setspidx_ipaddr() argument
1287 if (m->m_len >= sizeof(*ip)) { in ipsec4_setspidx_ipaddr()
1288 ip = mtod(m, struct ip *); in ipsec4_setspidx_ipaddr()
1290 m_copydata(m, 0, sizeof(ipbuf), (caddr_t)&ipbuf); in ipsec4_setspidx_ipaddr()
1312 ipsec6_get_ulp(struct mbuf *m, in ipsec6_get_ulp() argument
1321 if (m == NULL) { in ipsec6_get_ulp()
1326 printf("ipsec6_get_ulp:\n"); kdebug_mbuf(m)); in ipsec6_get_ulp()
1334 off = ip6_lasthdr(m, 0, IPPROTO_IPV6, &nxt); in ipsec6_get_ulp()
1335 if (off < 0 || m->m_pkthdr.len < off) { in ipsec6_get_ulp()
1346 if (off + sizeof(struct tcphdr) > m->m_pkthdr.len) { in ipsec6_get_ulp()
1349 m_copydata(m, off, sizeof(th), (caddr_t)&th); in ipsec6_get_ulp()
1358 if (off + sizeof(struct udphdr) > m->m_pkthdr.len) { in ipsec6_get_ulp()
1361 m_copydata(m, off, sizeof(uh), (caddr_t)&uh); in ipsec6_get_ulp()
1375 ipsec6_setspidx_ipaddr(struct mbuf *m, in ipsec6_setspidx_ipaddr() argument
1382 if (m->m_len >= sizeof(*ip6)) { in ipsec6_setspidx_ipaddr()
1383 ip6 = mtod(m, struct ip6_hdr *); in ipsec6_setspidx_ipaddr()
1385 m_copydata(m, 0, sizeof(ip6buf), (caddr_t)&ip6buf); in ipsec6_setspidx_ipaddr()
1395 if (m->m_pkthdr.pkt_flags & PKTF_IFAINFO) { in ipsec6_setspidx_ipaddr()
1396 ip6_getsrcifaddr_info(m, &sin6->sin6_scope_id, NULL); in ipsec6_setspidx_ipaddr()
1397 } else if (m->m_pkthdr.pkt_ext_flags & PKTF_EXT_OUTPUT_SCOPE) { in ipsec6_setspidx_ipaddr()
1398 sin6->sin6_scope_id = ip6_output_getsrcifscope(m); in ipsec6_setspidx_ipaddr()
1414 if (m->m_pkthdr.pkt_flags & PKTF_IFAINFO) { in ipsec6_setspidx_ipaddr()
1415 ip6_getdstifaddr_info(m, &sin6->sin6_scope_id, NULL); in ipsec6_setspidx_ipaddr()
1416 } else if (m->m_pkthdr.pkt_ext_flags & PKTF_EXT_OUTPUT_SCOPE) { in ipsec6_setspidx_ipaddr()
1417 sin6->sin6_scope_id = ip6_output_getdstifscope(m); in ipsec6_setspidx_ipaddr()
1900 ipsec_in_reject(struct secpolicy *sp, struct mbuf *m) in ipsec_in_reject() argument
1979 need_auth, need_conf, need_icv, m->m_flags)); in ipsec_in_reject()
1981 if ((need_conf && !(m->m_flags & M_DECRYPTED)) in ipsec_in_reject()
1982 || (!need_auth && need_icv && !(m->m_flags & M_AUTHIPDGM)) in ipsec_in_reject()
1983 || (need_auth && !(m->m_flags & M_AUTHIPHDR))) { in ipsec_in_reject()
1996 ipsec4_in_reject_so(struct mbuf *m, struct socket *so) in ipsec4_in_reject_so() argument
2004 if (m == NULL) { in ipsec4_in_reject_so()
2012 sp = ipsec4_getpolicybyaddr(m, IPSEC_DIR_INBOUND, IP_FORWARDING, &error); in ipsec4_in_reject_so()
2014 sp = ipsec4_getpolicybyaddr(m, IPSEC_DIR_INBOUND, 0, &error); in ipsec4_in_reject_so()
2021 result = ipsec_in_reject(sp, m); in ipsec4_in_reject_so()
2031 ipsec4_in_reject(struct mbuf *m, struct inpcb *inp) in ipsec4_in_reject() argument
2035 return ipsec4_in_reject_so(m, NULL); in ipsec4_in_reject()
2038 return ipsec4_in_reject_so(m, inp->inp_socket); in ipsec4_in_reject()
2053 ipsec6_in_reject_so(struct mbuf *m, struct socket *so) in ipsec6_in_reject_so() argument
2061 if (m == NULL) { in ipsec6_in_reject_so()
2069 sp = ipsec6_getpolicybyaddr(m, IPSEC_DIR_INBOUND, IP_FORWARDING, &error); in ipsec6_in_reject_so()
2071 sp = ipsec6_getpolicybyaddr(m, IPSEC_DIR_INBOUND, 0, &error); in ipsec6_in_reject_so()
2077 result = ipsec_in_reject(sp, m); in ipsec6_in_reject_so()
2087 ipsec6_in_reject(struct mbuf *m, struct in6pcb *in6p) in ipsec6_in_reject() argument
2091 return ipsec6_in_reject_so(m, NULL); in ipsec6_in_reject()
2094 return ipsec6_in_reject_so(m, in6p->in6p_socket); in ipsec6_in_reject()
2181 ipsec4_hdrsiz(struct mbuf *m, u_int8_t dir, struct inpcb *inp) in ipsec4_hdrsiz() argument
2189 if (m == NULL) { in ipsec4_hdrsiz()
2201 sp = ipsec4_getpolicybyaddr(m, dir, IP_FORWARDING, &error); in ipsec4_hdrsiz()
2203 sp = ipsec4_getpolicybyaddr(m, dir, 0, &error); in ipsec4_hdrsiz()
2224 ipsec6_hdrsiz(struct mbuf *m, u_int8_t dir, struct in6pcb *in6p) in ipsec6_hdrsiz() argument
2232 if (m == NULL) { in ipsec6_hdrsiz()
2242 sp = ipsec6_getpolicybyaddr(m, dir, IP_FORWARDING, &error); in ipsec6_hdrsiz()
2244 sp = ipsec6_getpolicybyaddr(m, dir, 0, &error); in ipsec6_hdrsiz()
2266 ipsec4_encapsulate(struct mbuf *m, struct secasvar *sav) in ipsec4_encapsulate() argument
2276 m_freem(m); in ipsec4_encapsulate()
2280 if (m->m_len < sizeof(*ip)) { in ipsec4_encapsulate()
2284 ip = mtod(m, struct ip *); in ipsec4_encapsulate()
2291 if (m->m_len != hlen) { in ipsec4_encapsulate()
2298 ip->ip_sum = in_cksum(m, hlen); in ipsec4_encapsulate()
2300 ip->ip_sum = in_cksum(m, hlen); in ipsec4_encapsulate()
2303 plen = m->m_pkthdr.len; in ipsec4_encapsulate()
2309 if (M_LEADINGSPACE(m->m_next) < hlen) { in ipsec4_encapsulate()
2313 m_freem(m); in ipsec4_encapsulate()
2317 n->m_next = m->m_next; in ipsec4_encapsulate()
2318 m->m_next = n; in ipsec4_encapsulate()
2319 m->m_pkthdr.len += hlen; in ipsec4_encapsulate()
2322 m->m_next->m_len += hlen; in ipsec4_encapsulate()
2323 m->m_next->m_data -= hlen; in ipsec4_encapsulate()
2324 m->m_pkthdr.len += hlen; in ipsec4_encapsulate()
2325 oip = mtod(m->m_next, struct ip *); in ipsec4_encapsulate()
2327 ip = mtod(m, struct ip *); in ipsec4_encapsulate()
2329 m->m_len = sizeof(struct ip); in ipsec4_encapsulate()
2330 m->m_pkthdr.len -= (hlen - sizeof(struct ip)); in ipsec4_encapsulate()
2362 ip->ip_id = ip_randomid((uint64_t)m); in ipsec4_encapsulate()
2377 ipsec6_encapsulate(struct mbuf *m, struct secasvar *sav) in ipsec6_encapsulate() argument
2386 m_freem(m); in ipsec6_encapsulate()
2390 plen = m->m_pkthdr.len; in ipsec6_encapsulate()
2395 if (m->m_len != sizeof(struct ip6_hdr)) { in ipsec6_encapsulate()
2398 if (M_LEADINGSPACE(m->m_next) < sizeof(struct ip6_hdr)) { in ipsec6_encapsulate()
2402 m_freem(m); in ipsec6_encapsulate()
2406 n->m_next = m->m_next; in ipsec6_encapsulate()
2407 m->m_next = n; in ipsec6_encapsulate()
2408 m->m_pkthdr.len += sizeof(struct ip6_hdr); in ipsec6_encapsulate()
2411 m->m_next->m_len += sizeof(struct ip6_hdr); in ipsec6_encapsulate()
2412 m->m_next->m_data -= sizeof(struct ip6_hdr); in ipsec6_encapsulate()
2413 m->m_pkthdr.len += sizeof(struct ip6_hdr); in ipsec6_encapsulate()
2414 oip6 = mtod(m->m_next, struct ip6_hdr *); in ipsec6_encapsulate()
2416 ip6 = mtod(m, struct ip6_hdr *); in ipsec6_encapsulate()
2453 ipsec64_encapsulate(struct mbuf *m, struct secasvar *sav, u_int32_t dscp_mapping) in ipsec64_encapsulate() argument
2462 m_freem(m); in ipsec64_encapsulate()
2466 plen = m->m_pkthdr.len; in ipsec64_encapsulate()
2467 ip6 = mtod(m, struct ip6_hdr *); in ipsec64_encapsulate()
2471 if (m->m_len != sizeof(struct ip6_hdr)) { in ipsec64_encapsulate()
2474 if (M_LEADINGSPACE(m->m_next) < sizeof(struct ip6_hdr)) { in ipsec64_encapsulate()
2478 m_freem(m); in ipsec64_encapsulate()
2482 n->m_next = m->m_next; in ipsec64_encapsulate()
2483 m->m_next = n; in ipsec64_encapsulate()
2484 m->m_pkthdr.len += sizeof(struct ip); in ipsec64_encapsulate()
2487 m->m_next->m_len += sizeof(struct ip6_hdr); in ipsec64_encapsulate()
2488 m->m_next->m_data -= sizeof(struct ip6_hdr); in ipsec64_encapsulate()
2489 m->m_pkthdr.len += sizeof(struct ip); in ipsec64_encapsulate()
2490 ip6i = mtod(m->m_next, struct ip6_hdr *); in ipsec64_encapsulate()
2494 ip = mtod(m, struct ip *); in ipsec64_encapsulate()
2495 m->m_len = sizeof(struct ip); in ipsec64_encapsulate()
2549 if (!state->m) { in ipsec6_update_routecache_and_output()
2552 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_update_routecache_and_output()
2607 state->m = ipsec6_splithdr(state->m); in ipsec6_update_routecache_and_output()
2608 if (!state->m) { in ipsec6_update_routecache_and_output()
2614 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_update_routecache_and_output()
2618 error = esp6_output(state->m, &ip6->ip6_nxt, state->m->m_next, sav); in ipsec6_update_routecache_and_output()
2620 m_freem(state->m); in ipsec6_update_routecache_and_output()
2625 error = ah6_output(state->m, &ip6->ip6_nxt, state->m->m_next, sav); in ipsec6_update_routecache_and_output()
2629 m_freem(state->m); in ipsec6_update_routecache_and_output()
2636 state->m = NULL; in ipsec6_update_routecache_and_output()
2640 plen = state->m->m_pkthdr.len - sizeof(struct ip6_hdr); in ipsec6_update_routecache_and_output()
2647 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_update_routecache_and_output()
2650 ipsec_set_pkthdr_for_interface(sav->sah->ipsec_if, state->m, AF_INET6, in ipsec6_update_routecache_and_output()
2655 ifnet_stat_increment_out(sav->sah->ipsec_if, 1, (u_int32_t)mbuf_pkthdr_len(state->m), 0); in ipsec6_update_routecache_and_output()
2665 ip6_output_setsrcifscope(state->m, state->outgoing_if, NULL); in ipsec6_update_routecache_and_output()
2666 ip6_output_setdstifscope(state->m, state->outgoing_if, NULL); in ipsec6_update_routecache_and_output()
2670 (void) ip6_output(state->m, NULL, &ro6_new, IPV6_OUTARGS, NULL, NULL, &ip6oa); in ipsec6_update_routecache_and_output()
2671 state->m = NULL; in ipsec6_update_routecache_and_output()
2685 struct mbuf *m; in ipsec46_encapsulate() local
2692 m = state->m; in ipsec46_encapsulate()
2693 if (!m) { in ipsec46_encapsulate()
2700 m_freem(m); in ipsec46_encapsulate()
2704 if (m->m_len < sizeof(*ip)) { in ipsec46_encapsulate()
2709 ip = mtod(m, struct ip *); in ipsec46_encapsulate()
2716 if (m->m_len != hlen) { in ipsec46_encapsulate()
2724 ip->ip_sum = in_cksum(m, hlen); in ipsec46_encapsulate()
2726 ip->ip_sum = in_cksum(m, hlen); in ipsec46_encapsulate()
2729 plen = m->m_pkthdr.len; // save original IPv4 packet len, this will be ipv6 payload len in ipsec46_encapsulate()
2734 if (M_LEADINGSPACE(m->m_next) < hlen) { in ipsec46_encapsulate()
2738 m_freem(m); in ipsec46_encapsulate()
2742 n->m_next = m->m_next; in ipsec46_encapsulate()
2743 m->m_next = n; in ipsec46_encapsulate()
2744 m->m_pkthdr.len += sizeof(struct ip6_hdr); in ipsec46_encapsulate()
2747 m->m_next->m_len += hlen; in ipsec46_encapsulate()
2748 m->m_next->m_data -= hlen; in ipsec46_encapsulate()
2749 m->m_pkthdr.len += sizeof(struct ip6_hdr); in ipsec46_encapsulate()
2750 oip = mtod(m->m_next, struct ip *); in ipsec46_encapsulate()
2752 ip = mtod(m, struct ip *); in ipsec46_encapsulate()
2758 if (M_LEADINGSPACE(m) < sizeof(struct ip6_hdr) - hlen) { in ipsec46_encapsulate()
2762 m_freem(m); in ipsec46_encapsulate()
2765 M_COPY_PKTHDR(n, m); in ipsec46_encapsulate()
2768 n->m_next = m->m_next; in ipsec46_encapsulate()
2769 m->m_next = NULL; in ipsec46_encapsulate()
2770 m_freem(m); in ipsec46_encapsulate()
2771 state->m = n; in ipsec46_encapsulate()
2772 m = state->m; in ipsec46_encapsulate()
2774 m->m_len += (sizeof(struct ip6_hdr) - hlen); in ipsec46_encapsulate()
2775 m->m_data -= (sizeof(struct ip6_hdr) - hlen); in ipsec46_encapsulate()
2777 ip6 = mtod(m, struct ip6_hdr *); in ipsec46_encapsulate()
3131 ipsec_dumpmbuf(struct mbuf *m) in ipsec_dumpmbuf() argument
3139 while (m) { in ipsec_dumpmbuf()
3140 p = mtod(m, u_char *); in ipsec_dumpmbuf()
3141 for (i = 0; i < m->m_len; i++) { in ipsec_dumpmbuf()
3148 m = m->m_next; in ipsec_dumpmbuf()
3199 state->m = ipsec4_splithdr(state->m); in ipsec4_output_internal()
3200 if (!state->m) { in ipsec4_output_internal()
3209 state->m = NULL; in ipsec4_output_internal()
3216 error = ipsec4_encapsulate(state->m, sav); in ipsec4_output_internal()
3218 state->m = NULL; in ipsec4_output_internal()
3221 ip = mtod(state->m, struct ip *); in ipsec4_output_internal()
3279 state->m = ipsec4_splithdr(state->m); in ipsec4_output_internal()
3280 if (!state->m) { in ipsec4_output_internal()
3287 if ((error = esp4_output(state->m, sav)) != 0) { in ipsec4_output_internal()
3288 state->m = NULL; in ipsec4_output_internal()
3293 m_freem(state->m); in ipsec4_output_internal()
3294 state->m = NULL; in ipsec4_output_internal()
3299 if ((error = ah4_output(state->m, sav)) != 0) { in ipsec4_output_internal()
3300 state->m = NULL; in ipsec4_output_internal()
3308 m_freem(state->m); in ipsec4_output_internal()
3309 state->m = NULL; in ipsec4_output_internal()
3314 if (state->m == 0) { in ipsec4_output_internal()
3320 state->m->m_pkthdr.pkt_flowid = sav->flowid; in ipsec4_output_internal()
3321 state->m->m_pkthdr.pkt_flags |= PKTF_FLOW_ID; in ipsec4_output_internal()
3623 if (state->m == NULL) { in ipsec4_interface_output()
3630 struct ip *ip = mtod(state->m, struct ip *); in ipsec4_interface_output()
3663 m_freem(state->m); in ipsec4_interface_output()
3664 state->m = NULL; in ipsec4_interface_output()
3684 if (!state->m) { in ipsec4_output()
3699 ip = mtod(state->m, struct ip *); in ipsec4_output()
3731 if (state->m->m_len < hlen + sizeof(struct udphdr)) { in ipsec4_output()
3732 state->m = m_pullup(state->m, hlen + sizeof(struct udphdr)); in ipsec4_output()
3733 if (!state->m) { in ipsec4_output()
3738 ip = mtod(state->m, struct ip *); in ipsec4_output()
3787 m_freem(state->m); in ipsec4_output()
3788 state->m = NULL; in ipsec4_output()
3831 error = esp6_output(state->m, nexthdrp, mprev->m_next, sav); in ipsec6_output_trans_internal()
3833 m_freem(state->m); in ipsec6_output_trans_internal()
3838 error = ah6_output(state->m, nexthdrp, mprev->m_next, sav); in ipsec6_output_trans_internal()
3843 m_freem(state->m); in ipsec6_output_trans_internal()
3849 state->m = NULL; in ipsec6_output_trans_internal()
3852 plen = state->m->m_pkthdr.len - sizeof(struct ip6_hdr); in ipsec6_output_trans_internal()
3860 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_trans_internal()
3864 ASSERT(state->m != NULL); in ipsec6_output_trans_internal()
3865 state->m->m_pkthdr.pkt_flowid = sav->flowid; in ipsec6_output_trans_internal()
3866 state->m->m_pkthdr.pkt_flags |= PKTF_FLOW_ID; in ipsec6_output_trans_internal()
3894 if (!state->m) { in ipsec6_output_trans()
3922 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_trans()
3935 sin6->sin6_scope_id = ip6_output_getsrcifscope(state->m); in ipsec6_output_trans()
3952 sin6->sin6_scope_id = ip6_output_getdstifscope(state->m); in ipsec6_output_trans()
3980 icmp6_error(state->m, ICMP6_DST_UNREACH, in ipsec6_output_trans()
3982 state->m = NULL; /* icmp6_error freed the mbuf */ in ipsec6_output_trans()
4016 m_freem(state->m); in ipsec6_output_trans()
4017 state->m = NULL; in ipsec6_output_trans()
4056 state->m = ipsec6_splithdr(state->m); in ipsec6_output_tunnel_internal()
4057 if (!state->m) { in ipsec6_output_tunnel_internal()
4064 error = ipsec6_encapsulate(state->m, sav); in ipsec6_output_tunnel_internal()
4066 state->m = 0; in ipsec6_output_tunnel_internal()
4069 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_tunnel_internal()
4088 error = ipsec64_encapsulate(state->m, sav, state->dscp_mapping); in ipsec6_output_tunnel_internal()
4090 state->m = 0; in ipsec6_output_tunnel_internal()
4094 ip = mtod(state->m, struct ip *); in ipsec6_output_tunnel_internal()
4120 state->m = ipsec4_splithdr(state->m); in ipsec6_output_tunnel_internal()
4121 if (!state->m) { in ipsec6_output_tunnel_internal()
4129 if ((error = esp4_output(state->m, sav)) != 0) { in ipsec6_output_tunnel_internal()
4130 state->m = NULL; in ipsec6_output_tunnel_internal()
4137 m_freem(state->m); in ipsec6_output_tunnel_internal()
4138 state->m = NULL; in ipsec6_output_tunnel_internal()
4144 if ((error = ah4_output(state->m, sav)) != 0) { in ipsec6_output_tunnel_internal()
4145 state->m = NULL; in ipsec6_output_tunnel_internal()
4154 m_freem(state->m); in ipsec6_output_tunnel_internal()
4155 state->m = NULL; in ipsec6_output_tunnel_internal()
4161 if (state->m == 0) { in ipsec6_output_tunnel_internal()
4166 ipsec_set_pkthdr_for_interface(sav->sah->ipsec_if, state->m, in ipsec6_output_tunnel_internal()
4170 ip = mtod(state->m, struct ip *); in ipsec6_output_tunnel_internal()
4172 error = ip_output(state->m, NULL, &ro4_copy, IP_OUTARGS, NULL, &ipoa); in ipsec6_output_tunnel_internal()
4173 state->m = NULL; in ipsec6_output_tunnel_internal()
4245 state->m = ipsec6_splithdr(state->m); in ipsec6_output_tunnel_internal()
4246 if (!state->m) { in ipsec6_output_tunnel_internal()
4251 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_tunnel_internal()
4255 error = esp6_output(state->m, &ip6->ip6_nxt, state->m->m_next, sav); in ipsec6_output_tunnel_internal()
4257 m_freem(state->m); in ipsec6_output_tunnel_internal()
4262 error = ah6_output(state->m, &ip6->ip6_nxt, state->m->m_next, sav); in ipsec6_output_tunnel_internal()
4267 m_freem(state->m); in ipsec6_output_tunnel_internal()
4273 state->m = NULL; in ipsec6_output_tunnel_internal()
4276 plen = state->m->m_pkthdr.len - sizeof(struct ip6_hdr); in ipsec6_output_tunnel_internal()
4284 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_tunnel_internal()
4288 if (state->m != NULL) { in ipsec6_output_tunnel_internal()
4289 state->m->m_pkthdr.pkt_flowid = sav->flowid; in ipsec6_output_tunnel_internal()
4290 state->m->m_pkthdr.pkt_flags |= PKTF_FLOW_ID; in ipsec6_output_tunnel_internal()
4317 if (!state->m) { in ipsec6_output_tunnel()
4351 ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_output_tunnel()
4361 sin6->sin6_scope_id = ip6_output_getsrcifscope(state->m); in ipsec6_output_tunnel()
4378 sin6->sin6_scope_id = ip6_output_getdstifscope(state->m); in ipsec6_output_tunnel()
4447 if (state->m) { in ipsec6_output_tunnel()
4448 m_freem(state->m); in ipsec6_output_tunnel()
4450 state->m = NULL; in ipsec6_output_tunnel()
4465 if (state->m == NULL) { in ipsec6_interface_output()
4475 struct ip6_hdr *ip6 = mtod(state->m, struct ip6_hdr *); in ipsec6_interface_output()
4513 m_freem(state->m); in ipsec6_interface_output()
4514 state->m = NULL; in ipsec6_interface_output()
4523 ipsec4_splithdr(struct mbuf *m) in ipsec4_splithdr() argument
4529 if (m->m_len < sizeof(struct ip)) { in ipsec4_splithdr()
4530 …thdr: first mbuf too short, m_len %d, pkt_len %d, m_flag %x", m->m_len, m->m_pkthdr.len, m->m_flag… in ipsec4_splithdr()
4532 ip = mtod(m, struct ip *); in ipsec4_splithdr()
4538 if (m->m_len > hlen) { in ipsec4_splithdr()
4541 m_freem(m); in ipsec4_splithdr()
4544 M_COPY_PKTHDR(mh, m); in ipsec4_splithdr()
4546 m->m_flags &= ~M_PKTHDR; in ipsec4_splithdr()
4547 m_mchtype(m, MT_DATA); in ipsec4_splithdr()
4548 m->m_len -= hlen; in ipsec4_splithdr()
4549 m->m_data += hlen; in ipsec4_splithdr()
4550 mh->m_next = m; in ipsec4_splithdr()
4551 m = mh; in ipsec4_splithdr()
4552 m->m_len = hlen; in ipsec4_splithdr()
4553 bcopy((caddr_t)ip, mtod(m, caddr_t), hlen); in ipsec4_splithdr()
4554 } else if (m->m_len < hlen) { in ipsec4_splithdr()
4555 m = m_pullup(m, hlen); in ipsec4_splithdr()
4556 if (!m) { in ipsec4_splithdr()
4560 return m; in ipsec4_splithdr()
4565 ipsec6_splithdr(struct mbuf *m) in ipsec6_splithdr() argument
4571 if (m->m_len < sizeof(struct ip6_hdr)) { in ipsec6_splithdr()
4574 ip6 = mtod(m, struct ip6_hdr *); in ipsec6_splithdr()
4576 if (m->m_len > hlen) { in ipsec6_splithdr()
4579 m_freem(m); in ipsec6_splithdr()
4582 M_COPY_PKTHDR(mh, m); in ipsec6_splithdr()
4584 m->m_flags &= ~M_PKTHDR; in ipsec6_splithdr()
4585 m_mchtype(m, MT_DATA); in ipsec6_splithdr()
4586 m->m_len -= hlen; in ipsec6_splithdr()
4587 m->m_data += hlen; in ipsec6_splithdr()
4588 mh->m_next = m; in ipsec6_splithdr()
4589 m = mh; in ipsec6_splithdr()
4590 m->m_len = hlen; in ipsec6_splithdr()
4591 bcopy((caddr_t)ip6, mtod(m, caddr_t), hlen); in ipsec6_splithdr()
4592 } else if (m->m_len < hlen) { in ipsec6_splithdr()
4593 m = m_pullup(m, hlen); in ipsec6_splithdr()
4594 if (!m) { in ipsec6_splithdr()
4598 return m; in ipsec6_splithdr()
4604 struct mbuf *m, /* no pullup permitted, m->m_len >= ip */ in ipsec4_tunnel_validate() argument
4626 if (m->m_len < sizeof(struct ip)) { in ipsec4_tunnel_validate()
4633 if (m->m_pkthdr.len < off + sizeof(struct ip)) { in ipsec4_tunnel_validate()
4637 oip = mtod(m, struct ip *); in ipsec4_tunnel_validate()
4699 m_copydata(m, off + offsetof(struct ip, ip_src), sizeof(i4src.sin_addr), in ipsec4_tunnel_validate()
4701 m_copydata(m, off + offsetof(struct ip, ip_dst), sizeof(i4dst.sin_addr), in ipsec4_tunnel_validate()
4709 m_copydata(m, off + offsetof(struct ip6_hdr, ip6_src), sizeof(i6src.sin6_addr), in ipsec4_tunnel_validate()
4711 m_copydata(m, off + offsetof(struct ip6_hdr, ip6_dst), sizeof(i6dst.sin6_addr), in ipsec4_tunnel_validate()
4729 struct mbuf *m, /* no pullup permitted, m->m_len >= ip */ in ipsec6_tunnel_validate() argument
4750 if (m->m_len < sizeof(struct ip6_hdr)) { in ipsec6_tunnel_validate()
4755 if (m->m_pkthdr.len < off + sizeof(struct ip)) { in ipsec6_tunnel_validate()
4756 …ipseclog((LOG_NOTICE, "ipsec6_tunnel_validate pkthdr %d off %d ip6hdr %zu", m->m_pkthdr.len, off, … in ipsec6_tunnel_validate()
4760 if (m->m_pkthdr.len < off + sizeof(struct ip6_hdr)) { in ipsec6_tunnel_validate()
4761 …ipseclog((LOG_NOTICE, "ipsec6_tunnel_validate pkthdr %d off %d ip6hdr %zu", m->m_pkthdr.len, off, … in ipsec6_tunnel_validate()
4769 oip6 = mtod(m, struct ip6_hdr *); in ipsec6_tunnel_validate()
4817 m_copydata(m, off + offsetof(struct ip, ip_src), sizeof(i4src.sin_addr), in ipsec6_tunnel_validate()
4819 m_copydata(m, off + offsetof(struct ip, ip_dst), sizeof(i4dst.sin_addr), in ipsec6_tunnel_validate()
4827 m_copydata(m, off + offsetof(struct ip6_hdr, ip6_src), sizeof(i6src.sin6_addr), in ipsec6_tunnel_validate()
4829 m_copydata(m, off + offsetof(struct ip6_hdr, ip6_dst), sizeof(i6dst.sin6_addr), in ipsec6_tunnel_validate()
4859 ipsec_copypkt(struct mbuf *m) in ipsec_copypkt() argument
4863 for (n = m, mpp = &m; n; n = n->m_next) { in ipsec_copypkt()
4951 return m; in ipsec_copypkt()
4953 m_freem(m); in ipsec_copypkt()
4967 struct mbuf *m) in ipsec_addaux() argument
4972 tag = m_tag_locate(m, KERNEL_MODULE_TAG_ID, KERNEL_TAG_TYPE_IPSEC); in ipsec_addaux()
4979 sizeof(struct ipsec_tag), M_DONTWAIT, m); in ipsec_addaux()
4986 m_tag_prepend(m, tag); in ipsec_addaux()
4995 struct mbuf *m) in ipsec_findaux() argument
4999 tag = m_tag_locate(m, KERNEL_MODULE_TAG_ID, KERNEL_TAG_TYPE_IPSEC); in ipsec_findaux()
5006 struct mbuf *m) in ipsec_delaux() argument
5010 tag = m_tag_locate(m, KERNEL_MODULE_TAG_ID, KERNEL_TAG_TYPE_IPSEC); in ipsec_delaux()
5013 m_tag_delete(m, tag); in ipsec_delaux()
5020 struct mbuf *m, in ipsec_optaux() argument
5024 ipsec_delaux(m); in ipsec_optaux()
5029 ipsec_setsocket(struct mbuf *m, struct socket *so) in ipsec_setsocket() argument
5035 tag = ipsec_addaux(m); in ipsec_setsocket()
5040 tag = ipsec_findaux(m); in ipsec_setsocket()
5044 ipsec_optaux(m, tag); in ipsec_setsocket()
5050 ipsec_getsocket(struct mbuf *m) in ipsec_getsocket() argument
5054 itag = ipsec_findaux(m); in ipsec_getsocket()
5064 struct mbuf *m, in ipsec_incr_history_count() argument
5070 itag = ipsec_addaux(m); in ipsec_incr_history_count()
5084 struct mbuf *m) in ipsec_get_history_count() argument
5088 itag = ipsec_findaux(m); in ipsec_get_history_count()
5151 struct mbuf *m = NULL; in ipsec_send_natt_keepalive() local
5180 m = m_gethdr(M_NOWAIT, MT_DATA); in ipsec_send_natt_keepalive()
5181 if (m == NULL) { in ipsec_send_natt_keepalive()
5195 struct ip *ip = (__typeof__(ip))(void *)m_mtod_current(m); in ipsec_send_natt_keepalive()
5204 struct udphdr *uh = (__typeof__(uh))(void *)(m_mtod_current(m) + sizeof(*ip)); in ipsec_send_natt_keepalive()
5205 m->m_len = sizeof(struct udpiphdr) + 1; in ipsec_send_natt_keepalive()
5206 bzero(m_mtod_current(m), m->m_len); in ipsec_send_natt_keepalive()
5207 m->m_pkthdr.len = m->m_len; in ipsec_send_natt_keepalive()
5209 ip->ip_len = (u_short)m->m_len; in ipsec_send_natt_keepalive()
5228 *(u_int8_t*)(m_mtod_current(m) + sizeof(*ip) + sizeof(*uh)) = 0xFF; in ipsec_send_natt_keepalive()
5238 necp_mark_packet_as_keepalive(m, TRUE); in ipsec_send_natt_keepalive()
5239 error = ip_output(m, NULL, &ro, IP_OUTARGS | IP_NOIPSEC, NULL, &ipoa); in ipsec_send_natt_keepalive()
5254 struct ip6_hdr *ip6 = (__typeof__(ip6))m_mtod_current(m); in ipsec_send_natt_keepalive()
5263 struct udphdr *uh = (__typeof__(uh))(void *)(m_mtod_current(m) + sizeof(*ip6)); in ipsec_send_natt_keepalive()
5264 m->m_len = sizeof(struct udphdr) + sizeof(struct ip6_hdr) + 1; in ipsec_send_natt_keepalive()
5265 bzero(m_mtod_current(m), m->m_len); in ipsec_send_natt_keepalive()
5266 m->m_pkthdr.len = m->m_len; in ipsec_send_natt_keepalive()
5277 ip6_output_setsrcifscope(m, SIN6(&sav->sah->saidx.src)->sin6_scope_id, NULL); in ipsec_send_natt_keepalive()
5278 ip6_output_setdstifscope(m, SIN6(&sav->sah->saidx.dst)->sin6_scope_id, NULL); in ipsec_send_natt_keepalive()
5282 ip6_output_setdstifscope(m, SIN6(&sav->sah->saidx.src)->sin6_scope_id, NULL); in ipsec_send_natt_keepalive()
5283 ip6_output_setsrcifscope(m, SIN6(&sav->sah->saidx.dst)->sin6_scope_id, NULL); in ipsec_send_natt_keepalive()
5300 *(u_int8_t*)(m_mtod_current(m) + sizeof(*ip6) + sizeof(*uh)) = 0xFF; in ipsec_send_natt_keepalive()
5302 m->m_pkthdr.csum_flags = (CSUM_UDPIPV6 | CSUM_ZERO_INVERT); in ipsec_send_natt_keepalive()
5303 m->m_pkthdr.csum_data = offsetof(struct udphdr, uh_sum); in ipsec_send_natt_keepalive()
5313 necp_mark_packet_as_keepalive(m, TRUE); in ipsec_send_natt_keepalive()
5314 error = ip6_output(m, NULL, &ro6, IPV6_OUTARGS, NULL, NULL, &ip6oa); in ipsec_send_natt_keepalive()
5321 m_freem(m); in ipsec_send_natt_keepalive()