structs.h 66.5 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/* SCTP kernel implementation
L
Linus Torvalds 已提交
3 4 5 6 7
 * (C) Copyright IBM Corp. 2001, 2004
 * Copyright (c) 1999-2000 Cisco, Inc.
 * Copyright (c) 1999-2001 Motorola, Inc.
 * Copyright (c) 2001 Intel Corp.
 *
8
 * This file is part of the SCTP kernel implementation
L
Linus Torvalds 已提交
9 10 11
 *
 * Please send any bug reports or fixes you make to the
 * email addresses:
12
 *    lksctp developers <linux-sctp@vger.kernel.org>
L
Linus Torvalds 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
 *
 * Written or modified by:
 *    Randall Stewart	    <randall@sctp.chicago.il.us>
 *    Ken Morneau	    <kmorneau@cisco.com>
 *    Qiaobing Xie	    <qxie1@email.mot.com>
 *    La Monte H.P. Yarroll <piggy@acm.org>
 *    Karl Knutson	    <karl@athena.chicago.il.us>
 *    Jon Grimm		    <jgrimm@us.ibm.com>
 *    Xingang Guo	    <xingang.guo@intel.com>
 *    Hui Huang		    <hui.huang@nokia.com>
 *    Sridhar Samudrala	    <sri@us.ibm.com>
 *    Daisy Chang	    <daisyc@us.ibm.com>
 *    Dajiang Zhang	    <dajiang.zhang@nokia.com>
 *    Ardelle Fan	    <ardelle.fan@intel.com>
 *    Ryan Layer	    <rmlayer@us.ibm.com>
 *    Anup Pemmaiah	    <pemmaiah@cc.usu.edu>
 *    Kevin Gao             <kevin.gao@intel.com>
 */

#ifndef __sctp_structs_h__
#define __sctp_structs_h__

35
#include <linux/ktime.h>
K
Kent Overstreet 已提交
36
#include <linux/generic-radix-tree.h>
N
NeilBrown 已提交
37
#include <linux/rhashtable-types.h>
L
Linus Torvalds 已提交
38 39 40 41 42
#include <linux/socket.h>	/* linux/in.h needs this!!    */
#include <linux/in.h>		/* We get struct sockaddr_in. */
#include <linux/in6.h>		/* We get struct in6_addr     */
#include <linux/ipv6.h>
#include <asm/param.h>		/* We get MAXHOSTNAMELEN.     */
A
Arun Sharma 已提交
43
#include <linux/atomic.h>		/* This gets us atomic counters.  */
L
Linus Torvalds 已提交
44 45 46
#include <linux/skbuff.h>	/* We need sk_buff_head. */
#include <linux/workqueue.h>	/* We need tq_struct.	 */
#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 */
L
Linus Torvalds 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

/* A convenience structure for handling sockaddr structures.
 * We should wean ourselves off this.
 */
union sctp_addr {
	struct sockaddr_in v4;
	struct sockaddr_in6 v6;
	struct sockaddr sa;
};

/* Forward declarations for data structures. */
struct sctp_globals;
struct sctp_endpoint;
struct sctp_association;
struct sctp_transport;
struct sctp_packet;
struct sctp_chunk;
struct sctp_inq;
struct sctp_outq;
struct sctp_bind_addr;
struct sctp_ulpq;
struct sctp_ep_common;
H
Herbert Xu 已提交
71
struct crypto_shash;
72
struct sctp_stream;
L
Linus Torvalds 已提交
73 74 75 76 77


#include <net/sctp/tsnmap.h>
#include <net/sctp/ulpevent.h>
#include <net/sctp/ulpqueue.h>
78
#include <net/sctp/stream_interleave.h>
L
Linus Torvalds 已提交
79 80 81 82 83

/* Structures useful for managing bind/connect. */

struct sctp_bind_bucket {
	unsigned short	port;
84 85 86
	signed char	fastreuse;
	signed char	fastreuseport;
	kuid_t		fastuid;
87
	struct hlist_node	node;
L
Linus Torvalds 已提交
88
	struct hlist_head	owner;
89
	struct net	*net;
L
Linus Torvalds 已提交
90 91 92 93
};

struct sctp_bind_hashbucket {
	spinlock_t	lock;
94
	struct hlist_head	chain;
L
Linus Torvalds 已提交
95 96 97 98 99
};

/* Used for hashing all associations.  */
struct sctp_hashbucket {
	rwlock_t	lock;
100
	struct hlist_head	chain;
L
Linus Torvalds 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114
} __attribute__((__aligned__(8)));


/* The SCTP globals structure. */
extern struct sctp_globals {
	/* This is a list of groups of functions for each address
	 * family that we support.
	 */
	struct list_head address_families;

	/* This is the hash of all endpoints. */
	struct sctp_hashbucket *ep_hashtable;
	/* This is the sctp port control hash.	*/
	struct sctp_bind_hashbucket *port_hashtable;
115
	/* This is the hash of all transports. */
116
	struct rhltable transport_hashtable;
117

118 119 120 121 122 123 124 125
	/* Sizes of above hashtables. */
	int ep_hashsize;
	int port_hashsize;

	/* Default initialization values to be applied to new associations. */
	__u16 max_instreams;
	__u16 max_outstreams;

126 127 128
	/* Flag to indicate whether computing and verifying checksum
	 * is disabled. */
        bool checksum_disable;
L
Linus Torvalds 已提交
129 130 131 132 133 134 135 136 137
} sctp_globals;

#define sctp_max_instreams		(sctp_globals.max_instreams)
#define sctp_max_outstreams		(sctp_globals.max_outstreams)
#define sctp_address_families		(sctp_globals.address_families)
#define sctp_ep_hashsize		(sctp_globals.ep_hashsize)
#define sctp_ep_hashtable		(sctp_globals.ep_hashtable)
#define sctp_port_hashsize		(sctp_globals.port_hashsize)
#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)
L
Linus Torvalds 已提交
140 141

/* SCTP Socket type: UDP or TCP style. */
142
enum sctp_socket_type {
L
Linus Torvalds 已提交
143 144 145
	SCTP_SOCKET_UDP = 0,
	SCTP_SOCKET_UDP_HIGH_BANDWIDTH,
	SCTP_SOCKET_TCP
146
};
L
Linus Torvalds 已提交
147 148 149 150 151 152

/* Per socket SCTP information. */
struct sctp_sock {
	/* inet_sock has to be the first member of sctp_sock */
	struct inet_sock inet;
	/* What kind of a socket is this? */
153
	enum sctp_socket_type type;
L
Linus Torvalds 已提交
154 155 156 157 158

	/* PF_ family specific functions.  */
	struct sctp_pf *pf;

	/* Access to HMAC transform. */
H
Herbert Xu 已提交
159
	struct crypto_shash *hmac;
160
	char *sctp_hmac_alg;
L
Linus Torvalds 已提交
161 162 163 164 165 166 167 168 169 170 171

	/* What is our base endpointer? */
	struct sctp_endpoint *ep;

	struct sctp_bind_bucket *bind_hash;
	/* Various Socket Options.  */
	__u16 default_stream;
	__u32 default_ppid;
	__u16 default_flags;
	__u32 default_context;
	__u32 default_timetolive;
172
	__u32 default_rcv_context;
173
	int max_burst;
L
Linus Torvalds 已提交
174

175 176 177 178 179 180 181 182 183
	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
	 * the destination address every heartbeat interval. This value
	 * will be inherited by all new associations.
	 */
	__u32 hbinterval;

	/* This is the max_retrans value for new associations. */
	__u16 pathmaxrxt;

184 185 186
	__u32 flowlabel;
	__u8  dscp;

187 188
	__u16 pf_retrans;
	__u16 ps_retrans;
189

190 191 192 193 194
	/* The initial Path MTU to use for new associations. */
	__u32 pathmtu;

	/* The default SACK delay timeout for new associations. */
	__u32 sackdelay;
195
	__u32 sackfreq;
196

J
Joe Perches 已提交
197
	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
198 199
	__u32 param_flags;

200 201
	__u32 default_ss;

L
Linus Torvalds 已提交
202 203 204
	struct sctp_rtoinfo rtoinfo;
	struct sctp_paddrparams paddrparam;
	struct sctp_assocparams assocparams;
205

206 207 208 209
	/*
	 * These two structures must be grouped together for the usercopy
	 * whitelist region.
	 */
210
	__u16 subscribe;
211 212
	struct sctp_initmsg initmsg;

L
Linus Torvalds 已提交
213
	int user_frag;
214

L
Linus Torvalds 已提交
215
	__u32 autoclose;
216
	__u32 adaptation_ind;
217
	__u32 pd_point;
218
	__u16	nodelay:1,
219
		pf_expose:2,
220
		reuse:1,
221 222 223 224
		disable_fragments:1,
		v4mapped:1,
		frag_interleave:1,
		recvrcvinfo:1,
225
		recvnxtinfo:1,
226
		data_ready_signalled:1;
L
Linus Torvalds 已提交
227

228
	atomic_t pd_mode;
L
Linus Torvalds 已提交
229 230
	/* Receive to here while partial delivery is in effect. */
	struct sk_buff_head pd_lobby;
231 232 233 234

	/* These must be the last fields, as they will skipped on copies,
	 * like on accept and peeloff operations
	 */
235 236
	struct list_head auto_asconf_list;
	int do_auto_asconf;
L
Linus Torvalds 已提交
237 238 239 240 241 242 243 244 245 246 247 248
};

static inline struct sctp_sock *sctp_sk(const struct sock *sk)
{
       return (struct sctp_sock *)sk;
}

static inline struct sock *sctp_opt2sk(const struct sctp_sock *sp)
{
       return (struct sock *)sp;
}

E
Eric Dumazet 已提交
249
#if IS_ENABLED(CONFIG_IPV6)
L
Linus Torvalds 已提交
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
struct sctp6_sock {
       struct sctp_sock  sctp;
       struct ipv6_pinfo inet6;
};
#endif /* CONFIG_IPV6 */


/* This is our APPLICATION-SPECIFIC state cookie.
 * THIS IS NOT DICTATED BY THE SPECIFICATION.
 */
/* These are the parts of an association which we send in the cookie.
 * Most of these are straight out of:
 * RFC2960 12.2 Parameters necessary per association (i.e. the TCB)
 *
 */

struct sctp_cookie {

	/* My	       : Tag expected in every inbound packet and sent
	 * Verification: in the INIT or INIT ACK chunk.
	 * Tag	       :
	 */
	__u32 my_vtag;

	/* Peer's      : Tag expected in every outbound packet except
	 * Verification: in the INIT chunk.
	 * Tag	       :
	 */
	__u32 peer_vtag;

	/* The rest of these are not from the spec, but really need to
	 * be in the cookie.
	 */

	/* My Tie Tag  : Assist in discovering a restarting association. */
	__u32 my_ttag;

	/* Peer's Tie Tag: Assist in discovering a restarting association. */
	__u32 peer_ttag;

	/* When does this cookie expire? */
291
	ktime_t expiration;
L
Linus Torvalds 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314

	/* Number of inbound/outbound streams which are set
	 * and negotiated during the INIT process.
	 */
	__u16 sinit_num_ostreams;
	__u16 sinit_max_instreams;

	/* This is the first sequence number I used.  */
	__u32 initial_tsn;

