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