1*33de042dSApple OSS Distributions /* 2*33de042dSApple OSS Distributions * Copyright (c) 2000-2024 Apple Inc. All rights reserved. 3*33de042dSApple OSS Distributions * 4*33de042dSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5*33de042dSApple OSS Distributions * 6*33de042dSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7*33de042dSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8*33de042dSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9*33de042dSApple OSS Distributions * compliance with the License. The rights granted to you under the License 10*33de042dSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 11*33de042dSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 12*33de042dSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 13*33de042dSApple OSS Distributions * terms of an Apple operating system software license agreement. 14*33de042dSApple OSS Distributions * 15*33de042dSApple OSS Distributions * Please obtain a copy of the License at 16*33de042dSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 17*33de042dSApple OSS Distributions * 18*33de042dSApple OSS Distributions * The Original Code and all software distributed under the License are 19*33de042dSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20*33de042dSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21*33de042dSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22*33de042dSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23*33de042dSApple OSS Distributions * Please see the License for the specific language governing rights and 24*33de042dSApple OSS Distributions * limitations under the License. 25*33de042dSApple OSS Distributions * 26*33de042dSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27*33de042dSApple OSS Distributions */ 28*33de042dSApple OSS Distributions 29*33de042dSApple OSS Distributions /* 30*33de042dSApple OSS Distributions * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 31*33de042dSApple OSS Distributions * All rights reserved. 32*33de042dSApple OSS Distributions * 33*33de042dSApple OSS Distributions * Redistribution and use in source and binary forms, with or without 34*33de042dSApple OSS Distributions * modification, are permitted provided that the following conditions 35*33de042dSApple OSS Distributions * are met: 36*33de042dSApple OSS Distributions * 1. Redistributions of source code must retain the above copyright 37*33de042dSApple OSS Distributions * notice, this list of conditions and the following disclaimer. 38*33de042dSApple OSS Distributions * 2. Redistributions in binary form must reproduce the above copyright 39*33de042dSApple OSS Distributions * notice, this list of conditions and the following disclaimer in the 40*33de042dSApple OSS Distributions * documentation and/or other materials provided with the distribution. 41*33de042dSApple OSS Distributions * 3. Neither the name of the project nor the names of its contributors 42*33de042dSApple OSS Distributions * may be used to endorse or promote products derived from this software 43*33de042dSApple OSS Distributions * without specific prior written permission. 44*33de042dSApple OSS Distributions * 45*33de042dSApple OSS Distributions * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 46*33de042dSApple OSS Distributions * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 47*33de042dSApple OSS Distributions * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 48*33de042dSApple OSS Distributions * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 49*33de042dSApple OSS Distributions * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 50*33de042dSApple OSS Distributions * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 51*33de042dSApple OSS Distributions * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 52*33de042dSApple OSS Distributions * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 53*33de042dSApple OSS Distributions * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 54*33de042dSApple OSS Distributions * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 55*33de042dSApple OSS Distributions * SUCH DAMAGE. 56*33de042dSApple OSS Distributions */ 57*33de042dSApple OSS Distributions 58*33de042dSApple OSS Distributions /* 59*33de042dSApple OSS Distributions * Copyright (c) 1982, 1986, 1993 60*33de042dSApple OSS Distributions * The Regents of the University of California. All rights reserved. 61*33de042dSApple OSS Distributions * 62*33de042dSApple OSS Distributions * Redistribution and use in source and binary forms, with or without 63*33de042dSApple OSS Distributions * modification, are permitted provided that the following conditions 64*33de042dSApple OSS Distributions * are met: 65*33de042dSApple OSS Distributions * 1. Redistributions of source code must retain the above copyright 66*33de042dSApple OSS Distributions * notice, this list of conditions and the following disclaimer. 67*33de042dSApple OSS Distributions * 2. Redistributions in binary form must reproduce the above copyright 68*33de042dSApple OSS Distributions * notice, this list of conditions and the following disclaimer in the 69*33de042dSApple OSS Distributions * documentation and/or other materials provided with the distribution. 70*33de042dSApple OSS Distributions * 3. All advertising materials mentioning features or use of this software 71*33de042dSApple OSS Distributions * must display the following acknowledgement: 72*33de042dSApple OSS Distributions * This product includes software developed by the University of 73*33de042dSApple OSS Distributions * California, Berkeley and its contributors. 74*33de042dSApple OSS Distributions * 4. Neither the name of the University nor the names of its contributors 75*33de042dSApple OSS Distributions * may be used to endorse or promote products derived from this software 76*33de042dSApple OSS Distributions * without specific prior written permission. 77*33de042dSApple OSS Distributions * 78*33de042dSApple OSS Distributions * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 79*33de042dSApple OSS Distributions * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 80*33de042dSApple OSS Distributions * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 81*33de042dSApple OSS Distributions * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 82*33de042dSApple OSS Distributions * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 83*33de042dSApple OSS Distributions * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 84*33de042dSApple OSS Distributions * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 85*33de042dSApple OSS Distributions * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 86*33de042dSApple OSS Distributions * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 87*33de042dSApple OSS Distributions * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 88*33de042dSApple OSS Distributions * SUCH DAMAGE. 89*33de042dSApple OSS Distributions * 90*33de042dSApple OSS Distributions * @(#)ip_var.h 8.1 (Berkeley) 6/10/93 91*33de042dSApple OSS Distributions */ 92*33de042dSApple OSS Distributions 93*33de042dSApple OSS Distributions #ifndef _NETINET6_IP6_VAR_H_ 94*33de042dSApple OSS Distributions #define _NETINET6_IP6_VAR_H_ 95*33de042dSApple OSS Distributions #include <sys/appleapiopts.h> 96*33de042dSApple OSS Distributions 97*33de042dSApple OSS Distributions #ifdef BSD_KERNEL_PRIVATE 98*33de042dSApple OSS Distributions #include <kern/zalloc.h> 99*33de042dSApple OSS Distributions 100*33de042dSApple OSS Distributions #include <net/ethernet.h> 101*33de042dSApple OSS Distributions #include <net/if.h> 102*33de042dSApple OSS Distributions 103*33de042dSApple OSS Distributions #include <netinet6/in6_var.h> 104*33de042dSApple OSS Distributions 105*33de042dSApple OSS Distributions #include <net/if_private.h> 106*33de042dSApple OSS Distributions 107*33de042dSApple OSS Distributions #include <netinet6/in6_var.h> 108*33de042dSApple OSS Distributions 109*33de042dSApple OSS Distributions struct ip6asfrag; 110*33de042dSApple OSS Distributions /* 111*33de042dSApple OSS Distributions * IP6 reassembly queue structure. Each fragment 112*33de042dSApple OSS Distributions * being reassembled is attached to one of these structures. 113*33de042dSApple OSS Distributions */ 114*33de042dSApple OSS Distributions struct ip6q { 115*33de042dSApple OSS Distributions struct ip6asfrag *ip6q_down; 116*33de042dSApple OSS Distributions struct ip6asfrag *ip6q_up; 117*33de042dSApple OSS Distributions u_int32_t ip6q_ident; 118*33de042dSApple OSS Distributions u_int8_t ip6q_nxt; 119*33de042dSApple OSS Distributions u_int8_t ip6q_ecn; 120*33de042dSApple OSS Distributions u_int8_t ip6q_ttl; 121*33de042dSApple OSS Distributions struct in6_addr ip6q_src, ip6q_dst; 122*33de042dSApple OSS Distributions struct ip6q *ip6q_next; 123*33de042dSApple OSS Distributions struct ip6q *ip6q_prev; 124*33de042dSApple OSS Distributions int ip6q_unfrglen; /* len of unfragmentable part */ 125*33de042dSApple OSS Distributions int ip6q_nfrag; /* # of fragments */ 126*33de042dSApple OSS Distributions uint32_t ip6q_csum_flags; /* checksum flags */ 127*33de042dSApple OSS Distributions uint32_t ip6q_csum; /* partial checksum value */ 128*33de042dSApple OSS Distributions uint32_t ip6q_flags; 129*33de042dSApple OSS Distributions uint32_t ip6q_dst_ifscope, ip6q_src_ifscope; 130*33de042dSApple OSS Distributions #define IP6QF_DIRTY 0x00000001 131*33de042dSApple OSS Distributions }; 132*33de042dSApple OSS Distributions 133*33de042dSApple OSS Distributions struct ip6_moptions { 134*33de042dSApple OSS Distributions decl_lck_mtx_data(, im6o_lock); 135*33de042dSApple OSS Distributions uint32_t im6o_refcnt; /* ref count */ 136*33de042dSApple OSS Distributions uint32_t im6o_debug; /* see ifa_debug flags */ 137*33de042dSApple OSS Distributions struct ifnet *im6o_multicast_ifp; /* ifp for outgoing multicasts */ 138*33de042dSApple OSS Distributions u_char im6o_multicast_hlim; /* hoplimit for outgoing multicasts */ 139*33de042dSApple OSS Distributions u_char im6o_multicast_loop; /* 1 >= hear sends if a member */ 140*33de042dSApple OSS Distributions u_short im6o_num_memberships; /* no. memberships this socket */ 141*33de042dSApple OSS Distributions u_short im6o_max_memberships; /* max memberships this socket */ 142*33de042dSApple OSS Distributions u_short im6o_max_filters; /* max filters this socket */ 143*33de042dSApple OSS Distributions struct in6_multi **__counted_by(im6o_max_memberships) im6o_membership; 144*33de042dSApple OSS Distributions /* group memberships */ 145*33de042dSApple OSS Distributions struct in6_mfilter *__counted_by(im6o_max_filters) im6o_mfilters; 146*33de042dSApple OSS Distributions /* source filters */ 147*33de042dSApple OSS Distributions void (*im6o_trace) /* callback fn for tracing refs */ 148*33de042dSApple OSS Distributions (struct ip6_moptions *, int); 149*33de042dSApple OSS Distributions }; 150*33de042dSApple OSS Distributions 151*33de042dSApple OSS Distributions #define IM6O_LOCK_ASSERT_HELD(_im6o) \ 152*33de042dSApple OSS Distributions LCK_MTX_ASSERT(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_OWNED) 153*33de042dSApple OSS Distributions 154*33de042dSApple OSS Distributions #define IM6O_LOCK_ASSERT_NOTHELD(_im6o) \ 155*33de042dSApple OSS Distributions LCK_MTX_ASSERT(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_NOTOWNED) 156*33de042dSApple OSS Distributions 157*33de042dSApple OSS Distributions #define IM6O_LOCK(_im6o) \ 158*33de042dSApple OSS Distributions lck_mtx_lock(&(_im6o)->im6o_lock) 159*33de042dSApple OSS Distributions 160*33de042dSApple OSS Distributions #define IM6O_LOCK_SPIN(_im6o) \ 161*33de042dSApple OSS Distributions lck_mtx_lock_spin(&(_im6o)->im6o_lock) 162*33de042dSApple OSS Distributions 163*33de042dSApple OSS Distributions #define IM6O_CONVERT_LOCK(_im6o) do { \ 164*33de042dSApple OSS Distributions IM6O_LOCK_ASSERT_HELD(_im6o); \ 165*33de042dSApple OSS Distributions lck_mtx_convert_spin(&(_im6o)->im6o_lock); \ 166*33de042dSApple OSS Distributions } while (0) 167*33de042dSApple OSS Distributions 168*33de042dSApple OSS Distributions #define IM6O_UNLOCK(_im6o) \ 169*33de042dSApple OSS Distributions lck_mtx_unlock(&(_im6o)->im6o_lock) 170*33de042dSApple OSS Distributions 171*33de042dSApple OSS Distributions #define IM6O_ADDREF(_im6o) \ 172*33de042dSApple OSS Distributions im6o_addref(_im6o, 0) 173*33de042dSApple OSS Distributions 174*33de042dSApple OSS Distributions #define IM6O_ADDREF_LOCKED(_im6o) \ 175*33de042dSApple OSS Distributions im6o_addref(_im6o, 1) 176*33de042dSApple OSS Distributions 177*33de042dSApple OSS Distributions #define IM6O_REMREF(_im6o) \ 178*33de042dSApple OSS Distributions im6o_remref(_im6o) 179*33de042dSApple OSS Distributions 180*33de042dSApple OSS Distributions struct ip6_exthdrs { 181*33de042dSApple OSS Distributions struct mbuf *ip6e_ip6; 182*33de042dSApple OSS Distributions struct mbuf *ip6e_hbh; 183*33de042dSApple OSS Distributions struct mbuf *ip6e_dest1; 184*33de042dSApple OSS Distributions struct mbuf *ip6e_rthdr; 185*33de042dSApple OSS Distributions struct mbuf *ip6e_dest2; 186*33de042dSApple OSS Distributions boolean_t merged; 187*33de042dSApple OSS Distributions }; 188*33de042dSApple OSS Distributions 189*33de042dSApple OSS Distributions /* 190*33de042dSApple OSS Distributions * Control options for outgoing packets 191*33de042dSApple OSS Distributions */ 192*33de042dSApple OSS Distributions 193*33de042dSApple OSS Distributions /* Routing header related info */ 194*33de042dSApple OSS Distributions struct ip6po_rhinfo { 195*33de042dSApple OSS Distributions struct ip6_rthdr *ip6po_rhi_rthdr; /* Routing header */ 196*33de042dSApple OSS Distributions struct route_in6 ip6po_rhi_route; /* Route to the 1st hop */ 197*33de042dSApple OSS Distributions }; 198*33de042dSApple OSS Distributions #define ip6po_rthdr ip6po_rhinfo.ip6po_rhi_rthdr 199*33de042dSApple OSS Distributions #define ip6po_route ip6po_rhinfo.ip6po_rhi_route 200*33de042dSApple OSS Distributions 201*33de042dSApple OSS Distributions /* Nexthop related info */ 202*33de042dSApple OSS Distributions struct ip6po_nhinfo { 203*33de042dSApple OSS Distributions struct sockaddr *ip6po_nhi_nexthop; 204*33de042dSApple OSS Distributions struct route_in6 ip6po_nhi_route; /* Route to the nexthop */ 205*33de042dSApple OSS Distributions }; 206*33de042dSApple OSS Distributions #define ip6po_nexthop ip6po_nhinfo.ip6po_nhi_nexthop 207*33de042dSApple OSS Distributions #define ip6po_nextroute ip6po_nhinfo.ip6po_nhi_route 208*33de042dSApple OSS Distributions 209*33de042dSApple OSS Distributions struct ip6_pktopts { 210*33de042dSApple OSS Distributions struct mbuf *ip6po_m; /* Pointer to mbuf storing the data */ 211*33de042dSApple OSS Distributions int ip6po_hlim; /* Hoplimit for outgoing packets */ 212*33de042dSApple OSS Distributions 213*33de042dSApple OSS Distributions /* Outgoing IF/address information */ 214*33de042dSApple OSS Distributions struct in6_pktinfo *ip6po_pktinfo; 215*33de042dSApple OSS Distributions 216*33de042dSApple OSS Distributions /* Next-hop address information */ 217*33de042dSApple OSS Distributions struct ip6po_nhinfo ip6po_nhinfo; 218*33de042dSApple OSS Distributions 219*33de042dSApple OSS Distributions struct ip6_hbh *ip6po_hbh; /* Hop-by-Hop options header */ 220*33de042dSApple OSS Distributions 221*33de042dSApple OSS Distributions /* Destination options header (before a routing header) */ 222*33de042dSApple OSS Distributions struct ip6_dest *ip6po_dest1; 223*33de042dSApple OSS Distributions 224*33de042dSApple OSS Distributions /* Routing header related info. */ 225*33de042dSApple OSS Distributions struct ip6po_rhinfo ip6po_rhinfo; 226*33de042dSApple OSS Distributions 227*33de042dSApple OSS Distributions /* Destination options header (after a routing header) */ 228*33de042dSApple OSS Distributions struct ip6_dest *ip6po_dest2; 229*33de042dSApple OSS Distributions 230*33de042dSApple OSS Distributions int ip6po_tclass; /* traffic class */ 231*33de042dSApple OSS Distributions 232*33de042dSApple OSS Distributions int ip6po_minmtu; /* fragment vs PMTU discovery policy */ 233*33de042dSApple OSS Distributions #define IP6PO_MINMTU_MCASTONLY -1 /* default; send at min MTU for multicast */ 234*33de042dSApple OSS Distributions #define IP6PO_MINMTU_DISABLE 0 /* always perform pmtu disc */ 235*33de042dSApple OSS Distributions #define IP6PO_MINMTU_ALL 1 /* always send at min MTU */ 236*33de042dSApple OSS Distributions 237*33de042dSApple OSS Distributions /* whether temporary addresses are preferred as source address */ 238*33de042dSApple OSS Distributions int ip6po_prefer_tempaddr; 239*33de042dSApple OSS Distributions 240*33de042dSApple OSS Distributions #define IP6PO_TEMPADDR_SYSTEM -1 /* follow the system default */ 241*33de042dSApple OSS Distributions #define IP6PO_TEMPADDR_NOTPREFER 0 /* not prefer temporary address */ 242*33de042dSApple OSS Distributions #define IP6PO_TEMPADDR_PREFER 1 /* prefer temporary address */ 243*33de042dSApple OSS Distributions 244*33de042dSApple OSS Distributions int ip6po_flags; 245*33de042dSApple OSS Distributions #if 0 /* parameters in this block is obsolete. do not reuse the values. */ 246*33de042dSApple OSS Distributions #define IP6PO_REACHCONF 0x01 /* upper-layer reachability confirmation. */ 247*33de042dSApple OSS Distributions #define IP6PO_MINMTU 0x02 /* use minimum MTU (IPV6_USE_MIN_MTU) */ 248*33de042dSApple OSS Distributions #endif 249*33de042dSApple OSS Distributions #define IP6PO_DONTFRAG 0x04 /* no fragmentation (IPV6_DONTFRAG) */ 250*33de042dSApple OSS Distributions #define IP6PO_USECOA 0x08 /* use care of address */ 251*33de042dSApple OSS Distributions }; 252*33de042dSApple OSS Distributions 253*33de042dSApple OSS Distributions /* 254*33de042dSApple OSS Distributions * Control options for incoming packets 255*33de042dSApple OSS Distributions */ 256*33de042dSApple OSS Distributions #endif /* BSD_KERNEL_PRIVATE */ 257*33de042dSApple OSS Distributions 258*33de042dSApple OSS Distributions #define IP6S_SRCRULE_COUNT 16 259*33de042dSApple OSS Distributions #include <netinet6/scope6_var.h> 260*33de042dSApple OSS Distributions 261*33de042dSApple OSS Distributions struct ip6stat { 262*33de042dSApple OSS Distributions u_quad_t ip6s_total; /* total packets received */ 263*33de042dSApple OSS Distributions u_quad_t ip6s_tooshort; /* packet too short */ 264*33de042dSApple OSS Distributions u_quad_t ip6s_toosmall; /* not enough data */ 265*33de042dSApple OSS Distributions u_quad_t ip6s_fragments; /* fragments received */ 266*33de042dSApple OSS Distributions u_quad_t ip6s_fragdropped; /* frags dropped(dups, out of space) */ 267*33de042dSApple OSS Distributions u_quad_t ip6s_fragtimeout; /* fragments timed out */ 268*33de042dSApple OSS Distributions u_quad_t ip6s_fragoverflow; /* fragments that exceeded limit */ 269*33de042dSApple OSS Distributions u_quad_t ip6s_forward; /* packets forwarded */ 270*33de042dSApple OSS Distributions u_quad_t ip6s_cantforward; /* packets rcvd for unreachable dest */ 271*33de042dSApple OSS Distributions u_quad_t ip6s_redirectsent; /* packets forwarded on same net */ 272*33de042dSApple OSS Distributions u_quad_t ip6s_delivered; /* datagrams delivered to upper level */ 273*33de042dSApple OSS Distributions u_quad_t ip6s_localout; /* total ip packets generated here */ 274*33de042dSApple OSS Distributions u_quad_t ip6s_odropped; /* lost packets due to nobufs, etc. */ 275*33de042dSApple OSS Distributions u_quad_t ip6s_reassembled; /* total packets reassembled ok */ 276*33de042dSApple OSS Distributions u_quad_t ip6s_atmfrag_rcvd; /* atomic fragments received */ 277*33de042dSApple OSS Distributions u_quad_t ip6s_fragmented; /* datagrams successfully fragmented */ 278*33de042dSApple OSS Distributions u_quad_t ip6s_ofragments; /* output fragments created */ 279*33de042dSApple OSS Distributions u_quad_t ip6s_cantfrag; /* don't fragment flag was set, etc. */ 280*33de042dSApple OSS Distributions u_quad_t ip6s_badoptions; /* error in option processing */ 281*33de042dSApple OSS Distributions u_quad_t ip6s_noroute; /* packets discarded due to no route */ 282*33de042dSApple OSS Distributions u_quad_t ip6s_badvers; /* ip6 version != 6 */ 283*33de042dSApple OSS Distributions u_quad_t ip6s_rawout; /* total raw ip packets generated */ 284*33de042dSApple OSS Distributions u_quad_t ip6s_badscope; /* scope error */ 285*33de042dSApple OSS Distributions u_quad_t ip6s_notmember; /* don't join this multicast group */ 286*33de042dSApple OSS Distributions u_quad_t ip6s_nxthist[256]; /* next header history */ 287*33de042dSApple OSS Distributions u_quad_t ip6s_m1; /* one mbuf */ 288*33de042dSApple OSS Distributions u_quad_t ip6s_m2m[32]; /* two or more mbuf */ 289*33de042dSApple OSS Distributions u_quad_t ip6s_mext1; /* one ext mbuf */ 290*33de042dSApple OSS Distributions u_quad_t ip6s_mext2m; /* two or more ext mbuf */ 291*33de042dSApple OSS Distributions u_quad_t ip6s_exthdrtoolong; /* ext hdr are not continuous */ 292*33de042dSApple OSS Distributions u_quad_t ip6s_nogif; /* no match gif found */ 293*33de042dSApple OSS Distributions u_quad_t ip6s_toomanyhdr; /* discarded due to too many headers */ 294*33de042dSApple OSS Distributions 295*33de042dSApple OSS Distributions /* 296*33de042dSApple OSS Distributions * statistics for improvement of the source address selection 297*33de042dSApple OSS Distributions * algorithm: 298*33de042dSApple OSS Distributions */ 299*33de042dSApple OSS Distributions /* number of times that address selection fails */ 300*33de042dSApple OSS Distributions u_quad_t ip6s_sources_none; 301*33de042dSApple OSS Distributions /* number of times that an address on the outgoing I/F is chosen */ 302*33de042dSApple OSS Distributions u_quad_t ip6s_sources_sameif[SCOPE6_ID_MAX]; 303*33de042dSApple OSS Distributions /* number of times that an address on a non-outgoing I/F is chosen */ 304*33de042dSApple OSS Distributions u_quad_t ip6s_sources_otherif[SCOPE6_ID_MAX]; 305*33de042dSApple OSS Distributions /* 306*33de042dSApple OSS Distributions * number of times that an address that has the same scope 307*33de042dSApple OSS Distributions * from the destination is chosen. 308*33de042dSApple OSS Distributions */ 309*33de042dSApple OSS Distributions u_quad_t ip6s_sources_samescope[SCOPE6_ID_MAX]; 310*33de042dSApple OSS Distributions /* 311*33de042dSApple OSS Distributions * number of times that an address that has a different scope 312*33de042dSApple OSS Distributions * from the destination is chosen. 313*33de042dSApple OSS Distributions */ 314*33de042dSApple OSS Distributions u_quad_t ip6s_sources_otherscope[SCOPE6_ID_MAX]; 315*33de042dSApple OSS Distributions /* number of times that a deprecated address is chosen */ 316*33de042dSApple OSS Distributions u_quad_t ip6s_sources_deprecated[SCOPE6_ID_MAX]; 317*33de042dSApple OSS Distributions 318*33de042dSApple OSS Distributions u_quad_t ip6s_forward_cachehit; 319*33de042dSApple OSS Distributions u_quad_t ip6s_forward_cachemiss; 320*33de042dSApple OSS Distributions 321*33de042dSApple OSS Distributions /* number of times that each rule of source selection is applied. */ 322*33de042dSApple OSS Distributions u_quad_t ip6s_sources_rule[IP6S_SRCRULE_COUNT]; 323*33de042dSApple OSS Distributions 324*33de042dSApple OSS Distributions /* number of times we ignored address on expensive secondary interfaces */ 325*33de042dSApple OSS Distributions u_quad_t ip6s_sources_skip_expensive_secondary_if; 326*33de042dSApple OSS Distributions 327*33de042dSApple OSS Distributions /* pkt dropped, no mbufs for control data */ 328*33de042dSApple OSS Distributions u_quad_t ip6s_pktdropcntrl; 329*33de042dSApple OSS Distributions 330*33de042dSApple OSS Distributions /* total packets trimmed/adjusted */ 331*33de042dSApple OSS Distributions u_quad_t ip6s_adj; 332*33de042dSApple OSS Distributions /* hwcksum info discarded during adjustment */ 333*33de042dSApple OSS Distributions u_quad_t ip6s_adj_hwcsum_clr; 334*33de042dSApple OSS Distributions 335*33de042dSApple OSS Distributions /* duplicate address detection collisions */ 336*33de042dSApple OSS Distributions u_quad_t ip6s_dad_collide; 337*33de042dSApple OSS Distributions 338*33de042dSApple OSS Distributions /* DAD NS looped back */ 339*33de042dSApple OSS Distributions u_quad_t ip6s_dad_loopcount; 340*33de042dSApple OSS Distributions 341*33de042dSApple OSS Distributions /* NECP policy related drop */ 342*33de042dSApple OSS Distributions u_quad_t ip6s_necp_policy_drop; 343*33de042dSApple OSS Distributions 344*33de042dSApple OSS Distributions /* CLAT46 stats */ 345*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_tooshort_drop; 346*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_nov6addr_drop; 347*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_nov4addr_drop; 348*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_v4synthfail_drop; 349*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_64transfail_drop; 350*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_64proto_transfail_drop; 351*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_64frag_transfail_drop; 352*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_invalpbuf_drop; 353*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_success; 354*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_drop; 355*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_in_v4_drop; 356*33de042dSApple OSS Distributions 357*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_nov6addr_drop; 358*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_v6synthfail_drop; 359*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_46transfail_drop; 360*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_46proto_transfail_drop; 361*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_46frag_transfail_drop; 362*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_invalpbuf_drop; 363*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_success; 364*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_out_drop; 365*33de042dSApple OSS Distributions 366*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_v6addr_conffail; 367*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_plat64_pfx_setfail; 368*33de042dSApple OSS Distributions u_quad_t ip6s_clat464_plat64_pfx_getfail; 369*33de042dSApple OSS Distributions 370*33de042dSApple OSS Distributions u_quad_t ip6s_overlap_frag_drop; 371*33de042dSApple OSS Distributions 372*33de042dSApple OSS Distributions u_quad_t ip6s_rcv_if_weak_match; 373*33de042dSApple OSS Distributions u_quad_t ip6s_rcv_if_no_match; 374*33de042dSApple OSS Distributions }; 375*33de042dSApple OSS Distributions 376*33de042dSApple OSS Distributions enum ip6s_sources_rule_index { 377*33de042dSApple OSS Distributions IP6S_SRCRULE_0, IP6S_SRCRULE_1, IP6S_SRCRULE_2, IP6S_SRCRULE_3, IP6S_SRCRULE_4, 378*33de042dSApple OSS Distributions IP6S_SRCRULE_5, IP6S_SRCRULE_5_5, IP6S_SRCRULE_6, IP6S_SRCRULE_7, 379*33de042dSApple OSS Distributions IP6S_SRCRULE_7x, IP6S_SRCRULE_8 380*33de042dSApple OSS Distributions }; 381*33de042dSApple OSS Distributions 382*33de042dSApple OSS Distributions #ifdef BSD_KERNEL_PRIVATE 383*33de042dSApple OSS Distributions /* 384*33de042dSApple OSS Distributions * IPv6 onion peeling state. 385*33de042dSApple OSS Distributions * 386*33de042dSApple OSS Distributions * This is currently allocated for packets destined to the all-nodes 387*33de042dSApple OSS Distributions * multicast address over Ethernet. IPv6 destination address information 388*33de042dSApple OSS Distributions * is now stored in the mbuf itself. 389*33de042dSApple OSS Distributions */ 390*33de042dSApple OSS Distributions struct ip6aux { 391*33de042dSApple OSS Distributions u_int32_t ip6a_flags; 392*33de042dSApple OSS Distributions #define IP6A_HASEEN 0x01 /* HA was present */ 393*33de042dSApple OSS Distributions 394*33de042dSApple OSS Distributions #ifdef notyet 395*33de042dSApple OSS Distributions #define IP6A_SWAP 0x02 /* swapped home/care-of on packet */ 396*33de042dSApple OSS Distributions #define IP6A_BRUID 0x04 /* BR Unique Identifier was present */ 397*33de042dSApple OSS Distributions #define IP6A_RTALERTSEEN 0x08 /* rtalert present */ 398*33de042dSApple OSS Distributions 399*33de042dSApple OSS Distributions /* ip6.ip6_src */ 400*33de042dSApple OSS Distributions struct in6_addr ip6a_careof; /* care-of address of the peer */ 401*33de042dSApple OSS Distributions struct in6_addr ip6a_home; /* home address of the peer */ 402*33de042dSApple OSS Distributions u_int16_t ip6a_bruid; /* BR unique identifier */ 403*33de042dSApple OSS Distributions 404*33de042dSApple OSS Distributions /* rtalert */ 405*33de042dSApple OSS Distributions u_int16_t ip6a_rtalert; /* rtalert option value */ 406*33de042dSApple OSS Distributions #endif /* notyet */ 407*33de042dSApple OSS Distributions 408*33de042dSApple OSS Distributions /* ether source address if all-nodes multicast destination */ 409*33de042dSApple OSS Distributions u_char ip6a_ehsrc[ETHER_ADDR_LEN]; 410*33de042dSApple OSS Distributions }; 411*33de042dSApple OSS Distributions 412*33de042dSApple OSS Distributions /* flags passed to ip6_output as last parameter */ 413*33de042dSApple OSS Distributions #define IPV6_UNSPECSRC 0x01 /* allow :: as the source address */ 414*33de042dSApple OSS Distributions #define IPV6_FORWARDING 0x02 /* most of IPv6 header exists */ 415*33de042dSApple OSS Distributions #define IPV6_MINMTU 0x04 /* use minimum MTU (IPV6_USE_MIN_MTU) */ 416*33de042dSApple OSS Distributions #define IPV6_FLAG_NOSRCIFSEL 0x80 /* bypass source address selection */ 417*33de042dSApple OSS Distributions #define IPV6_OUTARGS 0x100 /* has ancillary output info */ 418*33de042dSApple OSS Distributions 419*33de042dSApple OSS Distributions #ifdef BSD_KERNEL_PRIVATE 420*33de042dSApple OSS Distributions #define IP6_HDR_ALIGNED_P(_ip6) ((((uintptr_t)(_ip6)) & ((uintptr_t)3)) == 0) 421*33de042dSApple OSS Distributions 422*33de042dSApple OSS Distributions /* 423*33de042dSApple OSS Distributions * On platforms which require strict alignment (currently for anything but 424*33de042dSApple OSS Distributions * i386 or x86_64 or arm64), this macro checks whether the pointer to the IP header 425*33de042dSApple OSS Distributions * is 32-bit aligned, and assert otherwise. 426*33de042dSApple OSS Distributions */ 427*33de042dSApple OSS Distributions #if defined(__i386__) || defined(__x86_64__) || defined(__arm64__) 428*33de042dSApple OSS Distributions #define IP6_HDR_STRICT_ALIGNMENT_CHECK(_ip6) do { } while (0) 429*33de042dSApple OSS Distributions #else /* !__i386__ && !__x86_64__ && !__arm64__ */ 430*33de042dSApple OSS Distributions #define IP6_HDR_STRICT_ALIGNMENT_CHECK(_ip6) do { \ 431*33de042dSApple OSS Distributions if (!IP_HDR_ALIGNED_P(_ip6)) { \ 432*33de042dSApple OSS Distributions panic_plain("\n%s: Unaligned IPv6 header %p\n", \ 433*33de042dSApple OSS Distributions __func__, _ip6); \ 434*33de042dSApple OSS Distributions } \ 435*33de042dSApple OSS Distributions } while (0) 436*33de042dSApple OSS Distributions #endif /* !__i386__ && !__x86_64__ && !__arm64__ */ 437*33de042dSApple OSS Distributions #endif /* BSD_KERNEL_PRIVATE */ 438*33de042dSApple OSS Distributions 439*33de042dSApple OSS Distributions #include <net/flowadv.h> 440*33de042dSApple OSS Distributions 441*33de042dSApple OSS Distributions /* 442*33de042dSApple OSS Distributions * Extra information passed to ip6_output when IPV6_OUTARGS is set. 443*33de042dSApple OSS Distributions */ 444*33de042dSApple OSS Distributions struct ip6_out_args { 445*33de042dSApple OSS Distributions unsigned int ip6oa_boundif; /* bound outgoing interface */ 446*33de042dSApple OSS Distributions struct flowadv ip6oa_flowadv; /* flow advisory code */ 447*33de042dSApple OSS Distributions u_int32_t ip6oa_flags; /* IP6OAF flags (see below) */ 448*33de042dSApple OSS Distributions #define IP6OAF_SELECT_SRCIF 0x00000001 /* src interface selection */ 449*33de042dSApple OSS Distributions #define IP6OAF_BOUND_IF 0x00000002 /* boundif value is valid */ 450*33de042dSApple OSS Distributions #define IP6OAF_BOUND_SRCADDR 0x00000004 /* bound to src address */ 451*33de042dSApple OSS Distributions #define IP6OAF_NO_CELLULAR 0x00000010 /* skip IFT_CELLULAR */ 452*33de042dSApple OSS Distributions #define IP6OAF_NO_EXPENSIVE 0x00000020 /* skip IFEF_EXPENSIVE */ 453*33de042dSApple OSS Distributions #define IP6OAF_AWDL_UNRESTRICTED 0x00000040 /* privileged AWDL */ 454*33de042dSApple OSS Distributions #define IP6OAF_QOSMARKING_ALLOWED 0x00000080 /* policy allows Fastlane DSCP marking */ 455*33de042dSApple OSS Distributions #define IP6OAF_INTCOPROC_ALLOWED 0x00000100 /* access to internal coproc interfaces */ 456*33de042dSApple OSS Distributions #define IP6OAF_NO_LOW_POWER 0x00000200 /* skip low power */ 457*33de042dSApple OSS Distributions #define IP6OAF_NO_CONSTRAINED 0x00000400 /* skip IFXF_CONSTRAINED */ 458*33de042dSApple OSS Distributions #define IP6OAF_SKIP_PF 0x00000800 /* skip PF */ 459*33de042dSApple OSS Distributions #define IP6OAF_DONT_FRAG 0x00001000 /* Don't fragment */ 460*33de042dSApple OSS Distributions #define IP6OAF_REDO_QOSMARKING_POLICY 0x00002000 /* Re-evaluate QOS marking policy */ 461*33de042dSApple OSS Distributions #define IP6OAF_R_IFDENIED 0x00004000 /* return flag: denied access to interface */ 462*33de042dSApple OSS Distributions #define IP6OAF_MANAGEMENT_ALLOWED 0x00008000 /* access to management interfaces */ 463*33de042dSApple OSS Distributions int ip6oa_sotc; /* traffic class for Fastlane DSCP mapping */ 464*33de042dSApple OSS Distributions int ip6oa_netsvctype; 465*33de042dSApple OSS Distributions int32_t qos_marking_gencount; 466*33de042dSApple OSS Distributions }; 467*33de042dSApple OSS Distributions 468*33de042dSApple OSS Distributions #define IP6OAF_RET_MASK (IP6OAF_R_IFDENIED) 469*33de042dSApple OSS Distributions 470*33de042dSApple OSS Distributions extern struct ip6stat ip6stat; /* statistics */ 471*33de042dSApple OSS Distributions extern int ip6_defhlim; /* default hop limit */ 472*33de042dSApple OSS Distributions extern int ip6_defmcasthlim; /* default multicast hop limit */ 473*33de042dSApple OSS Distributions extern int ip6_forwarding; /* act as router? */ 474*33de042dSApple OSS Distributions extern int ip6_gif_hlim; /* Hop limit for gif encap packet */ 475*33de042dSApple OSS Distributions extern int ip6_use_deprecated; /* allow deprecated addr as source */ 476*33de042dSApple OSS Distributions extern int ip6_rr_prune; /* router renumbering prefix */ 477*33de042dSApple OSS Distributions /* walk list every 5 sec. */ 478*33de042dSApple OSS Distributions extern int ip6_mcast_pmtu; /* enable pMTU discovery for multicast? */ 479*33de042dSApple OSS Distributions #define ip6_mapped_addr_on (!ip6_v6only) 480*33de042dSApple OSS Distributions extern int ip6_v6only; 481*33de042dSApple OSS Distributions 482*33de042dSApple OSS Distributions extern int ip6_neighborgcthresh; /* Threshold # of NDP entries for GC */ 483*33de042dSApple OSS Distributions extern int ip6_maxifprefixes; /* Max acceptable prefixes via RA per IF */ 484*33de042dSApple OSS Distributions extern int ip6_maxifdefrouters; /* Max acceptable def routers via RA */ 485*33de042dSApple OSS Distributions extern int ip6_maxdynroutes; /* Max # of routes created via redirect */ 486*33de042dSApple OSS Distributions extern int ip6_sendredirects; /* send IP redirects when forwarding? */ 487*33de042dSApple OSS Distributions extern int ip6_accept_rtadv; /* deprecated */ 488*33de042dSApple OSS Distributions extern int ip6_log_interval; 489*33de042dSApple OSS Distributions extern uint64_t ip6_log_time; 490*33de042dSApple OSS Distributions extern int ip6_hdrnestlimit; /* upper limit of # of extension headers */ 491*33de042dSApple OSS Distributions extern int ip6_dad_count; /* DupAddrDetectionTransmits */ 492*33de042dSApple OSS Distributions 493*33de042dSApple OSS Distributions /* RFC4193 Unique Local Unicast Prefixes only */ 494*33de042dSApple OSS Distributions extern int ip6_only_allow_rfc4193_prefix; 495*33de042dSApple OSS Distributions 496*33de042dSApple OSS Distributions extern int ip6_auto_flowlabel; 497*33de042dSApple OSS Distributions extern int ip6_auto_linklocal; 498*33de042dSApple OSS Distributions 499*33de042dSApple OSS Distributions extern int ip6_anonportmin; /* minimum ephemeral port */ 500*33de042dSApple OSS Distributions extern int ip6_anonportmax; /* maximum ephemeral port */ 501*33de042dSApple OSS Distributions extern int ip6_lowportmin; /* minimum reserved port */ 502*33de042dSApple OSS Distributions extern int ip6_lowportmax; /* maximum reserved port */ 503*33de042dSApple OSS Distributions 504*33de042dSApple OSS Distributions extern int ip6_use_tempaddr; /* whether to use temporary addresses. */ 505*33de042dSApple OSS Distributions extern int ip6_ula_use_tempaddr; /* whether to use temporary ULA addresses */ 506*33de042dSApple OSS Distributions 507*33de042dSApple OSS Distributions /* whether to prefer temporary addresses in the source address selection */ 508*33de042dSApple OSS Distributions extern int ip6_prefer_tempaddr; 509*33de042dSApple OSS Distributions 510*33de042dSApple OSS Distributions /* whether to use the default scope zone when unspecified */ 511*33de042dSApple OSS Distributions extern int ip6_use_defzone; 512*33de042dSApple OSS Distributions 513*33de042dSApple OSS Distributions /* how many times to try allocating cga address after conflict */ 514*33de042dSApple OSS Distributions extern int ip6_cga_conflict_retries; 515*33de042dSApple OSS Distributions #define IPV6_CGA_CONFLICT_RETRIES_DEFAULT 3 516*33de042dSApple OSS Distributions #define IPV6_CGA_CONFLICT_RETRIES_MAX 10 517*33de042dSApple OSS Distributions 518*33de042dSApple OSS Distributions extern struct pr_usrreqs rip6_usrreqs; 519*33de042dSApple OSS Distributions extern struct pr_usrreqs icmp6_dgram_usrreqs; 520*33de042dSApple OSS Distributions 521*33de042dSApple OSS Distributions struct sockopt; 522*33de042dSApple OSS Distributions struct inpcb; 523*33de042dSApple OSS Distributions struct ip6_hdr; 524*33de042dSApple OSS Distributions struct in6_ifaddr; 525*33de042dSApple OSS Distributions struct ip6protosw; 526*33de042dSApple OSS Distributions struct domain; 527*33de042dSApple OSS Distributions 528*33de042dSApple OSS Distributions extern int icmp6_ctloutput(struct socket *, struct sockopt *); 529*33de042dSApple OSS Distributions extern int icmp6_dgram_ctloutput(struct socket *, struct sockopt *); 530*33de042dSApple OSS Distributions extern int icmp6_dgram_send(struct socket *, int, struct mbuf *, 531*33de042dSApple OSS Distributions struct sockaddr *, struct mbuf *, struct proc *); 532*33de042dSApple OSS Distributions extern int icmp6_dgram_attach(struct socket *, int, struct proc *); 533*33de042dSApple OSS Distributions 534*33de042dSApple OSS Distributions extern void ip6_register_m_tag(void); 535*33de042dSApple OSS Distributions 536*33de042dSApple OSS Distributions extern void ip6_init(struct ip6protosw *, struct domain *); 537*33de042dSApple OSS Distributions extern void ip6_input(struct mbuf *); 538*33de042dSApple OSS Distributions extern void ip6_setsrcifaddr_info(struct mbuf *, uint32_t, struct in6_ifaddr *); 539*33de042dSApple OSS Distributions extern void ip6_setdstifaddr_info(struct mbuf *, uint32_t, struct in6_ifaddr *); 540*33de042dSApple OSS Distributions extern int ip6_getsrcifaddr_info(struct mbuf *, uint32_t *, uint32_t *); 541*33de042dSApple OSS Distributions extern int ip6_getdstifaddr_info(struct mbuf *, uint32_t *, uint32_t *); 542*33de042dSApple OSS Distributions extern uint32_t ip6_input_getsrcifscope(struct mbuf *); 543*33de042dSApple OSS Distributions extern uint32_t ip6_input_getdstifscope(struct mbuf *); 544*33de042dSApple OSS Distributions extern void ip6_output_setsrcifscope(struct mbuf *, uint32_t, struct in6_ifaddr *); 545*33de042dSApple OSS Distributions extern void ip6_output_setdstifscope(struct mbuf *, uint32_t, struct in6_ifaddr *); 546*33de042dSApple OSS Distributions extern uint32_t ip6_output_getsrcifscope(struct mbuf *); 547*33de042dSApple OSS Distributions extern uint32_t ip6_output_getdstifscope(struct mbuf *); 548*33de042dSApple OSS Distributions 549*33de042dSApple OSS Distributions extern void ip6_freepcbopts(struct ip6_pktopts *); 550*33de042dSApple OSS Distributions extern int ip6_unknown_opt(uint8_t * __counted_by(optplen) optp, size_t optplen, struct mbuf *, size_t); 551*33de042dSApple OSS Distributions extern char *ip6_get_prevhdr(struct mbuf *, int); 552*33de042dSApple OSS Distributions extern int ip6_nexthdr(struct mbuf *, int, int, int *); 553*33de042dSApple OSS Distributions extern int ip6_lasthdr(struct mbuf *, int, int, int *); 554*33de042dSApple OSS Distributions extern boolean_t ip6_pkt_has_ulp(struct mbuf *m); 555*33de042dSApple OSS Distributions 556*33de042dSApple OSS Distributions extern void ip6_moptions_init(void); 557*33de042dSApple OSS Distributions extern struct ip6_moptions *ip6_allocmoptions(zalloc_flags_t); 558*33de042dSApple OSS Distributions extern void im6o_addref(struct ip6_moptions *, int); 559*33de042dSApple OSS Distributions extern void im6o_remref(struct ip6_moptions *); 560*33de042dSApple OSS Distributions 561*33de042dSApple OSS Distributions extern struct ip6aux *ip6_addaux(struct mbuf *); 562*33de042dSApple OSS Distributions extern struct ip6aux *ip6_findaux(struct mbuf *); 563*33de042dSApple OSS Distributions extern void ip6_delaux(struct mbuf *); 564*33de042dSApple OSS Distributions 565*33de042dSApple OSS Distributions extern int ip6_process_hopopts(struct mbuf *, u_int8_t *__sized_by(hbhlen) opthead, int hbhlen, 566*33de042dSApple OSS Distributions u_int32_t *, u_int32_t *); 567*33de042dSApple OSS Distributions extern struct mbuf **ip6_savecontrol_v4(struct inpcb *, struct mbuf *, 568*33de042dSApple OSS Distributions struct mbuf **, int *); 569*33de042dSApple OSS Distributions extern int ip6_savecontrol(struct inpcb *, struct mbuf *, struct mbuf **); 570*33de042dSApple OSS Distributions extern struct mbuf *ip6_forward(struct mbuf *, struct route_in6 *, int); 571*33de042dSApple OSS Distributions extern void ip6_notify_pmtu(struct inpcb *, struct sockaddr_in6 *, u_int32_t *); 572*33de042dSApple OSS Distributions extern void ip6_mloopback(struct ifnet *, struct ifnet *, struct mbuf *, 573*33de042dSApple OSS Distributions struct sockaddr_in6 *, uint32_t, int32_t); 574*33de042dSApple OSS Distributions extern int ip6_output(struct mbuf *, struct ip6_pktopts *, struct route_in6 *, 575*33de042dSApple OSS Distributions int, struct ip6_moptions *, struct ifnet **, struct ip6_out_args *); 576*33de042dSApple OSS Distributions extern int ip6_output_list(struct mbuf *, int, struct ip6_pktopts *, 577*33de042dSApple OSS Distributions struct route_in6 *, int, struct ip6_moptions *, struct ifnet **, 578*33de042dSApple OSS Distributions struct ip6_out_args *); 579*33de042dSApple OSS Distributions extern int ip6_ctloutput(struct socket *, struct sockopt *); 580*33de042dSApple OSS Distributions extern int ip6_raw_ctloutput(struct socket *, struct sockopt *); 581*33de042dSApple OSS Distributions extern void ip6_initpktopts(struct ip6_pktopts *); 582*33de042dSApple OSS Distributions extern int ip6_setpktoptions(struct mbuf *, struct ip6_pktopts *, int, int); 583*33de042dSApple OSS Distributions extern void ip6_clearpktopts(struct ip6_pktopts *, int); 584*33de042dSApple OSS Distributions extern struct ip6_pktopts *ip6_copypktopts(struct ip6_pktopts *, zalloc_flags_t); 585*33de042dSApple OSS Distributions extern int ip6_optlen(struct inpcb *); 586*33de042dSApple OSS Distributions extern void ip6_drain(void); 587*33de042dSApple OSS Distributions extern int ip6_do_fragmentation(struct mbuf **, uint32_t, struct ifnet *, uint32_t, 588*33de042dSApple OSS Distributions struct ip6_hdr *, uint8_t *, uint32_t, int, uint32_t); 589*33de042dSApple OSS Distributions 590*33de042dSApple OSS Distributions extern int route6_input(struct mbuf **, int *, int); 591*33de042dSApple OSS Distributions 592*33de042dSApple OSS Distributions extern void frag6_init(void); 593*33de042dSApple OSS Distributions extern int frag6_input(struct mbuf **, int *, int); 594*33de042dSApple OSS Distributions extern void frag6_drain(void); 595*33de042dSApple OSS Distributions 596*33de042dSApple OSS Distributions extern int rip6_input(struct mbuf **, int *, int); 597*33de042dSApple OSS Distributions extern void rip6_ctlinput(int, struct sockaddr *, void *, struct ifnet *); 598*33de042dSApple OSS Distributions extern int rip6_ctloutput(struct socket *so, struct sockopt *sopt); 599*33de042dSApple OSS Distributions extern int rip6_output(struct mbuf *, struct socket *, struct sockaddr_in6 *, 600*33de042dSApple OSS Distributions struct mbuf *, int); 601*33de042dSApple OSS Distributions 602*33de042dSApple OSS Distributions extern int dest6_input(struct mbuf **, int *, int); 603*33de042dSApple OSS Distributions /* 604*33de042dSApple OSS Distributions * IPv6 source address selection hints 605*33de042dSApple OSS Distributions */ 606*33de042dSApple OSS Distributions #define IPV6_SRCSEL_HINT_PREFER_TMPADDR 0x00000001 607*33de042dSApple OSS Distributions 608*33de042dSApple OSS Distributions extern struct ifaddr * in6_selectsrc_core_ifa(struct sockaddr_in6 *, struct ifnet *, int); 609*33de042dSApple OSS Distributions extern struct in6_addr * in6_selectsrc_core(struct sockaddr_in6 *, 610*33de042dSApple OSS Distributions uint32_t, struct ifnet *, int, struct in6_addr *, 611*33de042dSApple OSS Distributions struct ifnet **, int *, struct ifaddr **, struct route_in6 *, boolean_t); 612*33de042dSApple OSS Distributions extern struct in6_addr *in6_selectsrc(struct sockaddr_in6 *, 613*33de042dSApple OSS Distributions struct ip6_pktopts *, struct inpcb *, struct route_in6 *, 614*33de042dSApple OSS Distributions struct ifnet **, struct in6_addr *, unsigned int, int *); 615*33de042dSApple OSS Distributions extern struct in6_addrpolicy *in6_addrsel_lookup_policy(struct sockaddr_in6 *); 616*33de042dSApple OSS Distributions extern int in6_selectroute(struct sockaddr_in6 *, struct sockaddr_in6 *, 617*33de042dSApple OSS Distributions struct ip6_pktopts *, struct ip6_moptions *, struct in6_ifaddr **, 618*33de042dSApple OSS Distributions struct route_in6 *, struct ifnet **, struct rtentry **, int, 619*33de042dSApple OSS Distributions struct ip6_out_args *); 620*33de042dSApple OSS Distributions extern int ip6_setpktopts(struct mbuf *control, struct ip6_pktopts *opt, 621*33de042dSApple OSS Distributions struct ip6_pktopts *stickyopt, int uproto); 622*33de042dSApple OSS Distributions extern uint32_t ip6_randomid(uint64_t); 623*33de042dSApple OSS Distributions extern uint32_t ip6_randomflowlabel(void); 624*33de042dSApple OSS Distributions #endif /* BSD_KERNEL_PRIVATE */ 625*33de042dSApple OSS Distributions #endif /* !_NETINET6_IP6_VAR_H_ */ 626