	/* This holds the originating address of the INIT packet.  */
	union sctp_addr peer_addr;

	/* IG Section 2.35.3 
	 * Include the source port of the INIT-ACK
	 */
	__u16		my_port;

	__u8 prsctp_capable;

	/* Padding for future use */
	__u8 padding;  		

315
	__u32 adaptation_ind;
L
Linus Torvalds 已提交
316

317 318
	__u8 auth_random[sizeof(struct sctp_paramhdr) +
			 SCTP_AUTH_RANDOM_LENGTH];
319
	__u8 auth_hmacs[SCTP_AUTH_NUM_HMACS * sizeof(__u16) + 2];
320
	__u8 auth_chunks[sizeof(struct sctp_paramhdr) + SCTP_AUTH_MAX_CHUNKS];
L
Linus Torvalds 已提交
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

	/* This is a shim for my peer's INIT packet, followed by
	 * a copy of the raw address list of the association.
	 * The length of the raw address list is saved in the
	 * raw_addr_list_len field, which will be used at the time when
	 * the association TCB is re-constructed from the cookie.
	 */
	__u32 raw_addr_list_len;
	struct sctp_init_chunk peer_init[0];
};


/* The format of our cookie that we send to our peer. */
struct sctp_signed_cookie {
	__u8 signature[SCTP_SECRET_SIZE];
336
	__u32 __pad;		/* force sctp_cookie alignment to 64 bits */
L
Linus Torvalds 已提交
337
	struct sctp_cookie c;
E
Eric Dumazet 已提交
338
} __packed;
L
Linus Torvalds 已提交
339 340 341 342 343 344

/* This is another convenience type to allocate memory for address
 * params for the maximum size and pass such structures around
 * internally.
 */
union sctp_addr_param {
345
	struct sctp_paramhdr p;
L
Linus Torvalds 已提交
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
	struct sctp_ipv4addr_param v4;
	struct sctp_ipv6addr_param v6;
};

/* A convenience type to allow walking through the various
 * parameters and avoid casting all over the place.
 */
union sctp_params {
	void *v;
	struct sctp_paramhdr *p;
	struct sctp_cookie_preserve_param *life;
	struct sctp_hostname_param *dns;
	struct sctp_cookie_param *cookie;
	struct sctp_supported_addrs_param *sat;
	struct sctp_ipv4addr_param *v4;
	struct sctp_ipv6addr_param *v6;
	union sctp_addr_param *addr;
363
	struct sctp_adaptation_ind_param *aind;
364
	struct sctp_supported_ext_param *ext;
365 366 367
	struct sctp_random_param *random;
	struct sctp_chunks_param *chunks;
	struct sctp_hmac_algo_param *hmac_algo;
368
	struct sctp_addip_param *addip;
L
Linus Torvalds 已提交
369 370 371 372 373 374 375 376 377
};

/* RFC 2960.  Section 3.3.5 Heartbeat.
 *    Heartbeat Information: variable length
 *    The Sender-specific Heartbeat Info field should normally include
 *    information about the sender's current time when this HEARTBEAT
 *    chunk is sent and the destination transport address to which this
 *    HEARTBEAT is sent (see Section 8.3).
 */
378
struct sctp_sender_hb_info {
L
Linus Torvalds 已提交
379 380 381
	struct sctp_paramhdr param_hdr;
	union sctp_addr daddr;
	unsigned long sent_at;
382
	__u64 hb_nonce;
383
};
L
Linus Torvalds 已提交
384

385 386
int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt,
		     gfp_t gfp);
387
int sctp_stream_init_ext(struct sctp_stream *stream, __u16 sid);
388 389
void sctp_stream_free(struct sctp_stream *stream);
void sctp_stream_clear(struct sctp_stream *stream);
390
void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new);
L
Linus Torvalds 已提交
391 392

