OpenSS7
SS7 for the
Common Man

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified:

Home Overview Status News Documentation Resources About
   
 Overview
 Status
 News
 Documentation
 Resources
 About

   
Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sctp/sctp.h


File /code/strss7/drivers/sctp/sctp.h



#ifndef __SCTP_H__
#define __SCTP_H__

#ident "@(#) $RCSfile: sctp.h,v $ $Name:  $($Revision: 0.8.2.5 $) $Date: 2003/02/23 09:32:24 $"

#ifndef tid_t
typedef int tid_t;
#endif
/*
 *  =========================================================================
 *
 *  DEFAULT Protocol Values
 *
 *  =========================================================================
 */

#define SCTP_HMAC_NONE      0
#define SCTP_HMAC_SHA_1     1
#define SCTP_HMAC_MD5       2

/* ip defaults */
#define SCTP_DEFAULT_IP_TOS		(0x0)
#define SCTP_DEFAULT_IP_TTL		(64)
#define SCTP_DEFAULT_IP_PROTO		(132)
#define SCTP_DEFAULT_IP_DONTROUTE	(0)
#define SCTP_DEFAULT_IP_BROADCAST	(0)
#define SCTP_DEFAULT_IP_PRIORITY	(0)

/* per association defaults */
#define SCTP_DEFAULT_MAX_INIT_RETRIES	(8)
#define SCTP_DEFAULT_VALID_COOKIE_LIFE	(60*HZ)
#define SCTP_DEFAULT_MAX_SACK_DELAY	(200*HZ/1000)
#define SCTP_DEFAULT_ASSOC_MAX_RETRANS	(10)
#define SCTP_DEFAULT_MAC_TYPE		(SCTP_HMAC_NONE)
#define SCTP_DEFAULT_COOKIE_INC		(1*HZ)
#define SCTP_DEFAULT_THROTTLE_ITVL	(50*HZ/1000)
#define SCTP_DEFAULT_REQ_OSTREAMS	(1)
#define SCTP_DEFAULT_MAX_ISTREAMS	(33)
#define SCTP_DEFAULT_RMEM		(1<<15)
#define SCTP_DEFAULT_PPI		(0)
#define SCTP_DEFAULT_SID		(0)

/* per destination defaults */
#define SCTP_DEFAULT_PATH_MAX_RETRANS	(5)
#define SCTP_DEFAULT_RTO_INITIAL	(3*HZ)
#define SCTP_DEFAULT_RTO_MIN		(1*HZ)
#define SCTP_DEFAULT_RTO_MAX		(60*HZ)
#define SCTP_DEFAULT_HEARTBEAT_ITVL	(30*HZ)

/* ip defaults */
extern uint sctp_default_ip_tos;
extern uint sctp_default_ip_ttl;
extern uint sctp_default_ip_proto;
extern uint sctp_default_ip_dontroute;
extern uint sctp_default_ip_broadcast;
extern uint sctp_default_ip_priority;

/* per association defaults */
extern size_t sctp_default_max_init_retries;
extern size_t sctp_default_valid_cookie_life;
extern size_t sctp_default_max_sack_delay;
extern size_t sctp_default_assoc_max_retrans;
extern size_t sctp_default_mac_type;
extern size_t sctp_default_cookie_inc;
extern size_t sctp_default_throttle_itvl;
extern size_t sctp_default_req_ostreams;
extern size_t sctp_default_max_istreams;
extern size_t sctp_default_rmem;
extern size_t sctp_default_ppi;
extern size_t sctp_default_sid;

/* per destination defaults */
extern size_t sctp_default_path_max_retrans;
extern size_t sctp_default_rto_initial;
extern size_t sctp_default_rto_min;
extern size_t sctp_default_rto_max;
extern size_t sctp_default_heartbeat_itvl;

/*
 *  =========================================================================
 *
 *  DATA STRUCTURES
 *
 *  =========================================================================
 */
