ip_stack.h revision 4cc341244283c4f742842066f99a49422ca19bbd
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering/*
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * CDDL HEADER START
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering *
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 *
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 *
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 *
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * CDDL HEADER END
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
8bdbb8d9cbe1d35708385573d70984ab4533812dLennart Poettering/*
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * Use is subject to license terms.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#ifndef _INET_IP_STACK_H
04d39279245834494baccfdb9349db8bf80abd13Lennart Poettering#define _INET_IP_STACK_H
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#ifdef __cplusplus
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poetteringextern "C" {
785890acf6d629ff881a1f065f431df1b7fc8c7aLennart Poettering#endif
eef46c372f64f40dd75415b2c504c73138719c8dLennart Poettering
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen#include <sys/netstack.h>
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#include <netinet/igmp_var.h>
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#include <sys/modhash.h>
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#ifdef _KERNEL
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering#include <sys/list.h>
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen/*
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering * IP statistics.
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering#define IP_STAT(ipst, x) ((ipst)->ips_ip_statistics.x.value.ui64++)
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#define IP_STAT_UPDATE(ipst, x, n) \
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering ((ipst)->ips_ip_statistics.x.value.ui64 += (n))
9d12709626bccc0cae677a7035f62efe6aabb4abLennart Poettering
04d39279245834494baccfdb9349db8bf80abd13Lennart Poetteringtypedef struct ip_stat {
023fb90b83871a15ef7f57e8cd126e3426f99b9eLennart Poettering kstat_named_t ipsec_fanout_proto;
785890acf6d629ff881a1f065f431df1b7fc8c7aLennart Poettering kstat_named_t ip_udp_fannorm;
785890acf6d629ff881a1f065f431df1b7fc8c7aLennart Poettering kstat_named_t ip_udp_fanmb;
f2cbe59e113f08549949a76ac5b9b3972df4cc30Lennart Poettering kstat_named_t ip_udp_fanothers;
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering kstat_named_t ip_udp_fast_path;
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering kstat_named_t ip_udp_slow_path;
0b452006de98294d1690f045f6ea2f7f6630ec3bRonny Chevalier kstat_named_t ip_udp_input_err;
288a74cce597f81d3ba01d8a5ca7d2ba5b654b7eRonny Chevalier kstat_named_t ip_tcppullup;
24882e06c135584f16f31ba8a00fecde8b7f6fadLennart Poettering kstat_named_t ip_tcpoptions;
c454426c54c9beb274f415a80c64a4f1580700e7Lennart Poettering kstat_named_t ip_multipkttcp;
25300b5a1fcf54674a69d0f4ab08925be00b0227Lennart Poettering kstat_named_t ip_tcp_fast_path;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_tcp_slow_path;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_tcp_input_error;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_db_ref;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_notaligned1;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_notaligned2;
e56056e93d33619a3acf13e483900b4f8938228fThomas Hindoe Paaboel Andersen kstat_named_t ip_multimblk3;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_multimblk4;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_ipoptions;
d21ed1ead18d16d35c30299a69d3366847f8a039Lennart Poettering kstat_named_t ip_classify_fail;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_opt;
785890acf6d629ff881a1f065f431df1b7fc8c7aLennart Poettering kstat_named_t ip_udp_rput_local;
785890acf6d629ff881a1f065f431df1b7fc8c7aLennart Poettering kstat_named_t ipsec_proto_ahesp;
d8f52ed25a9edce75fda5251c977b7898e33887eLennart Poettering kstat_named_t ip_conn_flputbq;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering kstat_named_t ip_conn_walk_drain;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip_out_sw_cksum;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip_in_sw_cksum;
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering kstat_named_t ip_trash_ire_reclaim_calls;
6e18cc9fa078d2a967251017ddb5baefb104b720Lennart Poettering kstat_named_t ip_trash_ire_reclaim_success;
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering kstat_named_t ip_ire_arp_timer_expired;
587fec427c80b6c34dcf1d7570f891fcb652a7c5Lennart Poettering kstat_named_t ip_ire_redirect_timer_expired;
c454426c54c9beb274f415a80c64a4f1580700e7Lennart Poettering kstat_named_t ip_ire_pmtu_timer_expired;
c454426c54c9beb274f415a80c64a4f1580700e7Lennart Poettering kstat_named_t ip_input_multi_squeue;
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_tcp_in_sw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_tcp_out_sw_cksum_bytes;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_in_full_hw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_in_part_hw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_in_sw_cksum_err;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_udp_out_sw_cksum_bytes;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering kstat_named_t ip_frag_mdt_pkt_out;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering kstat_named_t ip_frag_mdt_discarded;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering kstat_named_t ip_frag_mdt_allocfail;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering kstat_named_t ip_frag_mdt_addpdescfail;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering kstat_named_t ip_frag_mdt_allocd;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering} ip_stat_t;
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering/*
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering * IP6 statistics.
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering */
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering#define IP6_STAT(ipst, x) ((ipst)->ips_ip6_statistics.x.value.ui64++)
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering#define IP6_STAT_UPDATE(ipst, x, n) \
acf97e213e69a97e63ab8f7fad7ecd53608c757aLennart Poettering ((ipst)->ips_ip6_statistics.x.value.ui64 += (n))
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poetteringtypedef struct ip6_stat {
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_udp_fast_path;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_udp_slow_path;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_udp_fannorm;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_udp_fanmb;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_out_sw_cksum;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering kstat_named_t ip6_in_sw_cksum;
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_in_sw_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_in_sw_cksum_err;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_udp_out_sw_cksum_bytes;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_frag_mdt_pkt_out;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_frag_mdt_discarded;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_frag_mdt_allocfail;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_frag_mdt_addpdescfail;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_named_t ip6_frag_mdt_allocd;
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering} ip6_stat_t;
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering
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 */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering} ire_stats_t;
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#define TX_FANOUT_SIZE 128
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering#define IDLHASHINDEX(X) \
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering ((((uintptr_t)(X) >> 2) + ((uintptr_t)(X) >> 9)) & (TX_FANOUT_SIZE - 1))
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering/* Data structure to represent addresses */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poetteringtypedef struct srcid_map {
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen struct srcid_map *sm_next;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen in6_addr_t sm_addr; /* Local address */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen uint_t sm_srcid; /* source id */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen uint_t sm_refcnt; /* > 1 ipif with same addr? */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen zoneid_t sm_zoneid; /* zone id */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen} srcid_map_t;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen/*
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering * IP stack instances
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersenstruct ip_stack {
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering netstack_t *ips_netstack; /* Common netstack */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering struct ipparam_s *ips_param_arr; /* ndd variable table */
3d7415f43f0fe6a821d7bc4a341ba371e8a30ef3Lennart Poettering struct ipndp_s *ips_ndp_arr;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering mib2_ipIfStatsEntry_t ips_ip_mib; /* SNMP fixed size info */
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering mib2_icmp_t ips_icmp_mib;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen /*
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.
fee6d013d859bc66f5c993530898fece53fab06dLennart Poettering */
fee6d013d859bc66f5c993530898fece53fab06dLennart Poettering mib2_ipIfStatsEntry_t ips_ip6_mib;
fee6d013d859bc66f5c993530898fece53fab06dLennart Poettering mib2_ipv6IfIcmpEntry_t ips_icmp6_mib;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct igmpstat ips_igmpstat;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
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 kstat_t *ips_ip_kstat;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering ip_stat_t ips_ip_statistics;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kstat_t *ips_ip6_kstat;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering ip6_stat_t ips_ip6_statistics;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering/* ip.c */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering krwlock_t ips_ip_g_nd_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kmutex_t ips_igmp_timer_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kmutex_t ips_mld_timer_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kmutex_t ips_ip_mi_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kmutex_t ips_ip_addr_avail_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering krwlock_t ips_ill_g_lock;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering krwlock_t ips_ipsec_capab_ills_lock;
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
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering krwlock_t ips_ill_g_usesrc_lock;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen /* Taskq dispatcher for capability operations */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen kmutex_t ips_capab_taskq_lock;
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering kcondvar_t ips_capab_taskq_cv;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering mblk_t *ips_capab_taskq_head;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering mblk_t *ips_capab_taskq_tail;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering kthread_t *ips_capab_taskq_thread;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering boolean_t ips_capab_taskq_quit;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering/* ipclassifier.c - keep in ip_stack_t */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering /* ipclassifier hash tables */
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_rts_clients;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_conn_fanout;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_bind_fanout;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_proto_fanout;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_proto_fanout_v6;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_udp_fanout;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering struct connf_s *ips_ipcl_raw_fanout;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering uint_t ips_ipcl_conn_fanout_size;
e56056e93d33619a3acf13e483900b4f8938228fThomas Hindoe Paaboel Andersen uint_t ips_ipcl_bind_fanout_size;
0b63e2789f984e84f40bf6e49f5da15c87298cedLennart Poettering uint_t ips_ipcl_udp_fanout_size;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering uint_t ips_ipcl_raw_fanout_size;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering struct connf_s *ips_ipcl_globalhash_fanout;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering int ips_conn_g_index;
1ee306e1248866617c96ed9f4263f375588ad838Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering/* ip.c */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Following protected by igmp_timer_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_igmp_time_to_next; /* Time since last timeout */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_igmp_timer_scheduled_last;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering int ips_igmp_deferred_next;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering timeout_id_t ips_igmp_timeout_id;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering boolean_t ips_igmp_timer_setter_active;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Following protected by mld_timer_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_mld_time_to_next; /* Time since last timeout */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_mld_timer_scheduled_last;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_mld_deferred_next;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering timeout_id_t ips_mld_timeout_id;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering boolean_t ips_mld_timer_setter_active;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering /* Protected by igmp_slowtimeout_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering timeout_id_t ips_igmp_slowtimeout_id;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_igmp_slowtimeout_lock;
c19de71113f956809995fc68817e055e9f61f607Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Protected by mld_slowtimeout_lock */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering timeout_id_t ips_mld_slowtimeout_id;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_mld_slowtimeout_lock;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering /* IPv4 forwarding table */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering struct radix_node_head *ips_ip_ftable;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* This is dynamically allocated in ip_ire_init */
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering struct irb *ips_ip_cache_table;
56159e0d918e9a9be07988133bb2847779325de0Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering#define IPV6_ABITS 128
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering#define IP6_MASK_TABLE_SIZE (IPV6_ABITS + 1) /* 129 ptrs */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
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 struct irb *ips_ip_cache_table_v6;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint32_t ips_ire_handle;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /*
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering * ire_ft_init_lock is used while initializing ip_forwarding_table
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering * dynamically in ire_add.
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ire_ft_init_lock;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ire_handle_lock; /* Protects ire_handle */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint32_t ips_ip_cache_table_size;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering uint32_t ips_ip6_cache_table_size;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint32_t ips_ip6_ftable_hash_size;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering ire_stats_t ips_ire_stats_v4; /* IPv4 ire statistics */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering ire_stats_t ips_ire_stats_v6; /* IPv6 ire statistics */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* pending binds */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering mblk_t *ips_ip6_asp_pending_ops;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering mblk_t *ips_ip6_asp_pending_ops_tail;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Synchronize updates with table usage */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering mblk_t *ips_ip6_asp_pending_update; /* pending table updates */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
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 */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering struct ip6_asp *ips_ip6_asp_table;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* The number of policy entries in the table */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering uint_t ips_ip6_asp_table_count;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering int ips_ip_g_forward;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering int ips_ipv6_forward;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering time_t ips_ip_g_frag_timeout;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering clock_t ips_ip_g_frag_timo_ms;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering time_t ips_ipv6_frag_timeout;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering clock_t ips_ipv6_frag_timo_ms;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering struct conn_s *ips_ip_g_mrouter;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Time since last icmp_pkt_err */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering clock_t ips_icmp_pkt_err_last;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Number of packets sent in burst */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering uint_t ips_icmp_pkt_err_sent;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Protected by ip_mi_lock */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering void *ips_ip_g_head; /* Instance Data List Head */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering caddr_t ips_ip_g_nd; /* Named Dispatch List Head */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Multirouting stuff */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Interval (in ms) between consecutive 'bad MTU' warnings */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering hrtime_t ips_ip_multirt_log_interval;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering /* Time since last warning issued. */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering hrtime_t ips_multirt_bad_mtu_last_time;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
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
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ip_trash_timer_lock;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering timeout_id_t ips_ip_ire_expire_id; /* IRE expiration timer. */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering struct ipsq_s *ips_ipsq_g_head;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint_t ips_ill_index; /* Used to assign interface indicies */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* When set search for unused index */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering boolean_t ips_ill_index_wrap;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering clock_t ips_ip_ire_arp_time_elapsed;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Time since IRE cache last flushed */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering clock_t ips_ip_ire_rd_time_elapsed;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* ... redirect IREs last flushed */
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering clock_t ips_ip_ire_pmtu_time_elapsed;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Time since path mtu increase */
c19de71113f956809995fc68817e055e9f61f607Lennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering uint_t ips_ip_redirect_cnt;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Num of redirect routes in ftable */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint_t ips_ipv6_ire_default_count;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* Number of IPv6 IRE_DEFAULT entries */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering uint_t ips_ipv6_ire_default_index;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering /* Walking IPv6 index used to mod in */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering uint_t ips_loopback_packets;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
8937e7b68940d0fa0d0aab90eb7425fa7dccebc9Lennart Poettering /* NDP/NCE structures for IPv4 and IPv6 */
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering struct ndp_g_s *ips_ndp4;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering struct ndp_g_s *ips_ndp6;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* ip_mroute stuff */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering kmutex_t ips_ip_g_mrouter_mutex;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering struct mrtstat *ips_mrtstat; /* Stats for netstat */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering int ips_saved_ip_g_forward;
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering /* numvifs is only a hint about the max interface being used. */
cd61c3bfd718fb398cc53ced906266a9297782c9Lennart Poettering ushort_t ips_numvifs;
89f7c8465cd1ab37347dd0c15920bce31e8225dfLennart Poettering kmutex_t ips_numvifs_mutex;
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen struct vif *ips_vifs;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering struct mfcb *ips_mfcs; /* kernel routing table */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering struct tbf *ips_tbfs;
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering /*
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * One-back cache used to locate a tunnel's vif,
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * given a datagram's src ip address.
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering ipaddr_t ips_last_encap_src;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering struct vif *ips_last_encap_vif;
d21ed1ead18d16d35c30299a69d3366847f8a039Lennart Poettering kmutex_t ips_last_encap_lock; /* Protects the above */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering /*
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * reg_vif_num is protected by numvifs_mutex
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering /* Whether or not special PIM assert processing is enabled. */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering ushort_t ips_reg_vif_num; /* Index to Register vif */
a7893c6b28772edbc7e1fea3c209caa54d465648Lennart Poettering int ips_pim_assert;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering union ill_g_head_u *ips_ill_g_heads; /* ILL List Head */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
21b735e798c580e7af8c33ace9f8565860b7f8dfLennart Poettering kstat_t *ips_loopback_ksp;
a7893c6b28772edbc7e1fea3c209caa54d465648Lennart Poettering
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering /* Array of conn drain lists */
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen struct idl_tx_list_s *ips_idl_tx_list;
a7893c6b28772edbc7e1fea3c209caa54d465648Lennart Poettering uint_t ips_conn_drain_list_cnt; /* Count of conn_drain_list */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
a1da85830bfaa77b9eb9c54693e5573559c97e50Tom Gundersen /*
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 */
a7893c6b28772edbc7e1fea3c209caa54d465648Lennart Poettering uint_t ips_ip_src_id;
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering boolean_t ips_srcid_wrapped;
5b30bef856e89a571df57b7b953e9a1409d9acedLennart Poettering
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering struct srcid_map *ips_srcid_head;
9d12709626bccc0cae677a7035f62efe6aabb4abLennart Poettering krwlock_t ips_srcid_lock;
9d12709626bccc0cae677a7035f62efe6aabb4abLennart Poettering
9d12709626bccc0cae677a7035f62efe6aabb4abLennart Poettering uint64_t ips_ipif_g_seqid;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering union phyint_list_u *ips_phyint_g_list; /* start of phyint list */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering/* ip_neti.c */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering hook_family_t ips_ipv4root;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering hook_family_t ips_ipv6root;
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering
8b0cc9a36c8f92f010f2e8465942d2cd7c580d78Lennart Poettering /*
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering * Hooks for firewalling
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering */
aa1936ea1a89c2bb968ba33e3274898a4eeae771Lennart Poettering hook_event_t ips_ip4_physical_in_event;
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering hook_event_t ips_ip4_physical_out_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip4_forwarding_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip4_loopback_in_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip4_loopback_out_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip4_nic_events;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_physical_in_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_physical_out_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_forwarding_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_loopback_in_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_loopback_out_event;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_t ips_ip6_nic_events;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
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_ipv4nicevents;
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;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering hook_event_token_t ips_ipv6nicevents;
0dd25fb9f005d8ab7ac4bc10a609d00569f8c56aLennart Poettering
0dd25fb9f005d8ab7ac4bc10a609d00569f8c56aLennart Poettering net_handle_t ips_ipv4_net_data;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering net_handle_t ips_ipv6_net_data;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering boolean_t ips_ipobs_enabled;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering list_t ips_ipobs_cb_list;
0dd25fb9f005d8ab7ac4bc10a609d00569f8c56aLennart Poettering kmutex_t ips_ipobs_cb_lock;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering uint_t ips_ipobs_cb_nwalkers;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering kcondvar_t ips_ipobs_cb_cv;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering struct __ldi_ident *ips_ldi_ident;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering/* ipmp.c */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering krwlock_t ips_ipmp_lock;
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering mod_hash_t *ips_ipmp_grp_hash;
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering/* igmp.c */
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering /* multicast restart timers thread logic */
f48e75cb9a8112d35855c44a156934f2ee0edb2eLennart Poettering kmutex_t ips_mrt_lock;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering uint_t ips_mrt_flags;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering kcondvar_t ips_mrt_cv;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering kcondvar_t ips_mrt_done_cv;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering kthread_t *ips_mrt_thread;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering};
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poetteringtypedef struct ip_stack ip_stack_t;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
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
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#else /* _KERNEL */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poetteringtypedef int ip_stack_t;
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#endif /* _KERNEL */
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering#ifdef __cplusplus
878cd7e95ca303f9851d227a22d2022bd49944b0Lennart Poettering}
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering#endif
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering#endif /* _INET_IP_STACK_H */
717603e391b52983ca1fd218e7333a1b9dfc5c05Lennart Poettering