/* What is the current SSN number for this stream? */
393
#define sctp_ssn_peek(stream, type, sid) \
394
	(sctp_stream_##type((stream), (sid))->ssn)
L
Linus Torvalds 已提交
395 396

/* Return the next SSN number for this stream.	*/
397
#define sctp_ssn_next(stream, type, sid) \
398
	(sctp_stream_##type((stream), (sid))->ssn++)
L
Linus Torvalds 已提交
399 400

/* Skip over this ssn and all below. */
401
#define sctp_ssn_skip(stream, type, sid, ssn) \
402
	(sctp_stream_##type((stream), (sid))->ssn = ssn + 1)
403

404 405
/* What is the current MID number for this stream? */
#define sctp_mid_peek(stream, type, sid) \
406
	(sctp_stream_##type((stream), (sid))->mid)
407 408 409

/* Return the next MID number for this stream.  */
#define sctp_mid_next(stream, type, sid) \
410
	(sctp_stream_##type((stream), (sid))->mid++)
411 412 413

/* Skip over this mid and all below. */
#define sctp_mid_skip(stream, type, sid, mid) \
414
	(sctp_stream_##type((stream), (sid))->mid = mid + 1)
415

416 417
/* What is the current MID_uo number for this stream? */
#define sctp_mid_uo_peek(stream, type, sid) \
418
	(sctp_stream_##type((stream), (sid))->mid_uo)
419 420 421

/* Return the next MID_uo number for this stream.  */
#define sctp_mid_uo_next(stream, type, sid) \
422
	(sctp_stream_##type((stream), (sid))->mid_uo++)
423

L
Linus Torvalds 已提交
424 425 426 427 428 429
/*
 * Pointers to address related SCTP functions.
 * (i.e. things that depend on the address family.)
 */
struct sctp_af {
	int		(*sctp_xmit)	(struct sk_buff *skb,
430
					 struct sctp_transport *);
L
Linus Torvalds 已提交
431 432 433 434
	int		(*setsockopt)	(struct sock *sk,
					 int level,
					 int optname,
					 char __user *optval,
435
					 unsigned int optlen);
L
Linus Torvalds 已提交
436 437 438 439 440
	int		(*getsockopt)	(struct sock *sk,
					 int level,
					 int optname,
					 char __user *optval,
					 int __user *optlen);
441 442 443 444
	int		(*compat_setsockopt)	(struct sock *sk,
					 int level,
					 int optname,
					 char __user *optval,
445
					 unsigned int optlen);
446 447 448 449 450
	int		(*compat_getsockopt)	(struct sock *sk,
					 int level,
					 int optname,
					 char __user *optval,
					 int __user *optlen);
451
	void		(*get_dst)	(struct sctp_transport *t,
452 453 454
					 union sctp_addr *saddr,
					 struct flowi *fl,
					 struct sock *sk);
455
	void		(*get_saddr)	(struct sctp_sock *sk,
456 457
					 struct sctp_transport *t,
					 struct flowi *fl);
L
Linus Torvalds 已提交
458 459 460 461 462 463 464 465 466 467 468 469 470
	void		(*copy_addrlist) (struct list_head *,
					  struct net_device *);
	int		(*cmp_addr)	(const union sctp_addr *addr1,
					 const union sctp_addr *addr2);
	void		(*addr_copy)	(union sctp_addr *dst,
					 union sctp_addr *src);
	void		(*from_skb)	(union sctp_addr *,
					 struct sk_buff *skb,
					 int saddr);
	void		(*from_sk)	(union sctp_addr *,
					 struct sock *sk);
	void		(*from_addr_param) (union sctp_addr *,
					    union sctp_addr_param *,
471
					    __be16 port, int iif);
L
Linus Torvalds 已提交
472 473 474
	int		(*to_addr_param) (const union sctp_addr *,
					  union sctp_addr_param *); 
	int		(*addr_valid)	(union sctp_addr *,
475 476
					 struct sctp_sock *,
					 const struct sk_buff *);
X
Xin Long 已提交
477
	enum sctp_scope	(*scope)(union sctp_addr *);
A
Al Viro 已提交
478
	void		(*inaddr_any)	(union sctp_addr *, __be16);
L
Linus Torvalds 已提交
479 480 481 482 483 484 485
	int		(*is_any)	(const union sctp_addr *);
	int		(*available)	(union sctp_addr *,
					 struct sctp_sock *);
	int		(*skb_iif)	(const struct sk_buff *sk);
	int		(*is_ce)	(const struct sk_buff *sk);
	void		(*seq_dump_addr)(struct seq_file *seq,
					 union sctp_addr *addr);
V
Vlad Yasevich 已提交
486
	void		(*ecn_capable)(struct sock *sk);
L
Linus Torvalds 已提交
487 488
	__u16		net_header_len;
	int		sockaddr_len;
R
Richard Haines 已提交
489
	int		(*ip_options_len)(struct sock *sk);
L
Linus Torvalds 已提交
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506
	sa_family_t	sa_family;
	struct list_head list;
};

struct sctp_af *sctp_get_af_specific(sa_family_t);
int sctp_register_af(struct sctp_af *);

/* Protocol family functions. */
struct sctp_pf {
	void (*event_msgname)(struct sctp_ulpevent *, char *, int *);
	void (*skb_msgname)  (struct sk_buff *, char *, int *);
	int  (*af_supported) (sa_family_t, struct sctp_sock *);
	int  (*cmp_addr) (const union sctp_addr *,
			  const union sctp_addr *,
			  struct sctp_sock *);
	int  (*bind_verify) (struct sctp_sock *, union sctp_addr *);
	int  (*send_verify) (struct sctp_sock *, union sctp_addr *);
A
Al Viro 已提交
507
	int  (*supported_addrs)(const struct sctp_sock *, __be16 *);
L
Linus Torvalds 已提交
508
	struct sock *(*create_accept_sk) (struct sock *sk,
509 510
					  struct sctp_association *asoc,
					  bool kern);
511 512 513
	int (*addr_to_user)(struct sctp_sock *sk, union sctp_addr *addr);
	void (*to_sk_saddr)(union sctp_addr *, struct sock *sk);
	void (*to_sk_daddr)(union sctp_addr *, struct sock *sk);
R
Richard Haines 已提交
514
	void (*copy_ip_options)(struct sock *sk, struct sock *newsk);
L
Linus Torvalds 已提交
515 516 517 518 519 520 521 522 523 524 525
	struct sctp_af *af;
};


/* Structure to track chunk fragments that have been acked, but peer
 * fragments of the same message have not.
 */
struct sctp_datamsg {
	/* Chunks waiting to be submitted to lower layer. */
	struct list_head chunks;
	/* Reference counting. */
526
	refcount_t refcnt;
L
Linus Torvalds 已提交
527 528 529 530
	/* When is this message no longer interesting to the peer? */
	unsigned long expires_at;
	/* Did the messenge fail to send? */
	int send_error;
531
	u8 send_failed:1,
532 533
	   can_delay:1,	/* should this message be Nagle delayed */
	   abandoned:1;	/* should this message be abandoned */
L
Linus Torvalds 已提交
534 535 536 537
};

struct sctp_datamsg *sctp_datamsg_from_user(struct sctp_association *,
					    struct sctp_sndrcvinfo *,
538
					    struct iov_iter *);
539
void sctp_datamsg_free(struct sctp_datamsg *);
L
Linus Torvalds 已提交
540 541 542 543 544 545 546 547 548 549 550 551 552
void sctp_datamsg_put(struct sctp_datamsg *);
void sctp_chunk_fail(struct sctp_chunk *, int error);
int sctp_chunk_abandoned(struct sctp_chunk *);

/* RFC2960 1.4 Key Terms
 *
 * o Chunk: A unit of information within an SCTP packet, consisting of
 * a chunk header and chunk-specific content.
 *
 * As a matter of convenience, we remember the SCTP common header for
 * each chunk as well as a few other header pointers...
 */
struct sctp_chunk {
553 554
	struct list_head list;

555
	refcount_t refcnt;
L
Linus Torvalds 已提交
556

557 558 559
	/* How many times this chunk have been sent, for prsctp RTX policy */
	int sent_count;

560 561 562 563 564 565
	union {
		/* This is our link to the per-transport transmitted list.  */
		struct list_head transmitted_list;
		/* List in specific stream outq */
		struct list_head stream_list;
	};
L
Linus Torvalds 已提交
566 567 568 569 570 571 572 573 574 575 576

	/* This field is used by chunks that hold fragmented data.
	 * For the first fragment this is the list that holds the rest of
	 * fragments. For the remaining fragments, this is the link to the
	 * frag_list maintained in the first fragment.
	 */
	struct list_head frag_list;

	/* This points to the sk_buff containing the actual data.  */
	struct sk_buff *skb;

X
Xin Long 已提交
577 578 579 580 581 582
	union {
		/* In case of GSO packets, this will store the head one */
		struct sk_buff *head_skb;
		/* In case of auth enabled, this will point to the shkey */
		struct sctp_shared_key *shkey;
	};
M
Marcelo Ricardo Leitner 已提交
583

L
Linus Torvalds 已提交
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605
	/* These are the SCTP headers by reverse order in a packet.
	 * Note that some of these may happen more than once.  In that
	 * case, we point at the "current" one, whatever that means
	 * for that level of header.
	 */

	/* We point this at the FIRST TLV parameter to chunk_hdr.  */
	union sctp_params param_hdr;
	union {
		__u8 *v;
		struct sctp_datahdr *data_hdr;
		struct sctp_inithdr *init_hdr;
		struct sctp_sackhdr *sack_hdr;
		struct sctp_heartbeathdr *hb_hdr;
		struct sctp_sender_hb_info *hbs_hdr;
		struct sctp_shutdownhdr *shutdown_hdr;
		struct sctp_signed_cookie *cookie_hdr;
		struct sctp_ecnehdr *ecne_hdr;
		struct sctp_cwrhdr *ecn_cwr_hdr;
		struct sctp_errhdr *err_hdr;
		struct sctp_addiphdr *addip_hdr;
		struct sctp_fwdtsn_hdr *fwdtsn_hdr;
606
		struct sctp_authhdr *auth_hdr;
607
		struct sctp_idatahdr *idata_hdr;
608
		struct sctp_ifwdtsn_hdr *ifwdtsn_hdr;
L
Linus Torvalds 已提交
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641
	} subh;

	__u8 *chunk_end;

	struct sctp_chunkhdr *chunk_hdr;
	struct sctphdr *sctp_hdr;

	/* This needs to be recoverable for SCTP_SEND_FAILED events. */
	struct sctp_sndrcvinfo sinfo;

	/* Which association does this belong to?  */
	struct sctp_association *asoc;

	/* What endpoint received this chunk? */
	struct sctp_ep_common *rcvr;

	/* We fill this in if we are calculating RTT. */
	unsigned long sent_at;

	/* What is the origin IP address for this chunk?  */
	union sctp_addr source;
	/* Destination address for this chunk. */
	union sctp_addr dest;

	/* For outbound message, track all fragments for SEND_FAILED. */
	struct sctp_datamsg *msg;

	/* For an inbound chunk, this tells us where it came from.
	 * For an outbound chunk, it tells us where we'd like it to
	 * go.	It is NULL if we have no preference.
	 */
	struct sctp_transport *transport;

642 643 644 645 646 647 648
	/* SCTP-AUTH:  For the special case inbound processing of COOKIE-ECHO
	 * we need save a pointer to the AUTH chunk, since the SCTP-AUTH
	 * spec violates the principle premis that all chunks are processed
	 * in order.
	 */
	struct sk_buff *auth_chunk;

649 650 651 652 653 654
#define SCTP_CAN_FRTX 0x0
#define SCTP_NEED_FRTX 0x1
#define SCTP_DONT_FRTX 0x2
	__u16	rtt_in_progress:1,	/* This chunk used for RTT calc? */
		has_tsn:1,		/* Does this chunk have a TSN yet? */
		has_ssn:1,		/* Does this chunk have a SSN yet? */
655
#define has_mid has_ssn
656 657 658 659 660 661 662 663 664 665
		singleton:1,		/* Only chunk in the packet? */
		end_of_packet:1,	/* Last chunk in the packet? */
		ecn_ce_done:1,		/* Have we processed the ECN CE bit? */
		pdiscard:1,		/* Discard the whole packet now? */
		tsn_gap_acked:1,	/* Is this chunk acked by a GAP ACK? */
		data_accepted:1,	/* At least 1 chunk accepted */
		auth:1,			/* IN: was auth'ed | OUT: needs auth */
		has_asconf:1,		/* IN: have seen an asconf before */
		tsn_missing_report:2,	/* Data chunk missing counter. */
		fast_retransmit:2;	/* Is this chunk fast retransmitted? */
L
Linus Torvalds 已提交
666 667
};

668
#define sctp_chunk_retransmitted(chunk)	(chunk->sent_count > 1)
L
Linus Torvalds 已提交
669 670
void sctp_chunk_hold(struct sctp_chunk *);
void sctp_chunk_put(struct sctp_chunk *);
671 672
int sctp_user_addto_chunk(struct sctp_chunk *chunk, int len,
			  struct iov_iter *from);
L
Linus Torvalds 已提交
673 674 675 676
void sctp_chunk_free(struct sctp_chunk *);
void  *sctp_addto_chunk(struct sctp_chunk *, int len, const void *data);
struct sctp_chunk *sctp_chunkify(struct sk_buff *,
				 const struct sctp_association *,
677
				 struct sock *, gfp_t gfp);
L
Linus Torvalds 已提交
678 679 680 681
void sctp_init_addrs(struct sctp_chunk *, union sctp_addr *,
		     union sctp_addr *);
const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);

682 683 684 685 686
static inline __u16 sctp_chunk_stream_no(struct sctp_chunk *ch)
{
	return ntohs(ch->subh.data_hdr->stream);
}

687 688 689 690 691 692
enum {
	SCTP_ADDR_NEW,		/* new address added to assoc/ep */
	SCTP_ADDR_SRC,		/* address can be used as source */
	SCTP_ADDR_DEL,		/* address about to be deleted */
};

L
Linus Torvalds 已提交
693 694 695
/* This is a structure for holding either an IPv6 or an IPv4 address.  */
struct sctp_sockaddr_entry {
	struct list_head list;
696
	struct rcu_head	rcu;
L
Linus Torvalds 已提交
697
	union sctp_addr a;
698
	__u8 state;
699
	__u8 valid;
L
Linus Torvalds 已提交
700 701
};

702 703
#define SCTP_ADDRESS_TICK_DELAY	500

L
Linus Torvalds 已提交
704 705 706 707 708 709 710 711 712 713
/* This structure holds lists of chunks as we are assembling for
 * transmission.
 */
struct sctp_packet {
	/* These are the SCTP header values (host order) for the packet. */
	__u16 source_port;
	__u16 destination_port;
	__u32 vtag;

	/* This contains the payload chunks.  */
714
	struct list_head chunk_list;
L
Linus Torvalds 已提交
715 716 717 718 719

	/* This is the overhead of the sctp and ip headers. */
	size_t overhead;
	/* This is the total size of all chunks INCLUDING padding.  */
	size_t size;
M
Marcelo Ricardo Leitner 已提交
720 721
	/* This is the maximum size this packet may have */
	size_t max_size;
L
Linus Torvalds 已提交
722 723 724 725 726 727 728

	/* The packet is destined for this transport address.
	 * The function we finally use to pass down to the next lower
	 * layer lives in the transport structure.
	 */
	struct sctp_transport *transport;

729 730 731
	/* pointer to the auth chunk for this packet */
	struct sctp_chunk *auth;

732 733 734 735
	u8  has_cookie_echo:1,	/* This packet contains a COOKIE-ECHO chunk. */
	    has_sack:1,		/* This packet contains a SACK chunk. */
	    has_auth:1,		/* This packet contains an AUTH chunk */
	    has_data:1,		/* This packet contains at least 1 DATA chunk */
736
	    ipfragok:1;		/* So let ip fragment this packet */
L
Linus Torvalds 已提交
737 738
};

739 740 741
void sctp_packet_init(struct sctp_packet *, struct sctp_transport *,
		      __u16 sport, __u16 dport);
void sctp_packet_config(struct sctp_packet *, __u32 vtag, int);
X
Xin Long 已提交
742 743 744 745 746
enum sctp_xmit sctp_packet_transmit_chunk(struct sctp_packet *packet,
					  struct sctp_chunk *chunk,
					  int one_packet, gfp_t gfp);
enum sctp_xmit sctp_packet_append_chunk(struct sctp_packet *packet,
					struct sctp_chunk *chunk);
747
int sctp_packet_transmit(struct sctp_packet *, gfp_t);
L
Linus Torvalds 已提交
748 749 750 751
void sctp_packet_free(struct sctp_packet *);

static inline int sctp_packet_empty(struct sctp_packet *packet)
{
E
Eric Dumazet 已提交
752
	return packet->size == packet->overhead;
L
Linus Torvalds 已提交
753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777
}

/* This represents a remote transport address.
 * For local transport addresses, we just use union sctp_addr.
 *
 * RFC2960 Section 1.4 Key Terms
 *
 *   o	Transport address:  A Transport Address is traditionally defined
 *	by Network Layer address, Transport Layer protocol and Transport
 *	Layer port number.  In the case of SCTP running over IP, a
 *	transport address is defined by the combination of an IP address
 *	and an SCTP port number (where SCTP is the Transport protocol).
 *
 * RFC2960 Section 7.1 SCTP Differences from TCP Congestion control
 *
 *   o	The sender keeps a separate congestion control parameter set for
 *	each of the destination addresses it can send to (not each
 *	source-destination pair but for each destination).  The parameters
 *	should decay if the address is not used for a long enough time
 *	period.
 *
 */
struct sctp_transport {
	/* A list of transports. */
	struct list_head transports;
778
	struct rhlist_head node;
L
Linus Torvalds 已提交
779 780

	/* Reference counting. */
781
	refcount_t refcnt;
782 783 784 785 786 787 788 789 790
		/* RTO-Pending : A flag used to track if one of the DATA
		 *		chunks sent to this address is currently being
		 *		used to compute a RTT. If this flag is 0,
		 *		the next DATA chunk sent to this destination
		 *		should be used to compute a RTT and this flag
		 *		should be set. Every time the RTT
		 *		calculation completes (i.e. the DATA chunk
		 *		is SACK'd) clear this flag.
		 */
791
	__u32	rto_pending:1,
792 793 794 795 796 797 798 799

		/*
		 * hb_sent : a flag that signals that we have a pending
		 * heartbeat.
		 */
		hb_sent:1,

		/* Is the Path MTU update pending on this tranport */
800
		pmtu_pending:1,
801

802 803
		dst_pending_confirm:1,	/* need to confirm neighbour */

804 805
		/* Has this transport moved the ctsn since we last sacked */
		sack_generation:1;
806
	u32 dst_cookie;
807

808
	struct flowi fl;
L
Linus Torvalds 已提交
809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827

	/* This is the peer's IP address and port. */
	union sctp_addr ipaddr;

	/* These are the functions we call to handle LLP stuff.	 */
	struct sctp_af *af_specific;

	/* Which association do we belong to?  */
	struct sctp_association *asoc;

	/* RFC2960
	 *
	 * 12.3 Per Transport Address Data
	 *
	 * For each destination transport address in the peer's
	 * address list derived from the INIT or INIT ACK chunk, a
	 * number of data elements needs to be maintained including:
	 */
	/* RTO	       : The current retransmission timeout value.  */
828
	unsigned long rto;
829 830

	__u32 rtt;		/* This is the most recent RTT.	 */
L
Linus Torvalds 已提交
831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854

	/* RTTVAR      : The current RTT variation.  */
	__u32 rttvar;

	/* SRTT	       : The current smoothed round trip time.	*/
	__u32 srtt;

	/*
	 * These are the congestion stats.
	 */
	/* cwnd	       : The current congestion window.	 */
	__u32 cwnd;		  /* This is the actual cwnd.  */

	/* ssthresh    : The current slow start threshold value.  */
	__u32 ssthresh;

	/* partial     : The tracking method for increase of cwnd when in
	 * bytes acked : congestion avoidance mode (see Section 6.2.2)
	 */
	__u32 partial_bytes_acked;

	/* Data that has been sent, but not acknowledged. */
	__u32 flight_size;

855 856
	__u32 burst_limited;	/* Holds old cwnd when max.burst is applied */

L
Linus Torvalds 已提交
857 858 859 860 861 862 863 864
	/* Destination */
	struct dst_entry *dst;
	/* Source address. */
	union sctp_addr saddr;

	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
	 * the destination address every heartbeat interval.
	 */
865
	unsigned long hbinterval;
866 867

	/* SACK delay timeout */
868
	unsigned long sackdelay;
869
	__u32 sackfreq;
L
Linus Torvalds 已提交
870

871 872
	atomic_t mtu_info;

873 874
	/* When was the last time that we heard from this transport? We use
	 * this to pick new active and retran paths.
L
Linus Torvalds 已提交
875
	 */
876
	ktime_t last_time_heard;
L
Linus Torvalds 已提交
877

878 879 880 881 882
	/* When was the last time that we sent a chunk using this
	 * transport? We use this to check for idle transports
	 */
	unsigned long last_time_sent;

L
Linus Torvalds 已提交
883 884 885 886 887
	/* Last time(in jiffies) when cwnd is reduced due to the congestion
	 * indication based on ECNE chunk.
	 */
	unsigned long last_time_ecne_reduced;

888 889
	/* This is the max_retrans value for the transport and will
	 * be initialized from the assocs value.  This can be changed
890
	 * using the SCTP_SET_PEER_ADDR_PARAMS socket option.
891 892 893
	 */
	__u16 pathmaxrxt;

894 895 896
	__u32 flowlabel;
	__u8  dscp;

897 898 899 900
	/* This is the partially failed retrans value for the transport
	 * and will be initialized from the assocs value.  This can be changed
	 * using the SCTP_PEER_ADDR_THLDS socket option
	 */
901 902 903
	__u16 pf_retrans;
	/* Used for primary path switchover. */
	__u16 ps_retrans;
904 905 906
	/* PMTU	      : The current known path MTU.  */
	__u32 pathmtu;

J
Joe Perches 已提交
907
	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
908 909
	__u32 param_flags;

F
Frank Filz 已提交
910 911 912 913
	/* The number of times INIT has been sent on this transport. */
	int init_sent_count;

	/* state       : The current state of this destination,
914
	 *             : i.e. SCTP_ACTIVE, SCTP_INACTIVE, SCTP_UNKNOWN.
L
Linus Torvalds 已提交
915
	 */
F
Frank Filz 已提交
916
	int state;
L
Linus Torvalds 已提交
917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933

	/* These are the error stats for this destination.  */

	/* Error count : The current error count for this destination.	*/
	unsigned short error_count;

	/* Per	       : A timer used by each destination.
	 * Destination :
	 * Timer       :
	 *
	 * [Everywhere else in the text this is called T3-rtx. -ed]
	 */
	struct timer_list T3_rtx_timer;

	/* Heartbeat timer is per destination. */
	struct timer_list hb_timer;

934 935 936
	/* Timer to handle ICMP proto unreachable envets */
	struct timer_list proto_unreach_timer;

X
Xin Long 已提交
937 938 939
	/* Timer to handler reconf chunk rtx */
	struct timer_list reconf_timer;

L
Linus Torvalds 已提交
940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980
	/* Since we're using per-destination retransmission timers
	 * (see above), we're also using per-destination "transmitted"
	 * queues.  This probably ought to be a private struct
	 * accessible only within the outqueue, but it's not, yet.
	 */
	struct list_head transmitted;

	/* We build bundle-able packets for this transport here.  */
	struct sctp_packet packet;

	/* This is the list of transports that have chunks to send.  */
	struct list_head send_ready;

	/* State information saved for SFR_CACC algorithm. The key
	 * idea in SFR_CACC is to maintain state at the sender on a
	 * per-destination basis when a changeover happens.
	 *	char changeover_active;
	 *	char cycling_changeover;
	 *	__u32 next_tsn_at_change;
	 *	char cacc_saw_newack;
	 */
	struct {
		/* An unsigned integer, which stores the next TSN to be
		 * used by the sender, at the moment of changeover.
		 */
		__u32 next_tsn_at_change;

		/* A flag which indicates the occurrence of a changeover */
		char changeover_active;

		/* A flag which indicates whether the change of primary is
		 * the first switch to this destination address during an
		 * active switch.
		 */
		char cycling_changeover;

		/* A temporary flag, which is used during the processing of
		 * a SACK to estimate the causative TSN(s)'s group.
		 */
		char cacc_saw_newack;
	} cacc;
981 982 983

	/* 64-bit random number sent with heartbeat. */
	__u64 hb_nonce;
984 985

	struct rcu_head rcu;
L
Linus Torvalds 已提交
986 987
};

988
struct sctp_transport *sctp_transport_new(struct net *, const union sctp_addr *,
A
Al Viro 已提交
989
					  gfp_t);
L
Linus Torvalds 已提交
990 991 992 993
void sctp_transport_set_owner(struct sctp_transport *,
			      struct sctp_association *);
void sctp_transport_route(struct sctp_transport *, union sctp_addr *,
			  struct sctp_sock *);
994
void sctp_transport_pmtu(struct sctp_transport *, struct sock *sk);
L
Linus Torvalds 已提交
995
void sctp_transport_free(struct sctp_transport *);
996 997
void sctp_transport_reset_t3_rtx(struct sctp_transport *);
void sctp_transport_reset_hb_timer(struct sctp_transport *);
X
Xin Long 已提交
998
void sctp_transport_reset_reconf_timer(struct sctp_transport *transport);
999
int sctp_transport_hold(struct sctp_transport *);
L
Linus Torvalds 已提交
1000 1001 1002
void sctp_transport_put(struct sctp_transport *);
void sctp_transport_update_rto(struct sctp_transport *, __u32);
void sctp_transport_raise_cwnd(struct sctp_transport *, __u32, __u32);
1003 1004
void sctp_transport_lower_cwnd(struct sctp_transport *t,
			       enum sctp_lower_cwnd reason);
1005 1006
void sctp_transport_burst_limited(struct sctp_transport *);
void sctp_transport_burst_reset(struct sctp_transport *);
L
Linus Torvalds 已提交
1007
unsigned long sctp_transport_timeout(struct sctp_transport *);
1008
void sctp_transport_reset(struct sctp_transport *t);
1009
bool sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu);
1010
void sctp_transport_immediate_rtx(struct sctp_transport *);
1011 1012
void sctp_transport_dst_release(struct sctp_transport *t);
void sctp_transport_dst_confirm(struct sctp_transport *t);
L
Linus Torvalds 已提交
1013 1014 1015 1016 1017 1018 1019 1020 1021


/* This is the structure we use to queue packets as they come into
 * SCTP.  We write packets to it and read chunks from it.
 */
struct sctp_inq {
	/* This is actually a queue of sctp_chunk each
	 * containing a partially decoded packet.
	 */
1022
	struct list_head in_chunk_list;
L
Linus Torvalds 已提交
1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037
	/* This is the packet which is currently off the in queue and is
	 * being worked on through the inbound chunk processing.
	 */
	struct sctp_chunk *in_progress;

	/* This is the delayed task to finish delivering inbound
	 * messages.
	 */
	struct work_struct immediate;
};

void sctp_inq_init(struct sctp_inq *);
void sctp_inq_free(struct sctp_inq *);
void sctp_inq_push(struct sctp_inq *, struct sctp_chunk *packet);
struct sctp_chunk *sctp_inq_pop(struct sctp_inq *);
1038
struct sctp_chunkhdr *sctp_inq_peek(struct sctp_inq *);
D
David Howells 已提交
1039
void sctp_inq_set_th_handler(struct sctp_inq *, work_func_t);
L
Linus Torvalds 已提交
1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063

/* This is the structure we use to hold outbound chunks.  You push
 * chunks in and they automatically pop out the other end as bundled
 * packets (it calls (*output_handler)()).
 *
 * This structure covers sections 6.3, 6.4, 6.7, 6.8, 6.10, 7., 8.1,
 * and 8.2 of the v13 draft.
 *
 * It handles retransmissions.	The connection to the timeout portion
 * of the state machine is through sctp_..._timeout() and timeout_handler.
 *
 * If you feed it SACKs, it will eat them.
 *
 * If you give it big chunks, it will fragment them.
 *
 * It assigns TSN's to data chunks.  This happens at the last possible
 * instant before transmission.
 *
 * When free()'d, it empties itself out via output_handler().
 */
struct sctp_outq {
	struct sctp_association *asoc;

	/* Data pending that has never been transmitted.  */
1064
	struct list_head out_chunk_list;
L
Linus Torvalds 已提交
1065

1066 1067 1068
	/* Stream scheduler being used */
	struct sctp_sched_ops *sched;

1069
	unsigned int out_qlen;	/* Total length of queued data chunks. */
L
Linus Torvalds 已提交
1070 1071

	/* Error of send failed, may used in SCTP_SEND_FAILED event. */
1072
	unsigned int error;
L
Linus Torvalds 已提交
1073 1074

	/* These are control chunks we want to send.  */
1075
	struct list_head control_chunk_list;
L
Linus Torvalds 已提交
1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094

	/* These are chunks that have been sacked but are above the
	 * CTSN, or cumulative tsn ack point.
	 */
	struct list_head sacked;

	/* Put chunks on this list to schedule them for
	 * retransmission.
	 */
	struct list_head retransmit;

	/* Put chunks on this list to save them for FWD TSN processing as
	 * they were abandoned.
	 */
	struct list_head abandoned;

	/* How many unackd bytes do we have in-flight?	*/
	__u32 outstanding_bytes;

1095 1096 1097
	/* Are we doing fast-rtx on this queue */
	char fast_rtx;

L
Linus Torvalds 已提交
1098 1099 1100 1101 1102 1103 1104
	/* Corked? */
	char cork;
};

void sctp_outq_init(struct sctp_association *, struct sctp_outq *);
void sctp_outq_teardown(struct sctp_outq *);
void sctp_outq_free(struct sctp_outq*);
1105
void sctp_outq_tail(struct sctp_outq *, struct sctp_chunk *chunk, gfp_t);
1106
int sctp_outq_sack(struct sctp_outq *, struct sctp_chunk *);
L
Linus Torvalds 已提交
1107 1108 1109
int sctp_outq_is_empty(const struct sctp_outq *);
void sctp_outq_restart(struct sctp_outq *);

1110 1111
void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
		     enum sctp_retransmit_reason reason);
L
Linus Torvalds 已提交
1112
void sctp_retransmit_mark(struct sctp_outq *, struct sctp_transport *, __u8);
1113
void sctp_outq_uncork(struct sctp_outq *, gfp_t gfp);
X
Xin Long 已提交
1114 1115
void sctp_prsctp_prune(struct sctp_association *asoc,
		       struct sctp_sndrcvinfo *sinfo, int msg_len);
1116
void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 sack_ctsn);
L
Linus Torvalds 已提交
1117 1118 1119 1120 1121 1122
/* Uncork and flush an outqueue.  */
static inline void sctp_outq_cork(struct sctp_outq *q)
{
	q->cork = 1;
}

1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133
/* SCTP skb control block.
 * sctp_input_cb is currently used on rx and sock rx queue
 */
struct sctp_input_cb {
	union {
		struct inet_skb_parm	h4;
#if IS_ENABLED(CONFIG_IPV6)
		struct inet6_skb_parm	h6;
#endif
	} header;
	struct sctp_chunk *chunk;
1134
	struct sctp_af *af;
1135 1136 1137
};
#define SCTP_INPUT_CB(__skb)	((struct sctp_input_cb *)&((__skb)->cb[0]))

1138 1139 1140 1141 1142
struct sctp_output_cb {
	struct sk_buff *last;
};
#define SCTP_OUTPUT_CB(__skb)	((struct sctp_output_cb *)&((__skb)->cb[0]))

1143 1144 1145 1146 1147 1148 1149
static inline const struct sk_buff *sctp_gso_headskb(const struct sk_buff *skb)
{
	const struct sctp_chunk *chunk = SCTP_INPUT_CB(skb)->chunk;

	return chunk->head_skb ? : skb;
}

L
Linus Torvalds 已提交
1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170
/* These bind address data fields common between endpoints and associations */
struct sctp_bind_addr {

	/* RFC 2960 12.1 Parameters necessary for the SCTP instance
	 *
	 * SCTP Port:	The local SCTP port number the endpoint is
	 *		bound to.
	 */
	__u16 port;

	/* RFC 2960 12.1 Parameters necessary for the SCTP instance
	 *
	 * Address List: The list of IP addresses that this instance
	 *	has bound.  This information is passed to one's
	 *	peer(s) in INIT and INIT ACK chunks.
	 */
	struct list_head address_list;
};

void sctp_bind_addr_init(struct sctp_bind_addr *, __u16 port);
void sctp_bind_addr_free(struct sctp_bind_addr *);
1171
int sctp_bind_addr_copy(struct net *net, struct sctp_bind_addr *dest,
L
Linus Torvalds 已提交
1172
			const struct sctp_bind_addr *src,
X
Xin Long 已提交
1173
			enum sctp_scope scope, gfp_t gfp,
A
Alexey Dobriyan 已提交
1174
			int flags);
1175 1176 1177
int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
			const struct sctp_bind_addr *src,
			gfp_t gfp);
L
Linus Torvalds 已提交
1178
int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
1179
		       int new_size, __u8 addr_state, gfp_t gfp);
1180
int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
L
Linus Torvalds 已提交
1181 1182
int sctp_bind_addr_match(struct sctp_bind_addr *, const union sctp_addr *,
			 struct sctp_sock *);
1183 1184
int sctp_bind_addr_conflict(struct sctp_bind_addr *, const union sctp_addr *,
			 struct sctp_sock *, struct sctp_sock *);
1185 1186
int sctp_bind_addr_state(const struct sctp_bind_addr *bp,
			 const union sctp_addr *addr);
1187 1188
int sctp_bind_addrs_check(struct sctp_sock *sp,
			  struct sctp_sock *sp2, int cnt2);
L
Linus Torvalds 已提交
1189 1190 1191 1192 1193
union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr	*bp,
					const union sctp_addr	*addrs,
					int			addrcnt,
					struct sctp_sock	*opt);
union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
A
Alexey Dobriyan 已提交
1194
					 int *addrs_len,
A
Al Viro 已提交
1195
					 gfp_t gfp);