struct sctp_dup {
	struct sctp_dup *next;
	struct sctp_dup **prev;
	uint32_t tsn;
};
struct sctp_strm {
	struct sctp_strm *next;			/* linkage to stream list */
	struct sctp_strm **prev;		/* linkage to stream list */
	struct sctp *sp;
	uint16_t sid;				/* stream identifier */
	uint16_t ssn;				/* stream sequence number */
	struct {
		uint32_t ppi;			/* payload protocol id */
		mblk_t *head;			/* head pointer */
		uint more;			/* more data in (E)TSDU */
	} x, n;					/* expedited (x) and normal (n) */
};
struct sctp_saddr {
	struct sctp_saddr *next;		/* linkage for srce address list */
	struct sctp_saddr **prev;		/* linkage for srce address list */
	struct sctp *sp;			/* linkage for srce address list */
	uint32_t saddr;				/* srce address (network order) */
};
struct sctp_daddr {
	struct sctp_daddr *next;		/* linkage for dest address list */
	struct sctp_daddr **prev;		/* linkage for dest address list */
	struct sctp *sp;			/* linkage for dest address list */

	uint32_t daddr;				/* dest address (network order) */
	uint32_t saddr;				/* srce address (network order) */
	uint dif;				/* device interface */

	uint flags;				/* flags for this destination */
	size_t header_len;			/* header length */
	size_t mtu;				/* mtu */

	uint hb_onoff;				/* activation of heartbeats */
	uint hb_fill;				/* fill for heartbeat (PMTUDISC) */
	size_t in_flight;			/* bytes in flight */
	size_t retransmits;			/* retransmits this dest */
	size_t max_retrans;			/* max path retransmits */
	size_t dups;				/* number of duplicates */

	size_t cwnd;				/* congestion window */
	size_t ssthresh;			/* slow start threshold */

	tid_t timer_heartbeat;			/* heartbeat timer (for acks) */
	tid_t timer_retrans;			/* retrans (RTO) timer */
	tid_t timer_idle;			/* idle timer */

	ulong when;				/* last time transmitting */
	size_t ack_accum;			/* accumulator for acks */

	ulong hb_time;				/* time of last heartbeat sent */
	ulong hb_itvl;				/* interval between heartbeats */
	ulong rto_max;				/* maximum RTO value */
	ulong rto_min;				/* minimum RTO value */

	ulong rto;				/* current RTO value */
	ulong rttvar;				/* current RTT variance */
	ulong srtt;				/* current smoothed RTT */

	struct dst_entry *dst_cache;		/* destination cache */

	size_t packets;				/* packet count */
};
/*
 *  Some destination flags.
 */
#define SCTP_DESTF_INACTIVE     0x01	/* DEST is inactive */
#define SCTP_DESTF_HBACTIVE	0x02	/* DEST heartbeats */
#define SCTP_DESTF_TIMEDOUT	0x04	/* DEST timeout occured */
#define SCTP_DESTF_PMTUDISC	0x08	/* DEST pmtu discovered */
#define SCTP_DESTF_ROUTFAIL	0x10	/* DEST routing failure */
#define SCTP_DESTF_UNUSABLE	0x20	/* DEST unusable */
#define SCTP_DESTF_CONGESTD	0x40	/* DEST congested */

#define SCTP_DESTM_DONT_USE	(SCTP_DESTF_INACTIVE| \
				 SCTP_DESTF_UNUSABLE| \
				 SCTP_DESTF_ROUTFAIL| \
				 SCTP_DESTF_CONGESTD| \
				 SCTP_DESTF_TIMEDOUT)
#define SCTP_DESTM_CANT_USE	(SCTP_DESTF_UNUSABLE| \
				 SCTP_DESTF_ROUTFAIL)

struct sctp_ifops;				/* interface operations */

struct sctp {
	struct sctp *next;			/* linkage for master list */
	struct sctp **prev;			/* linkage for master list */

	ushort cmajor;				/* major device number */
	ushort cminor;				/* minor device number */

