| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * ipv6 in net namespaces | |
| */ | |
| #include <net/inet_frag.h> | |
| #ifndef __NETNS_IPV6_H__ | |
| #define __NETNS_IPV6_H__ | |
| #include <net/dst_ops.h> | |
| #include <uapi/linux/icmpv6.h> | |
| struct ctl_table_header; | |
| struct netns_sysctl_ipv6 { | |
| #ifdef CONFIG_SYSCTL | |
| struct ctl_table_header *hdr; | |
| struct ctl_table_header *route_hdr; | |
| struct ctl_table_header *icmp_hdr; | |
| struct ctl_table_header *frags_hdr; | |
| struct ctl_table_header *xfrm6_hdr; | |
| #endif | |
| int flush_delay; | |
| int ip6_rt_max_size; | |
| int ip6_rt_gc_min_interval; | |
| int ip6_rt_gc_timeout; | |
| int ip6_rt_gc_interval; | |
| int ip6_rt_gc_elasticity; | |
| int ip6_rt_mtu_expires; | |
| int ip6_rt_min_advmss; | |
| u32 multipath_hash_fields; | |
| u8 multipath_hash_policy; | |
| __cacheline_group_begin(sysctl_ipv6_flowlabel); | |
| u8 flowlabel_consistency; | |
| u8 auto_flowlabels; | |
| u8 flowlabel_state_ranges; | |
| __cacheline_group_end(sysctl_ipv6_flowlabel); | |
| u8 icmpv6_echo_ignore_all; | |
| u8 icmpv6_echo_ignore_multicast; | |
| u8 icmpv6_echo_ignore_anycast; | |
| int icmpv6_time; | |
| DECLARE_BITMAP(icmpv6_ratemask, ICMPV6_MSG_MAX + 1); | |
| unsigned long *icmpv6_ratemask_ptr; | |
| u8 anycast_src_echo_reply; | |
| u8 bindv6only; | |
| u8 ip_nonlocal_bind; | |
| u8 fwmark_reflect; | |
| int idgen_retries; | |
| int idgen_delay; | |
| int flowlabel_reflect; | |
| int max_dst_opts_cnt; | |
| int max_hbh_opts_cnt; | |
| int max_dst_opts_len; | |
| int max_hbh_opts_len; | |
| int seg6_flowlabel; | |
| u32 ioam6_id; | |
| u64 ioam6_id_wide; | |
| u8 skip_notify_on_dev_down; | |
| u8 fib_notify_on_flag_change; | |
| u8 icmpv6_error_anycast_as_unicast; | |
| u8 icmpv6_errors_extension_mask; | |
| }; | |
| struct netns_ipv6 { | |
| /* Keep ip6_dst_ops at the beginning of netns_sysctl_ipv6 */ | |
| struct dst_ops ip6_dst_ops; | |
| struct netns_sysctl_ipv6 sysctl; | |
| struct ipv6_devconf *devconf_all; | |
| struct ipv6_devconf *devconf_dflt; | |
| struct inet_peer_base *peers; | |
| struct fqdir *fqdir; | |
| struct fib6_info *fib6_null_entry; | |
| struct rt6_info *ip6_null_entry; | |
| struct rt6_statistics *rt6_stats; | |
| struct timer_list ip6_fib_timer; | |
| struct hlist_head *fib_table_hash; | |
| spinlock_t fib_table_hash_lock; | |
| struct fib6_table *fib6_main_tbl; | |
| struct list_head fib6_walkers; | |
| rwlock_t fib6_walker_lock; | |
| spinlock_t fib6_gc_lock; | |
| atomic_t ip6_rt_gc_expire; | |
| unsigned long ip6_rt_last_gc; | |
| unsigned char flowlabel_has_excl; | |
| #ifdef CONFIG_IPV6_MULTIPLE_TABLES | |
| bool fib6_has_custom_rules; | |
| unsigned int fib6_rules_require_fldissect; | |
| #ifdef CONFIG_IPV6_SUBTREES | |
| unsigned int fib6_routes_require_src; | |
| #endif | |
| struct rt6_info *ip6_prohibit_entry; | |
| struct rt6_info *ip6_blk_hole_entry; | |
| struct fib6_table *fib6_local_tbl; | |
| struct fib_rules_ops *fib6_rules_ops; | |
| #endif | |
| struct sock *ndisc_sk; | |
| struct sock *tcp_sk; | |
| struct sock *igmp_sk; | |
| struct sock *mc_autojoin_sk; | |
| struct hlist_head *inet6_addr_lst; | |
| spinlock_t addrconf_hash_lock; | |
| struct delayed_work addr_chk_work; | |
| #ifdef CONFIG_IPV6_MROUTE | |
| #ifndef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES | |
| struct mr_table *mrt6; | |
| #else | |
| struct list_head mr6_tables; | |
| struct fib_rules_ops *mr6_rules_ops; | |
| #endif | |
| struct fib_notifier_ops *ip6mr_notifier_ops; | |
| atomic_t ipmr_seq; | |
| struct mutex mfc_mutex; | |
| #endif | |
| atomic_t dev_addr_genid; | |
| atomic_t fib6_sernum; | |
| struct seg6_pernet_data *seg6_data; | |
| struct fib_notifier_ops *notifier_ops; | |
| int flowlabel_count; | |
| struct { | |
| struct hlist_head head; | |
| spinlock_t lock; | |
| u32 seq; | |
| } ip6addrlbl_table; | |
| struct ioam6_pernet_data *ioam6_data; | |
| }; | |
| #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6) | |
| struct netns_nf_frag { | |
| struct fqdir *fqdir; | |
| }; | |
| #endif | |
| #endif |