L
Linus Torvalds 已提交
1196
int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw, int len,
A
Al Viro 已提交
1197
			   __u16 port, gfp_t gfp);
L
Linus Torvalds 已提交
1198

X
Xin Long 已提交
1199 1200 1201
enum sctp_scope sctp_scope(const union sctp_addr *addr);
int sctp_in_scope(struct net *net, const union sctp_addr *addr,
		  const enum sctp_scope scope);
1202
int sctp_is_any(struct sock *sk, const union sctp_addr *addr);
1203
int sctp_is_ep_boundall(struct sock *sk);
L
Linus Torvalds 已提交
1204 1205 1206


/* What type of endpoint?  */
1207
enum sctp_endpoint_type {
L
Linus Torvalds 已提交
1208 1209
	SCTP_EP_TYPE_SOCKET,
	SCTP_EP_TYPE_ASSOCIATION,
1210
};
L
Linus Torvalds 已提交
1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229

/*
 * A common base class to bridge the implmentation view of a
 * socket (usually listening) endpoint versus an association's
 * local endpoint.
 * This common structure is useful for several purposes:
 *   1) Common interface for lookup routines.
 *	a) Subfunctions work for either endpoint or association
 *	b) Single interface to lookup allows hiding the lookup lock rather
 *	   than acquiring it externally.
 *   2) Common interface for the inbound chunk handling/state machine.
 *   3) Common object handling routines for reference counting, etc.
 *   4) Disentangle association lookup from endpoint lookup, where we
 *	do not have to find our endpoint to find our association.
 *
 */

