18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __NETNS_SCTP_H__
38c2ecf20Sopenharmony_ci#define __NETNS_SCTP_H__
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_cistruct sock;
68c2ecf20Sopenharmony_cistruct proc_dir_entry;
78c2ecf20Sopenharmony_cistruct sctp_mib;
88c2ecf20Sopenharmony_cistruct ctl_table_header;
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct netns_sctp {
118c2ecf20Sopenharmony_ci	DEFINE_SNMP_STAT(struct sctp_mib, sctp_statistics);
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#ifdef CONFIG_PROC_FS
148c2ecf20Sopenharmony_ci	struct proc_dir_entry *proc_net_sctp;
158c2ecf20Sopenharmony_ci#endif
168c2ecf20Sopenharmony_ci#ifdef CONFIG_SYSCTL
178c2ecf20Sopenharmony_ci	struct ctl_table_header *sysctl_header;
188c2ecf20Sopenharmony_ci#endif
198c2ecf20Sopenharmony_ci	/* This is the global socket data structure used for responding to
208c2ecf20Sopenharmony_ci	 * the Out-of-the-blue (OOTB) packets.  A control sock will be created
218c2ecf20Sopenharmony_ci	 * for this socket at the initialization time.
228c2ecf20Sopenharmony_ci	 */
238c2ecf20Sopenharmony_ci	struct sock *ctl_sock;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	/* This is the global local address list.
268c2ecf20Sopenharmony_ci	 * We actively maintain this complete list of addresses on
278c2ecf20Sopenharmony_ci	 * the system by catching address add/delete events.
288c2ecf20Sopenharmony_ci	 *
298c2ecf20Sopenharmony_ci	 * It is a list of sctp_sockaddr_entry.
308c2ecf20Sopenharmony_ci	 */
318c2ecf20Sopenharmony_ci	struct list_head local_addr_list;
328c2ecf20Sopenharmony_ci	struct list_head addr_waitq;
338c2ecf20Sopenharmony_ci	struct timer_list addr_wq_timer;
348c2ecf20Sopenharmony_ci	struct list_head auto_asconf_splist;
358c2ecf20Sopenharmony_ci	/* Lock that protects both addr_waitq and auto_asconf_splist */
368c2ecf20Sopenharmony_ci	spinlock_t addr_wq_lock;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	/* Lock that protects the local_addr_list writers */
398c2ecf20Sopenharmony_ci	spinlock_t local_addr_lock;
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci	/* RFC2960 Section 14. Suggested SCTP Protocol Parameter Values
428c2ecf20Sopenharmony_ci	 *
438c2ecf20Sopenharmony_ci	 * The following protocol parameters are RECOMMENDED:
448c2ecf20Sopenharmony_ci	 *
458c2ecf20Sopenharmony_ci	 * RTO.Initial		    - 3	 seconds
468c2ecf20Sopenharmony_ci	 * RTO.Min		    - 1	 second
478c2ecf20Sopenharmony_ci	 * RTO.Max		   -  60 seconds
488c2ecf20Sopenharmony_ci	 * RTO.Alpha		    - 1/8  (3 when converted to right shifts.)
498c2ecf20Sopenharmony_ci	 * RTO.Beta		    - 1/4  (2 when converted to right shifts.)
508c2ecf20Sopenharmony_ci	 */
518c2ecf20Sopenharmony_ci	unsigned int rto_initial;
528c2ecf20Sopenharmony_ci	unsigned int rto_min;
538c2ecf20Sopenharmony_ci	unsigned int rto_max;
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci	/* Note: rto_alpha and rto_beta are really defined as inverse
568c2ecf20Sopenharmony_ci	 * powers of two to facilitate integer operations.
578c2ecf20Sopenharmony_ci	 */
588c2ecf20Sopenharmony_ci	int rto_alpha;
598c2ecf20Sopenharmony_ci	int rto_beta;
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	/* Max.Burst		    - 4 */
628c2ecf20Sopenharmony_ci	int max_burst;
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci	/* Whether Cookie Preservative is enabled(1) or not(0) */
658c2ecf20Sopenharmony_ci	int cookie_preserve_enable;
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci	/* The namespace default hmac alg */
688c2ecf20Sopenharmony_ci	char *sctp_hmac_alg;
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci	/* Valid.Cookie.Life	    - 60  seconds  */
718c2ecf20Sopenharmony_ci	unsigned int valid_cookie_life;
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci	/* Delayed SACK timeout  200ms default*/
748c2ecf20Sopenharmony_ci	unsigned int sack_timeout;
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci	/* HB.interval		    - 30 seconds  */
778c2ecf20Sopenharmony_ci	unsigned int hb_interval;
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci	/* Association.Max.Retrans  - 10 attempts
808c2ecf20Sopenharmony_ci	 * Path.Max.Retrans	    - 5	 attempts (per destination address)
818c2ecf20Sopenharmony_ci	 * Max.Init.Retransmits	    - 8	 attempts
828c2ecf20Sopenharmony_ci	 */
838c2ecf20Sopenharmony_ci	int max_retrans_association;
848c2ecf20Sopenharmony_ci	int max_retrans_path;
858c2ecf20Sopenharmony_ci	int max_retrans_init;
868c2ecf20Sopenharmony_ci	/* Potentially-Failed.Max.Retrans sysctl value
878c2ecf20Sopenharmony_ci	 * taken from:
888c2ecf20Sopenharmony_ci	 * http://tools.ietf.org/html/draft-nishida-tsvwg-sctp-failover-05
898c2ecf20Sopenharmony_ci	 */
908c2ecf20Sopenharmony_ci	int pf_retrans;
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci	/* Primary.Switchover.Max.Retrans sysctl value
938c2ecf20Sopenharmony_ci	 * taken from:
948c2ecf20Sopenharmony_ci	 * https://tools.ietf.org/html/rfc7829
958c2ecf20Sopenharmony_ci	 */
968c2ecf20Sopenharmony_ci	int ps_retrans;
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci	/*
998c2ecf20Sopenharmony_ci	 * Disable Potentially-Failed feature, the feature is enabled by default
1008c2ecf20Sopenharmony_ci	 * pf_enable	-  0  : disable pf
1018c2ecf20Sopenharmony_ci	 *		- >0  : enable pf
1028c2ecf20Sopenharmony_ci	 */
1038c2ecf20Sopenharmony_ci	int pf_enable;
1048c2ecf20Sopenharmony_ci
1058c2ecf20Sopenharmony_ci	/*
1068c2ecf20Sopenharmony_ci	 * Disable Potentially-Failed state exposure, ignored by default
1078c2ecf20Sopenharmony_ci	 * pf_expose	-  0  : compatible with old applications (by default)
1088c2ecf20Sopenharmony_ci	 *		-  1  : disable pf state exposure
1098c2ecf20Sopenharmony_ci	 *		-  2  : enable  pf state exposure
1108c2ecf20Sopenharmony_ci	 */
1118c2ecf20Sopenharmony_ci	int pf_expose;
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci	/*
1148c2ecf20Sopenharmony_ci	 * Policy for preforming sctp/socket accounting
1158c2ecf20Sopenharmony_ci	 * 0   - do socket level accounting, all assocs share sk_sndbuf
1168c2ecf20Sopenharmony_ci	 * 1   - do sctp accounting, each asoc may use sk_sndbuf bytes
1178c2ecf20Sopenharmony_ci	 */
1188c2ecf20Sopenharmony_ci	int sndbuf_policy;
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci	/*
1218c2ecf20Sopenharmony_ci	 * Policy for preforming sctp/socket accounting
1228c2ecf20Sopenharmony_ci	 * 0   - do socket level accounting, all assocs share sk_rcvbuf
1238c2ecf20Sopenharmony_ci	 * 1   - do sctp accounting, each asoc may use sk_rcvbuf bytes
1248c2ecf20Sopenharmony_ci	 */
1258c2ecf20Sopenharmony_ci	int rcvbuf_policy;
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci	int default_auto_asconf;
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	/* Flag to indicate if addip is enabled. */
1308c2ecf20Sopenharmony_ci	int addip_enable;
1318c2ecf20Sopenharmony_ci	int addip_noauth;
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci	/* Flag to indicate if PR-SCTP is enabled. */
1348c2ecf20Sopenharmony_ci	int prsctp_enable;
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ci	/* Flag to indicate if PR-CONFIG is enabled. */
1378c2ecf20Sopenharmony_ci	int reconf_enable;
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci	/* Flag to indicate if SCTP-AUTH is enabled */
1408c2ecf20Sopenharmony_ci	int auth_enable;
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci	/* Flag to indicate if stream interleave is enabled */
1438c2ecf20Sopenharmony_ci	int intl_enable;
1448c2ecf20Sopenharmony_ci
1458c2ecf20Sopenharmony_ci	/* Flag to indicate if ecn is enabled */
1468c2ecf20Sopenharmony_ci	int ecn_enable;
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ci	/*
1498c2ecf20Sopenharmony_ci	 * Policy to control SCTP IPv4 address scoping
1508c2ecf20Sopenharmony_ci	 * 0   - Disable IPv4 address scoping
1518c2ecf20Sopenharmony_ci	 * 1   - Enable IPv4 address scoping
1528c2ecf20Sopenharmony_ci	 * 2   - Selectively allow only IPv4 private addresses
1538c2ecf20Sopenharmony_ci	 * 3   - Selectively allow only IPv4 link local address
1548c2ecf20Sopenharmony_ci	 */
1558c2ecf20Sopenharmony_ci	int scope_policy;
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci	/* Threshold for rwnd update SACKS.  Receive buffer shifted this many
1588c2ecf20Sopenharmony_ci	 * bits is an indicator of when to send and window update SACK.
1598c2ecf20Sopenharmony_ci	 */
1608c2ecf20Sopenharmony_ci	int rwnd_upd_shift;
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci	/* Threshold for autoclose timeout, in seconds. */
1638c2ecf20Sopenharmony_ci	unsigned long max_autoclose;
1648c2ecf20Sopenharmony_ci};
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ci#endif /* __NETNS_SCTP_H__ */
167