162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ipv4 in net namespaces
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __NETNS_IPV4_H__
762306a36Sopenharmony_ci#define __NETNS_IPV4_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/uidgid.h>
1062306a36Sopenharmony_ci#include <net/inet_frag.h>
1162306a36Sopenharmony_ci#include <linux/rcupdate.h>
1262306a36Sopenharmony_ci#include <linux/seqlock.h>
1362306a36Sopenharmony_ci#include <linux/siphash.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistruct ctl_table_header;
1662306a36Sopenharmony_cistruct ipv4_devconf;
1762306a36Sopenharmony_cistruct fib_rules_ops;
1862306a36Sopenharmony_cistruct hlist_head;
1962306a36Sopenharmony_cistruct fib_table;
2062306a36Sopenharmony_cistruct sock;
2162306a36Sopenharmony_cistruct local_ports {
2262306a36Sopenharmony_ci	seqlock_t	lock;
2362306a36Sopenharmony_ci	int		range[2];
2462306a36Sopenharmony_ci	bool		warned;
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct ping_group_range {
2862306a36Sopenharmony_ci	seqlock_t	lock;
2962306a36Sopenharmony_ci	kgid_t		range[2];
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct inet_hashinfo;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistruct inet_timewait_death_row {
3562306a36Sopenharmony_ci	refcount_t		tw_refcount;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/* Padding to avoid false sharing, tw_refcount can be often written */
3862306a36Sopenharmony_ci	struct inet_hashinfo 	*hashinfo ____cacheline_aligned_in_smp;
3962306a36Sopenharmony_ci	int			sysctl_max_tw_buckets;
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistruct tcp_fastopen_context;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cistruct netns_ipv4 {
4562306a36Sopenharmony_ci	struct inet_timewait_death_row tcp_death_row;
4662306a36Sopenharmony_ci	struct udp_table *udp_table;
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci#ifdef CONFIG_SYSCTL
4962306a36Sopenharmony_ci	struct ctl_table_header	*forw_hdr;
5062306a36Sopenharmony_ci	struct ctl_table_header	*frags_hdr;
5162306a36Sopenharmony_ci	struct ctl_table_header	*ipv4_hdr;
5262306a36Sopenharmony_ci	struct ctl_table_header *route_hdr;
5362306a36Sopenharmony_ci	struct ctl_table_header *xfrm4_hdr;
5462306a36Sopenharmony_ci#endif
5562306a36Sopenharmony_ci	struct ipv4_devconf	*devconf_all;
5662306a36Sopenharmony_ci	struct ipv4_devconf	*devconf_dflt;
5762306a36Sopenharmony_ci	struct ip_ra_chain __rcu *ra_chain;
5862306a36Sopenharmony_ci	struct mutex		ra_mutex;
5962306a36Sopenharmony_ci#ifdef CONFIG_IP_MULTIPLE_TABLES
6062306a36Sopenharmony_ci	struct fib_rules_ops	*rules_ops;
6162306a36Sopenharmony_ci	struct fib_table __rcu	*fib_main;
6262306a36Sopenharmony_ci	struct fib_table __rcu	*fib_default;
6362306a36Sopenharmony_ci	unsigned int		fib_rules_require_fldissect;
6462306a36Sopenharmony_ci	bool			fib_has_custom_rules;
6562306a36Sopenharmony_ci#endif
6662306a36Sopenharmony_ci	bool			fib_has_custom_local_routes;
6762306a36Sopenharmony_ci	bool			fib_offload_disabled;
6862306a36Sopenharmony_ci	u8			sysctl_tcp_shrink_window;
6962306a36Sopenharmony_ci#ifdef CONFIG_IP_ROUTE_CLASSID
7062306a36Sopenharmony_ci	atomic_t		fib_num_tclassid_users;
7162306a36Sopenharmony_ci#endif
7262306a36Sopenharmony_ci	struct hlist_head	*fib_table_hash;
7362306a36Sopenharmony_ci	struct sock		*fibnl;
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	struct sock		*mc_autojoin_sk;
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	struct inet_peer_base	*peers;
7862306a36Sopenharmony_ci	struct fqdir		*fqdir;
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	u8 sysctl_icmp_echo_ignore_all;
8162306a36Sopenharmony_ci	u8 sysctl_icmp_echo_enable_probe;
8262306a36Sopenharmony_ci	u8 sysctl_icmp_echo_ignore_broadcasts;
8362306a36Sopenharmony_ci	u8 sysctl_icmp_ignore_bogus_error_responses;
8462306a36Sopenharmony_ci	u8 sysctl_icmp_errors_use_inbound_ifaddr;
8562306a36Sopenharmony_ci	int sysctl_icmp_ratelimit;
8662306a36Sopenharmony_ci	int sysctl_icmp_ratemask;
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	u32 ip_rt_min_pmtu;
8962306a36Sopenharmony_ci	int ip_rt_mtu_expires;
9062306a36Sopenharmony_ci	int ip_rt_min_advmss;
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	struct local_ports ip_local_ports;
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	u8 sysctl_tcp_ecn;
9562306a36Sopenharmony_ci	u8 sysctl_tcp_ecn_fallback;
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci	u8 sysctl_ip_default_ttl;
9862306a36Sopenharmony_ci	u8 sysctl_ip_no_pmtu_disc;
9962306a36Sopenharmony_ci	u8 sysctl_ip_fwd_use_pmtu;
10062306a36Sopenharmony_ci	u8 sysctl_ip_fwd_update_priority;
10162306a36Sopenharmony_ci	u8 sysctl_ip_nonlocal_bind;
10262306a36Sopenharmony_ci	u8 sysctl_ip_autobind_reuse;
10362306a36Sopenharmony_ci	/* Shall we try to damage output packets if routing dev changes? */
10462306a36Sopenharmony_ci	u8 sysctl_ip_dynaddr;
10562306a36Sopenharmony_ci	u8 sysctl_ip_early_demux;
10662306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
10762306a36Sopenharmony_ci	u8 sysctl_raw_l3mdev_accept;
10862306a36Sopenharmony_ci#endif
10962306a36Sopenharmony_ci	u8 sysctl_tcp_early_demux;
11062306a36Sopenharmony_ci	u8 sysctl_udp_early_demux;
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci	u8 sysctl_nexthop_compat_mode;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci	u8 sysctl_fwmark_reflect;
11562306a36Sopenharmony_ci	u8 sysctl_tcp_fwmark_accept;
11662306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
11762306a36Sopenharmony_ci	u8 sysctl_tcp_l3mdev_accept;
11862306a36Sopenharmony_ci#endif
11962306a36Sopenharmony_ci	u8 sysctl_tcp_mtu_probing;
12062306a36Sopenharmony_ci	int sysctl_tcp_mtu_probe_floor;
12162306a36Sopenharmony_ci	int sysctl_tcp_base_mss;
12262306a36Sopenharmony_ci	int sysctl_tcp_min_snd_mss;
12362306a36Sopenharmony_ci	int sysctl_tcp_probe_threshold;
12462306a36Sopenharmony_ci	u32 sysctl_tcp_probe_interval;
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci	int sysctl_tcp_keepalive_time;
12762306a36Sopenharmony_ci	int sysctl_tcp_keepalive_intvl;
12862306a36Sopenharmony_ci	u8 sysctl_tcp_keepalive_probes;
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci	u8 sysctl_tcp_syn_retries;
13162306a36Sopenharmony_ci	u8 sysctl_tcp_synack_retries;
13262306a36Sopenharmony_ci	u8 sysctl_tcp_syncookies;
13362306a36Sopenharmony_ci	u8 sysctl_tcp_migrate_req;
13462306a36Sopenharmony_ci	u8 sysctl_tcp_comp_sack_nr;
13562306a36Sopenharmony_ci	int sysctl_tcp_reordering;
13662306a36Sopenharmony_ci	u8 sysctl_tcp_retries1;
13762306a36Sopenharmony_ci	u8 sysctl_tcp_retries2;
13862306a36Sopenharmony_ci	u8 sysctl_tcp_orphan_retries;
13962306a36Sopenharmony_ci	u8 sysctl_tcp_tw_reuse;
14062306a36Sopenharmony_ci	int sysctl_tcp_fin_timeout;
14162306a36Sopenharmony_ci	unsigned int sysctl_tcp_notsent_lowat;
14262306a36Sopenharmony_ci	u8 sysctl_tcp_sack;
14362306a36Sopenharmony_ci	u8 sysctl_tcp_window_scaling;
14462306a36Sopenharmony_ci	u8 sysctl_tcp_timestamps;
14562306a36Sopenharmony_ci	u8 sysctl_tcp_early_retrans;
14662306a36Sopenharmony_ci	u8 sysctl_tcp_recovery;
14762306a36Sopenharmony_ci	u8 sysctl_tcp_thin_linear_timeouts;
14862306a36Sopenharmony_ci	u8 sysctl_tcp_slow_start_after_idle;
14962306a36Sopenharmony_ci	u8 sysctl_tcp_retrans_collapse;
15062306a36Sopenharmony_ci	u8 sysctl_tcp_stdurg;
15162306a36Sopenharmony_ci	u8 sysctl_tcp_rfc1337;
15262306a36Sopenharmony_ci	u8 sysctl_tcp_abort_on_overflow;
15362306a36Sopenharmony_ci	u8 sysctl_tcp_fack; /* obsolete */
15462306a36Sopenharmony_ci	int sysctl_tcp_max_reordering;
15562306a36Sopenharmony_ci	int sysctl_tcp_adv_win_scale; /* obsolete */
15662306a36Sopenharmony_ci	u8 sysctl_tcp_dsack;
15762306a36Sopenharmony_ci	u8 sysctl_tcp_app_win;
15862306a36Sopenharmony_ci	u8 sysctl_tcp_frto;
15962306a36Sopenharmony_ci	u8 sysctl_tcp_nometrics_save;
16062306a36Sopenharmony_ci	u8 sysctl_tcp_no_ssthresh_metrics_save;
16162306a36Sopenharmony_ci	u8 sysctl_tcp_moderate_rcvbuf;
16262306a36Sopenharmony_ci	u8 sysctl_tcp_tso_win_divisor;
16362306a36Sopenharmony_ci	u8 sysctl_tcp_workaround_signed_windows;
16462306a36Sopenharmony_ci	int sysctl_tcp_limit_output_bytes;
16562306a36Sopenharmony_ci	int sysctl_tcp_challenge_ack_limit;
16662306a36Sopenharmony_ci	int sysctl_tcp_min_rtt_wlen;
16762306a36Sopenharmony_ci	u8 sysctl_tcp_min_tso_segs;
16862306a36Sopenharmony_ci	u8 sysctl_tcp_tso_rtt_log;
16962306a36Sopenharmony_ci	u8 sysctl_tcp_autocorking;
17062306a36Sopenharmony_ci	u8 sysctl_tcp_reflect_tos;
17162306a36Sopenharmony_ci	int sysctl_tcp_invalid_ratelimit;
17262306a36Sopenharmony_ci	int sysctl_tcp_pacing_ss_ratio;
17362306a36Sopenharmony_ci	int sysctl_tcp_pacing_ca_ratio;
17462306a36Sopenharmony_ci	int sysctl_tcp_wmem[3];
17562306a36Sopenharmony_ci	int sysctl_tcp_rmem[3];
17662306a36Sopenharmony_ci	unsigned int sysctl_tcp_child_ehash_entries;
17762306a36Sopenharmony_ci	unsigned long sysctl_tcp_comp_sack_delay_ns;
17862306a36Sopenharmony_ci	unsigned long sysctl_tcp_comp_sack_slack_ns;
17962306a36Sopenharmony_ci	int sysctl_max_syn_backlog;
18062306a36Sopenharmony_ci	int sysctl_tcp_fastopen;
18162306a36Sopenharmony_ci	const struct tcp_congestion_ops __rcu  *tcp_congestion_control;
18262306a36Sopenharmony_ci	struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
18362306a36Sopenharmony_ci	unsigned int sysctl_tcp_fastopen_blackhole_timeout;
18462306a36Sopenharmony_ci	atomic_t tfo_active_disable_times;
18562306a36Sopenharmony_ci	unsigned long tfo_active_disable_stamp;
18662306a36Sopenharmony_ci	u32 tcp_challenge_timestamp;
18762306a36Sopenharmony_ci	u32 tcp_challenge_count;
18862306a36Sopenharmony_ci	u8 sysctl_tcp_plb_enabled;
18962306a36Sopenharmony_ci	u8 sysctl_tcp_plb_idle_rehash_rounds;
19062306a36Sopenharmony_ci	u8 sysctl_tcp_plb_rehash_rounds;
19162306a36Sopenharmony_ci	u8 sysctl_tcp_plb_suspend_rto_sec;
19262306a36Sopenharmony_ci	int sysctl_tcp_plb_cong_thresh;
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci	int sysctl_udp_wmem_min;
19562306a36Sopenharmony_ci	int sysctl_udp_rmem_min;
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci	u8 sysctl_fib_notify_on_flag_change;
19862306a36Sopenharmony_ci	u8 sysctl_tcp_syn_linear_timeouts;
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
20162306a36Sopenharmony_ci	u8 sysctl_udp_l3mdev_accept;
20262306a36Sopenharmony_ci#endif
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci	u8 sysctl_igmp_llm_reports;
20562306a36Sopenharmony_ci	int sysctl_igmp_max_memberships;
20662306a36Sopenharmony_ci	int sysctl_igmp_max_msf;
20762306a36Sopenharmony_ci	int sysctl_igmp_qrv;
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci	struct ping_group_range ping_group_range;
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci	atomic_t dev_addr_genid;
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci	unsigned int sysctl_udp_child_hash_entries;
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci#ifdef CONFIG_SYSCTL
21662306a36Sopenharmony_ci	unsigned long *sysctl_local_reserved_ports;
21762306a36Sopenharmony_ci	int sysctl_ip_prot_sock;
21862306a36Sopenharmony_ci#endif
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci#ifdef CONFIG_IP_MROUTE
22162306a36Sopenharmony_ci#ifndef CONFIG_IP_MROUTE_MULTIPLE_TABLES
22262306a36Sopenharmony_ci	struct mr_table		*mrt;
22362306a36Sopenharmony_ci#else
22462306a36Sopenharmony_ci	struct list_head	mr_tables;
22562306a36Sopenharmony_ci	struct fib_rules_ops	*mr_rules_ops;
22662306a36Sopenharmony_ci#endif
22762306a36Sopenharmony_ci#endif
22862306a36Sopenharmony_ci#ifdef CONFIG_IP_ROUTE_MULTIPATH
22962306a36Sopenharmony_ci	u32 sysctl_fib_multipath_hash_fields;
23062306a36Sopenharmony_ci	u8 sysctl_fib_multipath_use_neigh;
23162306a36Sopenharmony_ci	u8 sysctl_fib_multipath_hash_policy;
23262306a36Sopenharmony_ci#endif
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci	struct fib_notifier_ops	*notifier_ops;
23562306a36Sopenharmony_ci	unsigned int	fib_seq;	/* protected by rtnl_mutex */
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci	struct fib_notifier_ops	*ipmr_notifier_ops;
23862306a36Sopenharmony_ci	unsigned int	ipmr_seq;	/* protected by rtnl_mutex */
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci	atomic_t	rt_genid;
24162306a36Sopenharmony_ci	siphash_key_t	ip_id_key;
24262306a36Sopenharmony_ci};
24362306a36Sopenharmony_ci#endif
244