struct sctp_ep_common {
	/* Fields to help us manage our entries in the hash tables. */
1230
	struct hlist_node node;
L
Linus Torvalds 已提交
1231 1232 1233
	int hashent;

	/* Runtime type information.  What kind of endpoint is this? */
1234
	enum sctp_endpoint_type type;
L
Linus Torvalds 已提交
1235 1236 1237 1238 1239

	/* Some fields to help us manage this object.
	 *   refcnt   - Reference count access to this object.
	 *   dead     - Do not attempt to use this object.
	 */
1240
	refcount_t    refcnt;
1241
	bool	    dead;
L
Linus Torvalds 已提交
1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298

	/* What socket does this endpoint belong to?  */
	struct sock *sk;

	/* This is where we receive inbound chunks.  */
	struct sctp_inq	  inqueue;

	/* This substructure includes the defining parameters of the
	 * endpoint:
	 * bind_addr.port is our shared port number.
	 * bind_addr.address_list is our set of local IP addresses.
	 */
	struct sctp_bind_addr bind_addr;
};


/* RFC Section 1.4 Key Terms
 *
 * o SCTP endpoint: The logical sender/receiver of SCTP packets. On a
 *   multi-homed host, an SCTP endpoint is represented to its peers as a
 *   combination of a set of eligible destination transport addresses to
 *   which SCTP packets can be sent and a set of eligible source
 *   transport addresses from which SCTP packets can be received.
 *   All transport addresses used by an SCTP endpoint must use the
 *   same port number, but can use multiple IP addresses. A transport
 *   address used by an SCTP endpoint must not be used by another
 *   SCTP endpoint. In other words, a transport address is unique
 *   to an SCTP endpoint.
 *
 * From an implementation perspective, each socket has one of these.
 * A TCP-style socket will have exactly one association on one of
 * these.  An UDP-style socket will have multiple associations hanging
 * off one of these.
 */

struct sctp_endpoint {
	/* Common substructure for endpoint and association. */
	struct sctp_ep_common base;

	/* Associations: A list of current associations and mappings
	 *	      to the data consumers for each association. This
	 *	      may be in the form of a hash table or other
	 *	      implementation dependent structure. The data
	 *	      consumers may be process identification
	 *	      information such as file descriptors, named pipe
	 *	      pointer, or table pointers dependent on how SCTP
	 *	      is implemented.
	 */
	/* This is really a list of struct sctp_association entries. */
	struct list_head asocs;

	/* Secret Key: A secret key used by this endpoint to compute
	 *	      the MAC.	This SHOULD be a cryptographic quality
	 *	      random number with a sufficient length.
	 *	      Discussion in [RFC1750] can be helpful in
	 *	      selection of the key.
	 */
1299
	__u8 secret_key[SCTP_SECRET_SIZE];
L
Linus Torvalds 已提交
1300

1301 1302 1303 1304 1305 1306
 	/* digest:  This is a digest of the sctp cookie.  This field is
 	 * 	    only used on the receive path when we try to validate
 	 * 	    that the cookie has not been tampered with.  We put
 	 * 	    this here so we pre-allocate this once and can re-use
 	 * 	    on every receive.
 	 */
V
Vlad Yasevich 已提交
1307
 	__u8 *digest;
1308
 
1309 1310
	/* sendbuf acct. policy.	*/
	__u32 sndbuf_policy;
1311 1312 1313

	/* rcvbuf acct. policy.	*/
	__u32 rcvbuf_policy;
1314 1315 1316 1317

	/* SCTP AUTH: array of the HMACs that will be allocated
	 * we need this per association so that we don't serialize
	 */
H
Herbert Xu 已提交
1318
	struct crypto_shash **auth_hmacs;
1319 1320 1321 1322 1323 1324 1325 1326 1327 1328

	/* SCTP-AUTH: hmacs for the endpoint encoded into parameter */
	 struct sctp_hmac_algo_param *auth_hmacs_list;

	/* SCTP-AUTH: chunks to authenticate encoded into parameter */
	struct sctp_chunks_param *auth_chunk_list;

	/* SCTP-AUTH: endpoint shared keys */
	struct list_head endpoint_shared_keys;
	__u16 active_key_id;
1329 1330
	__u8  ecn_enable:1,
	      auth_enable:1,
1331
	      intl_enable:1,
1332
	      prsctp_enable:1,
1333
	      asconf_enable:1,
1334
	      reconf_enable:1;
1335 1336

	__u8  strreset_enable;
R
Richard Haines 已提交
1337 1338 1339 1340 1341 1342 1343 1344 1345 1346

	/* Security identifiers from incoming (INIT). These are set by
	 * security_sctp_assoc_request(). These will only be used by
	 * SCTP TCP type sockets and peeled off connections as they
	 * cause a new socket to be generated. security_sctp_sk_clone()
	 * will then plug these into the new socket.
	 */

	u32 secid;
	u32 peer_secid;
L
Linus Torvalds 已提交
1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358
};

/* Recover the outter endpoint structure. */
static inline struct sctp_endpoint *sctp_ep(struct sctp_ep_common *base)
{
	struct sctp_endpoint *ep;

	ep = container_of(base, struct sctp_endpoint, base);
	return ep;
}

