Path: blob/buildjre8/ios-missing-include/netinet6/in6_var.h
861 views
/*1* Copyright (c) 2000-2020 Apple Inc. All rights reserved.2*3* @APPLE_OSREFERENCE_LICENSE_HEADER_START@4*5* This file contains Original Code and/or Modifications of Original Code6* as defined in and that are subject to the Apple Public Source License7* Version 2.0 (the 'License'). You may not use this file except in8* compliance with the License. The rights granted to you under the License9* may not be used to create, or enable the creation or redistribution of,10* unlawful or unlicensed copies of an Apple operating system, or to11* circumvent, violate, or enable the circumvention or violation of, any12* terms of an Apple operating system software license agreement.13*14* Please obtain a copy of the License at15* http://www.opensource.apple.com/apsl/ and read it before using this file.16*17* The Original Code and all software distributed under the License are18* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER19* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,20* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,21* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.22* Please see the License for the specific language governing rights and23* limitations under the License.24*25* @APPLE_OSREFERENCE_LICENSE_HEADER_END@26*/2728/*29* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.30* All rights reserved.31*32* Redistribution and use in source and binary forms, with or without33* modification, are permitted provided that the following conditions34* are met:35* 1. Redistributions of source code must retain the above copyright36* notice, this list of conditions and the following disclaimer.37* 2. Redistributions in binary form must reproduce the above copyright38* notice, this list of conditions and the following disclaimer in the39* documentation and/or other materials provided with the distribution.40* 3. Neither the name of the project nor the names of its contributors41* may be used to endorse or promote products derived from this software42* without specific prior written permission.43*44* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND45* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE46* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE47* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE48* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL49* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS50* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)51* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT52* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY53* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF54* SUCH DAMAGE.55*/5657/*58* Copyright (c) 1985, 1986, 199359* The Regents of the University of California. All rights reserved.60*61* Redistribution and use in source and binary forms, with or without62* modification, are permitted provided that the following conditions63* are met:64* 1. Redistributions of source code must retain the above copyright65* notice, this list of conditions and the following disclaimer.66* 2. Redistributions in binary form must reproduce the above copyright67* notice, this list of conditions and the following disclaimer in the68* documentation and/or other materials provided with the distribution.69* 3. All advertising materials mentioning features or use of this software70* must display the following acknowledgement:71* This product includes software developed by the University of72* California, Berkeley and its contributors.73* 4. Neither the name of the University nor the names of its contributors74* may be used to endorse or promote products derived from this software75* without specific prior written permission.76*77* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND78* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE79* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE80* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE81* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL82* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS83* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)84* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT85* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY86* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF87* SUCH DAMAGE.88*89* @(#)in_var.h 8.1 (Berkeley) 6/10/9390*/9192#ifndef _NETINET6_IN6_VAR_H_93#define _NETINET6_IN6_VAR_H_94#include <sys/appleapiopts.h>95#include <net/net_kev.h>9697#include <netinet6/scope6_var.h>98#include <sys/kern_event.h>99#include <net/ethernet.h>100101/*102* pltime/vltime are just for future reference (required to implements 2103* hour rule for hosts). they should never be modified by nd6_timeout or104* anywhere else.105* userland -> kernel: accept pltime/vltime106* kernel -> userland: throw up everything107* in kernel: modify preferred/expire only108*/109struct in6_addrlifetime {110time_t ia6t_expire; /* valid lifetime expiration time */111time_t ia6t_preferred; /* preferred lifetime expiration time */112u_int32_t ia6t_vltime; /* valid lifetime */113u_int32_t ia6t_pltime; /* prefix lifetime */114};115116117/* control structure to manage address selection policy */118struct in6_addrpolicy {119struct sockaddr_in6 addr; /* prefix address */120struct sockaddr_in6 addrmask; /* prefix mask */121int preced; /* precedence */122int label; /* matching label */123u_quad_t use; /* statistics */124};125126/*127* IPv6 interface statistics, as defined in RFC2465 Ipv6IfStatsEntry (p12).128*/129struct in6_ifstat {130u_quad_t ifs6_in_receive; /* # of total input datagram */131u_quad_t ifs6_in_hdrerr; /* # of datagrams with invalid hdr */132u_quad_t ifs6_in_toobig; /* # of datagrams exceeded MTU */133u_quad_t ifs6_in_noroute; /* # of datagrams with no route */134u_quad_t ifs6_in_addrerr; /* # of datagrams with invalid dst */135u_quad_t ifs6_in_protounknown; /* # of datagrams with unknown proto */136/* NOTE: increment on final dst if */137u_quad_t ifs6_in_truncated; /* # of truncated datagrams */138u_quad_t ifs6_in_discard; /* # of discarded datagrams */139/* NOTE: fragment timeout is not here */140u_quad_t ifs6_in_deliver; /* # of datagrams delivered to ULP */141/* NOTE: increment on final dst if */142u_quad_t ifs6_out_forward; /* # of datagrams forwarded */143/* NOTE: increment on outgoing if */144u_quad_t ifs6_out_request; /* # of outgoing datagrams from ULP */145/* NOTE: does not include forwrads */146u_quad_t ifs6_out_discard; /* # of discarded datagrams */147u_quad_t ifs6_out_fragok; /* # of datagrams fragmented */148u_quad_t ifs6_out_fragfail; /* # of datagrams failed on fragment */149u_quad_t ifs6_out_fragcreat; /* # of fragment datagrams */150/* NOTE: this is # after fragment */151u_quad_t ifs6_reass_reqd; /* # of incoming fragmented packets */152/* NOTE: increment on final dst if */153u_quad_t ifs6_reass_ok; /* # of reassembled packets */154/* NOTE: this is # after reass */155/* NOTE: increment on final dst if */156u_quad_t ifs6_atmfrag_rcvd; /* # of atomic fragments received */157u_quad_t ifs6_reass_fail; /* # of reass failures */158/* NOTE: may not be packet count */159/* NOTE: increment on final dst if */160u_quad_t ifs6_in_mcast; /* # of inbound multicast datagrams */161u_quad_t ifs6_out_mcast; /* # of outbound multicast datagrams */162163u_quad_t ifs6_cantfoward_icmp6; /* # of ICMPv6 packets received for unreachable dest */164u_quad_t ifs6_addr_expiry_cnt; /* # of address expiry events (excluding privacy addresses) */165u_quad_t ifs6_pfx_expiry_cnt; /* # of prefix expiry events */166u_quad_t ifs6_defrtr_expiry_cnt; /* # of default router expiry events */167};168169/*170* ICMPv6 interface statistics, as defined in RFC2466 Ipv6IfIcmpEntry.171* XXX: I'm not sure if this file is the right place for this structure...172*/173struct icmp6_ifstat {174/*175* Input statistics176*/177/* ipv6IfIcmpInMsgs, total # of input messages */178u_quad_t ifs6_in_msg;179/* ipv6IfIcmpInErrors, # of input error messages */180u_quad_t ifs6_in_error;181/* ipv6IfIcmpInDestUnreachs, # of input dest unreach errors */182u_quad_t ifs6_in_dstunreach;183/* ipv6IfIcmpInAdminProhibs, # of input admin. prohibited errs */184u_quad_t ifs6_in_adminprohib;185/* ipv6IfIcmpInTimeExcds, # of input time exceeded errors */186u_quad_t ifs6_in_timeexceed;187/* ipv6IfIcmpInParmProblems, # of input parameter problem errors */188u_quad_t ifs6_in_paramprob;189/* ipv6IfIcmpInPktTooBigs, # of input packet too big errors */190u_quad_t ifs6_in_pkttoobig;191/* ipv6IfIcmpInEchos, # of input echo requests */192u_quad_t ifs6_in_echo;193/* ipv6IfIcmpInEchoReplies, # of input echo replies */194u_quad_t ifs6_in_echoreply;195/* ipv6IfIcmpInRouterSolicits, # of input router solicitations */196u_quad_t ifs6_in_routersolicit;197/* ipv6IfIcmpInRouterAdvertisements, # of input router advertisements */198u_quad_t ifs6_in_routeradvert;199/* ipv6IfIcmpInNeighborSolicits, # of input neighbor solicitations */200u_quad_t ifs6_in_neighborsolicit;201/* ipv6IfIcmpInNeighborAdvertisements, # of input neighbor advs. */202u_quad_t ifs6_in_neighboradvert;203/* ipv6IfIcmpInRedirects, # of input redirects */204u_quad_t ifs6_in_redirect;205/* ipv6IfIcmpInGroupMembQueries, # of input MLD queries */206u_quad_t ifs6_in_mldquery;207/* ipv6IfIcmpInGroupMembResponses, # of input MLD reports */208u_quad_t ifs6_in_mldreport;209/* ipv6IfIcmpInGroupMembReductions, # of input MLD done */210u_quad_t ifs6_in_mlddone;211212/*213* Output statistics. We should solve unresolved routing problem...214*/215/* ipv6IfIcmpOutMsgs, total # of output messages */216u_quad_t ifs6_out_msg;217/* ipv6IfIcmpOutErrors, # of output error messages */218u_quad_t ifs6_out_error;219/* ipv6IfIcmpOutDestUnreachs, # of output dest unreach errors */220u_quad_t ifs6_out_dstunreach;221/* ipv6IfIcmpOutAdminProhibs, # of output admin. prohibited errs */222u_quad_t ifs6_out_adminprohib;223/* ipv6IfIcmpOutTimeExcds, # of output time exceeded errors */224u_quad_t ifs6_out_timeexceed;225/* ipv6IfIcmpOutParmProblems, # of output parameter problem errors */226u_quad_t ifs6_out_paramprob;227/* ipv6IfIcmpOutPktTooBigs, # of output packet too big errors */228u_quad_t ifs6_out_pkttoobig;229/* ipv6IfIcmpOutEchos, # of output echo requests */230u_quad_t ifs6_out_echo;231/* ipv6IfIcmpOutEchoReplies, # of output echo replies */232u_quad_t ifs6_out_echoreply;233/* ipv6IfIcmpOutRouterSolicits, # of output router solicitations */234u_quad_t ifs6_out_routersolicit;235/* ipv6IfIcmpOutRouterAdvertisements, # of output router advs. */236u_quad_t ifs6_out_routeradvert;237/* ipv6IfIcmpOutNeighborSolicits, # of output neighbor solicitations */238u_quad_t ifs6_out_neighborsolicit;239/* ipv6IfIcmpOutNeighborAdvertisements, # of output neighbor advs. */240u_quad_t ifs6_out_neighboradvert;241/* ipv6IfIcmpOutRedirects, # of output redirects */242u_quad_t ifs6_out_redirect;243/* ipv6IfIcmpOutGroupMembQueries, # of output MLD queries */244u_quad_t ifs6_out_mldquery;245/* ipv6IfIcmpOutGroupMembResponses, # of output MLD reports */246u_quad_t ifs6_out_mldreport;247/* ipv6IfIcmpOutGroupMembReductions, # of output MLD done */248u_quad_t ifs6_out_mlddone;249};250251struct in6_ifreq {252char ifr_name[IFNAMSIZ];253union {254struct sockaddr_in6 ifru_addr;255struct sockaddr_in6 ifru_dstaddr;256int ifru_flags;257int ifru_flags6;258int ifru_metric;259int ifru_intval;260caddr_t ifru_data;261struct in6_addrlifetime ifru_lifetime;262struct in6_ifstat ifru_stat;263struct icmp6_ifstat ifru_icmp6stat;264u_int32_t ifru_scope_id[SCOPE6_ID_MAX];265} ifr_ifru;266};267268struct in6_aliasreq {269char ifra_name[IFNAMSIZ];270struct sockaddr_in6 ifra_addr;271struct sockaddr_in6 ifra_dstaddr;272struct sockaddr_in6 ifra_prefixmask;273int ifra_flags;274struct in6_addrlifetime ifra_lifetime;275};276277278279/* prefix type macro */280#define IN6_PREFIX_ND 1281#define IN6_PREFIX_RR 2282283/*284* prefix related flags passed between kernel(NDP related part) and285* user land command(ifconfig) and daemon(rtadvd).286*/287struct in6_prflags {288struct prf_ra {289u_char onlink : 1;290u_char autonomous : 1;291u_char reserved : 6;292} prf_ra;293u_char prf_reserved1;294u_short prf_reserved2;295/* want to put this on 4byte offset */296struct prf_rr {297u_char decrvalid : 1;298u_char decrprefd : 1;299u_char reserved : 6;300} prf_rr;301u_char prf_reserved3;302u_short prf_reserved4;303};304305struct in6_prefixreq {306char ipr_name[IFNAMSIZ];307u_char ipr_origin;308u_char ipr_plen;309u_int32_t ipr_vltime;310u_int32_t ipr_pltime;311struct in6_prflags ipr_flags;312struct sockaddr_in6 ipr_prefix;313};314315#define PR_ORIG_RA 0316#define PR_ORIG_RR 1317#define PR_ORIG_STATIC 2318#define PR_ORIG_KERNEL 3319320#define ipr_raf_onlink ipr_flags.prf_ra.onlink321#define ipr_raf_auto ipr_flags.prf_ra.autonomous322323#define ipr_statef_onlink ipr_flags.prf_state.onlink324325#define ipr_rrf_decrvalid ipr_flags.prf_rr.decrvalid326#define ipr_rrf_decrprefd ipr_flags.prf_rr.decrprefd327328struct in6_rrenumreq {329char irr_name[IFNAMSIZ];330u_char irr_origin;331u_char irr_m_len; /* match len for matchprefix */332u_char irr_m_minlen; /* minlen for matching prefix */333u_char irr_m_maxlen; /* maxlen for matching prefix */334u_char irr_u_uselen; /* uselen for adding prefix */335u_char irr_u_keeplen; /* keeplen from matching prefix */336struct irr_raflagmask {337u_char onlink : 1;338u_char autonomous : 1;339u_char reserved : 6;340} irr_raflagmask;341u_int32_t irr_vltime;342u_int32_t irr_pltime;343struct in6_prflags irr_flags;344struct sockaddr_in6 irr_matchprefix;345struct sockaddr_in6 irr_useprefix;346};347348#define irr_raf_mask_onlink irr_raflagmask.onlink349#define irr_raf_mask_auto irr_raflagmask.autonomous350#define irr_raf_mask_reserved irr_raflagmask.reserved351352#define irr_raf_onlink irr_flags.prf_ra.onlink353#define irr_raf_auto irr_flags.prf_ra.autonomous354355#define irr_statef_onlink irr_flags.prf_state.onlink356357#define irr_rrf irr_flags.prf_rr358#define irr_rrf_decrvalid irr_flags.prf_rr.decrvalid359#define irr_rrf_decrprefd irr_flags.prf_rr.decrprefd360361/*362* Event data, inet6 style.363*/364struct kev_in6_addrlifetime {365u_int32_t ia6t_expire;366u_int32_t ia6t_preferred;367u_int32_t ia6t_vltime;368u_int32_t ia6t_pltime;369};370371struct kev_in6_data {372struct net_event_data link_data;373struct sockaddr_in6 ia_addr; /* interface address */374struct sockaddr_in6 ia_net; /* network number of interface */375struct sockaddr_in6 ia_dstaddr; /* space for destination addr */376struct sockaddr_in6 ia_prefixmask; /* prefix mask */377u_int32_t ia_plen; /* prefix length */378u_int32_t ia6_flags; /* address flags from in6_ifaddr */379struct kev_in6_addrlifetime ia_lifetime; /* address life info */380uint8_t ia_mac[ETHER_ADDR_LEN];381};382383384#define SIOCSIFADDR_IN6 _IOW('i', 12, struct in6_ifreq)385#define SIOCGIFADDR_IN6 _IOWR('i', 33, struct in6_ifreq)386387/*388* SIOCSxxx ioctls should be unused (see comments in in6.c), but389* we do not shift numbers for binary compatibility.390*/391#define SIOCSIFDSTADDR_IN6 _IOW('i', 14, struct in6_ifreq)392#define SIOCSIFNETMASK_IN6 _IOW('i', 22, struct in6_ifreq)393394#define SIOCGIFDSTADDR_IN6 _IOWR('i', 34, struct in6_ifreq)395#define SIOCGIFNETMASK_IN6 _IOWR('i', 37, struct in6_ifreq)396397#define SIOCDIFADDR_IN6 _IOW('i', 25, struct in6_ifreq)398#define SIOCAIFADDR_IN6 _IOW('i', 26, struct in6_aliasreq)399400#define SIOCSIFPHYADDR_IN6 _IOW('i', 62, struct in6_aliasreq)401#define SIOCGIFPSRCADDR_IN6 _IOWR('i', 63, struct in6_ifreq)402#define SIOCGIFPDSTADDR_IN6 _IOWR('i', 64, struct in6_ifreq)403#define SIOCGIFAFLAG_IN6 _IOWR('i', 73, struct in6_ifreq)404405#define SIOCGDRLST_IN6 _IOWR('i', 74, struct in6_drlist)406407#define SIOCGPRLST_IN6 _IOWR('i', 75, struct in6_prlist)408409#define OSIOCGIFINFO_IN6 _IOWR('i', 108, struct in6_ondireq)410#define SIOCGIFINFO_IN6 _IOWR('i', 76, struct in6_ondireq)411#define SIOCSNDFLUSH_IN6 _IOWR('i', 77, struct in6_ifreq)412413#define SIOCGNBRINFO_IN6 _IOWR('i', 78, struct in6_nbrinfo)414415#define SIOCSPFXFLUSH_IN6 _IOWR('i', 79, struct in6_ifreq)416#define SIOCSRTRFLUSH_IN6 _IOWR('i', 80, struct in6_ifreq)417418#define SIOCGIFALIFETIME_IN6 _IOWR('i', 81, struct in6_ifreq)419#define SIOCSIFALIFETIME_IN6 _IOWR('i', 82, struct in6_ifreq)420#define SIOCGIFSTAT_IN6 _IOWR('i', 83, struct in6_ifreq)421#define SIOCGIFSTAT_ICMP6 _IOWR('i', 84, struct in6_ifreq)422423#define SIOCSDEFIFACE_IN6 _IOWR('i', 85, struct in6_ndifreq)424#define SIOCGDEFIFACE_IN6 _IOWR('i', 86, struct in6_ndifreq)425426#define SIOCSIFINFO_FLAGS _IOWR('i', 87, struct in6_ndireq) /* XXX */427428/* N.B.: These 3 ioctls are deprecated and won't work */429#define SIOCSSCOPE6 _IOW('i', 88, struct in6_ifreq)430#define SIOCGSCOPE6 _IOWR('i', 89, struct in6_ifreq)431#define SIOCGSCOPE6DEF _IOWR('i', 90, struct in6_ifreq)432433#define SIOCSIFPREFIX_IN6 _IOW('i', 100, struct in6_prefixreq) /* set */434#define SIOCGIFPREFIX_IN6 _IOWR('i', 101, struct in6_prefixreq) /* get */435#define SIOCDIFPREFIX_IN6 _IOW('i', 102, struct in6_prefixreq) /* del */436#define SIOCAIFPREFIX_IN6 _IOW('i', 103, struct in6_rrenumreq) /* add */437438/* change */439#define SIOCCIFPREFIX_IN6 _IOW('i', 104, struct in6_rrenumreq)440441/* set global */442#define SIOCSGIFPREFIX_IN6 _IOW('i', 105, struct in6_rrenumreq)443444/*445* multicast routing, get s/g pkt cnt, pkt cnt per interface.446*/447#define SIOCGETSGCNT_IN6 _IOWR('u', 28, struct sioc_sg_req6)448#define SIOCGETMIFCNT_IN6 _IOWR('u', 107, struct sioc_mif_req6)449450#define SIOCAADDRCTL_POLICY _IOW('u', 108, struct in6_addrpolicy)451#define SIOCDADDRCTL_POLICY _IOW('u', 109, struct in6_addrpolicy)452453454#define IN6_IFF_ANYCAST 0x0001 /* anycast address */455#define IN6_IFF_TENTATIVE 0x0002 /* tentative address */456#define IN6_IFF_DUPLICATED 0x0004 /* DAD detected duplicate */457#define IN6_IFF_DETACHED 0x0008 /* may be detached from the link */458#define IN6_IFF_DEPRECATED 0x0010 /* deprecated address */459460/* don't perform DAD on this address (used only at first SIOC* call) */461#define IN6_IFF_NODAD 0x0020462463#define IN6_IFF_AUTOCONF 0x0040 /* autoconfigurable address. */464#define IN6_IFF_TEMPORARY 0x0080 /* temporary (anonymous) address. */465#define IN6_IFF_DYNAMIC 0x0100 /* assigned by DHCPv6 service */466#define IN6_IFF_OPTIMISTIC 0x0200 /* optimistic DAD, i.e. RFC 4429 */467#define IN6_IFF_SECURED 0x0400 /* cryptographically generated */468#define IN6_IFF_CLAT46 0x1000 /* Address reserved for CLAT46 */469#define IN6_IFF_NOPFX 0x8000 /* Depreciated. Don't use. */470471/* Duplicate Address Detection [DAD] in progress. */472#define IN6_IFF_DADPROGRESS (IN6_IFF_TENTATIVE|IN6_IFF_OPTIMISTIC)473474/* do not input/output */475#define IN6_IFF_NOTREADY (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED)476477/* SLAAC/DHCPv6 address */478#define IN6_IFF_NOTMANUAL (IN6_IFF_AUTOCONF|IN6_IFF_DYNAMIC)479480481#endif /* _NETINET6_IN6_VAR_H_ */482483484