	queue_t *rq;				/* read queue */
	queue_t *wq;				/* write queue */
	cred_t cred;				/* credentials of opener */
	struct sctp_ifops *ops;			/* interface operations */
	uint i_flags;				/* Interface flags */
	uint i_state;				/* Interface state */
	uint s_state;				/* SCTP state */
	uint options;				/* options flags */
	size_t conind;				/* max number outstanding conn_inds */

	lis_spin_lock_t lock;			/* stream lock */
	void *userq;				/* queue holding this lock */
	queue_t *waitq;				/* queue waiting on locks */

	struct sctp *bnext;			/* linkage for bind hash */
	struct sctp **bprev;			/* linkage for bind hash */
	struct sctp *lnext;			/* linkage for list hash */
	struct sctp **lprev;			/* linkage for list hash */
	struct sctp *pnext;			/* linkage for ptag hash */
	struct sctp **pprev;			/* linkage for ptag hash */
	struct sctp *vnext;			/* linkage for vtag hash */
	struct sctp **vprev;			/* linkage for vtag hash */
	struct sctp *tnext;			/* linkage for tcb hash */
	struct sctp **tprev;			/* linkage for tcb hash */
	uint hashent;				/* vtag cache entry */

	uint ip_tos;				/* IP TOS */
	uint ip_ttl;				/* IP TTL */
	uint ip_proto;				/* IP protocol number */
	uint ip_dontroute;			/* IP localroute */
	uint ip_broadcast;			/* IP broadcast */
	uint ip_priority;			/* IP priority */

	uint16_t sport;				/* loc port (network byte order) */
	uint16_t dport;				/* rem port (network byte order) */
	struct sctp_saddr *saddr;		/* list of loc addresses */
	struct sctp_daddr *daddr;		/* list of rem addresses */
	size_t sanum;				/* number of srce addresses in list */
	size_t danum;				/* number of dest addresses in list */

	struct sctp_daddr *taddr;		/* primary transmit destination address */
	struct sctp_daddr *raddr;		/* retransmission desintation address */
	struct sctp_daddr *caddr;		/* last received destination address */

	struct sctp_strm *ostrm;		/* list of outbound streams */
	struct sctp_strm *istrm;		/* list if inbound streams */
	size_t osnum;				/* number of outbound stream structures */
	size_t isnum;				/* number of inbound stream structures */
	struct sctp_strm *ostr;			/* current output stream */
	struct sctp_strm *istr;			/* current input stream */

	uint16_t req_ostr;			/* requested outbound streams */
	uint16_t max_istr;			/* maximum inbound streams */

	ulong max_sack;				/* maximum sack delay */
	ulong throttle;				/* throttle hb interval */
	ulong ck_life;				/* valid cookie life */
	ulong ck_inc;				/* cookie increment */
	uint hmac;				/* hmac type */

	uint16_t sid;				/* default sid */
	uint32_t ppi;				/* default ppi */

	ulong rto_ini;				/* default rto initial */
	ulong rto_min;				/* default rto minimum */
	ulong rto_max;				/* default rto maximum */
	size_t rtx_path;			/* default path max retrans */
	ulong hb_itvl;				/* default hb interval */

	mblk_t *retry;				/* msg to retry on timer expiry */

	bufq_t rcvq;				/* read queue */
	bufq_t sndq;				/* write queue */
	bufq_t urgq;				/* urgent queue */
	bufq_t errq;				/* error queue */
	bufq_t conq;				/* connect queue */

	bufq_t oooq;				/* out of order queue */
	struct sctp_tcb *gaps;			/* gaps acks for this stream */
	size_t ngaps;				/* number of gap reports in list */
	size_t nunds;				/* number of undelivered in list */
	bufq_t dupq;				/* duplicate queue */
	struct sctp_tcb *dups;			/* dup tsns for this stream */
	size_t ndups;				/* number of dup reports in list */
	bufq_t rtxq;				/* retransmit queue */
	size_t nrtxs;				/* number of retransmits in list */
	bufq_t ackq;				/* pending acknowledgement queue */