/* These are function signatures for manipulating endpoints.  */
A
Al Viro 已提交
1359
struct sctp_endpoint *sctp_endpoint_new(struct sock *, gfp_t);
L
Linus Torvalds 已提交
1360 1361 1362 1363 1364 1365 1366 1367
void sctp_endpoint_free(struct sctp_endpoint *);
void sctp_endpoint_put(struct sctp_endpoint *);
void sctp_endpoint_hold(struct sctp_endpoint *);
void sctp_endpoint_add_asoc(struct sctp_endpoint *, struct sctp_association *);
struct sctp_association *sctp_endpoint_lookup_assoc(
	const struct sctp_endpoint *ep,
	const union sctp_addr *paddr,
	struct sctp_transport **);
1368 1369
bool sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
				 const union sctp_addr *paddr);
L
Linus Torvalds 已提交
1370
struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *,
1371
					struct net *, const union sctp_addr *);
1372 1373
bool sctp_has_association(struct net *net, const union sctp_addr *laddr,
			  const union sctp_addr *paddr);
L
Linus Torvalds 已提交
1374

1375 1376
int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
		     const struct sctp_association *asoc,
1377
		     enum sctp_cid cid, struct sctp_init_chunk *peer_init,
1378
		     struct sctp_chunk *chunk, struct sctp_chunk **err_chunk);
1379
int sctp_process_init(struct sctp_association *, struct sctp_chunk *chunk,
L
Linus Torvalds 已提交
1380
		      const union sctp_addr *peer,
1381
		      struct sctp_init_chunk *init, gfp_t gfp);
L
Linus Torvalds 已提交
1382 1383 1384
__u32 sctp_generate_tag(const struct sctp_endpoint *);
__u32 sctp_generate_tsn(const struct sctp_endpoint *);

1385 1386 1387 1388 1389 1390 1391
struct sctp_inithdr_host {
	__u32 init_tag;
	__u32 a_rwnd;
	__u16 num_outbound_streams;
	__u16 num_inbound_streams;
	__u32 initial_tsn;
};
L
Linus Torvalds 已提交
1392

1393 1394 1395 1396 1397 1398 1399 1400 1401 1402
struct sctp_stream_priorities {
	/* List of priorities scheduled */
	struct list_head prio_sched;
	/* List of streams scheduled */
	struct list_head active;
	/* The next stream stream in line */
	struct sctp_stream_out_ext *next;
	__u16 prio;
};

1403 1404 1405
struct sctp_stream_out_ext {
	__u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
	__u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
1406
	struct list_head outq; /* chunks enqueued by this stream */
1407 1408 1409 1410 1411 1412
	union {
		struct {
			/* Scheduled streams list */
			struct list_head prio_list;
			struct sctp_stream_priorities *prio_head;
		};
1413 1414 1415 1416
		/* Fields used by RR scheduler */
		struct {
			struct list_head rr_list;
		};
1417
	};
1418 1419
};

1420
struct sctp_stream_out {
1421 1422 1423 1424
	union {
		__u32 mid;
		__u16 ssn;
	};
1425
	__u32 mid_uo;
1426
	struct sctp_stream_out_ext *ext;
1427
	__u8 state;
1428 1429 1430
};

struct sctp_stream_in {
1431 1432 1433 1434
	union {
		__u32 mid;
		__u16 ssn;
	};
1435
	__u32 mid_uo;
1436
	__u32 fsn;
1437
	__u32 fsn_uo;
1438
	char pd_mode;
1439
	char pd_mode_uo;
1440 1441 1442
};

struct sctp_stream {
K
Kent Overstreet 已提交
1443 1444 1445
	GENRADIX(struct sctp_stream_out) out;
	GENRADIX(struct sctp_stream_in)	in;

1446 1447
	__u16 outcnt;
	__u16 incnt;
1448 1449
	/* Current stream being sent, if any */
	struct sctp_stream_out *out_curr;
1450 1451 1452 1453 1454 1455
	union {
		/* Fields used by priority scheduler */
		struct {
			/* List of priorities scheduled */
			struct list_head prio_list;
		};
1456 1457 1458 1459 1460 1461 1462
		/* Fields used by RR scheduler */
		struct {
			/* List of streams scheduled */
			struct list_head rr_list;
			/* The next stream stream in line */
			struct sctp_stream_out_ext *rr_next;
		};
1463
	};
1464
	struct sctp_stream_interleave *si;
1465 1466
};

1467
static inline struct sctp_stream_out *sctp_stream_out(
K
Kent Overstreet 已提交
1468
	struct sctp_stream *stream,
1469 1470
	__u16 sid)
{
K
Kent Overstreet 已提交
1471
	return genradix_ptr(&stream->out, sid);
1472 1473 1474
}

static inline struct sctp_stream_in *sctp_stream_in(
K
Kent Overstreet 已提交
1475
	struct sctp_stream *stream,
1476 1477
	__u16 sid)
{
K
Kent Overstreet 已提交
1478
	return genradix_ptr(&stream->in, sid);
1479 1480 1481 1482 1483
}

#define SCTP_SO(s, i) sctp_stream_out((s), (i))
#define SCTP_SI(s, i) sctp_stream_in((s), (i))

1484 1485 1486
#define SCTP_STREAM_CLOSED		0x00
#define SCTP_STREAM_OPEN		0x01

1487 1488 1489 1490 1491 1492 1493 1494 1495 1496
static inline __u16 sctp_datachk_len(const struct sctp_stream *stream)
{
	return stream->si->data_chunk_len;
}

static inline __u16 sctp_datahdr_len(const struct sctp_stream *stream)
{
	return stream->si->data_chunk_len - sizeof(struct sctp_chunkhdr);
}

1497 1498 1499 1500 1501 1502 1503 1504 1505 1506
static inline __u16 sctp_ftsnchk_len(const struct sctp_stream *stream)
{
	return stream->si->ftsn_chunk_len;
}

static inline __u16 sctp_ftsnhdr_len(const struct sctp_stream *stream)
{
	return stream->si->ftsn_chunk_len - sizeof(struct sctp_chunkhdr);
}

1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540
/* SCTP_GET_ASSOC_STATS counters */
struct sctp_priv_assoc_stats {
	/* Maximum observed rto in the association during subsequent
	 * observations. Value is set to 0 if no RTO measurement took place
	 * The transport where the max_rto was observed is returned in
	 * obs_rto_ipaddr
	 */
	struct sockaddr_storage obs_rto_ipaddr;
	__u64 max_obs_rto;
	/* Total In and Out SACKs received and sent */
	__u64 isacks;
	__u64 osacks;
	/* Total In and Out packets received and sent */
	__u64 opackets;
	__u64 ipackets;
	/* Total retransmitted chunks */
	__u64 rtxchunks;
	/* TSN received > next expected */
	__u64 outofseqtsns;
	/* Duplicate Chunks received */
	__u64 idupchunks;
	/* Gap Ack Blocks received */
	__u64 gapcnt;
	/* Unordered data chunks sent and received */
	__u64 ouodchunks;
	__u64 iuodchunks;
	/* Ordered data chunks sent and received */
	__u64 oodchunks;
	__u64 iodchunks;
	/* Control chunks sent and received */
	__u64 octrlchunks;
	__u64 ictrlchunks;
};

L
Linus Torvalds 已提交
1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585
/* RFC2960
 *
 * 12. Recommended Transmission Control Block (TCB) Parameters
 *
 * This section details a recommended set of parameters that should
 * be contained within the TCB for an implementation. This section is
 * for illustrative purposes and should not be deemed as requirements
 * on an implementation or as an exhaustive list of all parameters
 * inside an SCTP TCB. Each implementation may need its own additional
 * parameters for optimization.
 */


/* Here we have information about each individual association. */
struct sctp_association {

	/* A base structure common to endpoint and association.
	 * In this context, it represents the associations's view
	 * of the local endpoint of the association.
	 */
	struct sctp_ep_common base;

	/* Associations on the same socket. */
	struct list_head asocs;

	/* association id. */
	sctp_assoc_t assoc_id;

	/* This is our parent endpoint.	 */
	struct sctp_endpoint *ep;

	/* These are those association elements needed in the cookie.  */
	struct sctp_cookie c;

	/* This is all information about our peer.  */
	struct {
		/* transport_addr_list
		 *
		 * Peer	       : A list of SCTP transport addresses that the
		 * Transport   : peer is bound to. This information is derived
		 * Address     : from the INIT or INIT ACK and is used to
		 * List	       : associate an inbound packet with a given
		 *	       : association. Normally this information is
		 *	       : hashed or keyed for quick lookup and access
		 *	       : of the TCB.
F
Frank Filz 已提交
1586 1587 1588
		 *	       : The list is also initialized with the list
		 *	       : of addresses passed with the sctp_connectx()
		 *	       : call.
L
Linus Torvalds 已提交
1589 1590 1591 1592 1593
		 *
		 * It is a list of SCTP_transport's.
		 */
		struct list_head transport_addr_list;

1594 1595 1596 1597 1598 1599
		/* rwnd
		 *
		 * Peer Rwnd   : Current calculated value of the peer's rwnd.
		 */
		__u32 rwnd;

F
Frank Filz 已提交
1600 1601 1602 1603 1604 1605 1606 1607 1608
		/* transport_count
		 *
		 * Peer        : A count of the number of peer addresses
		 * Transport   : in the Peer Transport Address List.
		 * Address     :
		 * Count       :
		 */
		__u16 transport_count;

L
Linus Torvalds 已提交
1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681
		/* port
		 *   The transport layer port number.
		 */
		__u16 port;

		/* primary_path
		 *
		 * Primary     : This is the current primary destination
		 * Path	       : transport address of the peer endpoint.  It
		 *	       : may also specify a source transport address
		 *	       : on this endpoint.
		 *
		 * All of these paths live on transport_addr_list.
		 *
		 * At the bakeoffs, we discovered that the intent of
		 * primaryPath is that it only changes when the ULP
		 * asks to have it changed.  We add the activePath to
		 * designate the connection we are currently using to
		 * transmit new data and most control chunks.
		 */
		struct sctp_transport *primary_path;

		/* Cache the primary path address here, when we
		 * need a an address for msg_name.
		 */
		union sctp_addr primary_addr;

		/* active_path
		 *   The path that we are currently using to
		 *   transmit new data and most control chunks.
		 */
		struct sctp_transport *active_path;

		/* retran_path
		 *
		 * RFC2960 6.4 Multi-homed SCTP Endpoints
		 * ...
		 * Furthermore, when its peer is multi-homed, an
		 * endpoint SHOULD try to retransmit a chunk to an
		 * active destination transport address that is
		 * different from the last destination address to
		 * which the DATA chunk was sent.
		 */
		struct sctp_transport *retran_path;

		/* Pointer to last transport I have sent on.  */
		struct sctp_transport *last_sent_to;

		/* This is the last transport I have received DATA on.	*/
		struct sctp_transport *last_data_from;

