]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet6/ip6_var.h
xnu-4903.221.2.tar.gz
[apple/xnu.git] / bsd / netinet6 / ip6_var.h
index e04dee46a1d065ab0b5f1fe3c46323cba4c5b724..23c5107107b1302d3a629316a957e733d294d536 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  *
@@ -148,10 +148,10 @@ struct    ip6_moptions {
 };
 
 #define        IM6O_LOCK_ASSERT_HELD(_im6o)                                    \
-       lck_mtx_assert(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_OWNED)
+       LCK_MTX_ASSERT(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_OWNED)
 
 #define        IM6O_LOCK_ASSERT_NOTHELD(_im6o)                                 \
-       lck_mtx_assert(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_NOTOWNED)
+       LCK_MTX_ASSERT(&(_im6o)->im6o_lock, LCK_MTX_ASSERT_NOTOWNED)
 
 #define        IM6O_LOCK(_im6o)                                                \
        lck_mtx_lock(&(_im6o)->im6o_lock)
@@ -336,11 +336,40 @@ struct    ip6stat {
 
        /* DAD NS looped back */
        u_quad_t ip6s_dad_loopcount;
+
+       /* NECP policy related drop */
+       u_quad_t ip6s_necp_policy_drop;
+
+       /* CLAT46 stats */
+       u_quad_t ip6s_clat464_in_tooshort_drop;
+       u_quad_t ip6s_clat464_in_nov6addr_drop;
+       u_quad_t ip6s_clat464_in_nov4addr_drop;
+       u_quad_t ip6s_clat464_in_v4synthfail_drop;
+       u_quad_t ip6s_clat464_in_64transfail_drop;
+       u_quad_t ip6s_clat464_in_64proto_transfail_drop;
+       u_quad_t ip6s_clat464_in_64frag_transfail_drop;
+       u_quad_t ip6s_clat464_in_invalpbuf_drop;
+       u_quad_t ip6s_clat464_in_success;
+       u_quad_t ip6s_clat464_in_drop;
+       u_quad_t ip6s_clat464_in_v4_drop;
+
+       u_quad_t ip6s_clat464_out_nov6addr_drop;
+       u_quad_t ip6s_clat464_out_v6synthfail_drop;
+       u_quad_t ip6s_clat464_out_46transfail_drop;
+       u_quad_t ip6s_clat464_out_46proto_transfail_drop;
+       u_quad_t ip6s_clat464_out_46frag_transfail_drop;
+       u_quad_t ip6s_clat464_out_invalpbuf_drop;
+       u_quad_t ip6s_clat464_out_success;
+       u_quad_t ip6s_clat464_out_drop;
+
+       u_quad_t ip6s_clat464_v6addr_conffail;
+       u_quad_t ip6s_clat464_plat64_pfx_setfail;
+       u_quad_t ip6s_clat464_plat64_pfx_getfail;
 };
 
 enum ip6s_sources_rule_index {
        IP6S_SRCRULE_0, IP6S_SRCRULE_1, IP6S_SRCRULE_2, IP6S_SRCRULE_3, IP6S_SRCRULE_4,
-       IP6S_SRCRULE_5, IP6S_SRCRULE_5_5, IP6S_SRCRULE_6, IP6S_SRCRULE_7,
+       IP6S_SRCRULE_5, IP6S_SRCRULE_6, IP6S_SRCRULE_7,
        IP6S_SRCRULE_7x, IP6S_SRCRULE_8
 };
 
@@ -418,6 +447,7 @@ struct ip6_out_args {
 #define        IP6OAF_AWDL_UNRESTRICTED 0x00000040     /* privileged AWDL */
 #define        IP6OAF_QOSMARKING_ALLOWED 0x00000080    /* policy allows Fastlane DSCP marking */
 #define IP6OAF_INTCOPROC_ALLOWED 0x00000100    /* access to internal coproc interfaces */
+#define        IP6OAF_NO_LOW_POWER     0x00000200      /* skip low power */
        u_int32_t       ip6oa_retflags; /* IP6OARF return flags (see below) */
 #define        IP6OARF_IFDENIED        0x00000001      /* denied access to interface */
        int             ip6oa_sotc;             /* traffic class for Fastlane DSCP mapping */
@@ -471,6 +501,7 @@ extern struct pr_usrreqs icmp6_dgram_usrreqs;
 
 struct sockopt;
 struct inpcb;
+struct ip6_hdr;
 struct in6_ifaddr;
 struct ip6protosw;
 struct domain;
@@ -524,6 +555,8 @@ extern void ip6_clearpktopts(struct ip6_pktopts *, int);
 extern struct ip6_pktopts *ip6_copypktopts(struct ip6_pktopts *, int);
 extern int ip6_optlen(struct inpcb *);
 extern void ip6_drain(void);
+extern int ip6_do_fragmentation(struct mbuf **, uint32_t, struct ifnet *, uint32_t,
+                                                               struct ip6_hdr *, struct ip6_exthdrs *, uint32_t, int);
 
 extern int route6_input(struct mbuf **, int *, int);
 
@@ -532,12 +565,21 @@ extern int frag6_input(struct mbuf **, int *, int);
 extern void frag6_drain(void);
 
 extern int rip6_input(struct mbuf **, int *, int);
-extern void rip6_ctlinput(int, struct sockaddr *, void *);
+extern void rip6_ctlinput(int, struct sockaddr *, void *, struct ifnet *);
 extern int rip6_ctloutput(struct socket *so, struct sockopt *sopt);
 extern int rip6_output(struct mbuf *, struct socket *, struct sockaddr_in6 *,
     struct mbuf *, int);
 
 extern int dest6_input(struct mbuf **, int *, int);
+/*
+ * IPv6 source address selection hints
+ */
+#define IPV6_SRCSEL_HINT_PREFER_TMPADDR         0x00000001
+
+extern struct ifaddr * in6_selectsrc_core_ifa(struct sockaddr_in6 *, struct ifnet *, int);
+extern struct in6_addr * in6_selectsrc_core(struct sockaddr_in6 *,
+    uint32_t, struct ifnet *, int,
+    struct in6_addr *, struct ifnet **, int *, struct ifaddr **);
 extern struct in6_addr *in6_selectsrc(struct sockaddr_in6 *,
     struct ip6_pktopts *, struct inpcb *, struct route_in6 *,
     struct ifnet **, struct in6_addr *, unsigned int, int *);