ip_stack.h revision 4cc341244283c4f742842066f99a49422ca19bbd
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * CDDL HEADER START
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * The contents of this file are subject to the terms of the
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * Common Development and Distribution License (the "License").
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * You may not use this file except in compliance with the License.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * or http://www.opensolaris.org/os/licensing.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * See the License for the specific language governing permissions
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * and limitations under the License.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * When distributing Covered Code, include this CDDL HEADER in each
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * If applicable, add the following below this CDDL HEADER, with the
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * fields enclosed by brackets "[]" replaced with your own identifying
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * information: Portions Copyright [yyyy] [name of copyright owner]
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * CDDL HEADER END
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * Use is subject to license terms.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * IP statistics.
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering#define IP_STAT(ipst, x) ((ipst)->ips_ip_statistics.x.value.ui64++)
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering ((ipst)->ips_ip_statistics.x.value.ui64 += (n))
04d39279245834494baccfdb9349db8bf80abd13Lennart Poetteringtypedef struct ip_stat {
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering kstat_named_t ip_trash_ire_reclaim_calls;
6e18cc9fa078d2a967251017ddb5baefb104b720Lennart Poettering kstat_named_t ip_trash_ire_reclaim_success;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering kstat_named_t ip_ire_redirect_timer_expired;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_tcp_in_full_hw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_tcp_in_part_hw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_in_full_hw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_in_part_hw_cksum_err;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering * IP6 statistics.
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering#define IP6_STAT(ipst, x) ((ipst)->ips_ip6_statistics.x.value.ui64++)
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering ((ipst)->ips_ip6_statistics.x.value.ui64 += (n))
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poetteringtypedef struct ip6_stat {
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_tcp_in_full_hw_cksum_err;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_tcp_in_part_hw_cksum_err;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_tcp_out_sw_cksum_bytes;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_udp_in_full_hw_cksum_err;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_udp_in_part_hw_cksum_err;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_udp_out_sw_cksum_bytes;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poetteringtypedef struct ire_stats {
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen uint64_t ire_stats_alloced; /* # of ires alloced */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering uint64_t ire_stats_freed; /* # of ires freed */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering uint64_t ire_stats_inserted; /* # of ires inserted in the bucket */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen uint64_t ire_stats_deleted; /* # of ires deleted from the bucket */
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering ((((uintptr_t)(X) >> 2) + ((uintptr_t)(X) >> 9)) & (TX_FANOUT_SIZE - 1))
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering/* Data structure to represent addresses */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poetteringtypedef struct srcid_map {
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen uint_t sm_refcnt; /* > 1 ipif with same addr? */
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering * IP stack instances
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering netstack_t *ips_netstack; /* Common netstack */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering struct ipparam_s *ips_param_arr; /* ndd variable table */
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering mib2_ipIfStatsEntry_t ips_ip_mib; /* SNMP fixed size info */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering * IPv6 mibs when the interface (ill) is not known.
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering * When the ill is known the per-interface mib in the ill is used.
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_t *ips_ip_mibkp; /* kstat exporting ip_mib data */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_t *ips_icmp_mibkp; /* kstat exporting icmp_mib data */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering /* protects the list of IPsec capable ills */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct ipsec_capab_ill_s *ips_ipsec_capab_ills_ah;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering struct ipsec_capab_ill_s *ips_ipsec_capab_ills_esp;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen /* Taskq dispatcher for capability operations */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering/* ipclassifier.c - keep in ip_stack_t */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering /* ipclassifier hash tables */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_proto_fanout_v6;
e56056e93d33619a3acf13e483900b4f8938228fThomas Hindoe Paaboel Andersen uint_t ips_ipcl_bind_fanout_size;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering struct connf_s *ips_ipcl_globalhash_fanout;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Following protected by igmp_timer_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_igmp_time_to_next; /* Time since last timeout */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Following protected by mld_timer_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_mld_time_to_next; /* Time since last timeout */
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering /* Protected by igmp_slowtimeout_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Protected by mld_slowtimeout_lock */
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering /* IPv4 forwarding table */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* This is dynamically allocated in ip_ire_init */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering#define IP6_MASK_TABLE_SIZE (IPV6_ABITS + 1) /* 129 ptrs */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering struct irb *ips_ip_forwarding_table_v6[IP6_MASK_TABLE_SIZE];
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* This is dynamically allocated in ip_ire_init */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering * ire_ft_init_lock is used while initializing ip_forwarding_table
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering * dynamically in ire_add.
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ire_handle_lock; /* Protects ire_handle */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering ire_stats_t ips_ire_stats_v4; /* IPv4 ire statistics */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering ire_stats_t ips_ire_stats_v6; /* IPv6 ire statistics */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* pending binds */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Synchronize updates with table usage */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering mblk_t *ips_ip6_asp_pending_update; /* pending table updates */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering boolean_t ips_ip6_asp_uip; /* table update in progress */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ip6_asp_lock; /* protect all the above */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint32_t ips_ip6_asp_refcnt; /* outstanding references */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* The number of policy entries in the table */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Time since last icmp_pkt_err */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Number of packets sent in burst */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Protected by ip_mi_lock */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering void *ips_ip_g_head; /* Instance Data List Head */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering caddr_t ips_ip_g_nd; /* Named Dispatch List Head */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Multirouting stuff */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Interval (in ms) between consecutive 'bad MTU' warnings */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Time since last warning issued. */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering struct cgtp_filter_ops *ips_ip_cgtp_filter_ops; /* CGTP hooks */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering boolean_t ips_ip_cgtp_filter; /* Enable/disable CGTP hooks */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering timeout_id_t ips_ip_ire_expire_id; /* IRE expiration timer. */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint_t ips_ill_index; /* Used to assign interface indicies */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* When set search for unused index */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Time since IRE cache last flushed */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* ... redirect IREs last flushed */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Time since path mtu increase */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Num of redirect routes in ftable */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Number of IPv6 IRE_DEFAULT entries */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Walking IPv6 index used to mod in */
8937e7b68940d0fa0d0aab90eb7425fa7dccebc9Lennart Poettering /* NDP/NCE structures for IPv4 and IPv6 */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* ip_mroute stuff */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering struct mrtstat *ips_mrtstat; /* Stats for netstat */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* numvifs is only a hint about the max interface being used. */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering struct mfcb *ips_mfcs; /* kernel routing table */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * One-back cache used to locate a tunnel's vif,
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * given a datagram's src ip address.
d21ed1ead18d16d35c30299a69d3366847f8a039Lennart Poettering kmutex_t ips_last_encap_lock; /* Protects the above */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * reg_vif_num is protected by numvifs_mutex
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering /* Whether or not special PIM assert processing is enabled. */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering ushort_t ips_reg_vif_num; /* Index to Register vif */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering union ill_g_head_u *ips_ill_g_heads; /* ILL List Head */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering /* Array of conn drain lists */
a7893c6b28772edbc7e1fea3c209caa54d465648Lennart Poettering uint_t ips_conn_drain_list_cnt; /* Count of conn_drain_list */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * ID used to assign next free one.
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * Increases by one. Once it wraps we search for an unused ID.
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering union phyint_list_u *ips_phyint_g_list; /* start of phyint list */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * Hooks for firewalling
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv4firewall_physical_in;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv4firewall_physical_out;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv4firewall_forwarding;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv4firewall_loopback_in;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv4firewall_loopback_out;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv6firewall_physical_in;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv6firewall_physical_out;
0dd25fb9f005d8ab7ac4bc10a609d00569f8c56aLennart Poettering hook_event_token_t ips_ipv6firewall_forwarding;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv6firewall_loopback_in;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv6firewall_loopback_out;
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering /* multicast restart timers thread logic */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering/* Finding an ip_stack_t */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#define CONNQ_TO_IPST(_q) (Q_TO_CONN(_q)->conn_netstack->netstack_ip)
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#define ILLQ_TO_IPST(_q) (((ill_t *)(_q)->q_ptr)->ill_ipst)
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#define PHYINT_TO_IPST(phyi) ((phyi)->phyint_ipsq->ipsq_ipst)
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#else /* _KERNEL */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#endif /* _KERNEL */
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering#endif /* _INET_IP_STACK_H */