		/*
		 * Mapping  An array of bits or bytes indicating which out of
		 * Array    order TSN's have been received (relative to the
		 *	    Last Rcvd TSN). If no gaps exist, i.e. no out of
		 *	    order packets have been received, this array
		 *	    will be set to all zero. This structure may be
		 *	    in the form of a circular buffer or bit array.
		 *
		 * Last Rcvd   : This is the last TSN received in
		 * TSN	       : sequence. This value is set initially by
		 *	       : taking the peer's Initial TSN, received in
		 *	       : the INIT or INIT ACK chunk, and subtracting
		 *	       : one from it.
		 *
		 * Throughout most of the specification this is called the
		 * "Cumulative TSN ACK Point".	In this case, we
		 * ignore the advice in 12.2 in favour of the term
		 * used in the bulk of the text.  This value is hidden
		 * in tsn_map--we get it by calling sctp_tsnmap_get_ctsn().
		 */
		struct sctp_tsnmap tsn_map;

1682 1683 1684 1685 1686 1687
		/* This mask is used to disable sending the ASCONF chunk
		 * with specified parameter to peer.
		 */
		__be16 addip_disabled_mask;

		/* These are capabilities which our peer advertised.  */
1688
		__u16	ecn_capable:1,      /* Can peer do ECN? */
1689 1690 1691 1692 1693
			ipv4_address:1,     /* Peer understands IPv4 addresses? */
			ipv6_address:1,     /* Peer understands IPv6 addresses? */
			hostname_address:1, /* Peer understands DNS addresses? */
			asconf_capable:1,   /* Does peer support ADDIP? */
			prsctp_capable:1,   /* Can peer do PR-SCTP? */
1694
			reconf_capable:1,   /* Can peer do RE-CONFIG? */
1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708
			intl_capable:1,     /* Can peer do INTERLEAVE */
			auth_capable:1,     /* Is peer doing SCTP-AUTH? */
			/* sack_needed:
			 *   This flag indicates if the next received
			 *   packet is to be responded to with a
			 *   SACK. This is initialized to 0.  When a packet
			 *   is received sack_cnt is incremented. If this value
			 *   reaches 2 or more, a SACK is sent and the
			 *   value is reset to 0. Note: This is used only
			 *   when no DATA chunks are received out of
			 *   order.  When DATA chunks are out of order,
			 *   SACK's are not delayed (see Section 6).
			 */
			sack_needed:1,     /* Do we need to sack the peer? */
1709 1710
			sack_generation:1,
			zero_window_announced:1;
1711

1712
		__u32	sack_cnt;
L
Linus Torvalds 已提交
1713

1714
		__u32   adaptation_ind;	 /* Adaptation Code point. */
L
Linus Torvalds 已提交
1715

1716
		struct sctp_inithdr_host i;
L
Linus Torvalds 已提交
1717
		void *cookie;
1718
		int cookie_len;
L
Linus Torvalds 已提交
1719 1720 1721 1722 1723 1724

		/* ADDIP Section 4.2 Upon reception of an ASCONF Chunk.
		 * C1) ... "Peer-Serial-Number'. This value MUST be initialized to the
		 * Initial TSN Value minus 1
		 */
		__u32 addip_serial;
1725 1726 1727 1728 1729

		/* SCTP-AUTH: We need to know pears random number, hmac list
		 * and authenticated chunk list.  All that is part of the
		 * cookie and these are just pointers to those locations
		 */
1730
		struct sctp_random_param *peer_random;
1731
		struct sctp_chunks_param *peer_chunks;
1732
		struct sctp_hmac_algo_param *peer_hmacs;
L
Linus Torvalds 已提交
1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747
	} peer;

	/* State       : A state variable indicating what state the
	 *	       : association is in, i.e. COOKIE-WAIT,
	 *	       : COOKIE-ECHOED, ESTABLISHED, SHUTDOWN-PENDING,
	 *	       : SHUTDOWN-SENT, SHUTDOWN-RECEIVED, SHUTDOWN-ACK-SENT.
	 *
	 *		Note: No "CLOSED" state is illustrated since if a
	 *		association is "CLOSED" its TCB SHOULD be removed.
	 *
	 *		In this implementation we DO have a CLOSED
	 *		state which is used during initiation and shutdown.
	 *
	 *		State takes values from SCTP_STATE_*.
	 */
X
Xin Long 已提交
1748
	enum sctp_state state;
L
Linus Torvalds 已提交
1749 1750 1751 1752 1753 1754

	/* Overall     : The overall association error count.
	 * Error Count : [Clear this any time I get something.]
	 */
	int overall_error_count;

1755 1756 1757
	/* The cookie life I award for any cookie.  */
	ktime_t cookie_life;

L
Linus Torvalds 已提交
1758 1759 1760 1761
	/* These are the association's initial, max, and min RTO values.
	 * These values will be initialized by system defaults, but can
	 * be modified via the SCTP_RTOINFO socket option.
	 */
1762 1763 1764
	unsigned long rto_initial;
	unsigned long rto_max;
	unsigned long rto_min;
L
Linus Torvalds 已提交
1765 1766 1767 1768 1769 1770 1771 1772 1773 1774

	/* Maximum number of new data packets that can be sent in a burst.  */
	int max_burst;

	/* This is the max_retrans value for the association.  This value will
	 * be initialized initialized from system defaults, but can be
	 * modified by the SCTP_ASSOCINFO socket option.
	 */
	int max_retrans;

1775 1776 1777 1778
	/* This is the partially failed retrans value for the transport
	 * and will be initialized from the assocs value.  This can be
	 * changed using the SCTP_PEER_ADDR_THLDS socket option
	 */
1779 1780 1781
	__u16 pf_retrans;
	/* Used for primary path switchover. */
	__u16 ps_retrans;
1782

L
Linus Torvalds 已提交
1783 1784 1785 1786 1787 1788 1789
	/* Maximum number of times the endpoint will retransmit INIT  */
	__u16 max_init_attempts;

	/* How many times have we resent an INIT? */
	__u16 init_retries;

	/* The largest timeout or RTO value to use in attempting an INIT */
1790
	unsigned long max_init_timeo;
L
Linus Torvalds 已提交
1791

1792 1793 1794 1795
	/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
	 * the destination address every heartbeat interval. This value
	 * will be inherited by all new transports.
	 */
1796
	unsigned long hbinterval;
1797 1798 1799 1800 1801 1802

	/* This is the max_retrans value for new transports in the
	 * association.
	 */
	__u16 pathmaxrxt;

1803 1804 1805
	__u32 flowlabel;
	__u8  dscp;

1806 1807 1808
	/* Flag that path mtu update is pending */
	__u8   pmtu_pending;

1809 1810 1811 1812 1813
	/* Association : The smallest PMTU discovered for all of the
	 * PMTU	       : peer's transport addresses.
	 */
	__u32 pathmtu;

J
Joe Perches 已提交
1814
	/* Flags controlling Heartbeat, SACK delay, and Path MTU Discovery. */
1815 1816
	__u32 param_flags;

1817
	__u32 sackfreq;
1818 1819 1820 1821
	/* SACK delay timeout */
	unsigned long sackdelay;

	unsigned long timeouts[SCTP_NUM_TIMEOUT_TYPES];
L
Linus Torvalds 已提交
1822 1823 1824 1825 1826
	struct timer_list timers[SCTP_NUM_TIMEOUT_TYPES];

	/* Transport to which SHUTDOWN chunk was last sent.  */
	struct sctp_transport *shutdown_last_sent_to;

F
Frank Filz 已提交
1827 1828 1829
	/* Transport to which INIT chunk was last sent.  */
	struct sctp_transport *init_last_sent_to;

1830 1831 1832
	/* How many times have we resent a SHUTDOWN */
	int shutdown_retries;

L
Linus Torvalds 已提交
1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858
	/* Next TSN    : The next TSN number to be assigned to a new
	 *	       : DATA chunk.  This is sent in the INIT or INIT
	 *	       : ACK chunk to the peer and incremented each
	 *	       : time a DATA chunk is assigned a TSN
	 *	       : (normally just prior to transmit or during
	 *	       : fragmentation).
	 */
	__u32 next_tsn;

	/*
	 * Last Rcvd   : This is the last TSN received in sequence.  This value
	 * TSN	       : is set initially by taking the peer's Initial TSN,
	 *	       : received in the INIT or INIT ACK chunk, and
	 *	       : subtracting one from it.
	 *
	 * Most of RFC 2960 refers to this as the Cumulative TSN Ack Point.
	 */

	__u32 ctsn_ack_point;

	/* PR-SCTP Advanced.Peer.Ack.Point */
	__u32 adv_peer_ack_point;

	/* Highest TSN that is acknowledged by incoming SACKs. */
	__u32 highest_sacked;

1859 1860 1861 1862 1863 1864
	/* TSN marking the fast recovery exit point */
	__u32 fast_recovery_exit;

	/* Flag to track the current fast recovery state */
	__u8 fast_recovery;

L
Linus Torvalds 已提交
1865 1866 1867 1868 1869
	/* The number of unacknowledged data chunks.  Reported through
	 * the SCTP_STATUS sockopt.
	 */
	__u16 unack_data;

1870 1871 1872 1873 1874
	/* The total number of data chunks that we've had to retransmit
	 * as the result of a T3 timer expiration
	 */
	__u32 rtx_data_chunks;

L
Linus Torvalds 已提交
1875 1876 1877 1878 1879 1880 1881 1882
	/* This is the association's receive buffer space.  This value is used
	 * to set a_rwnd field in an INIT or a SACK chunk.
	 */
	__u32 rwnd;

	/* This is the last advertised value of rwnd over a SACK chunk. */
	__u32 a_rwnd;

1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893
	/* Number of bytes by which the rwnd has slopped.  The rwnd is allowed
	 * to slop over a maximum of the association's frag_point.
	 */
	__u32 rwnd_over;

	/* Keeps treack of rwnd pressure.  This happens when we have
	 * a window, but not recevie buffer (i.e small packets).  This one
	 * is releases slowly (1 PMTU at a time ).
	 */
	__u32 rwnd_press;

L
Linus Torvalds 已提交
1894 1895 1896 1897 1898 1899
	/* This is the sndbuf size in use for the association.
	 * This corresponds to the sndbuf size for the association,
	 * as specified in the sk->sndbuf.
	 */
	int sndbuf_used;

1900 1901 1902 1903 1904
	/* This is the amount of memory that this association has allocated
	 * in the receive path at any given time.
	 */
	atomic_t rmem_alloc;

L
Linus Torvalds 已提交
1905 1906 1907 1908 1909 1910 1911
	/* This is the wait queue head for send requests waiting on
	 * the association sndbuf space.
	 */
	wait_queue_head_t	wait;

	/* The message size at which SCTP fragmentation will occur. */
	__u32 frag_point;
1912
	__u32 user_frag;
L
Linus Torvalds 已提交
1913

F
Frank Filz 已提交
1914 1915 1916 1917 1918
	/* Counter used to count INIT errors. */
	int init_err_counter;

	/* Count the number of INIT cycles (for doubling timeout). */
	int init_cycle;
L
Linus Torvalds 已提交
1919 1920 1921 1922 1923 1924 1925 1926

	/* Default send parameters. */
	__u16 default_stream;
	__u16 default_flags;
	__u32 default_ppid;
	__u32 default_context;
	__u32 default_timetolive;

1927 1928 1929
	/* Default receive parameters */
	__u32 default_rcv_context;

1930
	/* Stream arrays */
1931
	struct sctp_stream stream;
L
Linus Torvalds 已提交
1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974

	/* All outbound chunks go through this structure.  */
	struct sctp_outq outqueue;

