cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

structs.h (68636B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* SCTP kernel implementation
      3 * (C) Copyright IBM Corp. 2001, 2004
      4 * Copyright (c) 1999-2000 Cisco, Inc.
      5 * Copyright (c) 1999-2001 Motorola, Inc.
      6 * Copyright (c) 2001 Intel Corp.
      7 *
      8 * This file is part of the SCTP kernel implementation
      9 *
     10 * Please send any bug reports or fixes you make to the
     11 * email addresses:
     12 *    lksctp developers <linux-sctp@vger.kernel.org>
     13 *
     14 * Written or modified by:
     15 *    Randall Stewart	    <randall@sctp.chicago.il.us>
     16 *    Ken Morneau	    <kmorneau@cisco.com>
     17 *    Qiaobing Xie	    <qxie1@email.mot.com>
     18 *    La Monte H.P. Yarroll <piggy@acm.org>
     19 *    Karl Knutson	    <karl@athena.chicago.il.us>
     20 *    Jon Grimm		    <jgrimm@us.ibm.com>
     21 *    Xingang Guo	    <xingang.guo@intel.com>
     22 *    Hui Huang		    <hui.huang@nokia.com>
     23 *    Sridhar Samudrala	    <sri@us.ibm.com>
     24 *    Daisy Chang	    <daisyc@us.ibm.com>
     25 *    Dajiang Zhang	    <dajiang.zhang@nokia.com>
     26 *    Ardelle Fan	    <ardelle.fan@intel.com>
     27 *    Ryan Layer	    <rmlayer@us.ibm.com>
     28 *    Anup Pemmaiah	    <pemmaiah@cc.usu.edu>
     29 *    Kevin Gao             <kevin.gao@intel.com>
     30 */
     31
     32#ifndef __sctp_structs_h__
     33#define __sctp_structs_h__
     34
     35#include <linux/ktime.h>
     36#include <linux/generic-radix-tree.h>
     37#include <linux/rhashtable-types.h>
     38#include <linux/socket.h>	/* linux/in.h needs this!!    */
     39#include <linux/in.h>		/* We get struct sockaddr_in. */
     40#include <linux/in6.h>		/* We get struct in6_addr     */
     41#include <linux/ipv6.h>
     42#include <asm/param.h>		/* We get MAXHOSTNAMELEN.     */
     43#include <linux/atomic.h>		/* This gets us atomic counters.  */
     44#include <linux/skbuff.h>	/* We need sk_buff_head. */
     45#include <linux/workqueue.h>	/* We need tq_struct.	 */
     46#include <linux/sctp.h>		/* We need sctp* header structs.  */
     47#include <net/sctp/auth.h>	/* We need auth specific structs */
     48#include <net/ip.h>		/* For inet_skb_parm */
     49
     50/* A convenience structure for handling sockaddr structures.
     51 * We should wean ourselves off this.
     52 */
     53union sctp_addr {
     54	struct sockaddr_in v4;
     55	struct sockaddr_in6 v6;
     56	struct sockaddr sa;
     57};
     58
     59/* Forward declarations for data structures. */
     60struct sctp_globals;
     61struct sctp_endpoint;
     62struct sctp_association;
     63struct sctp_transport;
     64struct sctp_packet;
     65struct sctp_chunk;
     66struct sctp_inq;
     67struct sctp_outq;
     68struct sctp_bind_addr;
     69struct sctp_ulpq;
     70struct sctp_ep_common;
     71struct crypto_shash;
     72struct sctp_stream;
     73
     74
     75#include <net/sctp/tsnmap.h>
     76#include <net/sctp/ulpevent.h>
     77#include <net/sctp/ulpqueue.h>
     78#include <net/sctp/stream_interleave.h>
     79
     80/* Structures useful for managing bind/connect. */
     81
     82struct sctp_bind_bucket {
     83	unsigned short	port;
     84	signed char	fastreuse;
     85	signed char	fastreuseport;
     86	kuid_t		fastuid;
     87	struct hlist_node	node;
     88	struct hlist_head	owner;
     89	struct net	*net;
     90};
     91
     92struct sctp_bind_hashbucket {
     93	spinlock_t	lock;
     94	struct hlist_head	chain;
     95};
     96
     97/* Used for hashing all associations.  */
     98struct sctp_hashbucket {
     99	rwlock_t	lock;
    100	struct hlist_head	chain;
    101} __attribute__((__aligned__(8)));
    102
    103
    104/* The SCTP globals structure. */
    105extern struct sctp_globals {
    106	/* This is a list of groups of functions for each address
    107	 * family that we support.
    108	 */
    109	struct list_head address_families;
    110
    111	/* This is the hash of all endpoints. */
    112	struct sctp_hashbucket *ep_hashtable;
    113	/* This is the sctp port control hash.	*/
    114	struct sctp_bind_hashbucket *port_hashtable;
    115	/* This is the hash of all transports. */
    116	struct rhltable transport_hashtable;
    117
    118	/* Sizes of above hashtables. */
    119	int ep_hashsize;
    120	int port_hashsize;
    121
    122	/* Default initialization values to be applied to new associations. */
    123	__u16 max_instreams;
    124	__u16 max_outstreams;
    125
    126	/* Flag to indicate whether computing and verifying checksum
    127	 * is disabled. */
    128        bool checksum_disable;
    129} sctp_globals;
    130
    131#define sctp_max_instreams		(sctp_globals.max_instreams)
    132#define sctp_max_outstreams		(sctp_globals.max_outstreams)
    133#define sctp_address_families		(sctp_globals.address_families)
    134#define sctp_ep_hashsize		(sctp_globals.ep_hashsize)
    135#define sctp_ep_hashtable		(sctp_globals.ep_hashtable)
    136#define sctp_port_hashsize		(sctp_globals.port_hashsize)
    137#define sctp_port_hashtable		(sctp_globals.port_hashtable)
    138#define sctp_transport_hashtable	(sctp_globals.transport_hashtable)
    139#define sctp_checksum_disable		(sctp_globals.checksum_disable)
    140
    141/* SCTP Socket type: UDP or TCP style. */
    142enum sctp_socket_type {
    143	SCTP_SOCKET_UDP = 0,
    144	SCTP_SOCKET_UDP_HIGH_BANDWIDTH,
    145	SCTP_SOCKET_TCP
    146};
    147
    148/* Per socket SCTP information. */
    149struct sctp_sock {
    150	/* inet_sock has to be the first member of sctp_sock */
    151	struct inet_sock inet;
    152	/* What kind of a socket is this? */
    153	enum sctp_socket_type type;
    154
    155	/* PF_ family specific functions.  */
    156	struct sctp_pf *pf;
    157
    158	/* Access to HMAC transform. */
    159	struct crypto_shash *hmac;
    160	char *sctp_hmac_alg;
    161
    162	/* What is our base endpointer? */
    163	struct sctp_endpoint *ep;
    164
    165	struct sctp_bind_bucket *bind_hash;
    166	/* Various Socket Options.  */
    167	__u16 default_stream;
    168	__u32 default_ppid;
    169	__u16 default_flags;
    170	__u32 default_context;
    171	__u32 default_timetolive;
    172	__u32 default_rcv_context;
    173	int max_burst;
    174
    175	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
    176	 * the destination address every heartbeat interval. This value
    177	 * will be inherited by all new associations.
    178	 */
    179	__u32 hbinterval;
    180	__u32 probe_interval;
    181
    182	__be16 udp_port;
    183	__be16 encap_port;
    184
    185	/* This is the max_retrans value for new associations. */
    186	__u16 pathmaxrxt;
    187
    188	__u32 flowlabel;
    189	__u8  dscp;
    190
    191	__u16 pf_retrans;
    192	__u16 ps_retrans;
    193
    194	/* The initial Path MTU to use for new associations. */
    195	__u32 pathmtu;
    196
    197	/* The default SACK delay timeout for new associations. */
    198	__u32 sackdelay;
    199	__u32 sackfreq;
    200
    201	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
    202	__u32 param_flags;
    203
    204	__u32 default_ss;
    205
    206	struct sctp_rtoinfo rtoinfo;
    207	struct sctp_paddrparams paddrparam;
    208	struct sctp_assocparams assocparams;
    209
    210	/*
    211	 * These two structures must be grouped together for the usercopy
    212	 * whitelist region.
    213	 */
    214	__u16 subscribe;
    215	struct sctp_initmsg initmsg;
    216
    217	int user_frag;
    218
    219	__u32 autoclose;
    220	__u32 adaptation_ind;
    221	__u32 pd_point;
    222	__u16	nodelay:1,
    223		pf_expose:2,
    224		reuse:1,
    225		disable_fragments:1,
    226		v4mapped:1,
    227		frag_interleave:1,
    228		recvrcvinfo:1,
    229		recvnxtinfo:1,
    230		data_ready_signalled:1;
    231
    232	atomic_t pd_mode;
    233
    234	/* Fields after this point will be skipped on copies, like on accept
    235	 * and peeloff operations
    236	 */
    237
    238	/* Receive to here while partial delivery is in effect. */
    239	struct sk_buff_head pd_lobby;
    240
    241	struct list_head auto_asconf_list;
    242	int do_auto_asconf;
    243};
    244
    245static inline struct sctp_sock *sctp_sk(const struct sock *sk)
    246{
    247       return (struct sctp_sock *)sk;
    248}
    249
    250static inline struct sock *sctp_opt2sk(const struct sctp_sock *sp)
    251{
    252       return (struct sock *)sp;
    253}
    254
    255#if IS_ENABLED(CONFIG_IPV6)
    256struct sctp6_sock {
    257       struct sctp_sock  sctp;
    258       struct ipv6_pinfo inet6;
    259};
    260#endif /* CONFIG_IPV6 */
    261
    262
    263/* This is our APPLICATION-SPECIFIC state cookie.
    264 * THIS IS NOT DICTATED BY THE SPECIFICATION.
    265 */
    266/* These are the parts of an association which we send in the cookie.
    267 * Most of these are straight out of:
    268 * RFC2960 12.2 Parameters necessary per association (i.e. the TCB)
    269 *
    270 */
    271
    272struct sctp_cookie {
    273
    274	/* My	       : Tag expected in every inbound packet and sent
    275	 * Verification: in the INIT or INIT ACK chunk.
    276	 * Tag	       :
    277	 */
    278	__u32 my_vtag;
    279
    280	/* Peer's      : Tag expected in every outbound packet except
    281	 * Verification: in the INIT chunk.
    282	 * Tag	       :
    283	 */
    284	__u32 peer_vtag;
    285
    286	/* The rest of these are not from the spec, but really need to
    287	 * be in the cookie.
    288	 */
    289
    290	/* My Tie Tag  : Assist in discovering a restarting association. */
    291	__u32 my_ttag;
    292
    293	/* Peer's Tie Tag: Assist in discovering a restarting association. */
    294	__u32 peer_ttag;
    295
    296	/* When does this cookie expire? */
    297	ktime_t expiration;
    298
    299	/* Number of inbound/outbound streams which are set
    300	 * and negotiated during the INIT process.
    301	 */
    302	__u16 sinit_num_ostreams;
    303	__u16 sinit_max_instreams;
    304
    305	/* This is the first sequence number I used.  */
    306	__u32 initial_tsn;
    307
    308	/* This holds the originating address of the INIT packet.  */
    309	union sctp_addr peer_addr;
    310
    311	/* IG Section 2.35.3 
    312	 * Include the source port of the INIT-ACK
    313	 */
    314	__u16		my_port;
    315
    316	__u8 prsctp_capable;
    317
    318	/* Padding for future use */
    319	__u8 padding;  		
    320
    321	__u32 adaptation_ind;
    322
    323	__u8 auth_random[sizeof(struct sctp_paramhdr) +
    324			 SCTP_AUTH_RANDOM_LENGTH];
    325	__u8 auth_hmacs[SCTP_AUTH_NUM_HMACS * sizeof(__u16) + 2];
    326	__u8 auth_chunks[sizeof(struct sctp_paramhdr) + SCTP_AUTH_MAX_CHUNKS];
    327
    328	/* This is a shim for my peer's INIT packet, followed by
    329	 * a copy of the raw address list of the association.
    330	 * The length of the raw address list is saved in the
    331	 * raw_addr_list_len field, which will be used at the time when
    332	 * the association TCB is re-constructed from the cookie.
    333	 */
    334	__u32 raw_addr_list_len;
    335	struct sctp_init_chunk peer_init[];
    336};
    337
    338
    339/* The format of our cookie that we send to our peer. */
    340struct sctp_signed_cookie {
    341	__u8 signature[SCTP_SECRET_SIZE];
    342	__u32 __pad;		/* force sctp_cookie alignment to 64 bits */
    343	struct sctp_cookie c;
    344} __packed;
    345
    346/* This is another convenience type to allocate memory for address
    347 * params for the maximum size and pass such structures around
    348 * internally.
    349 */
    350union sctp_addr_param {
    351	struct sctp_paramhdr p;
    352	struct sctp_ipv4addr_param v4;
    353	struct sctp_ipv6addr_param v6;
    354};
    355
    356/* A convenience type to allow walking through the various
    357 * parameters and avoid casting all over the place.
    358 */
    359union sctp_params {
    360	void *v;
    361	struct sctp_paramhdr *p;
    362	struct sctp_cookie_preserve_param *life;
    363	struct sctp_hostname_param *dns;
    364	struct sctp_cookie_param *cookie;
    365	struct sctp_supported_addrs_param *sat;
    366	struct sctp_ipv4addr_param *v4;
    367	struct sctp_ipv6addr_param *v6;
    368	union sctp_addr_param *addr;
    369	struct sctp_adaptation_ind_param *aind;
    370	struct sctp_supported_ext_param *ext;
    371	struct sctp_random_param *random;
    372	struct sctp_chunks_param *chunks;
    373	struct sctp_hmac_algo_param *hmac_algo;
    374	struct sctp_addip_param *addip;
    375};
    376
    377/* RFC 2960.  Section 3.3.5 Heartbeat.
    378 *    Heartbeat Information: variable length
    379 *    The Sender-specific Heartbeat Info field should normally include
    380 *    information about the sender's current time when this HEARTBEAT
    381 *    chunk is sent and the destination transport address to which this
    382 *    HEARTBEAT is sent (see Section 8.3).
    383 */
    384struct sctp_sender_hb_info {
    385	struct sctp_paramhdr param_hdr;
    386	union sctp_addr daddr;
    387	unsigned long sent_at;
    388	__u64 hb_nonce;
    389	__u32 probe_size;
    390};
    391
    392int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt,
    393		     gfp_t gfp);
    394int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid);
    395void sctp_stream_free(struct sctp_stream *stream);
    396void sctp_stream_clear(struct sctp_stream *stream);
    397void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new);
    398
    399/* What is the current SSN number for this stream? */
    400#define sctp_ssn_peek(stream, type, sid) \
    401	(sctp_stream_##type((stream), (sid))->ssn)
    402
    403/* Return the next SSN number for this stream.	*/
    404#define sctp_ssn_next(stream, type, sid) \
    405	(sctp_stream_##type((stream), (sid))->ssn++)
    406
    407/* Skip over this ssn and all below. */
    408#define sctp_ssn_skip(stream, type, sid, ssn) \
    409	(sctp_stream_##type((stream), (sid))->ssn = ssn + 1)
    410
    411/* What is the current MID number for this stream? */
    412#define sctp_mid_peek(stream, type, sid) \
    413	(sctp_stream_##type((stream), (sid))->mid)
    414
    415/* Return the next MID number for this stream.  */
    416#define sctp_mid_next(stream, type, sid) \
    417	(sctp_stream_##type((stream), (sid))->mid++)
    418
    419/* Skip over this mid and all below. */
    420#define sctp_mid_skip(stream, type, sid, mid) \
    421	(sctp_stream_##type((stream), (sid))->mid = mid + 1)
    422
    423/* What is the current MID_uo number for this stream? */
    424#define sctp_mid_uo_peek(stream, type, sid) \
    425	(sctp_stream_##type((stream), (sid))->mid_uo)
    426
    427/* Return the next MID_uo number for this stream.  */
    428#define sctp_mid_uo_next(stream, type, sid) \
    429	(sctp_stream_##type((stream), (sid))->mid_uo++)
    430
    431/*
    432 * Pointers to address related SCTP functions.
    433 * (i.e. things that depend on the address family.)
    434 */
    435struct sctp_af {
    436	int		(*sctp_xmit)	(struct sk_buff *skb,
    437					 struct sctp_transport *);
    438	int		(*setsockopt)	(struct sock *sk,
    439					 int level,
    440					 int optname,
    441					 sockptr_t optval,
    442					 unsigned int optlen);
    443	int		(*getsockopt)	(struct sock *sk,
    444					 int level,
    445					 int optname,
    446					 char __user *optval,
    447					 int __user *optlen);
    448	void		(*get_dst)	(struct sctp_transport *t,
    449					 union sctp_addr *saddr,
    450					 struct flowi *fl,
    451					 struct sock *sk);
    452	void		(*get_saddr)	(struct sctp_sock *sk,
    453					 struct sctp_transport *t,
    454					 struct flowi *fl);
    455	void		(*copy_addrlist) (struct list_head *,
    456					  struct net_device *);
    457	int		(*cmp_addr)	(const union sctp_addr *addr1,
    458					 const union sctp_addr *addr2);
    459	void		(*addr_copy)	(union sctp_addr *dst,
    460					 union sctp_addr *src);
    461	void		(*from_skb)	(union sctp_addr *,
    462					 struct sk_buff *skb,
    463					 int saddr);
    464	void		(*from_sk)	(union sctp_addr *,
    465					 struct sock *sk);
    466	bool		(*from_addr_param) (union sctp_addr *,
    467					    union sctp_addr_param *,
    468					    __be16 port, int iif);
    469	int		(*to_addr_param) (const union sctp_addr *,
    470					  union sctp_addr_param *); 
    471	int		(*addr_valid)	(union sctp_addr *,
    472					 struct sctp_sock *,
    473					 const struct sk_buff *);
    474	enum sctp_scope	(*scope)(union sctp_addr *);
    475	void		(*inaddr_any)	(union sctp_addr *, __be16);
    476	int		(*is_any)	(const union sctp_addr *);
    477	int		(*available)	(union sctp_addr *,
    478					 struct sctp_sock *);
    479	int		(*skb_iif)	(const struct sk_buff *sk);
    480	int		(*is_ce)	(const struct sk_buff *sk);
    481	void		(*seq_dump_addr)(struct seq_file *seq,
    482					 union sctp_addr *addr);
    483	void		(*ecn_capable)(struct sock *sk);
    484	__u16		net_header_len;
    485	int		sockaddr_len;
    486	int		(*ip_options_len)(struct sock *sk);
    487	sa_family_t	sa_family;
    488	struct list_head list;
    489};
    490
    491struct sctp_af *sctp_get_af_specific(sa_family_t);
    492int sctp_register_af(struct sctp_af *);
    493
    494/* Protocol family functions. */
    495struct sctp_pf {
    496	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
    497	void (*skb_msgname)  (struct sk_buff *, char *, int *);
    498	int  (*af_supported) (sa_family_t, struct sctp_sock *);
    499	int  (*cmp_addr) (const union sctp_addr *,
    500			  const union sctp_addr *,
    501			  struct sctp_sock *);
    502	int  (*bind_verify) (struct sctp_sock *, union sctp_addr *);
    503	int  (*send_verify) (struct sctp_sock *, union sctp_addr *);
    504	int  (*supported_addrs)(const struct sctp_sock *, __be16 *);
    505	struct sock *(*create_accept_sk) (struct sock *sk,
    506					  struct sctp_association *asoc,
    507					  bool kern);
    508	int (*addr_to_user)(struct sctp_sock *sk, union sctp_addr *addr);
    509	void (*to_sk_saddr)(union sctp_addr *, struct sock *sk);
    510	void (*to_sk_daddr)(union sctp_addr *, struct sock *sk);
    511	void (*copy_ip_options)(struct sock *sk, struct sock *newsk);
    512	struct sctp_af *af;
    513};
    514
    515
    516/* Structure to track chunk fragments that have been acked, but peer
    517 * fragments of the same message have not.
    518 */
    519struct sctp_datamsg {
    520	/* Chunks waiting to be submitted to lower layer. */
    521	struct list_head chunks;
    522	/* Reference counting. */
    523	refcount_t refcnt;
    524	/* When is this message no longer interesting to the peer? */
    525	unsigned long expires_at;
    526	/* Did the messenge fail to send? */
    527	int send_error;
    528	u8 send_failed:1,
    529	   can_delay:1,	/* should this message be Nagle delayed */
    530	   abandoned:1;	/* should this message be abandoned */
    531};
    532
    533struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *,
    534					    struct sctp_sndrcvinfo *,
    535					    struct iov_iter *);
    536void sctp_datamsg_free(struct sctp_datamsg *);
    537void sctp_datamsg_put(struct sctp_datamsg *);
    538void sctp_chunk_fail(struct sctp_chunk *, int error);
    539int sctp_chunk_abandoned(struct sctp_chunk *);
    540
    541/* RFC2960 1.4 Key Terms
    542 *
    543 * o Chunk: A unit of information within an SCTP packet, consisting of
    544 * a chunk header and chunk-specific content.
    545 *
    546 * As a matter of convenience, we remember the SCTP common header for
    547 * each chunk as well as a few other header pointers...
    548 */
    549struct sctp_chunk {
    550	struct list_head list;
    551
    552	refcount_t refcnt;
    553
    554	/* How many times this chunk have been sent, for prsctp RTX policy */
    555	int sent_count;
    556
    557	union {
    558		/* This is our link to the per-transport transmitted list.  */
    559		struct list_head transmitted_list;
    560		/* List in specific stream outq */
    561		struct list_head stream_list;
    562	};
    563
    564	/* This field is used by chunks that hold fragmented data.
    565	 * For the first fragment this is the list that holds the rest of
    566	 * fragments. For the remaining fragments, this is the link to the
    567	 * frag_list maintained in the first fragment.
    568	 */
    569	struct list_head frag_list;
    570
    571	/* This points to the sk_buff containing the actual data.  */
    572	struct sk_buff *skb;
    573
    574	union {
    575		/* In case of GSO packets, this will store the head one */
    576		struct sk_buff *head_skb;
    577		/* In case of auth enabled, this will point to the shkey */
    578		struct sctp_shared_key *shkey;
    579	};
    580
    581	/* These are the SCTP headers by reverse order in a packet.
    582	 * Note that some of these may happen more than once.  In that
    583	 * case, we point at the "current" one, whatever that means
    584	 * for that level of header.
    585	 */
    586
    587	/* We point this at the FIRST TLV parameter to chunk_hdr.  */
    588	union sctp_params param_hdr;
    589	union {
    590		__u8 *v;
    591		struct sctp_datahdr *data_hdr;
    592		struct sctp_inithdr *init_hdr;
    593		struct sctp_sackhdr *sack_hdr;
    594		struct sctp_heartbeathdr *hb_hdr;
    595		struct sctp_sender_hb_info *hbs_hdr;
    596		struct sctp_shutdownhdr *shutdown_hdr;
    597		struct sctp_signed_cookie *cookie_hdr;
    598		struct sctp_ecnehdr *ecne_hdr;
    599		struct sctp_cwrhdr *ecn_cwr_hdr;
    600		struct sctp_errhdr *err_hdr;
    601		struct sctp_addiphdr *addip_hdr;
    602		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
    603		struct sctp_authhdr *auth_hdr;
    604		struct sctp_idatahdr *idata_hdr;
    605		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
    606	} subh;
    607
    608	__u8 *chunk_end;
    609
    610	struct sctp_chunkhdr *chunk_hdr;
    611	struct sctphdr *sctp_hdr;
    612
    613	/* This needs to be recoverable for SCTP_SEND_FAILED events. */
    614	struct sctp_sndrcvinfo sinfo;
    615
    616	/* Which association does this belong to?  */
    617	struct sctp_association *asoc;
    618
    619	/* What endpoint received this chunk? */
    620	struct sctp_ep_common *rcvr;
    621
    622	/* We fill this in if we are calculating RTT. */
    623	unsigned long sent_at;
    624
    625	/* What is the origin IP address for this chunk?  */
    626	union sctp_addr source;
    627	/* Destination address for this chunk. */
    628	union sctp_addr dest;
    629
    630	/* For outbound message, track all fragments for SEND_FAILED. */
    631	struct sctp_datamsg *msg;
    632
    633	/* For an inbound chunk, this tells us where it came from.
    634	 * For an outbound chunk, it tells us where we'd like it to
    635	 * go.	It is NULL if we have no preference.
    636	 */
    637	struct sctp_transport *transport;
    638
    639	/* SCTP-AUTH:  For the special case inbound processing of COOKIE-ECHO
    640	 * we need save a pointer to the AUTH chunk, since the SCTP-AUTH
    641	 * spec violates the principle premis that all chunks are processed
    642	 * in order.
    643	 */
    644	struct sk_buff *auth_chunk;
    645
    646#define SCTP_CAN_FRTX 0x0
    647#define SCTP_NEED_FRTX 0x1
    648#define SCTP_DONT_FRTX 0x2
    649	__u16	rtt_in_progress:1,	/* This chunk used for RTT calc? */
    650		has_tsn:1,		/* Does this chunk have a TSN yet? */
    651		has_ssn:1,		/* Does this chunk have a SSN yet? */
    652#define has_mid has_ssn
    653		singleton:1,		/* Only chunk in the packet? */
    654		end_of_packet:1,	/* Last chunk in the packet? */
    655		ecn_ce_done:1,		/* Have we processed the ECN CE bit? */
    656		pdiscard:1,		/* Discard the whole packet now? */
    657		tsn_gap_acked:1,	/* Is this chunk acked by a GAP ACK? */
    658		data_accepted:1,	/* At least 1 chunk accepted */
    659		auth:1,			/* IN: was auth'ed | OUT: needs auth */
    660		has_asconf:1,		/* IN: have seen an asconf before */
    661		pmtu_probe:1,		/* Used by PLPMTUD, can be set in s HB chunk */
    662		tsn_missing_report:2,	/* Data chunk missing counter. */
    663		fast_retransmit:2;	/* Is this chunk fast retransmitted? */
    664};
    665
    666#define sctp_chunk_retransmitted(chunk)	(chunk->sent_count > 1)
    667void sctp_chunk_hold(struct sctp_chunk *);
    668void sctp_chunk_put(struct sctp_chunk *);
    669int sctp_user_addto_chunk(struct sctp_chunk *chunk, int len,
    670			  struct iov_iter *from);
    671void sctp_chunk_free(struct sctp_chunk *);
    672void  *sctp_addto_chunk(struct sctp_chunk *, int len, const void *data);
    673struct sctp_chunk *sctp_chunkify(struct sk_buff *,
    674				 const struct sctp_association *,
    675				 struct sock *, gfp_t gfp);
    676void sctp_init_addrs(struct sctp_chunk *, union sctp_addr *,
    677		     union sctp_addr *);
    678const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
    679
    680static inline __u16 sctp_chunk_stream_no(struct sctp_chunk *ch)
    681{
    682	return ntohs(ch->subh.data_hdr->stream);
    683}
    684
    685enum {
    686	SCTP_ADDR_NEW,		/* new address added to assoc/ep */
    687	SCTP_ADDR_SRC,		/* address can be used as source */
    688	SCTP_ADDR_DEL,		/* address about to be deleted */
    689};
    690
    691/* This is a structure for holding either an IPv6 or an IPv4 address.  */
    692struct sctp_sockaddr_entry {
    693	struct list_head list;
    694	struct rcu_head	rcu;
    695	union sctp_addr a;
    696	__u8 state;
    697	__u8 valid;
    698};
    699
    700#define SCTP_ADDRESS_TICK_DELAY	500
    701
    702/* This structure holds lists of chunks as we are assembling for
    703 * transmission.
    704 */
    705struct sctp_packet {
    706	/* These are the SCTP header values (host order) for the packet. */
    707	__u16 source_port;
    708	__u16 destination_port;
    709	__u32 vtag;
    710
    711	/* This contains the payload chunks.  */
    712	struct list_head chunk_list;
    713
    714	/* This is the overhead of the sctp and ip headers. */
    715	size_t overhead;
    716	/* This is the total size of all chunks INCLUDING padding.  */
    717	size_t size;
    718	/* This is the maximum size this packet may have */
    719	size_t max_size;
    720
    721	/* The packet is destined for this transport address.
    722	 * The function we finally use to pass down to the next lower
    723	 * layer lives in the transport structure.
    724	 */
    725	struct sctp_transport *transport;
    726
    727	/* pointer to the auth chunk for this packet */
    728	struct sctp_chunk *auth;
    729
    730	u8  has_cookie_echo:1,	/* This packet contains a COOKIE-ECHO chunk. */
    731	    has_sack:1,		/* This packet contains a SACK chunk. */
    732	    has_auth:1,		/* This packet contains an AUTH chunk */
    733	    has_data:1,		/* This packet contains at least 1 DATA chunk */
    734	    ipfragok:1;		/* So let ip fragment this packet */
    735};
    736
    737void sctp_packet_init(struct sctp_packet *, struct sctp_transport *,
    738		      __u16 sport, __u16 dport);
    739void sctp_packet_config(struct sctp_packet *, __u32 vtag, int);
    740enum sctp_xmit sctp_packet_transmit_chunk(struct sctp_packet *packet,
    741					  struct sctp_chunk *chunk,
    742					  int one_packet, gfp_t gfp);
    743enum sctp_xmit sctp_packet_append_chunk(struct sctp_packet *packet,
    744					struct sctp_chunk *chunk);
    745int sctp_packet_transmit(struct sctp_packet *, gfp_t);
    746void sctp_packet_free(struct sctp_packet *);
    747
    748static inline int sctp_packet_empty(struct sctp_packet *packet)
    749{
    750	return packet->size == packet->overhead;
    751}
    752
    753/* This represents a remote transport address.
    754 * For local transport addresses, we just use union sctp_addr.
    755 *
    756 * RFC2960 Section 1.4 Key Terms
    757 *
    758 *   o	Transport address:  A Transport Address is traditionally defined
    759 *	by Network Layer address, Transport Layer protocol and Transport
    760 *	Layer port number.  In the case of SCTP running over IP, a
    761 *	transport address is defined by the combination of an IP address
    762 *	and an SCTP port number (where SCTP is the Transport protocol).
    763 *
    764 * RFC2960 Section 7.1 SCTP Differences from TCP Congestion control
    765 *
    766 *   o	The sender keeps a separate congestion control parameter set for
    767 *	each of the destination addresses it can send to (not each
    768 *	source-destination pair but for each destination).  The parameters
    769 *	should decay if the address is not used for a long enough time
    770 *	period.
    771 *
    772 */
    773struct sctp_transport {
    774	/* A list of transports. */
    775	struct list_head transports;
    776	struct rhlist_head node;
    777
    778	/* Reference counting. */
    779	refcount_t refcnt;
    780		/* RTO-Pending : A flag used to track if one of the DATA
    781		 *		chunks sent to this address is currently being
    782		 *		used to compute a RTT. If this flag is 0,
    783		 *		the next DATA chunk sent to this destination
    784		 *		should be used to compute a RTT and this flag
    785		 *		should be set. Every time the RTT
    786		 *		calculation completes (i.e. the DATA chunk
    787		 *		is SACK'd) clear this flag.
    788		 */
    789	__u32	rto_pending:1,
    790
    791		/*
    792		 * hb_sent : a flag that signals that we have a pending
    793		 * heartbeat.
    794		 */
    795		hb_sent:1,
    796
    797		/* Is the Path MTU update pending on this tranport */
    798		pmtu_pending:1,
    799
    800		dst_pending_confirm:1,	/* need to confirm neighbour */
    801
    802		/* Has this transport moved the ctsn since we last sacked */
    803		sack_generation:1;
    804	u32 dst_cookie;
    805
    806	struct flowi fl;
    807
    808	/* This is the peer's IP address and port. */
    809	union sctp_addr ipaddr;
    810
    811	/* These are the functions we call to handle LLP stuff.	 */
    812	struct sctp_af *af_specific;
    813
    814	/* Which association do we belong to?  */
    815	struct sctp_association *asoc;
    816
    817	/* RFC2960
    818	 *
    819	 * 12.3 Per Transport Address Data
    820	 *
    821	 * For each destination transport address in the peer's
    822	 * address list derived from the INIT or INIT ACK chunk, a
    823	 * number of data elements needs to be maintained including:
    824	 */
    825	/* RTO	       : The current retransmission timeout value.  */
    826	unsigned long rto;
    827
    828	__u32 rtt;		/* This is the most recent RTT.	 */
    829
    830	/* RTTVAR      : The current RTT variation.  */
    831	__u32 rttvar;
    832
    833	/* SRTT	       : The current smoothed round trip time.	*/
    834	__u32 srtt;
    835
    836	/*
    837	 * These are the congestion stats.
    838	 */
    839	/* cwnd	       : The current congestion window.	 */
    840	__u32 cwnd;		  /* This is the actual cwnd.  */
    841
    842	/* ssthresh    : The current slow start threshold value.  */
    843	__u32 ssthresh;
    844
    845	/* partial     : The tracking method for increase of cwnd when in
    846	 * bytes acked : congestion avoidance mode (see Section 6.2.2)
    847	 */
    848	__u32 partial_bytes_acked;
    849
    850	/* Data that has been sent, but not acknowledged. */
    851	__u32 flight_size;
    852
    853	__u32 burst_limited;	/* Holds old cwnd when max.burst is applied */
    854
    855	/* Destination */
    856	struct dst_entry *dst;
    857	/* Source address. */
    858	union sctp_addr saddr;
    859
    860	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
    861	 * the destination address every heartbeat interval.
    862	 */
    863	unsigned long hbinterval;
    864	unsigned long probe_interval;
    865
    866	/* SACK delay timeout */
    867	unsigned long sackdelay;
    868	__u32 sackfreq;
    869
    870	atomic_t mtu_info;
    871
    872	/* When was the last time that we heard from this transport? We use
    873	 * this to pick new active and retran paths.
    874	 */
    875	ktime_t last_time_heard;
    876
    877	/* When was the last time that we sent a chunk using this
    878	 * transport? We use this to check for idle transports
    879	 */
    880	unsigned long last_time_sent;
    881
    882	/* Last time(in jiffies) when cwnd is reduced due to the congestion
    883	 * indication based on ECNE chunk.
    884	 */
    885	unsigned long last_time_ecne_reduced;
    886
    887	__be16 encap_port;
    888
    889	/* This is the max_retrans value for the transport and will
    890	 * be initialized from the assocs value.  This can be changed
    891	 * using the SCTP_SET_PEER_ADDR_PARAMS socket option.
    892	 */
    893	__u16 pathmaxrxt;
    894
    895	__u32 flowlabel;
    896	__u8  dscp;
    897
    898	/* This is the partially failed retrans value for the transport
    899	 * and will be initialized from the assocs value.  This can be changed
    900	 * using the SCTP_PEER_ADDR_THLDS socket option
    901	 */
    902	__u16 pf_retrans;
    903	/* Used for primary path switchover. */
    904	__u16 ps_retrans;
    905	/* PMTU	      : The current known path MTU.  */
    906	__u32 pathmtu;
    907
    908	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
    909	__u32 param_flags;
    910
    911	/* The number of times INIT has been sent on this transport. */
    912	int init_sent_count;
    913
    914	/* state       : The current state of this destination,
    915	 *             : i.e. SCTP_ACTIVE, SCTP_INACTIVE, SCTP_UNKNOWN.
    916	 */
    917	int state;
    918
    919	/* These are the error stats for this destination.  */
    920
    921	/* Error count : The current error count for this destination.	*/
    922	unsigned short error_count;
    923
    924	/* Per	       : A timer used by each destination.
    925	 * Destination :
    926	 * Timer       :
    927	 *
    928	 * [Everywhere else in the text this is called T3-rtx. -ed]
    929	 */
    930	struct timer_list T3_rtx_timer;
    931
    932	/* Heartbeat timer is per destination. */
    933	struct timer_list hb_timer;
    934
    935	/* Timer to handle ICMP proto unreachable envets */
    936	struct timer_list proto_unreach_timer;
    937
    938	/* Timer to handler reconf chunk rtx */
    939	struct timer_list reconf_timer;
    940
    941	/* Timer to send a probe HB packet for PLPMTUD */
    942	struct timer_list probe_timer;
    943
    944	/* Since we're using per-destination retransmission timers
    945	 * (see above), we're also using per-destination "transmitted"
    946	 * queues.  This probably ought to be a private struct
    947	 * accessible only within the outqueue, but it's not, yet.
    948	 */
    949	struct list_head transmitted;
    950
    951	/* We build bundle-able packets for this transport here.  */
    952	struct sctp_packet packet;
    953
    954	/* This is the list of transports that have chunks to send.  */
    955	struct list_head send_ready;
    956
    957	/* State information saved for SFR_CACC algorithm. The key
    958	 * idea in SFR_CACC is to maintain state at the sender on a
    959	 * per-destination basis when a changeover happens.
    960	 *	char changeover_active;
    961	 *	char cycling_changeover;
    962	 *	__u32 next_tsn_at_change;
    963	 *	char cacc_saw_newack;
    964	 */
    965	struct {
    966		/* An unsigned integer, which stores the next TSN to be
    967		 * used by the sender, at the moment of changeover.
    968		 */
    969		__u32 next_tsn_at_change;
    970
    971		/* A flag which indicates the occurrence of a changeover */
    972		char changeover_active;
    973
    974		/* A flag which indicates whether the change of primary is
    975		 * the first switch to this destination address during an
    976		 * active switch.
    977		 */
    978		char cycling_changeover;
    979
    980		/* A temporary flag, which is used during the processing of
    981		 * a SACK to estimate the causative TSN(s)'s group.
    982		 */
    983		char cacc_saw_newack;
    984	} cacc;
    985
    986	struct {
    987		__u16 pmtu;
    988		__u16 probe_size;
    989		__u16 probe_high;
    990		__u8 probe_count;
    991		__u8 state;
    992	} pl; /* plpmtud related */
    993
    994	/* 64-bit random number sent with heartbeat. */
    995	__u64 hb_nonce;
    996
    997	struct rcu_head rcu;
    998};
    999
   1000struct sctp_transport *sctp_transport_new(struct net *, const union sctp_addr *,
   1001					  gfp_t);
   1002void sctp_transport_set_owner(struct sctp_transport *,
   1003			      struct sctp_association *);
   1004void sctp_transport_route(struct sctp_transport *, union sctp_addr *,
   1005			  struct sctp_sock *);
   1006void sctp_transport_pmtu(struct sctp_transport *, struct sock *sk);
   1007void sctp_transport_free(struct sctp_transport *);
   1008void sctp_transport_reset_t3_rtx(struct sctp_transport *);
   1009void sctp_transport_reset_hb_timer(struct sctp_transport *);
   1010void sctp_transport_reset_reconf_timer(struct sctp_transport *transport);
   1011void sctp_transport_reset_probe_timer(struct sctp_transport *transport);
   1012void sctp_transport_reset_raise_timer(struct sctp_transport *transport);
   1013int sctp_transport_hold(struct sctp_transport *);
   1014void sctp_transport_put(struct sctp_transport *);
   1015void sctp_transport_update_rto(struct sctp_transport *, __u32);
   1016void sctp_transport_raise_cwnd(struct sctp_transport *, __u32, __u32);
   1017void sctp_transport_lower_cwnd(struct sctp_transport *t,
   1018			       enum sctp_lower_cwnd reason);
   1019void sctp_transport_burst_limited(struct sctp_transport *);
   1020void sctp_transport_burst_reset(struct sctp_transport *);
   1021unsigned long sctp_transport_timeout(struct sctp_transport *);
   1022void sctp_transport_reset(struct sctp_transport *t);
   1023bool sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu);
   1024void sctp_transport_immediate_rtx(struct sctp_transport *);
   1025void sctp_transport_dst_release(struct sctp_transport *t);
   1026void sctp_transport_dst_confirm(struct sctp_transport *t);
   1027void sctp_transport_pl_send(struct sctp_transport *t);
   1028bool sctp_transport_pl_recv(struct sctp_transport *t);
   1029
   1030
   1031/* This is the structure we use to queue packets as they come into
   1032 * SCTP.  We write packets to it and read chunks from it.
   1033 */
   1034struct sctp_inq {
   1035	/* This is actually a queue of sctp_chunk each
   1036	 * containing a partially decoded packet.
   1037	 */
   1038	struct list_head in_chunk_list;
   1039	/* This is the packet which is currently off the in queue and is
   1040	 * being worked on through the inbound chunk processing.
   1041	 */
   1042	struct sctp_chunk *in_progress;
   1043
   1044	/* This is the delayed task to finish delivering inbound
   1045	 * messages.
   1046	 */
   1047	struct work_struct immediate;
   1048};
   1049
   1050void sctp_inq_init(struct sctp_inq *);
   1051void sctp_inq_free(struct sctp_inq *);
   1052void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet);
   1053struct sctp_chunk *sctp_inq_pop(struct sctp_inq *);
   1054struct sctp_chunkhdr *sctp_inq_peek(struct sctp_inq *);
   1055void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t);
   1056
   1057/* This is the structure we use to hold outbound chunks.  You push
   1058 * chunks in and they automatically pop out the other end as bundled
   1059 * packets (it calls (*output_handler)()).
   1060 *
   1061 * This structure covers sections 6.3, 6.4, 6.7, 6.8, 6.10, 7., 8.1,
   1062 * and 8.2 of the v13 draft.
   1063 *
   1064 * It handles retransmissions.	The connection to the timeout portion
   1065 * of the state machine is through sctp_..._timeout() and timeout_handler.
   1066 *
   1067 * If you feed it SACKs, it will eat them.
   1068 *
   1069 * If you give it big chunks, it will fragment them.
   1070 *
   1071 * It assigns TSN's to data chunks.  This happens at the last possible
   1072 * instant before transmission.
   1073 *
   1074 * When free()'d, it empties itself out via output_handler().
   1075 */
   1076struct sctp_outq {
   1077	struct sctp_association *asoc;
   1078
   1079	/* Data pending that has never been transmitted.  */
   1080	struct list_head out_chunk_list;
   1081
   1082	/* Stream scheduler being used */
   1083	struct sctp_sched_ops *sched;
   1084
   1085	unsigned int out_qlen;	/* Total length of queued data chunks. */
   1086
   1087	/* Error of send failed, may used in SCTP_SEND_FAILED event. */
   1088	unsigned int error;
   1089
   1090	/* These are control chunks we want to send.  */
   1091	struct list_head control_chunk_list;
   1092
   1093	/* These are chunks that have been sacked but are above the
   1094	 * CTSN, or cumulative tsn ack point.
   1095	 */
   1096	struct list_head sacked;
   1097
   1098	/* Put chunks on this list to schedule them for
   1099	 * retransmission.
   1100	 */
   1101	struct list_head retransmit;
   1102
   1103	/* Put chunks on this list to save them for FWD TSN processing as
   1104	 * they were abandoned.
   1105	 */
   1106	struct list_head abandoned;
   1107
   1108	/* How many unackd bytes do we have in-flight?	*/
   1109	__u32 outstanding_bytes;
   1110
   1111	/* Are we doing fast-rtx on this queue */
   1112	char fast_rtx;
   1113
   1114	/* Corked? */
   1115	char cork;
   1116};
   1117
   1118void sctp_outq_init(struct sctp_association *, struct sctp_outq *);
   1119void sctp_outq_teardown(struct sctp_outq *);
   1120void sctp_outq_free(struct sctp_outq*);
   1121void sctp_outq_tail(struct sctp_outq *, struct sctp_chunk *chunk, gfp_t);
   1122int sctp_outq_sack(struct sctp_outq *, struct sctp_chunk *);
   1123int sctp_outq_is_empty(const struct sctp_outq *);
   1124void sctp_outq_restart(struct sctp_outq *);
   1125
   1126void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
   1127		     enum sctp_retransmit_reason reason);
   1128void sctp_retransmit_mark(struct sctp_outq *, struct sctp_transport *, __u8);
   1129void sctp_outq_uncork(struct sctp_outq *, gfp_t gfp);
   1130void sctp_prsctp_prune(struct sctp_association *asoc,
   1131		       struct sctp_sndrcvinfo *sinfo, int msg_len);
   1132void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 sack_ctsn);
   1133/* Uncork and flush an outqueue.  */
   1134static inline void sctp_outq_cork(struct sctp_outq *q)
   1135{
   1136	q->cork = 1;
   1137}
   1138
   1139/* SCTP skb control block.
   1140 * sctp_input_cb is currently used on rx and sock rx queue
   1141 */
   1142struct sctp_input_cb {
   1143	union {
   1144		struct inet_skb_parm    h4;
   1145#if IS_ENABLED(CONFIG_IPV6)
   1146		struct inet6_skb_parm   h6;
   1147#endif
   1148	} header;
   1149	struct sctp_chunk *chunk;
   1150	struct sctp_af *af;
   1151	__be16 encap_port;
   1152};
   1153#define SCTP_INPUT_CB(__skb)	((struct sctp_input_cb *)&((__skb)->cb[0]))
   1154
   1155struct sctp_output_cb {
   1156	struct sk_buff *last;
   1157};
   1158#define SCTP_OUTPUT_CB(__skb)	((struct sctp_output_cb *)&((__skb)->cb[0]))
   1159
   1160static inline const struct sk_buff *sctp_gso_headskb(const struct sk_buff *skb)
   1161{
   1162	const struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk;
   1163
   1164	return chunk->head_skb ? : skb;
   1165}
   1166
   1167/* These bind address data fields common between endpoints and associations */
   1168struct sctp_bind_addr {
   1169
   1170	/* RFC 2960 12.1 Parameters necessary for the SCTP instance
   1171	 *
   1172	 * SCTP Port:	The local SCTP port number the endpoint is
   1173	 *		bound to.
   1174	 */
   1175	__u16 port;
   1176
   1177	/* RFC 2960 12.1 Parameters necessary for the SCTP instance
   1178	 *
   1179	 * Address List: The list of IP addresses that this instance
   1180	 *	has bound.  This information is passed to one's
   1181	 *	peer(s) in INIT and INIT ACK chunks.
   1182	 */
   1183	struct list_head address_list;
   1184};
   1185
   1186void sctp_bind_addr_init(struct sctp_bind_addr *, __u16 port);
   1187void sctp_bind_addr_free(struct sctp_bind_addr *);
   1188int sctp_bind_addr_copy(struct net *net, struct sctp_bind_addr *dest,
   1189			const struct sctp_bind_addr *src,
   1190			enum sctp_scope scope, gfp_t gfp,
   1191			int flags);
   1192int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
   1193			const struct sctp_bind_addr *src,
   1194			gfp_t gfp);
   1195int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
   1196		       int new_size, __u8 addr_state, gfp_t gfp);
   1197int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
   1198int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *,
   1199			 struct sctp_sock *);
   1200int sctp_bind_addr_conflict(struct sctp_bind_addr *, const union sctp_addr *,
   1201			 struct sctp_sock *, struct sctp_sock *);
   1202int sctp_bind_addr_state(const struct sctp_bind_addr *bp,
   1203			 const union sctp_addr *addr);
   1204int sctp_bind_addrs_check(struct sctp_sock *sp,
   1205			  struct sctp_sock *sp2, int cnt2);
   1206union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr	*bp,
   1207					const union sctp_addr	*addrs,
   1208					int			addrcnt,
   1209					struct sctp_sock	*opt);
   1210union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
   1211					 int *addrs_len,
   1212					 gfp_t gfp);
   1213int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw, int len,
   1214			   __u16 port, gfp_t gfp);
   1215
   1216enum sctp_scope sctp_scope(const union sctp_addr *addr);
   1217int sctp_in_scope(struct net *net, const union sctp_addr *addr,
   1218		  const enum sctp_scope scope);
   1219int sctp_is_any(struct sock *sk, const union sctp_addr *addr);
   1220int sctp_is_ep_boundall(struct sock *sk);
   1221
   1222
   1223/* What type of endpoint?  */
   1224enum sctp_endpoint_type {
   1225	SCTP_EP_TYPE_SOCKET,
   1226	SCTP_EP_TYPE_ASSOCIATION,
   1227};
   1228
   1229/*
   1230 * A common base class to bridge the implmentation view of a
   1231 * socket (usually listening) endpoint versus an association's
   1232 * local endpoint.
   1233 * This common structure is useful for several purposes:
   1234 *   1) Common interface for lookup routines.
   1235 *	a) Subfunctions work for either endpoint or association
   1236 *	b) Single interface to lookup allows hiding the lookup lock rather
   1237 *	   than acquiring it externally.
   1238 *   2) Common interface for the inbound chunk handling/state machine.
   1239 *   3) Common object handling routines for reference counting, etc.
   1240 *   4) Disentangle association lookup from endpoint lookup, where we
   1241 *	do not have to find our endpoint to find our association.
   1242 *
   1243 */
   1244
   1245struct sctp_ep_common {
   1246	/* Runtime type information.  What kind of endpoint is this? */
   1247	enum sctp_endpoint_type type;
   1248
   1249	/* Some fields to help us manage this object.
   1250	 *   refcnt   - Reference count access to this object.
   1251	 *   dead     - Do not attempt to use this object.
   1252	 */
   1253	refcount_t    refcnt;
   1254	bool	    dead;
   1255
   1256	/* What socket does this endpoint belong to?  */
   1257	struct sock *sk;
   1258
   1259	/* Cache netns and it won't change once set */
   1260	struct net *net;
   1261
   1262	/* This is where we receive inbound chunks.  */
   1263	struct sctp_inq	  inqueue;
   1264
   1265	/* This substructure includes the defining parameters of the
   1266	 * endpoint:
   1267	 * bind_addr.port is our shared port number.
   1268	 * bind_addr.address_list is our set of local IP addresses.
   1269	 */
   1270	struct sctp_bind_addr bind_addr;
   1271};
   1272
   1273
   1274/* RFC Section 1.4 Key Terms
   1275 *
   1276 * o SCTP endpoint: The logical sender/receiver of SCTP packets. On a
   1277 *   multi-homed host, an SCTP endpoint is represented to its peers as a
   1278 *   combination of a set of eligible destination transport addresses to
   1279 *   which SCTP packets can be sent and a set of eligible source
   1280 *   transport addresses from which SCTP packets can be received.
   1281 *   All transport addresses used by an SCTP endpoint must use the
   1282 *   same port number, but can use multiple IP addresses. A transport
   1283 *   address used by an SCTP endpoint must not be used by another
   1284 *   SCTP endpoint. In other words, a transport address is unique
   1285 *   to an SCTP endpoint.
   1286 *
   1287 * From an implementation perspective, each socket has one of these.
   1288 * A TCP-style socket will have exactly one association on one of
   1289 * these.  An UDP-style socket will have multiple associations hanging
   1290 * off one of these.
   1291 */
   1292
   1293struct sctp_endpoint {
   1294	/* Common substructure for endpoint and association. */
   1295	struct sctp_ep_common base;
   1296
   1297	/* Fields to help us manage our entries in the hash tables. */
   1298	struct hlist_node node;
   1299	int hashent;
   1300
   1301	/* Associations: A list of current associations and mappings
   1302	 *	      to the data consumers for each association. This
   1303	 *	      may be in the form of a hash table or other
   1304	 *	      implementation dependent structure. The data
   1305	 *	      consumers may be process identification
   1306	 *	      information such as file descriptors, named pipe
   1307	 *	      pointer, or table pointers dependent on how SCTP
   1308	 *	      is implemented.
   1309	 */
   1310	/* This is really a list of struct sctp_association entries. */
   1311	struct list_head asocs;
   1312
   1313	/* Secret Key: A secret key used by this endpoint to compute
   1314	 *	      the MAC.	This SHOULD be a cryptographic quality
   1315	 *	      random number with a sufficient length.
   1316	 *	      Discussion in [RFC1750] can be helpful in
   1317	 *	      selection of the key.
   1318	 */
   1319	__u8 secret_key[SCTP_SECRET_SIZE];
   1320
   1321 	/* digest:  This is a digest of the sctp cookie.  This field is
   1322 	 * 	    only used on the receive path when we try to validate
   1323 	 * 	    that the cookie has not been tampered with.  We put
   1324 	 * 	    this here so we pre-allocate this once and can re-use
   1325 	 * 	    on every receive.
   1326 	 */
   1327 	__u8 *digest;
   1328 
   1329	/* sendbuf acct. policy.	*/
   1330	__u32 sndbuf_policy;
   1331
   1332	/* rcvbuf acct. policy.	*/
   1333	__u32 rcvbuf_policy;
   1334
   1335	/* SCTP AUTH: array of the HMACs that will be allocated
   1336	 * we need this per association so that we don't serialize
   1337	 */
   1338	struct crypto_shash **auth_hmacs;
   1339
   1340	/* SCTP-AUTH: hmacs for the endpoint encoded into parameter */
   1341	 struct sctp_hmac_algo_param *auth_hmacs_list;
   1342
   1343	/* SCTP-AUTH: chunks to authenticate encoded into parameter */
   1344	struct sctp_chunks_param *auth_chunk_list;
   1345
   1346	/* SCTP-AUTH: endpoint shared keys */
   1347	struct list_head endpoint_shared_keys;
   1348	__u16 active_key_id;
   1349	__u8  ecn_enable:1,
   1350	      auth_enable:1,
   1351	      intl_enable:1,
   1352	      prsctp_enable:1,
   1353	      asconf_enable:1,
   1354	      reconf_enable:1;
   1355
   1356	__u8  strreset_enable;
   1357	struct rcu_head rcu;
   1358};
   1359
   1360/* Recover the outter endpoint structure. */
   1361static inline struct sctp_endpoint *sctp_ep(struct sctp_ep_common *base)
   1362{
   1363	struct sctp_endpoint *ep;
   1364
   1365	ep = container_of(base, struct sctp_endpoint, base);
   1366	return ep;
   1367}
   1368
   1369/* These are function signatures for manipulating endpoints.  */
   1370struct sctp_endpoint *sctp_endpoint_new(struct sock *, gfp_t);
   1371void sctp_endpoint_free(struct sctp_endpoint *);
   1372void sctp_endpoint_put(struct sctp_endpoint *);
   1373int sctp_endpoint_hold(struct sctp_endpoint *ep);
   1374void sctp_endpoint_add_asoc(struct sctp_endpoint *, struct sctp_association *);
   1375struct sctp_association *sctp_endpoint_lookup_assoc(
   1376	const struct sctp_endpoint *ep,
   1377	const union sctp_addr *paddr,
   1378	struct sctp_transport **);
   1379bool sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
   1380				 const union sctp_addr *paddr);
   1381struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *,
   1382					struct net *, const union sctp_addr *);
   1383bool sctp_has_association(struct net *net, const union sctp_addr *laddr,
   1384			  const union sctp_addr *paddr);
   1385
   1386int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
   1387		     const struct sctp_association *asoc,
   1388		     enum sctp_cid cid, struct sctp_init_chunk *peer_init,
   1389		     struct sctp_chunk *chunk, struct sctp_chunk **err_chunk);
   1390int sctp_process_init(struct sctp_association *, struct sctp_chunk *chunk,
   1391		      const union sctp_addr *peer,
   1392		      struct sctp_init_chunk *init, gfp_t gfp);
   1393__u32 sctp_generate_tag(const struct sctp_endpoint *);
   1394__u32 sctp_generate_tsn(const struct sctp_endpoint *);
   1395
   1396struct sctp_inithdr_host {
   1397	__u32 init_tag;
   1398	__u32 a_rwnd;
   1399	__u16 num_outbound_streams;
   1400	__u16 num_inbound_streams;
   1401	__u32 initial_tsn;
   1402};
   1403
   1404struct sctp_stream_priorities {
   1405	/* List of priorities scheduled */
   1406	struct list_head prio_sched;
   1407	/* List of streams scheduled */
   1408	struct list_head active;
   1409	/* The next stream in line */
   1410	struct sctp_stream_out_ext *next;
   1411	__u16 prio;
   1412};
   1413
   1414struct sctp_stream_out_ext {
   1415	__u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
   1416	__u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
   1417	struct list_head outq; /* chunks enqueued by this stream */
   1418	union {
   1419		struct {
   1420			/* Scheduled streams list */
   1421			struct list_head prio_list;
   1422			struct sctp_stream_priorities *prio_head;
   1423		};
   1424		/* Fields used by RR scheduler */
   1425		struct {
   1426			struct list_head rr_list;
   1427		};
   1428	};
   1429};
   1430
   1431struct sctp_stream_out {
   1432	union {
   1433		__u32 mid;
   1434		__u16 ssn;
   1435	};
   1436	__u32 mid_uo;
   1437	struct sctp_stream_out_ext *ext;
   1438	__u8 state;
   1439};
   1440
   1441struct sctp_stream_in {
   1442	union {
   1443		__u32 mid;
   1444		__u16 ssn;
   1445	};
   1446	__u32 mid_uo;
   1447	__u32 fsn;
   1448	__u32 fsn_uo;
   1449	char pd_mode;
   1450	char pd_mode_uo;
   1451};
   1452
   1453struct sctp_stream {
   1454	GENRADIX(struct sctp_stream_out) out;
   1455	GENRADIX(struct sctp_stream_in)	in;
   1456
   1457	__u16 outcnt;
   1458	__u16 incnt;
   1459	/* Current stream being sent, if any */
   1460	struct sctp_stream_out *out_curr;
   1461	union {
   1462		/* Fields used by priority scheduler */
   1463		struct {
   1464			/* List of priorities scheduled */
   1465			struct list_head prio_list;
   1466		};
   1467		/* Fields used by RR scheduler */
   1468		struct {
   1469			/* List of streams scheduled */
   1470			struct list_head rr_list;
   1471			/* The next stream in line */
   1472			struct sctp_stream_out_ext *rr_next;
   1473		};
   1474	};
   1475	struct sctp_stream_interleave *si;
   1476};
   1477
   1478static inline struct sctp_stream_out *sctp_stream_out(
   1479	struct sctp_stream *stream,
   1480	__u16 sid)
   1481{
   1482	return genradix_ptr(&stream->out, sid);
   1483}
   1484
   1485static inline struct sctp_stream_in *sctp_stream_in(
   1486	struct sctp_stream *stream,
   1487	__u16 sid)
   1488{
   1489	return genradix_ptr(&stream->in, sid);
   1490}
   1491
   1492#define SCTP_SO(s, i) sctp_stream_out((s), (i))
   1493#define SCTP_SI(s, i) sctp_stream_in((s), (i))
   1494
   1495#define SCTP_STREAM_CLOSED		0x00
   1496#define SCTP_STREAM_OPEN		0x01
   1497
   1498static inline __u16 sctp_datachk_len(const struct sctp_stream *stream)
   1499{
   1500	return stream->si->data_chunk_len;
   1501}
   1502
   1503static inline __u16 sctp_datahdr_len(const struct sctp_stream *stream)
   1504{
   1505	return stream->si->data_chunk_len - sizeof(struct sctp_chunkhdr);
   1506}
   1507
   1508static inline __u16 sctp_ftsnchk_len(const struct sctp_stream *stream)
   1509{
   1510	return stream->si->ftsn_chunk_len;
   1511}
   1512
   1513static inline __u16 sctp_ftsnhdr_len(const struct sctp_stream *stream)
   1514{
   1515	return stream->si->ftsn_chunk_len - sizeof(struct sctp_chunkhdr);
   1516}
   1517
   1518/* SCTP_GET_ASSOC_STATS counters */
   1519struct sctp_priv_assoc_stats {
   1520	/* Maximum observed rto in the association during subsequent
   1521	 * observations. Value is set to 0 if no RTO measurement took place
   1522	 * The transport where the max_rto was observed is returned in
   1523	 * obs_rto_ipaddr
   1524	 */
   1525	struct sockaddr_storage obs_rto_ipaddr;
   1526	__u64 max_obs_rto;
   1527	/* Total In and Out SACKs received and sent */
   1528	__u64 isacks;
   1529	__u64 osacks;
   1530	/* Total In and Out packets received and sent */
   1531	__u64 opackets;
   1532	__u64 ipackets;
   1533	/* Total retransmitted chunks */
   1534	__u64 rtxchunks;
   1535	/* TSN received > next expected */
   1536	__u64 outofseqtsns;
   1537	/* Duplicate Chunks received */
   1538	__u64 idupchunks;
   1539	/* Gap Ack Blocks received */
   1540	__u64 gapcnt;
   1541	/* Unordered data chunks sent and received */
   1542	__u64 ouodchunks;
   1543	__u64 iuodchunks;
   1544	/* Ordered data chunks sent and received */
   1545	__u64 oodchunks;
   1546	__u64 iodchunks;
   1547	/* Control chunks sent and received */
   1548	__u64 octrlchunks;
   1549	__u64 ictrlchunks;
   1550};
   1551
   1552/* RFC2960
   1553 *
   1554 * 12. Recommended Transmission Control Block (TCB) Parameters
   1555 *
   1556 * This section details a recommended set of parameters that should
   1557 * be contained within the TCB for an implementation. This section is
   1558 * for illustrative purposes and should not be deemed as requirements
   1559 * on an implementation or as an exhaustive list of all parameters
   1560 * inside an SCTP TCB. Each implementation may need its own additional
   1561 * parameters for optimization.
   1562 */
   1563
   1564
   1565/* Here we have information about each individual association. */
   1566struct sctp_association {
   1567
   1568	/* A base structure common to endpoint and association.
   1569	 * In this context, it represents the associations's view
   1570	 * of the local endpoint of the association.
   1571	 */
   1572	struct sctp_ep_common base;
   1573
   1574	/* Associations on the same socket. */
   1575	struct list_head asocs;
   1576
   1577	/* association id. */
   1578	sctp_assoc_t assoc_id;
   1579
   1580	/* This is our parent endpoint.	 */
   1581	struct sctp_endpoint *ep;
   1582
   1583	/* These are those association elements needed in the cookie.  */
   1584	struct sctp_cookie c;
   1585
   1586	/* This is all information about our peer.  */
   1587	struct {
   1588		/* transport_addr_list
   1589		 *
   1590		 * Peer	       : A list of SCTP transport addresses that the
   1591		 * Transport   : peer is bound to. This information is derived
   1592		 * Address     : from the INIT or INIT ACK and is used to
   1593		 * List	       : associate an inbound packet with a given
   1594		 *	       : association. Normally this information is
   1595		 *	       : hashed or keyed for quick lookup and access
   1596		 *	       : of the TCB.
   1597		 *	       : The list is also initialized with the list
   1598		 *	       : of addresses passed with the sctp_connectx()
   1599		 *	       : call.
   1600		 *
   1601		 * It is a list of SCTP_transport's.
   1602		 */
   1603		struct list_head transport_addr_list;
   1604
   1605		/* rwnd
   1606		 *
   1607		 * Peer Rwnd   : Current calculated value of the peer's rwnd.
   1608		 */
   1609		__u32 rwnd;
   1610
   1611		/* transport_count
   1612		 *
   1613		 * Peer        : A count of the number of peer addresses
   1614		 * Transport   : in the Peer Transport Address List.
   1615		 * Address     :
   1616		 * Count       :
   1617		 */
   1618		__u16 transport_count;
   1619
   1620		/* port
   1621		 *   The transport layer port number.
   1622		 */
   1623		__u16 port;
   1624
   1625		/* primary_path
   1626		 *
   1627		 * Primary     : This is the current primary destination
   1628		 * Path	       : transport address of the peer endpoint.  It
   1629		 *	       : may also specify a source transport address
   1630		 *	       : on this endpoint.
   1631		 *
   1632		 * All of these paths live on transport_addr_list.
   1633		 *
   1634		 * At the bakeoffs, we discovered that the intent of
   1635		 * primaryPath is that it only changes when the ULP
   1636		 * asks to have it changed.  We add the activePath to
   1637		 * designate the connection we are currently using to
   1638		 * transmit new data and most control chunks.
   1639		 */
   1640		struct sctp_transport *primary_path;
   1641
   1642		/* Cache the primary path address here, when we
   1643		 * need a an address for msg_name.
   1644		 */
   1645		union sctp_addr primary_addr;
   1646
   1647		/* active_path
   1648		 *   The path that we are currently using to
   1649		 *   transmit new data and most control chunks.
   1650		 */
   1651		struct sctp_transport *active_path;
   1652
   1653		/* retran_path
   1654		 *
   1655		 * RFC2960 6.4 Multi-homed SCTP Endpoints
   1656		 * ...
   1657		 * Furthermore, when its peer is multi-homed, an
   1658		 * endpoint SHOULD try to retransmit a chunk to an
   1659		 * active destination transport address that is
   1660		 * different from the last destination address to
   1661		 * which the DATA chunk was sent.
   1662		 */
   1663		struct sctp_transport *retran_path;
   1664
   1665		/* Pointer to last transport I have sent on.  */
   1666		struct sctp_transport *last_sent_to;
   1667
   1668		/* This is the last transport I have received DATA on.	*/
   1669		struct sctp_transport *last_data_from;
   1670
   1671		/*
   1672		 * Mapping  An array of bits or bytes indicating which out of
   1673		 * Array    order TSN's have been received (relative to the
   1674		 *	    Last Rcvd TSN). If no gaps exist, i.e. no out of
   1675		 *	    order packets have been received, this array
   1676		 *	    will be set to all zero. This structure may be
   1677		 *	    in the form of a circular buffer or bit array.
   1678		 *
   1679		 * Last Rcvd   : This is the last TSN received in
   1680		 * TSN	       : sequence. This value is set initially by
   1681		 *	       : taking the peer's Initial TSN, received in
   1682		 *	       : the INIT or INIT ACK chunk, and subtracting
   1683		 *	       : one from it.
   1684		 *
   1685		 * Throughout most of the specification this is called the
   1686		 * "Cumulative TSN ACK Point".	In this case, we
   1687		 * ignore the advice in 12.2 in favour of the term
   1688		 * used in the bulk of the text.  This value is hidden
   1689		 * in tsn_map--we get it by calling sctp_tsnmap_get_ctsn().
   1690		 */
   1691		struct sctp_tsnmap tsn_map;
   1692
   1693		/* This mask is used to disable sending the ASCONF chunk
   1694		 * with specified parameter to peer.
   1695		 */
   1696		__be16 addip_disabled_mask;
   1697
   1698		/* These are capabilities which our peer advertised.  */
   1699		__u16	ecn_capable:1,      /* Can peer do ECN? */
   1700			ipv4_address:1,     /* Peer understands IPv4 addresses? */
   1701			ipv6_address:1,     /* Peer understands IPv6 addresses? */
   1702			hostname_address:1, /* Peer understands DNS addresses? */
   1703			asconf_capable:1,   /* Does peer support ADDIP? */
   1704			prsctp_capable:1,   /* Can peer do PR-SCTP? */
   1705			reconf_capable:1,   /* Can peer do RE-CONFIG? */
   1706			intl_capable:1,     /* Can peer do INTERLEAVE */
   1707			auth_capable:1,     /* Is peer doing SCTP-AUTH? */
   1708			/* sack_needed:
   1709			 *   This flag indicates if the next received
   1710			 *   packet is to be responded to with a
   1711			 *   SACK. This is initialized to 0.  When a packet
   1712			 *   is received sack_cnt is incremented. If this value
   1713			 *   reaches 2 or more, a SACK is sent and the
   1714			 *   value is reset to 0. Note: This is used only
   1715			 *   when no DATA chunks are received out of
   1716			 *   order.  When DATA chunks are out of order,
   1717			 *   SACK's are not delayed (see Section 6).
   1718			 */
   1719			sack_needed:1,     /* Do we need to sack the peer? */
   1720			sack_generation:1,
   1721			zero_window_announced:1;
   1722
   1723		__u32	sack_cnt;
   1724
   1725		__u32   adaptation_ind;	 /* Adaptation Code point. */
   1726
   1727		struct sctp_inithdr_host i;
   1728		void *cookie;
   1729		int cookie_len;
   1730
   1731		/* ADDIP Section 4.2 Upon reception of an ASCONF Chunk.
   1732		 * C1) ... "Peer-Serial-Number'. This value MUST be initialized to the
   1733		 * Initial TSN Value minus 1
   1734		 */
   1735		__u32 addip_serial;
   1736
   1737		/* SCTP-AUTH: We need to know pears random number, hmac list
   1738		 * and authenticated chunk list.  All that is part of the
   1739		 * cookie and these are just pointers to those locations
   1740		 */
   1741		struct sctp_random_param *peer_random;
   1742		struct sctp_chunks_param *peer_chunks;
   1743		struct sctp_hmac_algo_param *peer_hmacs;
   1744	} peer;
   1745
   1746	/* State       : A state variable indicating what state the
   1747	 *	       : association is in, i.e. COOKIE-WAIT,
   1748	 *	       : COOKIE-ECHOED, ESTABLISHED, SHUTDOWN-PENDING,
   1749	 *	       : SHUTDOWN-SENT, SHUTDOWN-RECEIVED, SHUTDOWN-ACK-SENT.
   1750	 *
   1751	 *		Note: No "CLOSED" state is illustrated since if a
   1752	 *		association is "CLOSED" its TCB SHOULD be removed.
   1753	 *
   1754	 *		In this implementation we DO have a CLOSED
   1755	 *		state which is used during initiation and shutdown.
   1756	 *
   1757	 *		State takes values from SCTP_STATE_*.
   1758	 */
   1759	enum sctp_state state;
   1760
   1761	/* Overall     : The overall association error count.
   1762	 * Error Count : [Clear this any time I get something.]
   1763	 */
   1764	int overall_error_count;
   1765
   1766	/* The cookie life I award for any cookie.  */
   1767	ktime_t cookie_life;
   1768
   1769	/* These are the association's initial, max, and min RTO values.
   1770	 * These values will be initialized by system defaults, but can
   1771	 * be modified via the SCTP_RTOINFO socket option.
   1772	 */
   1773	unsigned long rto_initial;
   1774	unsigned long rto_max;
   1775	unsigned long rto_min;
   1776
   1777	/* Maximum number of new data packets that can be sent in a burst.  */
   1778	int max_burst;
   1779
   1780	/* This is the max_retrans value for the association.  This value will
   1781	 * be initialized from system defaults, but can be
   1782	 * modified by the SCTP_ASSOCINFO socket option.
   1783	 */
   1784	int max_retrans;
   1785
   1786	/* This is the partially failed retrans value for the transport
   1787	 * and will be initialized from the assocs value.  This can be
   1788	 * changed using the SCTP_PEER_ADDR_THLDS socket option
   1789	 */
   1790	__u16 pf_retrans;
   1791	/* Used for primary path switchover. */
   1792	__u16 ps_retrans;
   1793
   1794	/* Maximum number of times the endpoint will retransmit INIT  */
   1795	__u16 max_init_attempts;
   1796
   1797	/* How many times have we resent an INIT? */
   1798	__u16 init_retries;
   1799
   1800	/* The largest timeout or RTO value to use in attempting an INIT */
   1801	unsigned long max_init_timeo;
   1802
   1803	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
   1804	 * the destination address every heartbeat interval. This value
   1805	 * will be inherited by all new transports.
   1806	 */
   1807	unsigned long hbinterval;
   1808	unsigned long probe_interval;
   1809
   1810	__be16 encap_port;
   1811
   1812	/* This is the max_retrans value for new transports in the
   1813	 * association.
   1814	 */
   1815	__u16 pathmaxrxt;
   1816
   1817	__u32 flowlabel;
   1818	__u8  dscp;
   1819
   1820	/* Flag that path mtu update is pending */
   1821	__u8   pmtu_pending;
   1822
   1823	/* Association : The smallest PMTU discovered for all of the
   1824	 * PMTU	       : peer's transport addresses.
   1825	 */
   1826	__u32 pathmtu;
   1827
   1828	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
   1829	__u32 param_flags;
   1830
   1831	__u32 sackfreq;
   1832	/* SACK delay timeout */
   1833	unsigned long sackdelay;
   1834
   1835	unsigned long timeouts[SCTP_NUM_TIMEOUT_TYPES];
   1836	struct timer_list timers[SCTP_NUM_TIMEOUT_TYPES];
   1837
   1838	/* Transport to which SHUTDOWN chunk was last sent.  */
   1839	struct sctp_transport *shutdown_last_sent_to;
   1840
   1841	/* Transport to which INIT chunk was last sent.  */
   1842	struct sctp_transport *init_last_sent_to;
   1843
   1844	/* How many times have we resent a SHUTDOWN */
   1845	int shutdown_retries;
   1846
   1847	/* Next TSN    : The next TSN number to be assigned to a new
   1848	 *	       : DATA chunk.  This is sent in the INIT or INIT
   1849	 *	       : ACK chunk to the peer and incremented each
   1850	 *	       : time a DATA chunk is assigned a TSN
   1851	 *	       : (normally just prior to transmit or during
   1852	 *	       : fragmentation).
   1853	 */
   1854	__u32 next_tsn;
   1855
   1856	/*
   1857	 * Last Rcvd   : This is the last TSN received in sequence.  This value
   1858	 * TSN	       : is set initially by taking the peer's Initial TSN,
   1859	 *	       : received in the INIT or INIT ACK chunk, and
   1860	 *	       : subtracting one from it.
   1861	 *
   1862	 * Most of RFC 2960 refers to this as the Cumulative TSN Ack Point.
   1863	 */
   1864
   1865	__u32 ctsn_ack_point;
   1866
   1867	/* PR-SCTP Advanced.Peer.Ack.Point */
   1868	__u32 adv_peer_ack_point;
   1869
   1870	/* Highest TSN that is acknowledged by incoming SACKs. */
   1871	__u32 highest_sacked;
   1872
   1873	/* TSN marking the fast recovery exit point */
   1874	__u32 fast_recovery_exit;
   1875
   1876	/* Flag to track the current fast recovery state */
   1877	__u8 fast_recovery;
   1878
   1879	/* The number of unacknowledged data chunks.  Reported through
   1880	 * the SCTP_STATUS sockopt.
   1881	 */
   1882	__u16 unack_data;
   1883
   1884	/* The total number of data chunks that we've had to retransmit
   1885	 * as the result of a T3 timer expiration
   1886	 */
   1887	__u32 rtx_data_chunks;
   1888
   1889	/* This is the association's receive buffer space.  This value is used
   1890	 * to set a_rwnd field in an INIT or a SACK chunk.
   1891	 */
   1892	__u32 rwnd;
   1893
   1894	/* This is the last advertised value of rwnd over a SACK chunk. */
   1895	__u32 a_rwnd;
   1896
   1897	/* Number of bytes by which the rwnd has slopped.  The rwnd is allowed
   1898	 * to slop over a maximum of the association's frag_point.
   1899	 */
   1900	__u32 rwnd_over;
   1901
   1902	/* Keeps treack of rwnd pressure.  This happens when we have
   1903	 * a window, but not recevie buffer (i.e small packets).  This one
   1904	 * is releases slowly (1 PMTU at a time ).
   1905	 */
   1906	__u32 rwnd_press;
   1907
   1908	/* This is the sndbuf size in use for the association.
   1909	 * This corresponds to the sndbuf size for the association,
   1910	 * as specified in the sk->sndbuf.
   1911	 */
   1912	int sndbuf_used;
   1913
   1914	/* This is the amount of memory that this association has allocated
   1915	 * in the receive path at any given time.
   1916	 */
   1917	atomic_t rmem_alloc;
   1918
   1919	/* This is the wait queue head for send requests waiting on
   1920	 * the association sndbuf space.
   1921	 */
   1922	wait_queue_head_t	wait;
   1923
   1924	/* The message size at which SCTP fragmentation will occur. */
   1925	__u32 frag_point;
   1926	__u32 user_frag;
   1927
   1928	/* Counter used to count INIT errors. */
   1929	int init_err_counter;
   1930
   1931	/* Count the number of INIT cycles (for doubling timeout). */
   1932	int init_cycle;
   1933
   1934	/* Default send parameters. */
   1935	__u16 default_stream;
   1936	__u16 default_flags;
   1937	__u32 default_ppid;
   1938	__u32 default_context;
   1939	__u32 default_timetolive;
   1940
   1941	/* Default receive parameters */
   1942	__u32 default_rcv_context;
   1943
   1944	/* Stream arrays */
   1945	struct sctp_stream stream;
   1946
   1947	/* All outbound chunks go through this structure.  */
   1948	struct sctp_outq outqueue;
   1949
   1950	/* A smart pipe that will handle reordering and fragmentation,
   1951	 * as well as handle passing events up to the ULP.
   1952	 */
   1953	struct sctp_ulpq ulpq;
   1954
   1955	/* Last TSN that caused an ECNE Chunk to be sent.  */
   1956	__u32 last_ecne_tsn;
   1957
   1958	/* Last TSN that caused a CWR Chunk to be sent.	 */
   1959	__u32 last_cwr_tsn;
   1960
   1961	/* How many duplicated TSNs have we seen?  */
   1962	int numduptsns;
   1963
   1964	/* These are to support
   1965	 * "SCTP Extensions for Dynamic Reconfiguration of IP Addresses
   1966	 *  and Enforcement of Flow and Message Limits"
   1967	 * <draft-ietf-tsvwg-addip-sctp-02.txt>
   1968	 * or "ADDIP" for short.
   1969	 */
   1970
   1971
   1972
   1973	/* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
   1974	 *
   1975	 * R1) One and only one ASCONF Chunk MAY be in transit and
   1976	 * unacknowledged at any one time.  If a sender, after sending
   1977	 * an ASCONF chunk, decides it needs to transfer another
   1978	 * ASCONF Chunk, it MUST wait until the ASCONF-ACK Chunk
   1979	 * returns from the previous ASCONF Chunk before sending a
   1980	 * subsequent ASCONF. Note this restriction binds each side,
   1981	 * so at any time two ASCONF may be in-transit on any given
   1982	 * association (one sent from each endpoint).
   1983	 *
   1984	 * [This is our one-and-only-one ASCONF in flight.  If we do
   1985	 * not have an ASCONF in flight, this is NULL.]
   1986	 */
   1987	struct sctp_chunk *addip_last_asconf;
   1988
   1989	/* ADDIP Section 5.2 Upon reception of an ASCONF Chunk.
   1990	 *
   1991	 * This is needed to implement itmes E1 - E4 of the updated
   1992	 * spec.  Here is the justification:
   1993	 *
   1994	 * Since the peer may bundle multiple ASCONF chunks toward us,
   1995	 * we now need the ability to cache multiple ACKs.  The section
   1996	 * describes in detail how they are cached and cleaned up.
   1997	 */
   1998	struct list_head asconf_ack_list;
   1999
   2000	/* These ASCONF chunks are waiting to be sent.
   2001	 *
   2002	 * These chunaks can't be pushed to outqueue until receiving
   2003	 * ASCONF_ACK for the previous ASCONF indicated by
   2004	 * addip_last_asconf, so as to guarantee that only one ASCONF
   2005	 * is in flight at any time.
   2006	 *
   2007	 * ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
   2008	 *
   2009	 * In defining the ASCONF Chunk transfer procedures, it is
   2010	 * essential that these transfers MUST NOT cause congestion
   2011	 * within the network.	To achieve this, we place these
   2012	 * restrictions on the transfer of ASCONF Chunks:
   2013	 *
   2014	 * R1) One and only one ASCONF Chunk MAY be in transit and
   2015	 * unacknowledged at any one time.  If a sender, after sending
   2016	 * an ASCONF chunk, decides it needs to transfer another
   2017	 * ASCONF Chunk, it MUST wait until the ASCONF-ACK Chunk
   2018	 * returns from the previous ASCONF Chunk before sending a
   2019	 * subsequent ASCONF. Note this restriction binds each side,
   2020	 * so at any time two ASCONF may be in-transit on any given
   2021	 * association (one sent from each endpoint).
   2022	 *
   2023	 *
   2024	 * [I really think this is EXACTLY the sort of intelligence
   2025	 *  which already resides in sctp_outq.	 Please move this
   2026	 *  queue and its supporting logic down there.	--piggy]
   2027	 */
   2028	struct list_head addip_chunk_list;
   2029
   2030	/* ADDIP Section 4.1 ASCONF Chunk Procedures
   2031	 *
   2032	 * A2) A serial number should be assigned to the Chunk. The
   2033	 * serial number SHOULD be a monotonically increasing
   2034	 * number. The serial number SHOULD be initialized at
   2035	 * the start of the association to the same value as the
   2036	 * Initial TSN and every time a new ASCONF chunk is created
   2037	 * it is incremented by one after assigning the serial number
   2038	 * to the newly created chunk.
   2039	 *
   2040	 * ADDIP
   2041	 * 3.1.1  Address/Stream Configuration Change Chunk (ASCONF)
   2042	 *
   2043	 * Serial Number : 32 bits (unsigned integer)
   2044	 *
   2045	 * This value represents a Serial Number for the ASCONF
   2046	 * Chunk. The valid range of Serial Number is from 0 to
   2047	 * 4294967295 (2^32 - 1).  Serial Numbers wrap back to 0
   2048	 * after reaching 4294967295.
   2049	 */
   2050	__u32 addip_serial;
   2051	int src_out_of_asoc_ok;
   2052	union sctp_addr *asconf_addr_del_pending;
   2053	struct sctp_transport *new_transport;
   2054
   2055	/* SCTP AUTH: list of the endpoint shared keys.  These
   2056	 * keys are provided out of band by the user applicaton
   2057	 * and can't change during the lifetime of the association
   2058	 */
   2059	struct list_head endpoint_shared_keys;
   2060
   2061	/* SCTP AUTH:
   2062	 * The current generated assocaition shared key (secret)
   2063	 */
   2064	struct sctp_auth_bytes *asoc_shared_key;
   2065	struct sctp_shared_key *shkey;
   2066
   2067	/* SCTP AUTH: hmac id of the first peer requested algorithm
   2068	 * that we support.
   2069	 */
   2070	__u16 default_hmac_id;
   2071
   2072	__u16 active_key_id;
   2073
   2074	__u8 need_ecne:1,	/* Need to send an ECNE Chunk? */
   2075	     temp:1,		/* Is it a temporary association? */
   2076	     pf_expose:2,       /* Expose pf state? */
   2077	     force_delay:1;
   2078
   2079	__u8 strreset_enable;
   2080	__u8 strreset_outstanding; /* request param count on the fly */
   2081
   2082	__u32 strreset_outseq; /* Update after receiving response */
   2083	__u32 strreset_inseq; /* Update after receiving request */
   2084	__u32 strreset_result[2]; /* save the results of last 2 responses */
   2085
   2086	struct sctp_chunk *strreset_chunk; /* save request chunk */
   2087
   2088	struct sctp_priv_assoc_stats stats;
   2089
   2090	int sent_cnt_removable;
   2091
   2092	__u16 subscribe;
   2093
   2094	__u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
   2095	__u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
   2096
   2097	/* Security identifiers from incoming (INIT). These are set by
   2098	 * security_sctp_assoc_request(). These will only be used by
   2099	 * SCTP TCP type sockets and peeled off connections as they
   2100	 * cause a new socket to be generated. security_sctp_sk_clone()
   2101	 * will then plug these into the new socket.
   2102	 */
   2103
   2104	u32 secid;
   2105	u32 peer_secid;
   2106
   2107	struct rcu_head rcu;
   2108};
   2109
   2110
   2111/* An eyecatcher for determining if we are really looking at an
   2112 * association data structure.
   2113 */
   2114enum {
   2115	SCTP_ASSOC_EYECATCHER = 0xa550c123,
   2116};
   2117
   2118/* Recover the outter association structure. */
   2119static inline struct sctp_association *sctp_assoc(struct sctp_ep_common *base)
   2120{
   2121	struct sctp_association *asoc;
   2122
   2123	asoc = container_of(base, struct sctp_association, base);
   2124	return asoc;
   2125}
   2126
   2127/* These are function signatures for manipulating associations.	 */
   2128
   2129
   2130struct sctp_association *
   2131sctp_association_new(const struct sctp_endpoint *ep, const struct sock *sk,
   2132		     enum sctp_scope scope, gfp_t gfp);
   2133void sctp_association_free(struct sctp_association *);
   2134void sctp_association_put(struct sctp_association *);
   2135void sctp_association_hold(struct sctp_association *);
   2136
   2137struct sctp_transport *sctp_assoc_choose_alter_transport(
   2138	struct sctp_association *, struct sctp_transport *);
   2139void sctp_assoc_update_retran_path(struct sctp_association *);
   2140struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *,
   2141					  const union sctp_addr *);
   2142int sctp_assoc_lookup_laddr(struct sctp_association *asoc,
   2143			    const union sctp_addr *laddr);
   2144struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *,
   2145				     const union sctp_addr *address,
   2146				     const gfp_t gfp,
   2147				     const int peer_state);
   2148void sctp_assoc_del_peer(struct sctp_association *asoc,
   2149			 const union sctp_addr *addr);
   2150void sctp_assoc_rm_peer(struct sctp_association *asoc,
   2151			 struct sctp_transport *peer);
   2152void sctp_assoc_control_transport(struct sctp_association *asoc,
   2153				  struct sctp_transport *transport,
   2154				  enum sctp_transport_cmd command,
   2155				  sctp_sn_error_t error);
   2156struct sctp_transport *sctp_assoc_lookup_tsn(struct sctp_association *, __u32);
   2157void sctp_assoc_migrate(struct sctp_association *, struct sock *);
   2158int sctp_assoc_update(struct sctp_association *old,
   2159		      struct sctp_association *new);
   2160
   2161__u32 sctp_association_get_next_tsn(struct sctp_association *);
   2162
   2163void sctp_assoc_update_frag_point(struct sctp_association *asoc);
   2164void sctp_assoc_set_pmtu(struct sctp_association *asoc, __u32 pmtu);
   2165void sctp_assoc_sync_pmtu(struct sctp_association *asoc);
   2166void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
   2167void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
   2168void sctp_assoc_set_primary(struct sctp_association *,
   2169			    struct sctp_transport *);
   2170void sctp_assoc_del_nonprimary_peers(struct sctp_association *,
   2171				    struct sctp_transport *);
   2172int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
   2173				     enum sctp_scope scope, gfp_t gfp);
   2174int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *,
   2175					 struct sctp_cookie*,
   2176					 gfp_t gfp);
   2177int sctp_assoc_set_id(struct sctp_association *, gfp_t);
   2178void sctp_assoc_clean_asconf_ack_cache(const struct sctp_association *asoc);
   2179struct sctp_chunk *sctp_assoc_lookup_asconf_ack(
   2180					const struct sctp_association *asoc,
   2181					__be32 serial);
   2182void sctp_asconf_queue_teardown(struct sctp_association *asoc);
   2183
   2184int sctp_cmp_addr_exact(const union sctp_addr *ss1,
   2185			const union sctp_addr *ss2);
   2186struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc);
   2187
   2188/* A convenience structure to parse out SCTP specific CMSGs. */
   2189struct sctp_cmsgs {
   2190	struct sctp_initmsg *init;
   2191	struct sctp_sndrcvinfo *srinfo;
   2192	struct sctp_sndinfo *sinfo;
   2193	struct sctp_prinfo *prinfo;
   2194	struct sctp_authinfo *authinfo;
   2195	struct msghdr *addrs_msg;
   2196};
   2197
   2198/* Structure for tracking memory objects */
   2199struct sctp_dbg_objcnt_entry {
   2200	char *label;
   2201	atomic_t *counter;
   2202};
   2203
   2204#endif /* __sctp_structs_h__ */