X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/b226f5e54a60dc81db17b1260381d7dbfea3cdf1..0a7de7458d150b5d4dffc935ba399be265ef0a1a:/bsd/netinet/ip_var.h?ds=sidebyside diff --git a/bsd/netinet/ip_var.h b/bsd/netinet/ip_var.h index 87985cc1c..9c2f73035 100644 --- a/bsd/netinet/ip_var.h +++ b/bsd/netinet/ip_var.h @@ -67,18 +67,18 @@ */ #ifndef _NETINET_IP_VAR_H_ -#define _NETINET_IP_VAR_H_ +#define _NETINET_IP_VAR_H_ #include /* * Overlay for ip header used by other protocols (tcp, udp). */ struct ipovly { - u_char ih_x1[9]; /* (unused) */ - u_char ih_pr; /* protocol */ - u_short ih_len; /* protocol length */ - struct in_addr ih_src; /* source internet address */ - struct in_addr ih_dst; /* destination internet address */ + u_char ih_x1[9]; /* (unused) */ + u_char ih_pr; /* protocol */ + u_short ih_len; /* protocol length */ + struct in_addr ih_src; /* source internet address */ + struct in_addr ih_dst; /* destination internet address */ }; #ifdef BSD_KERNEL_PRIVATE @@ -92,25 +92,25 @@ struct label; * be reclaimed if memory becomes tight. */ struct ipq { - TAILQ_ENTRY(ipq) ipq_list; /* to other reass headers */ - struct mbuf *ipq_frags; /* to ip headers of fragments */ + TAILQ_ENTRY(ipq) ipq_list; /* to other reass headers */ + struct mbuf *ipq_frags; /* to ip headers of fragments */ #if CONFIG_MACF_NET - struct label *ipq_label; /* MAC label */ + struct label *ipq_label; /* MAC label */ #endif /* CONFIG_MACF_NET */ - u_char ipq_ttl; /* time for reass q to live */ - u_char ipq_p; /* protocol of this fragment */ - u_short ipq_id; /* sequence id for reassembly */ - struct in_addr ipq_src, ipq_dst; - u_int32_t ipq_nfrags; /* # frags in this packet */ - uint32_t ipq_csum_flags; /* checksum flags */ - uint32_t ipq_csum; /* partial checksum value */ + u_char ipq_ttl; /* time for reass q to live */ + u_char ipq_p; /* protocol of this fragment */ + u_short ipq_id; /* sequence id for reassembly */ + struct in_addr ipq_src, ipq_dst; + u_int32_t ipq_nfrags; /* # frags in this packet */ + uint32_t ipq_csum_flags; /* checksum flags */ + uint32_t ipq_csum; /* partial checksum value */ #if IPDIVERT #ifdef IPDIVERT_44 - u_int32_t ipq_div_info; /* ipfw divert port & flags */ + u_int32_t ipq_div_info; /* ipfw divert port & flags */ #else /* !IPDIVERT_44 */ - u_int16_t ipq_divert; /* ipfw divert port (legacy) */ + u_int16_t ipq_divert; /* ipfw divert port (legacy) */ #endif /* !IPDIVERT_44 */ - u_int16_t ipq_div_cookie; /* ipfw divert cookie */ + u_int16_t ipq_div_cookie; /* ipfw divert cookie */ #endif /* IPDIVERT */ }; @@ -121,11 +121,11 @@ struct ipq { * is in m_len. */ #endif /* BSD_KERNEL_PRIVATE */ -#define MAX_IPOPTLEN 40 +#define MAX_IPOPTLEN 40 #ifdef BSD_KERNEL_PRIVATE struct ipoption { - struct in_addr ipopt_dst; /* first-hop dst if source routed */ - char ipopt_list[MAX_IPOPTLEN]; /* options proper */ + struct in_addr ipopt_dst; /* first-hop dst if source routed */ + char ipopt_list[MAX_IPOPTLEN]; /* options proper */ }; /* @@ -134,108 +134,108 @@ struct ipoption { */ struct ip_moptions { decl_lck_mtx_data(, imo_lock); - uint32_t imo_refcnt; /* ref count */ - uint32_t imo_debug; /* see ifa_debug flags */ - struct ifnet *imo_multicast_ifp; /* ifp for outgoing multicasts */ - u_char imo_multicast_ttl; /* TTL for outgoing multicasts */ - u_char imo_multicast_loop; /* 1 => hear sends if a member */ - u_short imo_num_memberships; /* no. memberships this socket */ - u_short imo_max_memberships; /* max memberships this socket */ - struct in_multi **imo_membership; /* group memberships */ - struct in_mfilter *imo_mfilters; /* source filters */ - u_int32_t imo_multicast_vif; /* vif num outgoing multicasts */ - struct in_addr imo_multicast_addr; /* ifindex/addr on MULTICAST_IF */ - void (*imo_trace) /* callback fn for tracing refs */ - (struct ip_moptions *, int); + uint32_t imo_refcnt; /* ref count */ + uint32_t imo_debug; /* see ifa_debug flags */ + struct ifnet *imo_multicast_ifp; /* ifp for outgoing multicasts */ + u_char imo_multicast_ttl; /* TTL for outgoing multicasts */ + u_char imo_multicast_loop; /* 1 => hear sends if a member */ + u_short imo_num_memberships; /* no. memberships this socket */ + u_short imo_max_memberships; /* max memberships this socket */ + struct in_multi **imo_membership; /* group memberships */ + struct in_mfilter *imo_mfilters; /* source filters */ + u_int32_t imo_multicast_vif; /* vif num outgoing multicasts */ + struct in_addr imo_multicast_addr; /* ifindex/addr on MULTICAST_IF */ + void (*imo_trace) /* callback fn for tracing refs */ + (struct ip_moptions *, int); }; -#define IMO_LOCK_ASSERT_HELD(_imo) \ +#define IMO_LOCK_ASSERT_HELD(_imo) \ LCK_MTX_ASSERT(&(_imo)->imo_lock, LCK_MTX_ASSERT_OWNED) -#define IMO_LOCK_ASSERT_NOTHELD(_imo) \ +#define IMO_LOCK_ASSERT_NOTHELD(_imo) \ LCK_MTX_ASSERT(&(_imo)->imo_lock, LCK_MTX_ASSERT_NOTOWNED) -#define IMO_LOCK(_imo) \ +#define IMO_LOCK(_imo) \ lck_mtx_lock(&(_imo)->imo_lock) -#define IMO_LOCK_SPIN(_imo) \ +#define IMO_LOCK_SPIN(_imo) \ lck_mtx_lock_spin(&(_imo)->imo_lock) -#define IMO_CONVERT_LOCK(_imo) do { \ - IMO_LOCK_ASSERT_HELD(_imo); \ - lck_mtx_convert_spin(&(_imo)->imo_lock); \ +#define IMO_CONVERT_LOCK(_imo) do { \ + IMO_LOCK_ASSERT_HELD(_imo); \ + lck_mtx_convert_spin(&(_imo)->imo_lock); \ } while (0) -#define IMO_UNLOCK(_imo) \ +#define IMO_UNLOCK(_imo) \ lck_mtx_unlock(&(_imo)->imo_lock) -#define IMO_ADDREF(_imo) \ +#define IMO_ADDREF(_imo) \ imo_addref(_imo, 0) -#define IMO_ADDREF_LOCKED(_imo) \ +#define IMO_ADDREF_LOCKED(_imo) \ imo_addref(_imo, 1) -#define IMO_REMREF(_imo) \ +#define IMO_REMREF(_imo) \ imo_remref(_imo) /* mbuf tag for ip_forwarding info */ struct ip_fwd_tag { - struct sockaddr_in *next_hop; /* next_hop */ + struct sockaddr_in *next_hop; /* next_hop */ }; #endif /* BSD_KERNEL_PRIVATE */ -struct ipstat { - u_int32_t ips_total; /* total packets received */ - u_int32_t ips_badsum; /* checksum bad */ - u_int32_t ips_tooshort; /* packet too short */ - u_int32_t ips_toosmall; /* not enough data */ - u_int32_t ips_badhlen; /* ip header length < data size */ - u_int32_t ips_badlen; /* ip length < ip header length */ - u_int32_t ips_fragments; /* fragments received */ - u_int32_t ips_fragdropped; /* frags dropped (dups, out of space) */ - u_int32_t ips_fragtimeout; /* fragments timed out */ - u_int32_t ips_forward; /* packets forwarded */ - u_int32_t ips_fastforward; /* packets fast forwarded */ - u_int32_t ips_cantforward; /* packets rcvd for unreachable dest */ - u_int32_t ips_redirectsent; /* packets forwarded on same net */ - u_int32_t ips_noproto; /* unknown or unsupported protocol */ - u_int32_t ips_delivered; /* datagrams delivered to upper level */ - u_int32_t ips_localout; /* total ip packets generated here */ - u_int32_t ips_odropped; /* lost packets due to nobufs, etc. */ - u_int32_t ips_reassembled; /* total packets reassembled ok */ - u_int32_t ips_fragmented; /* datagrams successfully fragmented */ - u_int32_t ips_ofragments; /* output fragments created */ - u_int32_t ips_cantfrag; /* don't fragment flag was set, etc. */ - u_int32_t ips_badoptions; /* error in option processing */ - u_int32_t ips_noroute; /* packets discarded due to no route */ - u_int32_t ips_badvers; /* ip version != 4 */ - u_int32_t ips_rawout; /* total raw ip packets generated */ - u_int32_t ips_toolong; /* ip length > max ip packet size */ - u_int32_t ips_notmember; /* multicasts for unregistered grps */ - u_int32_t ips_nogif; /* no match gif found */ - u_int32_t ips_badaddr; /* invalid address on header */ - u_int32_t ips_pktdropcntrl; /* pkt dropped, no mbufs for ctl data */ - u_int32_t ips_rcv_swcsum; /* ip hdr swcksum (inbound), packets */ - u_int32_t ips_rcv_swcsum_bytes; /* ip hdr swcksum (inbound), bytes */ - u_int32_t ips_snd_swcsum; /* ip hdr swcksum (outbound), packets */ - u_int32_t ips_snd_swcsum_bytes; /* ip hdr swcksum (outbound), bytes */ - u_int32_t ips_adj; /* total packets trimmed/adjusted */ - u_int32_t ips_adj_hwcsum_clr; /* hwcksum discarded during adj */ - u_int32_t ips_rxc_collisions; /* rx chaining collisions */ - u_int32_t ips_rxc_chained; /* rx chains */ - u_int32_t ips_rxc_notchain; /* rx bypassed chaining */ - u_int32_t ips_rxc_chainsz_gt2; /* rx chain size greater than 2 */ +struct ipstat { + u_int32_t ips_total; /* total packets received */ + u_int32_t ips_badsum; /* checksum bad */ + u_int32_t ips_tooshort; /* packet too short */ + u_int32_t ips_toosmall; /* not enough data */ + u_int32_t ips_badhlen; /* ip header length < data size */ + u_int32_t ips_badlen; /* ip length < ip header length */ + u_int32_t ips_fragments; /* fragments received */ + u_int32_t ips_fragdropped; /* frags dropped (dups, out of space) */ + u_int32_t ips_fragtimeout; /* fragments timed out */ + u_int32_t ips_forward; /* packets forwarded */ + u_int32_t ips_fastforward; /* packets fast forwarded */ + u_int32_t ips_cantforward; /* packets rcvd for unreachable dest */ + u_int32_t ips_redirectsent; /* packets forwarded on same net */ + u_int32_t ips_noproto; /* unknown or unsupported protocol */ + u_int32_t ips_delivered; /* datagrams delivered to upper level */ + u_int32_t ips_localout; /* total ip packets generated here */ + u_int32_t ips_odropped; /* lost packets due to nobufs, etc. */ + u_int32_t ips_reassembled; /* total packets reassembled ok */ + u_int32_t ips_fragmented; /* datagrams successfully fragmented */ + u_int32_t ips_ofragments; /* output fragments created */ + u_int32_t ips_cantfrag; /* don't fragment flag was set, etc. */ + u_int32_t ips_badoptions; /* error in option processing */ + u_int32_t ips_noroute; /* packets discarded due to no route */ + u_int32_t ips_badvers; /* ip version != 4 */ + u_int32_t ips_rawout; /* total raw ip packets generated */ + u_int32_t ips_toolong; /* ip length > max ip packet size */ + u_int32_t ips_notmember; /* multicasts for unregistered grps */ + u_int32_t ips_nogif; /* no match gif found */ + u_int32_t ips_badaddr; /* invalid address on header */ + u_int32_t ips_pktdropcntrl; /* pkt dropped, no mbufs for ctl data */ + u_int32_t ips_rcv_swcsum; /* ip hdr swcksum (inbound), packets */ + u_int32_t ips_rcv_swcsum_bytes; /* ip hdr swcksum (inbound), bytes */ + u_int32_t ips_snd_swcsum; /* ip hdr swcksum (outbound), packets */ + u_int32_t ips_snd_swcsum_bytes; /* ip hdr swcksum (outbound), bytes */ + u_int32_t ips_adj; /* total packets trimmed/adjusted */ + u_int32_t ips_adj_hwcsum_clr; /* hwcksum discarded during adj */ + u_int32_t ips_rxc_collisions; /* rx chaining collisions */ + u_int32_t ips_rxc_chained; /* rx chains */ + u_int32_t ips_rxc_notchain; /* rx bypassed chaining */ + u_int32_t ips_rxc_chainsz_gt2; /* rx chain size greater than 2 */ u_int32_t ips_rxc_chainsz_gt4; /* rx chain size greater than 4 */ - u_int32_t ips_rxc_notlist; /* count of pkts through ip_input */ - u_int32_t ips_raw_sappend_fail; /* sock append failed */ + u_int32_t ips_rxc_notlist; /* count of pkts through ip_input */ + u_int32_t ips_raw_sappend_fail; /* sock append failed */ u_int32_t ips_necp_policy_drop; /* NECP policy related drop */ }; struct ip_linklocal_stat { - u_int32_t iplls_in_total; - u_int32_t iplls_in_badttl; - u_int32_t iplls_out_total; - u_int32_t iplls_out_badttl; + u_int32_t iplls_in_total; + u_int32_t iplls_in_badttl; + u_int32_t iplls_out_total; + u_int32_t iplls_out_badttl; }; #ifdef KERNEL_PRIVATE @@ -246,15 +246,15 @@ struct ip_moptions; #ifdef BSD_KERNEL_PRIVATE /* flags passed to ip_output as last parameter */ -#define IP_FORWARDING 0x1 /* most of ip header exists */ -#define IP_RAWOUTPUT 0x2 /* raw ip header exists */ -#define IP_NOIPSEC 0x4 /* No IPSec processing */ -#define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables (0x0010) */ -#define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast pkts (0x0020) */ -#define IP_OUTARGS 0x100 /* has ancillary output info */ +#define IP_FORWARDING 0x1 /* most of ip header exists */ +#define IP_RAWOUTPUT 0x2 /* raw ip header exists */ +#define IP_NOIPSEC 0x4 /* No IPSec processing */ +#define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables (0x0010) */ +#define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast pkts (0x0020) */ +#define IP_OUTARGS 0x100 /* has ancillary output info */ -#define IP_HDR_ALIGNED_P(_ip) ((((uintptr_t)(_ip)) & ((uintptr_t)3)) == 0) -#define IP_OFF_IS_ATOMIC(_ip_off) ((_ip_off & (IP_DF | IP_MF | IP_OFFMASK)) == IP_DF) +#define IP_HDR_ALIGNED_P(_ip) ((((uintptr_t)(_ip)) & ((uintptr_t)3)) == 0) +#define IP_OFF_IS_ATOMIC(_ip_off) ((_ip_off & (IP_DF | IP_MF | IP_OFFMASK)) == IP_DF) /* * On platforms which require strict alignment (currently for anything but @@ -262,13 +262,13 @@ struct ip_moptions; * is 32-bit aligned, and assert otherwise. */ #if defined(__i386__) || defined(__x86_64__) -#define IP_HDR_STRICT_ALIGNMENT_CHECK(_ip) do { } while (0) +#define IP_HDR_STRICT_ALIGNMENT_CHECK(_ip) do { } while (0) #else /* !__i386__ && !__x86_64__ */ -#define IP_HDR_STRICT_ALIGNMENT_CHECK(_ip) do { \ - if (!IP_HDR_ALIGNED_P(_ip)) { \ - panic_plain("\n%s: Unaligned IP header %p\n", \ - __func__, _ip); \ - } \ +#define IP_HDR_STRICT_ALIGNMENT_CHECK(_ip) do { \ + if (!IP_HDR_ALIGNED_P(_ip)) { \ + panic_plain("\n%s: Unaligned IP header %p\n", \ + __func__, _ip); \ + } \ } while (0) #endif /* !__i386__ && !__x86_64__ */ @@ -286,28 +286,28 @@ struct sockopt; * ipoa_retflags any additional information regarding the error. */ struct ip_out_args { - unsigned int ipoa_boundif; /* boundif interface index */ - struct flowadv ipoa_flowadv; /* flow advisory code */ - u_int32_t ipoa_flags; /* IPOAF output flags (see below) */ -#define IPOAF_SELECT_SRCIF 0x00000001 /* src interface selection */ -#define IPOAF_BOUND_IF 0x00000002 /* boundif value is valid */ -#define IPOAF_BOUND_SRCADDR 0x00000004 /* bound to src address */ -#define IPOAF_NO_CELLULAR 0x00000010 /* skip IFT_CELLULAR */ -#define IPOAF_NO_EXPENSIVE 0x00000020 /* skip IFT_EXPENSIVE */ -#define IPOAF_AWDL_UNRESTRICTED 0x00000040 /* can send over - AWDL_RESTRICTED */ -#define IPOAF_QOSMARKING_ALLOWED 0x00000080 /* policy allows Fastlane DSCP marking */ - u_int32_t ipoa_retflags; /* IPOARF return flags (see below) */ -#define IPOARF_IFDENIED 0x00000001 /* denied access to interface */ - int ipoa_sotc; /* traffic class for Fastlane DSCP mapping */ - int ipoa_netsvctype; /* network service type */ + unsigned int ipoa_boundif; /* boundif interface index */ + struct flowadv ipoa_flowadv; /* flow advisory code */ + u_int32_t ipoa_flags; /* IPOAF output flags (see below) */ +#define IPOAF_SELECT_SRCIF 0x00000001 /* src interface selection */ +#define IPOAF_BOUND_IF 0x00000002 /* boundif value is valid */ +#define IPOAF_BOUND_SRCADDR 0x00000004 /* bound to src address */ +#define IPOAF_NO_CELLULAR 0x00000010 /* skip IFT_CELLULAR */ +#define IPOAF_NO_EXPENSIVE 0x00000020 /* skip IFT_EXPENSIVE */ +#define IPOAF_AWDL_UNRESTRICTED 0x00000040 /* can send over + * AWDL_RESTRICTED */ +#define IPOAF_QOSMARKING_ALLOWED 0x00000080 /* policy allows Fastlane DSCP marking */ + u_int32_t ipoa_retflags; /* IPOARF return flags (see below) */ +#define IPOARF_IFDENIED 0x00000001 /* denied access to interface */ + int ipoa_sotc; /* traffic class for Fastlane DSCP mapping */ + int ipoa_netsvctype; /* network service type */ }; extern struct ipstat ipstat; extern int ip_use_randomid; -extern u_short ip_id; /* ip packet ctr, for ids */ -extern int ip_defttl; /* default IP ttl */ -extern int ipforwarding; /* ip forwarding */ +extern u_short ip_id; /* ip packet ctr, for ids */ +extern int ip_defttl; /* default IP ttl */ +extern int ipforwarding; /* ip forwarding */ extern int rfc6864; extern struct protosw *ip_protox[]; extern struct pr_usrreqs rip_usrreqs;