	/* A smart pipe that will handle reordering and fragmentation,
	 * as well as handle passing events up to the ULP.
	 */
	struct sctp_ulpq ulpq;

	/* Last TSN that caused an ECNE Chunk to be sent.  */
	__u32 last_ecne_tsn;

	/* Last TSN that caused a CWR Chunk to be sent.	 */
	__u32 last_cwr_tsn;

	/* How many duplicated TSNs have we seen?  */
	int numduptsns;

	/* These are to support
	 * "SCTP Extensions for Dynamic Reconfiguration of IP Addresses
	 *  and Enforcement of Flow and Message Limits"
	 * <draft-ietf-tsvwg-addip-sctp-02.txt>
	 * or "ADDIP" for short.
	 */



	/* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
	 *
	 * R1) One and only one ASCONF Chunk MAY be in transit and
	 * unacknowledged at any one time.  If a sender, after sending
	 * an ASCONF chunk, decides it needs to transfer another
	 * ASCONF Chunk, it MUST wait until the ASCONF-ACK Chunk
	 * returns from the previous ASCONF Chunk before sending a
	 * subsequent ASCONF. Note this restriction binds each side,
	 * so at any time two ASCONF may be in-transit on any given
	 * association (one sent from each endpoint).
	 *
	 * [This is our one-and-only-one ASCONF in flight.  If we do
	 * not have an ASCONF in flight, this is NULL.]
	 */
	struct sctp_chunk *addip_last_asconf;

1975
	/* ADDIP Section 5.2 Upon reception of an ASCONF Chunk.
L
Linus Torvalds 已提交
1976
	 *
1977 1978
	 * This is needed to implement itmes E1 - E4 of the updated
	 * spec.  Here is the justification:
L
Linus Torvalds 已提交
1979
	 *
1980 1981 1982
	 * Since the peer may bundle multiple ASCONF chunks toward us,
	 * we now need the ability to cache multiple ACKs.  The section
	 * describes in detail how they are cached and cleaned up.
L
Linus Torvalds 已提交
1983
	 */
1984
	struct list_head asconf_ack_list;
L
Linus Torvalds 已提交
1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013

	/* These ASCONF chunks are waiting to be sent.
	 *
	 * These chunaks can't be pushed to outqueue until receiving
	 * ASCONF_ACK for the previous ASCONF indicated by
	 * addip_last_asconf, so as to guarantee that only one ASCONF
	 * is in flight at any time.
	 *
	 * ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
	 *
	 * In defining the ASCONF Chunk transfer procedures, it is
	 * essential that these transfers MUST NOT cause congestion
	 * within the network.	To achieve this, we place these
	 * restrictions on the transfer of ASCONF Chunks:
	 *
	 * R1) One and only one ASCONF Chunk MAY be in transit and
	 * unacknowledged at any one time.  If a sender, after sending
	 * an ASCONF chunk, decides it needs to transfer another
	 * ASCONF Chunk, it MUST wait until the ASCONF-ACK Chunk
	 * returns from the previous ASCONF Chunk before sending a
	 * subsequent ASCONF. Note this restriction binds each side,
	 * so at any time two ASCONF may be in-transit on any given
	 * association (one sent from each endpoint).
	 *
	 *
	 * [I really think this is EXACTLY the sort of intelligence
	 *  which already resides in sctp_outq.	 Please move this
	 *  queue and its supporting logic down there.	--piggy]
	 */
2014
	struct list_head addip_chunk_list;
L
Linus Torvalds 已提交
2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036

	/* ADDIP Section 4.1 ASCONF Chunk Procedures
	 *
	 * A2) A serial number should be assigned to the Chunk. The
	 * serial number SHOULD be a monotonically increasing
	 * number. The serial number SHOULD be initialized at
	 * the start of the association to the same value as the
	 * Initial TSN and every time a new ASCONF chunk is created
	 * it is incremented by one after assigning the serial number
	 * to the newly created chunk.
	 *
	 * ADDIP
	 * 3.1.1  Address/Stream Configuration Change Chunk (ASCONF)
	 *
	 * Serial Number : 32 bits (unsigned integer)
	 *
	 * This value represents a Serial Number for the ASCONF
	 * Chunk. The valid range of Serial Number is from 0 to
	 * 4294967295 (2^32 - 1).  Serial Numbers wrap back to 0
	 * after reaching 4294967295.
	 */
	__u32 addip_serial;
2037
	int src_out_of_asoc_ok;
2038
	union sctp_addr *asconf_addr_del_pending;
2039
	struct sctp_transport *new_transport;
L
Linus Torvalds 已提交
2040

2041 2042 2043 2044 2045 2046 2047 2048 2049 2050
	/* SCTP AUTH: list of the endpoint shared keys.  These
	 * keys are provided out of band by the user applicaton
	 * and can't change during the lifetime of the association
	 */
	struct list_head endpoint_shared_keys;

	/* SCTP AUTH:
	 * The current generated assocaition shared key (secret)
	 */
	struct sctp_auth_bytes *asoc_shared_key;
X
Xin Long 已提交
2051
	struct sctp_shared_key *shkey;
2052 2053 2054 2055 2056 2057 2058 2059

	/* SCTP AUTH: hmac id of the first peer requested algorithm
	 * that we support.
	 */
	__u16 default_hmac_id;

	__u16 active_key_id;

2060
	__u8 need_ecne:1,	/* Need to send an ECNE Chunk? */
2061
	     temp:1,		/* Is it a temporary association? */
2062
	     pf_expose:2,       /* Expose pf state? */
2063
	     force_delay:1;
2064

2065
	__u8 strreset_enable;
2066
	__u8 strreset_outstanding; /* request param count on the fly */
2067

2068 2069
	__u32 strreset_outseq; /* Update after receiving response */
	__u32 strreset_inseq; /* Update after receiving request */
2070
	__u32 strreset_result[2]; /* save the results of last 2 responses */
2071

X
Xin Long 已提交
2072 2073
	struct sctp_chunk *strreset_chunk; /* save request chunk */

2074
	struct sctp_priv_assoc_stats stats;
2075

X
Xin Long 已提交
2076 2077
	int sent_cnt_removable;

X
Xin Long 已提交
2078 2079
	__u16 subscribe;

2080 2081
	__u64 abandoned_unsent[SCTP_PR_INDEX(MAX) + 1];
	__u64 abandoned_sent[SCTP_PR_INDEX(MAX) + 1];
X
Xin Long 已提交
2082 2083

	struct rcu_head rcu;
L
Linus Torvalds 已提交
2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106
};


/* An eyecatcher for determining if we are really looking at an
 * association data structure.
 */
enum {
	SCTP_ASSOC_EYECATCHER = 0xa550c123,
};

/* Recover the outter association structure. */
static inline struct sctp_association *sctp_assoc(struct sctp_ep_common *base)
{
	struct sctp_association *asoc;

	asoc = container_of(base, struct sctp_association, base);
	return asoc;
}

/* These are function signatures for manipulating associations.	 */


struct sctp_association *
X
Xin Long 已提交
2107 2108
sctp_association_new(const struct sctp_endpoint *ep, const struct sock *sk,
		     enum sctp_scope scope, gfp_t gfp);
L
Linus Torvalds 已提交
2109 2110 2111 2112
void sctp_association_free(struct sctp_association *);
void sctp_association_put(struct sctp_association *);
void sctp_association_hold(struct sctp_association *);

2113 2114
struct sctp_transport *sctp_assoc_choose_alter_transport(
	struct sctp_association *, struct sctp_transport *);
L
Linus Torvalds 已提交
2115 2116 2117 2118 2119 2120 2121
void sctp_assoc_update_retran_path(struct sctp_association *);
struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *,
					  const union sctp_addr *);
int sctp_assoc_lookup_laddr(struct sctp_association *asoc,
			    const union sctp_addr *laddr);
struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *,
				     const union sctp_addr *address,
A
Al Viro 已提交
2122
				     const gfp_t gfp,
F
Frank Filz 已提交
2123
				     const int peer_state);
L
Linus Torvalds 已提交
2124 2125
void sctp_assoc_del_peer(struct sctp_association *asoc,
			 const union sctp_addr *addr);
F
Frank Filz 已提交
2126 2127
void sctp_assoc_rm_peer(struct sctp_association *asoc,
			 struct sctp_transport *peer);
2128 2129 2130 2131
void sctp_assoc_control_transport(struct sctp_association *asoc,
				  struct sctp_transport *transport,
				  enum sctp_transport_cmd command,
				  sctp_sn_error_t error);
L
Linus Torvalds 已提交
2132 2133
struct sctp_transport *sctp_assoc_lookup_tsn(struct sctp_association *, __u32);
void sctp_assoc_migrate(struct sctp_association *, struct sock *);
2134 2135
int sctp_assoc_update(struct sctp_association *old,
		      struct sctp_association *new);
L
Linus Torvalds 已提交
2136 2137 2138

__u32 sctp_association_get_next_tsn(struct sctp_association *);

2139
void sctp_assoc_update_frag_point(struct sctp_association *asoc);
2140
void sctp_assoc_set_pmtu(struct sctp_association *asoc, __u32 pmtu);
2141
void sctp_assoc_sync_pmtu(struct sctp_association *asoc);
2142 2143
void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
L
Linus Torvalds 已提交
2144 2145
void sctp_assoc_set_primary(struct sctp_association *,
			    struct sctp_transport *);
2146 2147
void sctp_assoc_del_nonprimary_peers(struct sctp_association *,
				    struct sctp_transport *);
X
Xin Long 已提交
2148 2149
int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
				     enum sctp_scope scope, gfp_t gfp);
L
Linus Torvalds 已提交
2150
int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *,
A
Alexey Dobriyan 已提交
2151
					 struct sctp_cookie*,
A
Al Viro 已提交
2152
					 gfp_t gfp);
2153
int sctp_assoc_set_id(struct sctp_association *, gfp_t);
2154 2155 2156 2157
void sctp_assoc_clean_asconf_ack_cache(const struct sctp_association *asoc);
struct sctp_chunk *sctp_assoc_lookup_asconf_ack(
					const struct sctp_association *asoc,
					__be32 serial);
2158
void sctp_asconf_queue_teardown(struct sctp_association *asoc);
L
Linus Torvalds 已提交
2159 2160 2161 2162 2163 2164

int sctp_cmp_addr_exact(const union sctp_addr *ss1,
			const union sctp_addr *ss2);
struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc);

/* A convenience structure to parse out SCTP specific CMSGs. */
X
Xin Long 已提交
2165
struct sctp_cmsgs {
L
Linus Torvalds 已提交
2166
	struct sctp_initmsg *init;
2167 2168
	struct sctp_sndrcvinfo *srinfo;
	struct sctp_sndinfo *sinfo;
2169
	struct sctp_prinfo *prinfo;
2170
	struct sctp_authinfo *authinfo;
2171
	struct msghdr *addrs_msg;
X
Xin Long 已提交
2172
};
L
Linus Torvalds 已提交
2173 2174

/* Structure for tracking memory objects */
2175
struct sctp_dbg_objcnt_entry {
L
Linus Torvalds 已提交
2176 2177
	char *label;
	atomic_t *counter;
2178
};
L
Linus Torvalds 已提交
2179 2180

#endif /* __sctp_structs_h__ */