162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ipv6 in net namespaces 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <net/inet_frag.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __NETNS_IPV6_H__ 962306a36Sopenharmony_ci#define __NETNS_IPV6_H__ 1062306a36Sopenharmony_ci#include <net/dst_ops.h> 1162306a36Sopenharmony_ci#include <uapi/linux/icmpv6.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct ctl_table_header; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct netns_sysctl_ipv6 { 1662306a36Sopenharmony_ci#ifdef CONFIG_SYSCTL 1762306a36Sopenharmony_ci struct ctl_table_header *hdr; 1862306a36Sopenharmony_ci struct ctl_table_header *route_hdr; 1962306a36Sopenharmony_ci struct ctl_table_header *icmp_hdr; 2062306a36Sopenharmony_ci struct ctl_table_header *frags_hdr; 2162306a36Sopenharmony_ci struct ctl_table_header *xfrm6_hdr; 2262306a36Sopenharmony_ci#endif 2362306a36Sopenharmony_ci int flush_delay; 2462306a36Sopenharmony_ci int ip6_rt_max_size; 2562306a36Sopenharmony_ci int ip6_rt_gc_min_interval; 2662306a36Sopenharmony_ci int ip6_rt_gc_timeout; 2762306a36Sopenharmony_ci int ip6_rt_gc_interval; 2862306a36Sopenharmony_ci int ip6_rt_gc_elasticity; 2962306a36Sopenharmony_ci int ip6_rt_mtu_expires; 3062306a36Sopenharmony_ci int ip6_rt_min_advmss; 3162306a36Sopenharmony_ci u32 multipath_hash_fields; 3262306a36Sopenharmony_ci u8 multipath_hash_policy; 3362306a36Sopenharmony_ci u8 bindv6only; 3462306a36Sopenharmony_ci u8 flowlabel_consistency; 3562306a36Sopenharmony_ci u8 auto_flowlabels; 3662306a36Sopenharmony_ci int icmpv6_time; 3762306a36Sopenharmony_ci u8 icmpv6_echo_ignore_all; 3862306a36Sopenharmony_ci u8 icmpv6_echo_ignore_multicast; 3962306a36Sopenharmony_ci u8 icmpv6_echo_ignore_anycast; 4062306a36Sopenharmony_ci DECLARE_BITMAP(icmpv6_ratemask, ICMPV6_MSG_MAX + 1); 4162306a36Sopenharmony_ci unsigned long *icmpv6_ratemask_ptr; 4262306a36Sopenharmony_ci u8 anycast_src_echo_reply; 4362306a36Sopenharmony_ci u8 ip_nonlocal_bind; 4462306a36Sopenharmony_ci u8 fwmark_reflect; 4562306a36Sopenharmony_ci u8 flowlabel_state_ranges; 4662306a36Sopenharmony_ci int idgen_retries; 4762306a36Sopenharmony_ci int idgen_delay; 4862306a36Sopenharmony_ci int flowlabel_reflect; 4962306a36Sopenharmony_ci int max_dst_opts_cnt; 5062306a36Sopenharmony_ci int max_hbh_opts_cnt; 5162306a36Sopenharmony_ci int max_dst_opts_len; 5262306a36Sopenharmony_ci int max_hbh_opts_len; 5362306a36Sopenharmony_ci int seg6_flowlabel; 5462306a36Sopenharmony_ci u32 ioam6_id; 5562306a36Sopenharmony_ci u64 ioam6_id_wide; 5662306a36Sopenharmony_ci u8 skip_notify_on_dev_down; 5762306a36Sopenharmony_ci u8 fib_notify_on_flag_change; 5862306a36Sopenharmony_ci u8 icmpv6_error_anycast_as_unicast; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct netns_ipv6 { 6262306a36Sopenharmony_ci /* Keep ip6_dst_ops at the beginning of netns_sysctl_ipv6 */ 6362306a36Sopenharmony_ci struct dst_ops ip6_dst_ops; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci struct netns_sysctl_ipv6 sysctl; 6662306a36Sopenharmony_ci struct ipv6_devconf *devconf_all; 6762306a36Sopenharmony_ci struct ipv6_devconf *devconf_dflt; 6862306a36Sopenharmony_ci struct inet_peer_base *peers; 6962306a36Sopenharmony_ci struct fqdir *fqdir; 7062306a36Sopenharmony_ci struct fib6_info *fib6_null_entry; 7162306a36Sopenharmony_ci struct rt6_info *ip6_null_entry; 7262306a36Sopenharmony_ci struct rt6_statistics *rt6_stats; 7362306a36Sopenharmony_ci struct timer_list ip6_fib_timer; 7462306a36Sopenharmony_ci struct hlist_head *fib_table_hash; 7562306a36Sopenharmony_ci struct fib6_table *fib6_main_tbl; 7662306a36Sopenharmony_ci struct list_head fib6_walkers; 7762306a36Sopenharmony_ci rwlock_t fib6_walker_lock; 7862306a36Sopenharmony_ci spinlock_t fib6_gc_lock; 7962306a36Sopenharmony_ci atomic_t ip6_rt_gc_expire; 8062306a36Sopenharmony_ci unsigned long ip6_rt_last_gc; 8162306a36Sopenharmony_ci unsigned char flowlabel_has_excl; 8262306a36Sopenharmony_ci#ifdef CONFIG_IPV6_MULTIPLE_TABLES 8362306a36Sopenharmony_ci bool fib6_has_custom_rules; 8462306a36Sopenharmony_ci unsigned int fib6_rules_require_fldissect; 8562306a36Sopenharmony_ci#ifdef CONFIG_IPV6_SUBTREES 8662306a36Sopenharmony_ci unsigned int fib6_routes_require_src; 8762306a36Sopenharmony_ci#endif 8862306a36Sopenharmony_ci struct rt6_info *ip6_prohibit_entry; 8962306a36Sopenharmony_ci struct rt6_info *ip6_blk_hole_entry; 9062306a36Sopenharmony_ci struct fib6_table *fib6_local_tbl; 9162306a36Sopenharmony_ci struct fib_rules_ops *fib6_rules_ops; 9262306a36Sopenharmony_ci#endif 9362306a36Sopenharmony_ci struct sock *ndisc_sk; 9462306a36Sopenharmony_ci struct sock *tcp_sk; 9562306a36Sopenharmony_ci struct sock *igmp_sk; 9662306a36Sopenharmony_ci struct sock *mc_autojoin_sk; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci struct hlist_head *inet6_addr_lst; 9962306a36Sopenharmony_ci spinlock_t addrconf_hash_lock; 10062306a36Sopenharmony_ci struct delayed_work addr_chk_work; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#ifdef CONFIG_IPV6_MROUTE 10362306a36Sopenharmony_ci#ifndef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES 10462306a36Sopenharmony_ci struct mr_table *mrt6; 10562306a36Sopenharmony_ci#else 10662306a36Sopenharmony_ci struct list_head mr6_tables; 10762306a36Sopenharmony_ci struct fib_rules_ops *mr6_rules_ops; 10862306a36Sopenharmony_ci#endif 10962306a36Sopenharmony_ci#endif 11062306a36Sopenharmony_ci atomic_t dev_addr_genid; 11162306a36Sopenharmony_ci atomic_t fib6_sernum; 11262306a36Sopenharmony_ci struct seg6_pernet_data *seg6_data; 11362306a36Sopenharmony_ci struct fib_notifier_ops *notifier_ops; 11462306a36Sopenharmony_ci struct fib_notifier_ops *ip6mr_notifier_ops; 11562306a36Sopenharmony_ci unsigned int ipmr_seq; /* protected by rtnl_mutex */ 11662306a36Sopenharmony_ci struct { 11762306a36Sopenharmony_ci struct hlist_head head; 11862306a36Sopenharmony_ci spinlock_t lock; 11962306a36Sopenharmony_ci u32 seq; 12062306a36Sopenharmony_ci } ip6addrlbl_table; 12162306a36Sopenharmony_ci struct ioam6_pernet_data *ioam6_data; 12262306a36Sopenharmony_ci}; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6) 12562306a36Sopenharmony_cistruct netns_nf_frag { 12662306a36Sopenharmony_ci struct fqdir *fqdir; 12762306a36Sopenharmony_ci}; 12862306a36Sopenharmony_ci#endif 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci#endif 131