| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 
|---|
| 2 | /* | 
|---|
| 3 | * ipv6 in net namespaces | 
|---|
| 4 | */ | 
|---|
| 5 |  | 
|---|
| 6 | #include <net/inet_frag.h> | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef __NETNS_IPV6_H__ | 
|---|
| 9 | #define __NETNS_IPV6_H__ | 
|---|
| 10 | #include <net/dst_ops.h> | 
|---|
| 11 | #include <uapi/linux/icmpv6.h> | 
|---|
| 12 |  | 
|---|
| 13 | struct ; | 
|---|
| 14 |  | 
|---|
| 15 | struct netns_sysctl_ipv6 { | 
|---|
| 16 | #ifdef CONFIG_SYSCTL | 
|---|
| 17 | struct ctl_table_header *hdr; | 
|---|
| 18 | struct ctl_table_header *route_hdr; | 
|---|
| 19 | struct ctl_table_header *icmp_hdr; | 
|---|
| 20 | struct ctl_table_header *frags_hdr; | 
|---|
| 21 | struct ctl_table_header *xfrm6_hdr; | 
|---|
| 22 | #endif | 
|---|
| 23 | int flush_delay; | 
|---|
| 24 | int ip6_rt_max_size; | 
|---|
| 25 | int ip6_rt_gc_min_interval; | 
|---|
| 26 | int ip6_rt_gc_timeout; | 
|---|
| 27 | int ip6_rt_gc_interval; | 
|---|
| 28 | int ip6_rt_gc_elasticity; | 
|---|
| 29 | int ip6_rt_mtu_expires; | 
|---|
| 30 | int ip6_rt_min_advmss; | 
|---|
| 31 | u32 multipath_hash_fields; | 
|---|
| 32 | u8 multipath_hash_policy; | 
|---|
| 33 | u8 bindv6only; | 
|---|
| 34 | u8 flowlabel_consistency; | 
|---|
| 35 | u8 auto_flowlabels; | 
|---|
| 36 | int icmpv6_time; | 
|---|
| 37 | u8 icmpv6_echo_ignore_all; | 
|---|
| 38 | u8 icmpv6_echo_ignore_multicast; | 
|---|
| 39 | u8 icmpv6_echo_ignore_anycast; | 
|---|
| 40 | DECLARE_BITMAP(icmpv6_ratemask, ICMPV6_MSG_MAX + 1); | 
|---|
| 41 | unsigned long *icmpv6_ratemask_ptr; | 
|---|
| 42 | u8 anycast_src_echo_reply; | 
|---|
| 43 | u8 ip_nonlocal_bind; | 
|---|
| 44 | u8 fwmark_reflect; | 
|---|
| 45 | u8 flowlabel_state_ranges; | 
|---|
| 46 | int idgen_retries; | 
|---|
| 47 | int idgen_delay; | 
|---|
| 48 | int flowlabel_reflect; | 
|---|
| 49 | int max_dst_opts_cnt; | 
|---|
| 50 | int max_hbh_opts_cnt; | 
|---|
| 51 | int max_dst_opts_len; | 
|---|
| 52 | int max_hbh_opts_len; | 
|---|
| 53 | int seg6_flowlabel; | 
|---|
| 54 | u32 ioam6_id; | 
|---|
| 55 | u64 ioam6_id_wide; | 
|---|
| 56 | u8 skip_notify_on_dev_down; | 
|---|
| 57 | u8 fib_notify_on_flag_change; | 
|---|
| 58 | u8 icmpv6_error_anycast_as_unicast; | 
|---|
| 59 | }; | 
|---|
| 60 |  | 
|---|
| 61 | struct netns_ipv6 { | 
|---|
| 62 | /* Keep ip6_dst_ops at the beginning of netns_sysctl_ipv6 */ | 
|---|
| 63 | struct dst_ops		ip6_dst_ops; | 
|---|
| 64 |  | 
|---|
| 65 | struct netns_sysctl_ipv6 sysctl; | 
|---|
| 66 | struct ipv6_devconf	*devconf_all; | 
|---|
| 67 | struct ipv6_devconf	*devconf_dflt; | 
|---|
| 68 | struct inet_peer_base	*peers; | 
|---|
| 69 | struct fqdir		*fqdir; | 
|---|
| 70 | struct fib6_info	*fib6_null_entry; | 
|---|
| 71 | struct rt6_info		*ip6_null_entry; | 
|---|
| 72 | struct rt6_statistics   *rt6_stats; | 
|---|
| 73 | struct timer_list       ip6_fib_timer; | 
|---|
| 74 | struct hlist_head       *fib_table_hash; | 
|---|
| 75 | spinlock_t		fib_table_hash_lock; | 
|---|
| 76 | struct fib6_table       *fib6_main_tbl; | 
|---|
| 77 | struct list_head	fib6_walkers; | 
|---|
| 78 | rwlock_t		fib6_walker_lock; | 
|---|
| 79 | spinlock_t		fib6_gc_lock; | 
|---|
| 80 | atomic_t		ip6_rt_gc_expire; | 
|---|
| 81 | unsigned long		ip6_rt_last_gc; | 
|---|
| 82 | unsigned char		flowlabel_has_excl; | 
|---|
| 83 | #ifdef CONFIG_IPV6_MULTIPLE_TABLES | 
|---|
| 84 | bool			fib6_has_custom_rules; | 
|---|
| 85 | unsigned int		fib6_rules_require_fldissect; | 
|---|
| 86 | #ifdef CONFIG_IPV6_SUBTREES | 
|---|
| 87 | unsigned int		fib6_routes_require_src; | 
|---|
| 88 | #endif | 
|---|
| 89 | struct rt6_info         *ip6_prohibit_entry; | 
|---|
| 90 | struct rt6_info         *ip6_blk_hole_entry; | 
|---|
| 91 | struct fib6_table       *fib6_local_tbl; | 
|---|
| 92 | struct fib_rules_ops    *fib6_rules_ops; | 
|---|
| 93 | #endif | 
|---|
| 94 | struct sock             *ndisc_sk; | 
|---|
| 95 | struct sock             *tcp_sk; | 
|---|
| 96 | struct sock             *igmp_sk; | 
|---|
| 97 | struct sock		*mc_autojoin_sk; | 
|---|
| 98 |  | 
|---|
| 99 | struct hlist_head	*inet6_addr_lst; | 
|---|
| 100 | spinlock_t		addrconf_hash_lock; | 
|---|
| 101 | struct delayed_work	addr_chk_work; | 
|---|
| 102 |  | 
|---|
| 103 | #ifdef CONFIG_IPV6_MROUTE | 
|---|
| 104 | #ifndef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES | 
|---|
| 105 | struct mr_table		*mrt6; | 
|---|
| 106 | #else | 
|---|
| 107 | struct list_head	mr6_tables; | 
|---|
| 108 | struct fib_rules_ops	*mr6_rules_ops; | 
|---|
| 109 | #endif | 
|---|
| 110 | #endif | 
|---|
| 111 | atomic_t		dev_addr_genid; | 
|---|
| 112 | atomic_t		fib6_sernum; | 
|---|
| 113 | struct seg6_pernet_data *seg6_data; | 
|---|
| 114 | struct fib_notifier_ops	*notifier_ops; | 
|---|
| 115 | struct fib_notifier_ops	*ip6mr_notifier_ops; | 
|---|
| 116 | unsigned int ipmr_seq; /* protected by rtnl_mutex */ | 
|---|
| 117 | struct { | 
|---|
| 118 | struct hlist_head head; | 
|---|
| 119 | spinlock_t	lock; | 
|---|
| 120 | u32		seq; | 
|---|
| 121 | } ip6addrlbl_table; | 
|---|
| 122 | struct ioam6_pernet_data *ioam6_data; | 
|---|
| 123 | }; | 
|---|
| 124 |  | 
|---|
| 125 | #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6) | 
|---|
| 126 | struct netns_nf_frag { | 
|---|
| 127 | struct fqdir	*fqdir; | 
|---|
| 128 | }; | 
|---|
| 129 | #endif | 
|---|
| 130 |  | 
|---|
| 131 | #endif | 
|---|
| 132 |  | 
|---|