1190207Srpaulo/* @(#) $Header: /tcpdump/master/tcpdump/sctpConstants.h,v 1.4 2003-06-03 23:49:23 guy Exp $ (LBL) */
298524Sfenner
398524Sfenner/* SCTP reference Implementation Copyright (C) 1999 Cisco And Motorola
498524Sfenner *
598524Sfenner * Redistribution and use in source and binary forms, with or without
698524Sfenner * modification, are permitted provided that the following conditions
798524Sfenner * are met:
898524Sfenner *
998524Sfenner * 1. Redistributions of source code must retain the above copyright
1098524Sfenner *    notice, this list of conditions and the following disclaimer.
1198524Sfenner *
1298524Sfenner * 2. Redistributions in binary form must reproduce the above copyright
1398524Sfenner *    notice, this list of conditions and the following disclaimer in the
1498524Sfenner *    documentation and/or other materials provided with the distribution.
1598524Sfenner *
1698524Sfenner * 3. Neither the name of Cisco nor of Motorola may be used
1798524Sfenner *    to endorse or promote products derived from this software without
1898524Sfenner *    specific prior written permission.
1998524Sfenner *
2098524Sfenner * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2198524Sfenner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2298524Sfenner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2398524Sfenner * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2498524Sfenner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2598524Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2698524Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2798524Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2898524Sfenner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2998524Sfenner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3098524Sfenner * SUCH DAMAGE.
3198524Sfenner *
3298524Sfenner * This file is part of the SCTP reference Implementation
3398524Sfenner *
34127668Sbms *
3598524Sfenner * Please send any bug reports or fixes you make to one of the following email
3698524Sfenner * addresses:
37127668Sbms *
3898524Sfenner * rstewar1@email.mot.com
3998524Sfenner * kmorneau@cisco.com
4098524Sfenner * qxie1@email.mot.com
41127668Sbms *
4298524Sfenner * Any bugs reported given to us we will try to fix... any fixes shared will
4398524Sfenner * be incorperated into the next SCTP release.
4498524Sfenner */
4598524Sfenner
4698524Sfenner
4798524Sfenner#ifndef __sctpConstants_h__
4898524Sfenner#define __sctpConstants_h__
4998524Sfenner
5098524Sfenner
5198524Sfenner  /* If you wish to use MD5 instead of SLA uncomment the line
5298524Sfenner   * below. Why you would like to do this:
5398524Sfenner   * a) There may be IPR on SHA-1, or so the FIP-180-1 page says,
5498524Sfenner   * b) MD5 is 3 times faster (has coded here).
5598524Sfenner   *
5698524Sfenner   * The disadvantage is, it is thought that MD5 has been
5798524Sfenner   * cracked... see RFC2104.
5898524Sfenner   */
5998524Sfenner/*#define USE_MD5 1*/
6098524Sfenner
61127668Sbms/* the SCTP protocol signature
6298524Sfenner * this includes the version number
6398524Sfenner * encoded in the last 4 bits of the
6498524Sfenner * signature.
6598524Sfenner */
6698524Sfenner#define PROTO_SIGNATURE_A 0x30000000
6798524Sfenner
6898524Sfenner#define SCTP_VERSION_NUMBER 0x3
6998524Sfenner
7098524Sfenner#define MAX_TSN 0xffffffff
7198524Sfenner#define MAX_SEQ 0xffff
7298524Sfenner
7398524Sfenner/* option:
7498524Sfenner * If you comment out the following you will
7598524Sfenner * receive the old behavior of obeying cwnd for
7698524Sfenner * the fast retransmit algorithm. With this defined
7798524Sfenner * a FR happens right away with-out waiting for the
7898524Sfenner * flightsize to drop below the cwnd value (which
7998524Sfenner * is reduced by the FR to 1/2 the inflight packets).
8098524Sfenner */
8198524Sfenner#define SCTP_IGNORE_CWND_ON_FR 1
8298524Sfenner/* default max I can burst out after a fast retransmit */
8398524Sfenner#define SCTP_DEF_MAX_BURST 4
8498524Sfenner
85127668Sbms/* Packet transmit states in the sent
8698524Sfenner * field in the SCTP_transmitOnQueue struct
8798524Sfenner */
8898524Sfenner#define SCTP_DATAGRAM_UNSENT 		0
8998524Sfenner#define SCTP_DATAGRAM_SENT   		1
9098524Sfenner#define SCTP_DATAGRAM_RESEND1		2 /* not used */
9198524Sfenner#define SCTP_DATAGRAM_RESEND2		3 /* not used */
9298524Sfenner#define SCTP_DATAGRAM_RESEND3		4 /* not used */
9398524Sfenner#define SCTP_DATAGRAM_RESEND		5
9498524Sfenner#define SCTP_DATAGRAM_ACKED		10010
9598524Sfenner#define SCTP_DATAGRAM_INBOUND		10011
9698524Sfenner#define SCTP_READY_TO_TRANSMIT		10012
9798524Sfenner#define SCTP_DATAGRAM_MARKED		20010
9898524Sfenner
9998524Sfenner#define MAX_FSID 64	/* debug 5 ints used for cc dynamic tracking */
10098524Sfenner
10198524Sfenner/* The valid defines for all message
10298524Sfenner * types know to SCTP. 0 is reserved
10398524Sfenner */
10498524Sfenner#define SCTP_MSGTYPE_MASK	0xff
10598524Sfenner
10698524Sfenner#define SCTP_DATA		0x00
10798524Sfenner#define SCTP_INITIATION		0x01
10898524Sfenner#define SCTP_INITIATION_ACK	0x02
109127668Sbms#define SCTP_SELECTIVE_ACK	0x03
110127668Sbms#define SCTP_HEARTBEAT_REQUEST	0x04
11198524Sfenner#define SCTP_HEARTBEAT_ACK	0x05
11298524Sfenner#define SCTP_ABORT_ASSOCIATION	0x06
11398524Sfenner#define SCTP_SHUTDOWN		0x07
11498524Sfenner#define SCTP_SHUTDOWN_ACK	0x08
11598524Sfenner#define SCTP_OPERATION_ERR	0x09
11698524Sfenner#define SCTP_COOKIE_ECHO	0x0a
11798524Sfenner#define SCTP_COOKIE_ACK         0x0b
11898524Sfenner#define SCTP_ECN_ECHO		0x0c
11998524Sfenner#define SCTP_ECN_CWR		0x0d
12098524Sfenner#define SCTP_SHUTDOWN_COMPLETE	0x0e
12198524Sfenner#define SCTP_FORWARD_CUM_TSN    0xc0
12298524Sfenner#define SCTP_RELIABLE_CNTL      0xc1
12398524Sfenner#define SCTP_RELIABLE_CNTL_ACK  0xc2
12498524Sfenner
12598524Sfenner/* ABORT and SHUTDOWN COMPLETE FLAG */
12698524Sfenner#define SCTP_HAD_NO_TCB		0x01
12798524Sfenner
12898524Sfenner/* Data Chuck Specific Flags */
12998524Sfenner#define SCTP_DATA_FRAG_MASK	0x03
13098524Sfenner#define SCTP_DATA_MIDDLE_FRAG	0x00
13198524Sfenner#define SCTP_DATA_LAST_FRAG	0x01
13298524Sfenner#define SCTP_DATA_FIRST_FRAG	0x02
13398524Sfenner#define SCTP_DATA_NOT_FRAG	0x03
13498524Sfenner#define SCTP_DATA_UNORDERED	0x04
13598524Sfenner
13698524Sfenner#define SCTP_CRC_ENABLE_BIT	0x01	/* lower bit of reserved */
13798524Sfenner
13898524Sfenner#define isSCTPControl(a) (a->chunkID != SCTP_DATA)
13998524Sfenner#define isSCTPData(a) (a->chunkID == SCTP_DATA)
14098524Sfenner
14198524Sfenner/* sctp parameter types for init/init-ack */
14298524Sfenner
14398524Sfenner#define SCTP_IPV4_PARAM_TYPE    0x0005
14498524Sfenner#define SCTP_IPV6_PARAM_TYPE    0x0006
14598524Sfenner#define SCTP_RESPONDER_COOKIE   0x0007
14698524Sfenner#define SCTP_UNRECOG_PARAM	0x0008
14798524Sfenner#define SCTP_COOKIE_PRESERVE    0x0009
14898524Sfenner#define SCTP_HOSTNAME_VIA_DNS   0x000b
14998524Sfenner#define SCTP_RESTRICT_ADDR_TO	0x000c
15098524Sfenner
15198524Sfenner#define SCTP_ECN_I_CAN_DO_ECN	0x8000
15298524Sfenner#define SCTP_OPERATION_SUCCEED	0x4001
15398524Sfenner#define SCTP_ERROR_NOT_EXECUTED	0x4002
15498524Sfenner
15598524Sfenner#define SCTP_UNRELIABLE_STRM    0xc000
15698524Sfenner#define SCTP_ADD_IP_ADDRESS     0xc001
15798524Sfenner#define SCTP_DEL_IP_ADDRESS     0xc002
15898524Sfenner#define SCTP_STRM_FLOW_LIMIT    0xc003
15998524Sfenner#define SCTP_PARTIAL_CSUM       0xc004
16098524Sfenner#define SCTP_ERROR_CAUSE_TLV	0xc005
16198524Sfenner#define SCTP_MIT_STACK_NAME	0xc006
16298524Sfenner#define SCTP_SETADDRESS_PRIMARY 0xc007
16398524Sfenner
16498524Sfenner/* bits for TOS field */
16598524Sfenner#define SCTP_ECT_BIT		0x02
16698524Sfenner#define SCTP_CE_BIT		0x01
16798524Sfenner
16898524Sfenner/* error codes */
16998524Sfenner#define SCTP_OP_ERROR_NO_ERROR		0x0000
17098524Sfenner#define SCTP_OP_ERROR_INV_STRM		0x0001
17198524Sfenner#define SCTP_OP_ERROR_MISS_PARAM	0x0002
17298524Sfenner#define SCTP_OP_ERROR_STALE_COOKIE	0x0003
17398524Sfenner#define SCTP_OP_ERROR_NO_RESOURCE 	0x0004
17498524Sfenner#define SCTP_OP_ERROR_DNS_FAILED   	0x0005
17598524Sfenner#define SCTP_OP_ERROR_UNK_CHUNK	   	0x0006
17698524Sfenner#define SCTP_OP_ERROR_INV_PARAM		0x0007
17798524Sfenner#define SCTP_OP_ERROR_UNK_PARAM	       	0x0008
17898524Sfenner#define SCTP_OP_ERROR_NO_USERD    	0x0009
17998524Sfenner#define SCTP_OP_ERROR_COOKIE_SHUT	0x000a
18098524Sfenner#define SCTP_OP_ERROR_DELETE_LAST	0x000b
18198524Sfenner#define SCTP_OP_ERROR_RESOURCE_SHORT 	0x000c
18298524Sfenner
18398524Sfenner#define SCTP_MAX_ERROR_CAUSE  12
18498524Sfenner
18598524Sfenner/* empty error causes i.e. nothing but the cause
18698524Sfenner * are SCTP_OP_ERROR_NO_RESOURCE, SCTP_OP_ERROR_INV_PARAM,
18798524Sfenner * SCTP_OP_ERROR_COOKIE_SHUT.
18898524Sfenner */
18998524Sfenner
19098524Sfenner/* parameter for Heart Beat */
19198524Sfenner#define HEART_BEAT_PARAM 0x0001
19298524Sfenner
19398524Sfenner
19498524Sfenner
19598524Sfenner/* send options for SCTP
19698524Sfenner */
19798524Sfenner#define SCTP_ORDERED_DELIVERY		0x01
19898524Sfenner#define SCTP_NON_ORDERED_DELIVERY	0x02
19998524Sfenner#define SCTP_DO_CRC16			0x08
20098524Sfenner#define SCTP_MY_ADDRESS_ONLY		0x10
20198524Sfenner
20298524Sfenner/* below turns off above */
20398524Sfenner#define SCTP_FLEXIBLE_ADDRESS		0x20
20498524Sfenner#define SCTP_NO_HEARTBEAT		0x40
20598524Sfenner
20698524Sfenner/* mask to get sticky */
20798524Sfenner#define SCTP_STICKY_OPTIONS_MASK        0x0c
20898524Sfenner
20998524Sfenner/* MTU discovery flags */
21098524Sfenner#define SCTP_DONT_FRAGMENT		0x0100
21198524Sfenner#define SCTP_FRAGMENT_OK		0x0200
21298524Sfenner
21398524Sfenner
21498524Sfenner/* SCTP state defines for internal state machine */
21598524Sfenner#define SCTP_STATE_EMPTY		0x0000
21698524Sfenner#define SCTP_STATE_INUSE		0x0001
21798524Sfenner#define SCTP_STATE_COOKIE_WAIT		0x0002
21898524Sfenner#define SCTP_STATE_COOKIE_SENT		0x0004
21998524Sfenner#define SCTP_STATE_OPEN			0x0008
22098524Sfenner#define SCTP_STATE_SHUTDOWN		0x0010
22198524Sfenner#define SCTP_STATE_SHUTDOWN_RECV	0x0020
22298524Sfenner#define SCTP_STATE_SHUTDOWN_ACK_SENT	0x0040
22398524Sfenner#define SCTP_STATE_SHUTDOWN_PEND	0x0080
22498524Sfenner#define SCTP_STATE_MASK			0x007f
22598524Sfenner/* SCTP reachability state for each address */
22698524Sfenner#define SCTP_ADDR_NOT_REACHABLE		1
22798524Sfenner#define SCTP_ADDR_REACHABLE		2
22898524Sfenner#define SCTP_ADDR_NOHB			4
22998524Sfenner#define SCTP_ADDR_BEING_DELETED		8
23098524Sfenner
23198524Sfenner/* How long a cookie lives */
23298524Sfenner#define SCTP_DEFAULT_COOKIE_LIFE 60 /* seconds */
23398524Sfenner
23498524Sfenner/* resource limit of streams */
23598524Sfenner#define MAX_SCTP_STREAMS 2048
23698524Sfenner
23798524Sfenner
23898524Sfenner/* guess at how big to make the TSN mapping array */
23998524Sfenner#define SCTP_STARTING_MAPARRAY 10000
24098524Sfenner
24198524Sfenner/* Here we define the timer types used
242127668Sbms * by the implementation has
24398524Sfenner * arguments in the set/get timer type calls.
24498524Sfenner */
24598524Sfenner#define SCTP_TIMER_INIT 	0
24698524Sfenner#define SCTP_TIMER_RECV 	1
24798524Sfenner#define SCTP_TIMER_SEND 	2
24898524Sfenner#define SCTP_TIMER_SHUTDOWN	3
24998524Sfenner#define SCTP_TIMER_HEARTBEAT	4
25098524Sfenner#define SCTP_TIMER_PMTU		5
251127668Sbms/* number of timer types in the base SCTP
25298524Sfenner * structure used in the set/get and has
25398524Sfenner * the base default.
25498524Sfenner */
25598524Sfenner#define SCTP_NUM_TMRS 6
25698524Sfenner
25798524Sfenner
25898524Sfenner
25998524Sfenner#define SCTP_IPV4_ADDRESS	2
26098524Sfenner#define SCTP_IPV6_ADDRESS	4
26198524Sfenner
26298524Sfenner/* timer types */
26398524Sfenner#define SctpTimerTypeNone		0
26498524Sfenner#define SctpTimerTypeSend		1
26598524Sfenner#define SctpTimerTypeInit		2
26698524Sfenner#define SctpTimerTypeRecv		3
26798524Sfenner#define SctpTimerTypeShutdown		4
26898524Sfenner#define SctpTimerTypeHeartbeat		5
26998524Sfenner#define SctpTimerTypeCookie		6
27098524Sfenner#define SctpTimerTypeNewCookie		7
27198524Sfenner#define SctpTimerTypePathMtuRaise	8
27298524Sfenner#define SctpTimerTypeShutdownAck	9
27398524Sfenner#define SctpTimerTypeRelReq		10
27498524Sfenner
27598524Sfenner/* Here are the timer directives given to the
27698524Sfenner * user provided function
27798524Sfenner */
27898524Sfenner#define SCTP_TIMER_START	1
27998524Sfenner#define SCTP_TIMER_STOP		2
28098524Sfenner
28198524Sfenner/* running flag states in timer structure */
28298524Sfenner#define SCTP_TIMER_IDLE		0x0
28398524Sfenner#define SCTP_TIMER_EXPIRED	0x1
28498524Sfenner#define SCTP_TIMER_RUNNING	0x2
28598524Sfenner
28698524Sfenner
28798524Sfenner/* number of simultaneous timers running */
28898524Sfenner#define SCTP_MAX_NET_TIMERS     6	/* base of where net timers start */
28998524Sfenner#define SCTP_NUMBER_TIMERS	12	/* allows up to 6 destinations */
29098524Sfenner
29198524Sfenner
29298524Sfenner/* Of course we really don't collect stale cookies, being
29398524Sfenner * folks of decerning taste. However we do count them, if
29498524Sfenner * we get to many before the association comes up.. we
29598524Sfenner * give up. Below is the constant that dictates when
29698524Sfenner * we give it up...this is a implemenation dependant
29798524Sfenner * treatment. In ours we do not ask for a extension of
29898524Sfenner * time, but just retry this many times...
29998524Sfenner */
30098524Sfenner#define SCTP_MAX_STALE_COOKIES_I_COLLECT 10
30198524Sfenner
30298524Sfenner/* max number of TSN's dup'd that I will hold */
30398524Sfenner#define SCTP_MAX_DUP_TSNS      20
30498524Sfenner
30598524Sfenner/* Here we define the types used when
30698524Sfenner * setting the retry ammounts.
30798524Sfenner */
30898524Sfenner/* constants for type of set */
30998524Sfenner#define SCTP_MAXATTEMPT_INIT 2
31098524Sfenner#define SCTP_MAXATTEMPT_SEND 3
31198524Sfenner
31298524Sfenner/* Here we define the default timers and the
31398524Sfenner * default number of attemts we make for
31498524Sfenner * each respective side (send/init).
31598524Sfenner */
31698524Sfenner
31798524Sfenner/* init timer def = 3sec  */
31898524Sfenner#define SCTP_INIT_SEC	3
31998524Sfenner#define SCTP_INIT_NSEC	0
32098524Sfenner
32198524Sfenner/* send timer def = 3 seconds */
32298524Sfenner#define SCTP_SEND_SEC	1
32398524Sfenner#define SCTP_SEND_NSEC	0
32498524Sfenner
32598524Sfenner/* recv timer def = 200ms (in nsec) */
32698524Sfenner#define SCTP_RECV_SEC	0
32798524Sfenner#define SCTP_RECV_NSEC	200000000
32898524Sfenner
32998524Sfenner/* 30 seconds + RTO */
33098524Sfenner#define SCTP_HB_SEC	30
33198524Sfenner#define SCTP_HB_NSEC	0
33298524Sfenner
33398524Sfenner
33498524Sfenner/* 300 ms */
33598524Sfenner#define SCTP_SHUTDOWN_SEC	0
33698524Sfenner#define SCTP_SHUTDOWN_NSEC	300000000
33798524Sfenner
33898524Sfenner#define SCTP_RTO_UPPER_BOUND 60000000 /* 60 sec in micro-second's */
33998524Sfenner#define SCTP_RTO_UPPER_BOUND_SEC 60  /* for the init timer */
34098524Sfenner#define SCTP_RTO_LOWER_BOUND  1000000 /* 1 sec in micro-sec's */
34198524Sfenner
34298524Sfenner#define SCTP_DEF_MAX_INIT 8
34398524Sfenner#define SCTP_DEF_MAX_SEND 10
34498524Sfenner
34598524Sfenner#define SCTP_DEF_PMTU_RAISE 600  /* 10 Minutes between raise attempts */
34698524Sfenner#define SCTP_DEF_PMTU_MIN   600
34798524Sfenner
34898524Sfenner#define SCTP_MSEC_IN_A_SEC  1000
34998524Sfenner#define SCTP_USEC_IN_A_SEC  1000000
35098524Sfenner#define SCTP_NSEC_IN_A_SEC  1000000000
35198524Sfenner
35298524Sfenner
35398524Sfenner/* Events that SCTP will look for, these
35498524Sfenner * are or'd together to declare what SCTP
355127668Sbms * wants. Each select mask/poll list should be
35698524Sfenner * set for the fd, if the bit is on.
35798524Sfenner */
35898524Sfenner#define SCTP_EVENT_READ		0x000001
35998524Sfenner#define SCTP_EVENT_WRITE	0x000002
36098524Sfenner#define SCTP_EVENT_EXCEPT	0x000004
36198524Sfenner
36298524Sfenner/* The following constant is a value for this
36398524Sfenner * particular implemenation. It is quite arbitrary and
364127668Sbms * is used to limit how much data will be queued up to
36598524Sfenner * a sender, waiting for cwnd to be larger than flightSize.
36698524Sfenner * All implementations will need this protection is some
36798524Sfenner * way due to buffer size constraints.
36898524Sfenner */
36998524Sfenner
37098524Sfenner#define SCTP_MAX_OUTSTANDING_DG	10000
37198524Sfenner
37298524Sfenner
37398524Sfenner
374127668Sbms/* This constant (SCTP_MAX_READBUFFER) define
37598524Sfenner * how big the read/write buffer is
376127668Sbms * when we enter the fd event notification
37798524Sfenner * the buffer is put on the stack, so the bigger
37898524Sfenner * it is the more stack you chew up, however it
37998524Sfenner * has got to be big enough to handle the bigest
38098524Sfenner * message this O/S will send you. In solaris
38198524Sfenner * with sockets (not TLI) we end up at a value
38298524Sfenner * of 64k. In TLI we could do partial reads to
38398524Sfenner * get it all in with less hassel.. but we
38498524Sfenner * write to sockets for generality.
38598524Sfenner */
38698524Sfenner#define SCTP_MAX_READBUFFER 65536
38798524Sfenner#define SCTP_ADDRMAX 60
38898524Sfenner
38998524Sfenner/* amount peer is obligated to have in rwnd or
39098524Sfenner * I will abort
39198524Sfenner */
39298524Sfenner#define SCTP_MIN_RWND	1500
39398524Sfenner
39498524Sfenner#define SCTP_WINDOW_MIN	1500	/* smallest rwnd can be */
395127668Sbms#define SCTP_WINDOW_MAX 1048576	/* biggest I can grow rwnd to
39698524Sfenner				 * My playing around suggests a
39798524Sfenner				 * value greater than 64k does not
39898524Sfenner				 * do much, I guess via the kernel
39998524Sfenner				 * limitations on the stream/socket.
40098524Sfenner				 */
40198524Sfenner
40298524Sfenner#define SCTP_MAX_BUNDLE_UP 256	/* max number of chunks I can bundle */
40398524Sfenner
40498524Sfenner/*  I can handle a 1meg re-assembly */
40598524Sfenner#define SCTP_DEFAULT_MAXMSGREASM 1048576
40698524Sfenner
40798524Sfenner
40898524Sfenner#define SCTP_DEFAULT_MAXWINDOW	32768	/* default rwnd size */
40998524Sfenner#define SCTP_DEFAULT_MAXSEGMENT 1500	/* MTU size, this is the default
41098524Sfenner                                         * to which we set the smallestMTU
41198524Sfenner					 * size to. This governs what is the
41298524Sfenner					 * largest size we will use, of course
41398524Sfenner					 * PMTU will raise this up to
414127668Sbms					 * the largest interface MTU or the
41598524Sfenner					 * ceiling below if there is no
41698524Sfenner					 * SIOCGIFMTU.
41798524Sfenner					 */
41898524Sfenner#ifdef LYNX
41998524Sfenner#define DEFAULT_MTU_CEILING  1500 	/* Since Lynx O/S is brain dead
42098524Sfenner					 * in the way it handles the
42198524Sfenner					 * raw IP socket, insisting
42298524Sfenner					 * on makeing its own IP
42398524Sfenner					 * header, we limit the growth
42498524Sfenner					 * to that of the e-net size
42598524Sfenner					 */
42698524Sfenner#else
42798524Sfenner#define DEFAULT_MTU_CEILING  2048	/* If no SIOCGIFMTU, highest value
42898524Sfenner					 * to raise the PMTU to, i.e.
42998524Sfenner					 * don't try to raise above this
43098524Sfenner					 * value. Tune this per your
43198524Sfenner					 * largest MTU interface if your
43298524Sfenner					 * system does not support the
43398524Sfenner					 * SIOCGIFMTU ioctl.
43498524Sfenner					 */
43598524Sfenner#endif
43698524Sfenner#define SCTP_DEFAULT_MINSEGMENT 512	/* MTU size ... if no mtu disc */
43798524Sfenner#define SCTP_HOW_MANY_SECRETS 2		/* how many secrets I keep */
43898524Sfenner/* This is how long a secret lives, NOT how long a cookie lives */
43998524Sfenner#define SCTP_HOW_LONG_COOKIE_LIVE 3600	/* how many seconds the current secret will live */
44098524Sfenner
44198524Sfenner#define SCTP_NUMBER_OF_SECRETS	8	/* or 8 * 4 = 32 octets */
44298524Sfenner#define SCTP_SECRET_SIZE 32		/* number of octets in a 256 bits */
44398524Sfenner
44498524Sfenner#ifdef USE_MD5
44598524Sfenner#define SCTP_SIGNATURE_SIZE 16	/* size of a MD5 signature */
44698524Sfenner#else
44798524Sfenner#define SCTP_SIGNATURE_SIZE 20	/* size of a SLA-1 signature */
44898524Sfenner#endif
44998524Sfenner/* Here are the notification constants
45098524Sfenner * that the code and upper layer will get
45198524Sfenner */
45298524Sfenner
45398524Sfenner/* association is up */
45498524Sfenner#define SCTP_NOTIFY_ASSOC_UP		1
45598524Sfenner
45698524Sfenner/* association is down */
45798524Sfenner#define SCTP_NOTIFY_ASSOC_DOWN		2
45898524Sfenner
45998524Sfenner/* interface on a association is down
46098524Sfenner * and out of consideration for selection.
46198524Sfenner */
46298524Sfenner#define SCTP_NOTIFY_INTF_DOWN		3
46398524Sfenner
46498524Sfenner/* interface on a association is up
46598524Sfenner * and now back in consideration for selection.
46698524Sfenner */
46798524Sfenner#define SCTP_NOTIFY_INTF_UP		4
46898524Sfenner
46998524Sfenner/* The given datagram cannot be delivered
47098524Sfenner * to the peer, this will probably be followed
47198524Sfenner * by a SCTP_NOTFIY_ASSOC_DOWN.
47298524Sfenner */
47398524Sfenner#define SCTP_NOTIFY_DG_FAIL		5
47498524Sfenner
47598524Sfenner/* Sent dg on non-open stream extreme code error!
47698524Sfenner */
47798524Sfenner#define SCTP_NOTIFY_STRDATA_ERR 	6
47898524Sfenner
47998524Sfenner#define SCTP_NOTIFY_ASSOC_ABORTED	7
48098524Sfenner
48198524Sfenner/* The stream ones are not used yet, but could
48298524Sfenner * be when a association opens.
48398524Sfenner */
48498524Sfenner#define SCTP_NOTIFY_PEER_OPENED_STR	8
48598524Sfenner#define SCTP_NOTIFY_STREAM_OPENED_OK	9
48698524Sfenner
48798524Sfenner/* association sees a restart event */
48898524Sfenner#define SCTP_NOTIFY_ASSOC_RESTART	10
48998524Sfenner
49098524Sfenner/* a user requested HB returned */
49198524Sfenner#define SCTP_NOTIFY_HB_RESP             11
49298524Sfenner
49398524Sfenner/* a result from a REL-REQ */
49498524Sfenner#define SCTP_NOTIFY_RELREQ_RESULT_OK		12
49598524Sfenner#define SCTP_NOTIFY_RELREQ_RESULT_FAILED	13
49698524Sfenner
49798524Sfenner/* clock variance is 10ms or 10,000 us's */
49898524Sfenner#define SCTP_CLOCK_GRAINULARITY 10000
49998524Sfenner
50098524Sfenner#define IP_HDR_SIZE 40		/* we use the size of a IP6 header here
50198524Sfenner				 * this detracts a small amount for ipv4
50298524Sfenner				 * but it simplifies the ipv6 addition
50398524Sfenner				 */
50498524Sfenner
50598524Sfenner#define SCTP_NUM_FDS 3
50698524Sfenner
50798524Sfenner/* raw IP filedescriptor */
50898524Sfenner#define SCTP_FD_IP   0
50998524Sfenner/* raw ICMP filedescriptor */
51098524Sfenner#define SCTP_FD_ICMP 1
51198524Sfenner/* processes contact me for requests here */
51298524Sfenner#define SCTP_REQUEST 2
51398524Sfenner
51498524Sfenner
51598524Sfenner#define SCTP_DEAMON_PORT 9899
51698524Sfenner
51798524Sfenner/* Deamon registration message types/responses */
51898524Sfenner#define DEAMON_REGISTER       0x01
51998524Sfenner#define DEAMON_REGISTER_ACK   0x02
52098524Sfenner#define DEAMON_DEREGISTER     0x03
52198524Sfenner#define DEAMON_DEREGISTER_ACK 0x04
52298524Sfenner#define DEAMON_CHECKADDR_LIST 0x05
52398524Sfenner
52498524Sfenner#define DEAMON_MAGIC_VER_LEN 0xff
52598524Sfenner
52698524Sfenner/* max times I will attempt to send a message to deamon */
52798524Sfenner#define SCTP_MAX_ATTEMPTS_AT_DEAMON 5
52898524Sfenner#define SCTP_TIMEOUT_IN_POLL_FOR_DEAMON 1500 /* 1.5 seconds */
52998524Sfenner
53098524Sfenner/* modular comparison */
53198524Sfenner/* True if a > b (mod = M) */
53298524Sfenner#define compare_with_wrap(a, b, M) ((a > b) && ((a - b) < (M >> 1))) || \
53398524Sfenner              ((b > a) && ((b - a) > (M >> 1)))
53498524Sfenner
53598524Sfenner#ifndef TIMEVAL_TO_TIMESPEC
53698524Sfenner#define TIMEVAL_TO_TIMESPEC(tv, ts)			\
53798524Sfenner{							\
53898524Sfenner    (ts)->tv_sec  = (tv)->tv_sec;			\
53998524Sfenner    (ts)->tv_nsec = (tv)->tv_usec * 1000;		\
540127668Sbms}
54198524Sfenner#endif
54298524Sfenner
54398524Sfenner/* pegs */
54498524Sfenner#define SCTP_NUMBER_OF_PEGS 21
54598524Sfenner/* peg index's */
54698524Sfenner#define SCTP_PEG_SACKS_SEEN 0
54798524Sfenner#define SCTP_PEG_SACKS_SENT 1
54898524Sfenner#define SCTP_PEG_TSNS_SENT  2
54998524Sfenner#define SCTP_PEG_TSNS_RCVD  3
55098524Sfenner#define SCTP_DATAGRAMS_SENT 4
55198524Sfenner#define SCTP_DATAGRAMS_RCVD 5
55298524Sfenner#define SCTP_RETRANTSN_SENT 6
55398524Sfenner#define SCTP_DUPTSN_RECVD   7
55498524Sfenner#define SCTP_HBR_RECV	    8
55598524Sfenner#define SCTP_HBA_RECV       9
55698524Sfenner#define SCTP_HB_SENT	   10
55798524Sfenner#define SCTP_DATA_DG_SENT  11
55898524Sfenner#define SCTP_DATA_DG_RECV  12
55998524Sfenner#define SCTP_TMIT_TIMER    13
56098524Sfenner#define SCTP_RECV_TIMER    14
56198524Sfenner#define SCTP_HB_TIMER      15
56298524Sfenner#define SCTP_FAST_RETRAN   16
56398524Sfenner#define SCTP_PEG_TSNS_READ 17
56498524Sfenner#define SCTP_NONE_LFT_TO   18
56598524Sfenner#define SCTP_NONE_LFT_RWND 19
56698524Sfenner#define SCTP_NONE_LFT_CWND 20
56798524Sfenner
56898524Sfenner
56998524Sfenner
57098524Sfenner#endif
57198524Sfenner
572