	uint16_t n_ostr;			/* number of outbound streams */
	uint16_t n_istr;			/* number of inbound streams */

	uint32_t v_tag;				/* locl verification tag */
	uint32_t a_rwnd;			/* locl receive window */

	uint32_t p_tag;				/* peer verification tag */
	uint32_t p_rwnd;			/* peer receive window */

	uint32_t t_tsn;				/* transmit TSN */
	uint32_t t_ack;				/* transmit TSN cum acked */
	uint32_t r_ack;				/* received TSN cum acked */

	uint sackf;				/* sack flags for association */
	uint flags;				/* flags */
	uint pmtu;				/* path MTU for association */

	size_t in_flight;			/* number of bytes in flight */
	size_t retransmits;			/* number of retransmits this assoc */
	size_t max_retrans;			/* max association retransmits */
	size_t max_inits;			/* max init retransmits */

	tid_t timer_init;			/* init timer */
	tid_t timer_cookie;			/* cookie timer */
	tid_t timer_shutdown;			/* shutdown timer */
	tid_t timer_sack;			/* sack timer */
};
/*
 *  Some flags.
 */
#define SCTP_FLAG_REC_CONF_OPT		0x00000001
#define SCTP_FLAG_EX_DATA_OPT		0x00000002
#define SCTP_FLAG_DEFAULT_RC_SEL	0x00000004
#define SCTP_FLAG_NEED_CLEANUP		0x00000008
/*
 *  Some sack flags.
 */
#define SCTP_SACKF_NEW          0x01	/* SACK for new data RFC 2960 6.2 */
#define SCTP_SACKF_WUP		0x02	/* SACK for wakeup RFC 2960 6.2 */
#define SCTP_SACKF_GAP          0x04	/* SACK for lost data RFC 2960 7.2.4 */
#define SCTP_SACKF_DUP          0x08	/* SACK for duplic data RFC 2960 6.2 */
#define SCTP_SACKF_URG          0x10	/* SACK for urgent data RFC 2960 ??? */
#define SCTP_SACKF_WND          0x20	/* SACK for new a_rwnd RFC 2960 6.2 */
#define SCTP_SACKF_TIM          0x40	/* SACK for timeout RFC 2960 6.2 */
#define SCTP_SACKF_NOD		0x80	/* SACK no delay RFC 2960 9.2 */
#define SCTP_SACKF_NOW		0xfe	/* SACK forced mask */
/*
 *  Some options flags.
 */
#define SCTP_OPTION_DROPPING	0x01	/* stream will drop packets */
#define SCTP_OPTION_BREAK	0x02	/* stream will break dest #1 and 2 one way */
#define SCTP_OPTION_DBREAK	0x04	/* stream will break dest both ways */
#define SCTP_OPTION_RANDOM	0x08	/* stream will drop packets at random */
#define SCTP_OPTION_NAGLE	0x10	/* stream will nagle bundling normal data */
#define SCTP_OPTION_CORK	0x20	/* stream will cork bundling normal data */

typedef struct sctp sctp_t;
typedef struct sctp_strm sctp_strm_t;
typedef struct sctp_saddr sctp_saddr_t;
typedef struct sctp_daddr sctp_daddr_t;

#define SCTP_PRIV(__q) ((sctp_t *)(__q)->q_ptr)

/*
 *  =========================================================================
 *
 *  SCTP STATES
 *
 *  =========================================================================
 */

