⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inet.c

📁 This a separate release of the OpenSS7 X/Open XTI/TLI library, TLI modules (timod, tirdwr) and the I
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifdef TS_WACK_OPTREQ#define TSF_WACK_OPTREQ	( 1 << TS_WACK_OPTREQ	)#endif#define TSF_WACK_CREQ	( 1 << TS_WACK_CREQ	)#define TSF_WCON_CREQ	( 1 << TS_WCON_CREQ	)#define TSF_WRES_CIND	( 1 << TS_WRES_CIND	)#define TSF_WACK_CRES	( 1 << TS_WACK_CRES	)#define TSF_DATA_XFER	( 1 << TS_DATA_XFER	)#define TSF_WIND_ORDREL	( 1 << TS_WIND_ORDREL	)#define TSF_WREQ_ORDREL	( 1 << TS_WREQ_ORDREL	)#define TSF_WACK_DREQ6	( 1 << TS_WACK_DREQ6	)#define TSF_WACK_DREQ7	( 1 << TS_WACK_DREQ7	)#define TSF_WACK_DREQ9	( 1 << TS_WACK_DREQ9	)#define TSF_WACK_DREQ10	( 1 << TS_WACK_DREQ10	)#define TSF_WACK_DREQ11	( 1 << TS_WACK_DREQ11	)#define TSF_NOSTATES	( 1 << TS_NOSTATES	)#define TSM_WACK_DREQ	(TSF_WACK_DREQ6 \			|TSF_WACK_DREQ7 \			|TSF_WACK_DREQ9 \			|TSF_WACK_DREQ10 \			|TSF_WACK_DREQ11)#define TSM_LISTEN	(TSF_IDLE \			|TSF_WRES_CIND)#define TSM_CONNECTED	(TSF_WCON_CREQ\			|TSF_WRES_CIND\			|TSF_DATA_XFER\			|TSF_WIND_ORDREL\			|TSF_WREQ_ORDREL)#define TSM_DISCONN	(TSF_IDLE\			|TSF_UNBND)#define TSM_INDATA	(TSF_DATA_XFER\			|TSF_WIND_ORDREL)#define TSM_OUTDATA	(TSF_DATA_XFER\			|TSF_WREQ_ORDREL)#ifndef T_PROVIDER#define T_PROVIDER  0#define T_USER	    1#endif/*   Socket state masks  *//*   TCP state masks  */#define TCPM_CLOSING	(TCPF_CLOSE\			|TCPF_TIME_WAIT\			|TCPF_CLOSE_WAIT)#define TCPM_CONNIND	(TCPF_SYN_RECV\			|TCPF_ESTABLISHED\			|TCPF_LISTEN)/* *  ========================================================================= * *  IP Private Datastructures * *  ========================================================================= */typedef struct ss_options {	unsigned char flags[12];	/* twelve bytes of flags for 96 flags */	struct {		t_uscalar_t debug[4];	/* XTI_DEBUG */		struct t_linger linger;	/* XTI_LINGER */		t_uscalar_t rcvbuf;	/* XTI_RCVBUF */		t_uscalar_t rcvlowat;	/* XTI_RCVLOWAT */		t_uscalar_t sndbuf;	/* XTI_SNDBUF */		t_uscalar_t sndlowat;	/* XTI_SNDLOWAT */	} xti;	struct {		unsigned char options[40];	/* T_IP_OPTIONS */		unsigned char tos;	/* T_IP_TOS */		unsigned char ttl;	/* T_IP_TTL */		unsigned int reuseaddr;	/* T_IP_REUSEADDR */		unsigned int dontroute;	/* T_IP_DONTROUTE */		unsigned int broadcast;	/* T_IP_BROADCAST */		uint32_t addr;		/* T_IP_ADDR */	} ip;	struct {		t_uscalar_t checksum;	/* T_UDP_CHECKSUM */	} udp;	struct {		t_uscalar_t nodelay;	/* T_TCP_NODELAY */		t_uscalar_t maxseg;	/* T_TCP_MAXSEG */		struct t_kpalive keepalive;	/* T_TCP_KEEPALIVE */		t_uscalar_t cork;	/* T_TCP_CORK */		t_uscalar_t keepidle;	/* T_TCP_KEEPIDLE */		t_uscalar_t keepitvl;	/* T_TCP_KEEPINTVL */		t_uscalar_t keepcnt;	/* T_TCP_KEEPCNT */		t_uscalar_t syncnt;	/* T_TCP_SYNCNT */		t_uscalar_t linger2;	/* T_TCP_LINGER2 */		t_uscalar_t defer_accept;	/* T_TCP_DEFER_ACCEPT */		t_uscalar_t window_clamp;	/* T_TCP_WINDOW_CLAMP */		struct t_tcp_info info;	/* T_TCP_INFO */		t_uscalar_t quickack;	/* T_TCP_QUICKACK */	} tcp;#if defined HAVE_OPENSS7_SCTP	struct {		t_uscalar_t nodelay;	/* T_SCTP_NODELAY */		t_uscalar_t maxseg;	/* T_SCTP_MAXSEG */		t_uscalar_t cork;	/* T_SCTP_CORK */		t_uscalar_t ppi;	/* T_SCTP_PPI */		t_uscalar_t sid;	/* T_SCTP_SID */		t_uscalar_t ssn;	/* T_SCTP_SSN */		t_uscalar_t tsn;	/* T_SCTP_TSN */		t_uscalar_t recvopt;	/* T_SCTP_RECVOPT */		t_uscalar_t cookie_life;	/* T_SCTP_COOKIE_LIFE */		t_uscalar_t sack_delay;	/* T_SCTP_SACK_DELAY */		t_uscalar_t path_max_retrans;	/* T_SCTP_PATH_MAX_RETRANS */		t_uscalar_t assoc_max_retrans;	/* T_SCTP_ASSOC_MAX_RETRANS */		t_uscalar_t max_init_retries;	/* T_SCTP_MAX_INIT_RETRIES */		t_uscalar_t heartbeat_itvl;	/* T_SCTP_HEARTBEAT_ITVL */		t_uscalar_t rto_initial;	/* T_SCTP_RTO_INITIAL */		t_uscalar_t rto_min;	/* T_SCTP_RTO_MIN */		t_uscalar_t rto_max;	/* T_SCTP_RTO_MAX */		t_uscalar_t ostreams;	/* T_SCTP_OSTREAMS */		t_uscalar_t istreams;	/* T_SCTP_ISTREAMS */		t_uscalar_t cookie_inc;	/* T_SCTP_COOKIE_INC */		t_uscalar_t throttle_itvl;	/* T_SCTP_THROTTLE_ITVL */		t_uscalar_t mac_type;	/* T_SCTP_MAC_TYPE */		t_uscalar_t cksum_type;	/* T_SCTP_CKSUM_TYPE */		struct t_sctp_hb hb;	/* T_SCTP_HB */		struct t_sctp_rto rto;	/* T_SCTP_RTO */		struct {			struct t_sctp_status status;			struct t_sctp_dest_status dest_status;		} status;		/* T_SCTP_STATUS */		t_uscalar_t debug;	/* T_SCTP_DEBUG */#if defined CONFIG_SCTP_ECN		t_uscalar_t ecn;	/* T_SCTP_ECN */#endif#if defined CONFIG_SCTP_ADD_IP || defined CONFIG_SCTP_ADAPTATION_LAYER_INFO		t_uscalar_t ali;	/* T_SCTP_ALI */#endif#if defined CONFIG_SCTP_ADD_IP		t_uscalar_t add;	/* T_SCTP_ADD */		t_uscalar_t set;	/* T_SCTP_SET */		t_uscalar_t add_ip;	/* T_SCTP_ADD_IP */		t_uscalar_t del_ip;	/* T_SCTP_DEL_IP */		t_uscalar_t set_ip;	/* T_SCTP_SET_IP */#endif#if defined CONFIG_SCTP_PARTIAL_RELIABILITY		t_uscalar_t pr;		/* T_SCTP_PR */#endif#if defined CONFIG_SCTP_LIFETIMES || defined CONFIG_SCTP_PARTIAL_RELIABILITY		t_uscalar_t lifetime;	/* T_SCTP_LIFETIME */#endif		t_uscalar_t disposition;	/* T_SCTP_DISPOSITION */		t_uscalar_t max_burst;	/* T_SCTP_MAX_BURST */	} sctp;#endif					/* defined HAVE_OPENSS7_SCTP */} ss_options_t;typedef struct ss_profile {	struct {		uint family;		uint type;		uint protocol;	} prot;	struct T_info_ack info;} ss_profile_t;typedef struct ss_protocol {	struct ss_protocol *next;	/* list linkage */	struct ss_protocol **prev;	/* list linkage */	atomic_t refcnt;		/* reference count */	spinlock_t lock;		/* structure lock */	void (*put) (struct ss_protocol *);	/* release function */	struct ss_protocol *(*get) (struct ss_protocol *);	/* acquire function */	ulong type;			/* structure type */	ulong id;			/* structure id */	ulong state;			/* state */	ulong flags;			/* flags */	int ps_family;	int ps_type;	int ps_protocol;	dev_t ps_dev;	int ps_flags;} ss_protocol_t;struct ss_protocol *ss_protosw = NULL;typedef struct inet {	struct inet *next;		/* list of all IP-Users */	struct inet **prev;		/* list of all IP-Users */	size_t refcnt;			/* structure reference count */	spinlock_t lock;		/* structure lock */	ushort cmajor;			/* major device number */	ushort cminor;			/* minor device number */	queue_t *rq;			/* associated read queue */	queue_t *wq;			/* associated write queue */	cred_t cred;			/* credientials */	spinlock_t qlock;		/* queue lock */	queue_t *rwait;			/* RD queue waiting on lock */	queue_t *wwait;			/* WR queue waiting on lock */	int users;			/* lock holders */	uint rbid;			/* RD buffer call id */	uint wbid;			/* WR buffer call id */	int ioc_state;			/* transparent ioctl state */	ushort port;			/* port/protocol number */	int tcp_state;			/* tcp state history */	ss_profile_t p;			/* protocol profile */	struct {		void (*state_change) (struct sock *);		void (*data_ready) (struct sock *, int);		void (*write_space) (struct sock *);		void (*error_report) (struct sock *);	} cb_save;			/* call back holder */	struct sockaddr src;		/* bound address */	struct sockaddr dst;		/* connected address */	ss_options_t options;		/* protocol options */	unsigned char _pad[40];		/* pad for options */	bufq_t conq;			/* connection queue */	uint conind;			/* number of connection indications */	struct socket *sock;		/* socket pointer */} ss_t;#define PRIV(__q) ((ss_t *)((__q)->q_ptr))#define SOCK_PRIV(__sk) ((ss_t *)(__sk)->user_data)#define xti_default_debug		{ 0, }#define xti_default_linger		(struct t_linger){T_YES, 120}#define xti_default_rcvbuf		SK_RMEM_MAX#define xti_default_rcvlowat		1#define xti_default_sndbuf		SK_WMEM_MAX#define xti_default_sndlowat		1#define ip_default_options		{ 0, }#define ip_default_tos			0#define ip_default_ttl			64#define ip_default_reuseaddr		T_NO#define ip_default_dontroute		T_NO#define ip_default_broadcast		T_NO#define udp_default_checksum		T_YES#define tcp_default_nodelay		T_NO#define tcp_default_maxseg		536#define tcp_default_keepalive		(struct t_kpalive){ T_YES, 1 }#define sctp_default_nodelay		T_NO#define sctp_default_maxseg		536#define sctp_default_cork		T_NO#define sctp_default_ppi		0#define sctp_default_sid		0#define sctp_default_ssn		T_UNSPEC#define sctp_default_tsn		T_UNSPEC#define sctp_default_recvopt		T_YES#define sctp_default_cookie_life	60	/* seconds */#define sctp_default_sack_delay		200	/* milliseconds */#define sctp_default_path_max_retrans	5#define sctp_default_assoc_max_retrans	10#define sctp_default_max_init_retries	8#define sctp_default_heartbeat_itvl	30	/* seconds */#define sctp_default_rto_initial	3000	/* milliseconds */#define sctp_default_rto_min		1000	/* milliseconds */#define sctp_default_rto_max		60000	/* milliseconds */#define sctp_default_ostreams		1#define sctp_default_istreams		33#define sctp_default_cookie_inc		1000	/* milliseconds */#define sctp_default_throttle_itvl	50	/* milliseconds */#if defined CONFIG_SCTP_HMAC_MD5#define sctp_default_mac_type		T_SCTP_HMAC_MD5#elif defined CONFIG_SCTP_HMAC_SHA1#define sctp_default_mac_type		T_SCTP_HMAC_SHA1#else#define sctp_default_mac_type		T_SCTP_HMAC_NONE#endif#if defined CONFIG_SCTP_CRC32C#define sctp_default_cksum_type		T_SCTP_CSUM_CRC32C#else#define sctp_default_cksum_type		T_SCTP_CSUM_ADLER32#endif#define sctp_default_hb			(struct t_sctp_hb){ INADDR_ANY, T_YES, sctp_default_heartbeat_itvl }#define sctp_default_rto		(struct t_sctp_rto){ INADDR_ANY, sctp_default_rto_initial, sctp_default_rto_min, sctp_default_rto_max, sctp_default_path_max_retrans }#define sctp_default_sctp_status	(struct t_sctp_status){ 0, }#define sctp_default_dest_status	(struct t_sctp_dest_status){ INADDR_ANY, }#define sctp_default_status		{ { 0, }, { INADDR_ANY, } }#define sctp_default_debug		0#if defined CONFIG_SCTP_ECN#define sctp_default_ecn		T_YES#else#define sctp_default_ecn		T_NO#endif#define sctp_default_ali		0#define sctp_default_add		T_NO#define sctp_default_set		T_NO#define sctp_default_add_ip		INADDR_ANY#define sctp_default_del_ip		INADDR_ANY#define sctp_default_set_ip		INADDR_ANY#define sctp_default_pr			T_NO#define sctp_default_lifetime		T_UNSPEC#define sctp_default_disposition	T_UNSPEC#define sctp_default_max_burst		4enum {	_T_BIT_XTI_DEBUG = 0,	_T_BIT_XTI_LINGER,	_T_BIT_XTI_RCVBUF,	_T_BIT_XTI_RCVLOWAT,	_T_BIT_XTI_SNDBUF,	_T_BIT_XTI_SNDLOWAT,	_T_BIT_IP_OPTIONS,	_T_BIT_IP_TOS,	_T_BIT_IP_TTL,	_T_BIT_IP_REUSEADDR,	_T_BIT_IP_DONTROUTE,	_T_BIT_IP_BROADCAST,	_T_BIT_IP_ADDR,	_T_BIT_IP_RETOPTS,	_T_BIT_TCP_NODELAY,	_T_BIT_TCP_MAXSEG,	_T_BIT_TCP_KEEPALIVE,	_T_BIT_TCP_CORK,	_T_BIT_TCP_KEEPIDLE,	_T_BIT_TCP_KEEPINTVL,	_T_BIT_TCP_KEEPCNT,	_T_BIT_TCP_SYNCNT,	_T_BIT_TCP_LINGER2,	_T_BIT_TCP_DEFER_ACCEPT,	_T_BIT_TCP_WINDOW_CLAMP,	_T_BIT_TCP_INFO,	_T_BIT_TCP_QUICKACK,	_T_BIT_UDP_CHECKSUM,#if defined HAVE_OPENSS7_SCTP	_T_BIT_SCTP_NODELAY,	_T_BIT_SCTP_MAXSEG,	_T_BIT_SCTP_CORK,	_T_BIT_SCTP_PPI,	_T_BIT_SCTP_SID,	_T_BIT_SCTP_SSN,	_T_BIT_SCTP_TSN,	_T_BIT_SCTP_RECVOPT,	_T_BIT_SCTP_COOKIE_LIFE,	_T_BIT_SCTP_SACK_DELAY,	_T_BIT_SCTP_PATH_MAX_RETRANS,	_T_BIT_SCTP_ASSOC_MAX_RETRANS,	_T_BIT_SCTP_MAX_INIT_RETRIES,	_T_BIT_SCTP_HEARTBEAT_ITVL,	_T_BIT_SCTP_RTO_INITIAL,	_T_BIT_SCTP_RTO_MIN,	_T_BIT_SCTP_RTO_MAX,	_T_BIT_SCTP_OSTREAMS,	_T_BIT_SCTP_ISTREAMS,	_T_BIT_SCTP_COOKIE_INC,	_T_BIT_SCTP_THROTTLE_ITVL,	_T_BIT_SCTP_MAC_TYPE,	_T_BIT_SCTP_CKSUM_TYPE,	_T_BIT_SCTP_HB,	_T_BIT_SCTP_RTO,	_T_BIT_SCTP_STATUS,	_T_BIT_SCTP_DEBUG,	_T_BIT_SCTP_ECN,	_T_BIT_SCTP_ALI,	_T_BIT_SCTP_ADD,	_T_BIT_SCTP_SET,	_T_BIT_SCTP_ADD_IP,	_T_BIT_SCTP_DEL_IP,	_T_BIT_SCTP_SET_IP,	_T_BIT_SCTP_PR,	_T_BIT_SCTP_LIFETIME,	_T_BIT_SCTP_DISPOSITION,	_T_BIT_SCTP_MAX_BURST,#endif					/* defined HAVE_OPENSS7_SCTP */};typedef struct ss_event {	struct sock *sk;		/* sock (child) for event */	int state;			/* state at time of event */} ss_event_t;STATIC spinlock_t ss_lock;		/* protects ss_opens lists */STATIC ss_t *ss_opens = NULL;#if 0/*   for later when we support default destinations and default listeners  */STATIC ss_t *ss_dflt_dest = NULL;STATIC ss_t *ss_dflt_lstn = NULL;#endif/* *  ========================================================================= * *  Socket Callbacks * *  ========================================================================= */STATIC void ss_state_change(struct sock *sk);STATIC void ss_write_space(struct sock *sk);STATIC void ss_error_report(struct sock *sk);STATIC void ss_data_ready(struct sock *sk, int len);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -