📄 inet.c
字号:
#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 + -