#define SCTP_CLOSED		 0	/* CLOSED */
#define SCTP_LISTEN		 1	/* LISTEN */
#define SCTP_COOKIE_WAIT	 2	/* COOKIE-WAIT */
#define SCTP_COOKIE_ECHOED	 3	/* COOKIE-ECHOED */
#define SCTP_ESTABLISHED	 4	/* ESTABLISHED */
#define SCTP_SHUTDOWN_PENDING	 5	/* SHUTDOWN-PENDING */
#define SCTP_SHUTDOWN_SENT	 6	/* SHUTDOWN-SENT */
#define SCTP_SHUTDOWN_RECEIVED	 7	/* SHUTDOWN-RECEIVED */
#define SCTP_SHUTDOWN_RECVWAIT	 8	/* SHUTDOWN-RECEIVED */
#define SCTP_SHUTDOWN_ACK_SENT	 9	/* SHUTDOWN-ACK-SENT */
#define SCTP_UNREACHABLE	10	/* (not used) */
#define SCTP_MAX_STATES		 9

#define SCTPF_CLOSED             (1<<SCTP_CLOSED		)
#define SCTPF_LISTEN             (1<<SCTP_LISTEN		)
#define SCTPF_COOKIE_WAIT        (1<<SCTP_COOKIE_WAIT		)
#define SCTPF_COOKIE_ECHOED      (1<<SCTP_COOKIE_ECHOED		)
#define SCTPF_ESTABLISHED        (1<<SCTP_ESTABLISHED		)
#define SCTPF_SHUTDOWN_PENDING   (1<<SCTP_SHUTDOWN_PENDING	)
#define SCTPF_SHUTDOWN_SENT      (1<<SCTP_SHUTDOWN_SENT		)
#define SCTPF_SHUTDOWN_RECEIVED  (1<<SCTP_SHUTDOWN_RECEIVED	)
#define SCTPF_SHUTDOWN_RECVWAIT  (1<<SCTP_SHUTDOWN_RECVWAIT	)
#define SCTPF_SHUTDOWN_ACK_SENT  (1<<SCTP_SHUTDOWN_ACK_SENT	)

#define SCTPF_OPENING		 (SCTPF_COOKIE_WAIT| \
				  SCTPF_COOKIE_ECHOED)

#define SCTPF_CLOSING		 (SCTPF_SHUTDOWN_SENT| \
				  SCTPF_SHUTDOWN_ACK_SENT)

#define SCTPF_CONNECTED		 (SCTPF_ESTABLISHED| \
				  SCTPF_SHUTDOWN_PENDING| \
				  SCTPF_SHUTDOWN_RECEIVED| \
				  SCTPF_SHUTDOWN_RECVWAIT)

#define	SCTPF_DISCONNECTED	 (SCTPF_CLOSED| \
				  SCTPF_LISTEN| \
				  SCTPF_UNREACHABLE)

#define SCTPF_SENDING		 (SCTPF_COOKIE_ECHOED| \
				  SCTPF_ESTABLISHED| \
				  SCTPF_SHUTDOWN_PENDING| \
				  SCTPF_SHUTDOWN_RECEIVED| \
				  SCTPF_SHUTDOWN_RECVWAIT)

#define SCTPF_RECEIVING		 (SCTPF_COOKIE_ECHOED| \
				  SCTPF_ESTABLISHED| \
				  SCTPF_SHUTDOWN_PENDING| \
				  SCTPF_SHUTDOWN_SENT)

#define SCTPF_NEEDABORT		 (SCTPF_COOKIE_ECHOED| \
				  SCTPF_ESTABLISHED| \
				  SCTPF_SHUTDOWN_PENDING| \
				  SCTPF_SHUTDOWN_RECEIVED| \
				  SCTPF_SHUTDOWN_RECVWAIT| \
				  SCTPF_SHUTDOWN_SENT)

#define SCTPF_HAVEUSER		 (SCTPF_COOKIE_WAIT| \
				  SCTPF_COOKIE_ECHOED| \
				  SCTPF_ESTABLISHED| \
				  SCTPF_SHUTDOWN_PENDING| \
				  SCTPF_SHUTDOWN_RECEIVED| \
				  SCTPF_SHUTDOWN_SENT)

#endif				/* __SCTP_H__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sctp/sctp.h

OpenSS7
SS7 for the
Common Man
Home Overview Status News Documentation Resources About

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified: