X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/91447636331957f3d9b5ca5b508f07c526b0074d..4d15aeb193b2c68f1d38666c317f8d3734f5f083:/bsd/netinet6/ipcomp_output.c diff --git a/bsd/netinet6/ipcomp_output.c b/bsd/netinet6/ipcomp_output.c index 7a8d39b1d..8ad23be73 100644 --- a/bsd/netinet6/ipcomp_output.c +++ b/bsd/netinet6/ipcomp_output.c @@ -1,3 +1,31 @@ +/* + * Copyright (c) 2016 Apple Inc. All rights reserved. + * + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ + */ + /* $FreeBSD: src/sys/netinet6/ipcomp_output.c,v 1.1.2.2 2001/07/03 11:01:54 ume Exp $ */ /* $KAME: ipcomp_output.c,v 1.23 2001/01/23 08:59:37 itojun Exp $ */ @@ -49,7 +77,7 @@ #include #include -#include +#include #include #include @@ -78,10 +106,9 @@ #include -extern lck_mtx_t *sadb_mutex; static int ipcomp_output(struct mbuf *, u_char *, struct mbuf *, - struct ipsecrequest *, int); + int, struct secasvar *sav); /* * Modify the packet so that the payload is compressed. @@ -102,19 +129,13 @@ static int ipcomp_output(struct mbuf *, u_char *, struct mbuf *, * <-----------------> compoff */ static int -ipcomp_output(m, nexthdrp, md, isr, af) - struct mbuf *m; - u_char *nexthdrp; - struct mbuf *md; - struct ipsecrequest *isr; - int af; +ipcomp_output(struct mbuf *m, u_char *nexthdrp, struct mbuf *md, int af, struct secasvar *sav) { struct mbuf *n; struct mbuf *md0; struct mbuf *mcopy; struct mbuf *mprev; struct ipcomp *ipcomp; - struct secasvar *sav = isr->sav; const struct ipcomp_algorithm *algo; u_int16_t cpi; /* host order */ size_t plen0, plen; /*payload length to be compressed*/ @@ -144,7 +165,7 @@ ipcomp_output(m, nexthdrp, md, isr, af) /* grab parameters */ algo = ipcomp_algorithm_lookup(sav->alg_enc); if ((ntohl(sav->spi) & ~0xffff) != 0 || !algo) { - stat->out_inval++; + IPSEC_STAT_INCREMENT(stat->out_inval); m_freem(m); return EINVAL; } @@ -189,7 +210,7 @@ ipcomp_output(m, nexthdrp, md, isr, af) if (mprev == NULL || mprev->m_next != md) { ipseclog((LOG_DEBUG, "ipcomp%d_output: md is not in chain\n", afnumber)); - stat->out_inval++; + IPSEC_STAT_INCREMENT(stat->out_inval); m_freem(m); m_freem(md0); m_freem(mcopy); @@ -206,19 +227,16 @@ ipcomp_output(m, nexthdrp, md, isr, af) mprev->m_next = md; /* compress data part */ - lck_mtx_unlock(sadb_mutex); if ((*algo->compress)(m, md, &plen) || mprev->m_next == NULL) { - lck_mtx_lock(sadb_mutex); ipseclog((LOG_ERR, "packet compression failure\n")); m = NULL; m_freem(md0); m_freem(mcopy); - stat->out_inval++; + IPSEC_STAT_INCREMENT(stat->out_inval); error = EINVAL; goto fail; } - lck_mtx_lock(sadb_mutex); - stat->out_comphist[sav->alg_enc]++; + IPSEC_STAT_INCREMENT(stat->out_comphist[sav->alg_enc]); md = mprev->m_next; /* @@ -311,7 +329,7 @@ ipcomp_output(m, nexthdrp, md, isr, af) else { ipseclog((LOG_ERR, "IPv4 ESP output: size exceeds limit\n")); - ipsecstat.out_inval++; + IPSEC_STAT_INCREMENT(ipsecstat.out_inval); m_freem(m); error = EMSGSIZE; goto fail; @@ -330,9 +348,9 @@ ipcomp_output(m, nexthdrp, md, isr, af) ipseclog((LOG_DEBUG, "NULL mbuf after compression in ipcomp%d_output", afnumber)); - stat->out_inval++; + IPSEC_STAT_INCREMENT(stat->out_inval); } - stat->out_success++; + IPSEC_STAT_INCREMENT(stat->out_success); /* compute byte lifetime against original packet */ key_sa_recordxfer(sav, mcopy); @@ -350,37 +368,35 @@ fail: #if INET int -ipcomp4_output(m, isr) - struct mbuf *m; - struct ipsecrequest *isr; +ipcomp4_output(struct mbuf *m, struct secasvar *sav) { struct ip *ip; if (m->m_len < sizeof(struct ip)) { ipseclog((LOG_DEBUG, "ipcomp4_output: first mbuf too short\n")); - ipsecstat.out_inval++; + IPSEC_STAT_INCREMENT(ipsecstat.out_inval); m_freem(m); return 0; } ip = mtod(m, struct ip *); /* XXX assumes that m->m_next points to payload */ - return ipcomp_output(m, &ip->ip_p, m->m_next, isr, AF_INET); + return ipcomp_output(m, &ip->ip_p, m->m_next, AF_INET, sav); } #endif /*INET*/ -#ifdef INET6 +#if INET6 int -ipcomp6_output(m, nexthdrp, md, isr) - struct mbuf *m; - u_char *nexthdrp; - struct mbuf *md; - struct ipsecrequest *isr; +ipcomp6_output( + struct mbuf *m, + u_char *nexthdrp, + struct mbuf *md, + struct secasvar *sav) { if (m->m_len < sizeof(struct ip6_hdr)) { ipseclog((LOG_DEBUG, "ipcomp6_output: first mbuf too short\n")); - ipsec6stat.out_inval++; + IPSEC_STAT_INCREMENT(ipsec6stat.out_inval); m_freem(m); return 0; } - return ipcomp_output(m, nexthdrp, md, isr, AF_INET6); + return ipcomp_output(m, nexthdrp, md, AF_INET6, sav); } #endif /*INET6*/