Lines Matching defs:m

114 ipsec4_allocsa(struct ifnet *ifp, struct mbuf *m, const struct ip *ip,
189 ipsec4_perform_request(struct ifnet *ifp, struct mbuf *m, struct ip *ip1,
211 sav = ipsec4_allocsa(ifp, m, ip1, sp, &idx, &error);
214 (void)ipsec_accel_output(ifp, m, inp, sp, NULL,
224 IPSEC_INIT_CTX(&ctx, &m, inp, sav, AF_INET, IPSEC_ENC_BEFORE);
227 /* Re-calculate *ip1 after potential change of m in the hook. */
228 m_copydata(m, 0, sizeof(*ip1), (char *)ip1);
231 accel = ipsec_accel_output(ifp, m, inp, sp, sav, AF_INET, mtu,
238 if ((m->m_pkthdr.csum_flags & CSUM_DELAY_DATA & ~hwassist) != 0) {
239 in_delayed_cksum(m);
240 m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
243 if ((m->m_pkthdr.csum_flags & CSUM_SCTP & ~hwassist) != 0) {
244 sctp_delayed_cksum(m, (uint32_t)(ip1->ip_hl << 2));
245 m->m_pkthdr.csum_flags &= ~CSUM_SCTP;
251 error = mb_unmapped_to_ext(m, &m1);
259 m = m1;
261 ip = mtod(m, struct ip *);
270 ip->ip_len = htons(m->m_pkthdr.len);
272 ip->ip_sum = in_cksum(m, ip->ip_hl << 2);
273 error = ipsec_encap(&m, &sav->sah->saidx);
284 IPSEC_INIT_CTX(&ctx, &m, inp, sav, dst->sa.sa_family, IPSEC_ENC_AFTER);
293 * NB: m & sav are ``passed to caller'' who's responsible for
298 ip = mtod(m, struct ip *);
315 error = (*sav->tdb_xform->xf_output)(m, sp, sav, idx, i, off);
319 if (m != NULL)
320 m_freem(m);
328 ipsec4_process_packet(struct ifnet *ifp, struct mbuf *m, struct ip *ip1,
332 return (ipsec4_perform_request(ifp, m, ip1, sp, inp, 0, mtu));
336 ipsec4_check_pmtu(struct ifnet *ifp, struct mbuf *m, struct ip *ip1,
356 sav = ipsec4_allocsa(ifp, m, ip1, sp, &idx, &error);
366 m_freem(m);
380 if (m_length(m, NULL) + hlen > pmtu) {
389 icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_NEEDFRAG,
392 m_freem(m);
397 m_freem(m);
407 ipsec4_common_output1(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp,
414 sp = ipsec4_checkpolicy(m, inp, ip1, &error, !forwarding);
418 m_freem(m);
434 error = ipsec4_check_pmtu(ifp, m, ip1, sp, forwarding);
442 error = ipsec4_process_packet(ifp, m, ip1, sp, inp, mtu);
457 ipsec4_common_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp,
463 if (((m->m_flags & M_PKTHDR) != 0 && m->m_pkthdr.len < sizeof(*ip)) ||
464 ((m->m_flags & M_PKTHDR) == 0 && m->m_len < sizeof(*ip))) {
465 m_free(m);
472 m_copydata(m, 0, sizeof(*ip), (char *)ip);
475 return (ipsec4_common_output1(ifp, m, inp, ip, forwarding, mtu));
484 ipsec4_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp, u_long mtu)
492 if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL)
495 return (ipsec4_common_output(ifp, m, inp, NULL, 0, mtu));
504 ipsec4_forward(struct mbuf *m)
508 m_copydata(m, 0, sizeof(ip_hdr), (char *)&ip_hdr);
514 if (ipsec4_in_reject1(m, &ip_hdr, NULL) != 0) {
515 m_freem(m);
518 return (ipsec4_common_output(NULL /* XXXKIB */, m, NULL, &ip_hdr,
539 ipsec6_allocsa(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
570 ip6 = mtod(m, struct ip6_hdr *);
628 ipsec6_perform_request(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
640 sav = ipsec6_allocsa(ifp, m, sp, &idx, &error);
643 (void)ipsec_accel_output(ifp, m, inp, sp, NULL,
652 ip6 = mtod(m, struct ip6_hdr *);
653 ip6->ip6_plen = htons(m->m_pkthdr.len - sizeof(*ip6));
655 IPSEC_INIT_CTX(&ctx, &m, inp, sav, AF_INET6, IPSEC_ENC_BEFORE);
660 accel = ipsec_accel_output(ifp, m, inp, sp, sav, AF_INET6, mtu,
667 if ((m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 & ~hwassist) != 0) {
668 in6_delayed_cksum(m, m->m_pkthdr.len -
670 m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
673 if ((m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6 & ~hwassist) != 0) {
674 sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
675 m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6;
681 ip6 = mtod(m, struct ip6_hdr *); /* pfil can change mbuf */
690 if (m->m_pkthdr.len - sizeof(*ip6) > IPV6_MAXPACKET) {
695 error = ipsec_encap(&m, &sav->sah->saidx);
706 IPSEC_INIT_CTX(&ctx, &m, inp, sav, dst->sa.sa_family, IPSEC_ENC_AFTER);
715 ip = mtod(m, struct ip *);
732 error = (*sav->tdb_xform->xf_output)(m, sp, sav, idx, i, off);
736 if (m != NULL)
737 m_freem(m);
745 ipsec6_process_packet(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
749 return (ipsec6_perform_request(ifp, m, sp, inp, 0, mtu));
756 ipsec6_check_pmtu(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
774 sav = ipsec6_allocsa(ifp, m, sp, &idx, &error);
784 m_freem(m);
798 if (m_length(m, NULL) + hlen > pmtu) {
807 icmp6_error(m, ICMP6_PACKET_TOO_BIG, 0, pmtu - hlen);
809 m_freem(m);
820 ipsec6_common_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp,
827 sp = ipsec6_checkpolicy(m, inp, &error, !forwarding);
831 m_freem(m);
837 error = ipsec6_check_pmtu(ifp, m, sp, forwarding);
846 error = ipsec6_process_packet(ifp, m, sp, inp, mtu);
866 ipsec6_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp, u_long mtu)
874 if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL)
877 return (ipsec6_common_output(ifp, m, inp, 0, mtu));
886 ipsec6_forward(struct mbuf *m)
893 if (ipsec6_in_reject(m, NULL) != 0) {
894 m_freem(m);
897 return (ipsec6_common_output(NULL /* XXXKIB */, m, NULL, 1, 0));
902 ipsec_process_done(struct mbuf *m, struct secpolicy *sp, struct secasvar *sav,
922 ip = mtod(m, struct ip *);
924 ip->ip_len = htons(m->m_pkthdr.len);
930 if (m->m_pkthdr.len < sizeof (struct ip6_hdr)) {
934 if (m->m_pkthdr.len - sizeof (struct ip6_hdr) > IPV6_MAXPACKET) {
939 mtod(m, struct ip6_hdr *)->ip6_plen =
940 htons(m->m_pkthdr.len - sizeof(struct ip6_hdr));
965 m_tag_prepend(m, mtag);
967 key_sa_recordxfer(sav, m); /* record data transfer */
982 return (ipsec4_perform_request(NULL, m, ip, sp, NULL,
990 return (ipsec6_perform_request(NULL, m, sp, NULL,
1008 error = udp_ipsec_output(m, sav);
1022 error = ip_output(m, NULL, NULL, IP_RAWOUTPUT, NULL, NULL);
1028 error = ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL);
1037 m_freem(m);
1063 ipsec_prepend(struct mbuf *m, int len, int how)
1067 M_ASSERTPKTHDR(m);
1069 if (M_LEADINGSPACE(m) >= len) {
1071 m->m_data -= len;
1072 m->m_len += len;
1073 m->m_pkthdr.len += len;
1074 return (m);
1076 n = m_gethdr(how, m->m_type);
1078 m_freem(m);
1081 m_move_pkthdr(n, m);
1082 n->m_next = m;