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

📄 test-sctp_n.c

📁 OpenSS7 This the fourth public release of the OpenSS7 Master Package. See README in the release for
💻 C
📖 第 1 页 / 共 5 页
字号:
static voidsignal_handler(int signum){	last_signum = signum;	if (signum == SIGALRM)		timer_timeout = 1;	return;}static intstart_signals(void){	sigset_t mask;	struct sigaction act;	act.sa_handler = signal_handler;//      act.sa_flags = SA_RESTART | SA_ONESHOT;	act.sa_flags = 0;	sigemptyset(&act.sa_mask);	if (sigaction(SIGALRM, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGPOLL, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGURG, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGPIPE, &act, NULL))		return __RESULT_FAILURE;	if (sigaction(SIGHUP, &act, NULL))		return __RESULT_FAILURE;	sigemptyset(&mask);	sigaddset(&mask, SIGALRM);	sigaddset(&mask, SIGPOLL);	sigaddset(&mask, SIGURG);	sigaddset(&mask, SIGPIPE);	sigaddset(&mask, SIGHUP);	sigprocmask(SIG_UNBLOCK, &mask, NULL);	siginterrupt(SIGALRM, 1);	siginterrupt(SIGPOLL, 1);	siginterrupt(SIGURG, 1);	siginterrupt(SIGPIPE, 1);	siginterrupt(SIGHUP, 1);	return __RESULT_SUCCESS;}/* *  Start an interval timer as the overall test timer. */static intstart_tt(long duration){	struct itimerval setting = {		{0, 0},		{duration / 1000, (duration % 1000) * 1000}	};	if (duration == (long) INFINITE_WAIT)		return __RESULT_SUCCESS;	if (start_signals())		return __RESULT_FAILURE;	if (setitimer(ITIMER_REAL, &setting, NULL))		return __RESULT_FAILURE;	timer_timeout = 0;	return __RESULT_SUCCESS;}#if 0static intstart_st(long duration){	long sdur = (duration + timer_scale - 1) / timer_scale;	return start_tt(sdur);}#endifstatic intstop_signals(void){	int result = __RESULT_SUCCESS;	sigset_t mask;	struct sigaction act;	act.sa_handler = SIG_DFL;	act.sa_flags = 0;	sigemptyset(&act.sa_mask);	if (sigaction(SIGALRM, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGPOLL, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGURG, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGPIPE, &act, NULL))		result = __RESULT_FAILURE;	if (sigaction(SIGHUP, &act, NULL))		result = __RESULT_FAILURE;	sigemptyset(&mask);	sigaddset(&mask, SIGALRM);	sigaddset(&mask, SIGPOLL);	sigaddset(&mask, SIGURG);	sigaddset(&mask, SIGPIPE);	sigaddset(&mask, SIGHUP);	sigprocmask(SIG_BLOCK, &mask, NULL);	return (result);}static intstop_tt(void){	struct itimerval setting = { {0, 0}, {0, 0} };	int result = __RESULT_SUCCESS;	if (setitimer(ITIMER_REAL, &setting, NULL))		return __RESULT_FAILURE;	if (stop_signals() != __RESULT_SUCCESS)		result = __RESULT_FAILURE;	timer_timeout = 0;	return (result);}/* *  Addresses */#if 1#ifndef SCTP_VERSION_2addr_t addrs[4];#else				/* SCTP_VERSION_2 */struct sockaddr_in addrs[4][3];#endif				/* SCTP_VERSION_2 */#elsestruct sockaddr_in addrs[4];#endifint anums[4] = { 3, 3, 3, 3 };#define TEST_PORT_NUMBERunsigned short ports[4] = { TEST_PORT_NUMBER, TEST_PORT_NUMBER+1, TEST_PORT_NUMBER+2, TEST_PORT_NUMBER+3 };const char *addr_strings[4] = { "127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4" };/* *  Options */N_qos_sel_data_sctp_t qos_data = {	.n_qos_type = N_QOS_SEL_DATA_SCTP,	.ppi = 10,	.sid = 0,	.ssn = 0,	.tsn = 0,	.more = 0,};N_qos_sel_conn_sctp_t qos_conn = {	.n_qos_type = N_QOS_SEL_CONN_SCTP,	.i_streams = 1,	.o_streams = 1,};N_qos_sel_info_sctp_t qos_info = {	.n_qos_type = N_QOS_SEL_INFO_SCTP,	.i_streams = 1,	.o_streams = 1,	.ppi = 10,	.sid = 0,	.max_inits = 12,	.max_retrans = 12,	.ck_life = -1,	.ck_inc = -1,	.hmac = -1,	.throttle = -1,	.max_sack = 0,	.rto_ini = 0,	.rto_min = 0,	.rto_max = 0,	.rtx_path = 0,	.hb_itvl = 200,	.options = 0,};char *errno_string(long err){	switch (err) {	case 0:		return ("ok");	case EPERM:		return ("[EPERM]");	case ENOENT:		return ("[ENOENT]");	case ESRCH:		return ("[ESRCH]");	case EINTR:		return ("[EINTR]");	case EIO:		return ("[EIO]");	case ENXIO:		return ("[ENXIO]");	case E2BIG:		return ("[E2BIG]");	case ENOEXEC:		return ("[ENOEXEC]");	case EBADF:		return ("[EBADF]");	case ECHILD:		return ("[ECHILD]");	case EAGAIN:		return ("[EAGAIN]");	case ENOMEM:		return ("[ENOMEM]");	case EACCES:		return ("[EACCES]");	case EFAULT:		return ("[EFAULT]");	case ENOTBLK:		return ("[ENOTBLK]");	case EBUSY:		return ("[EBUSY]");	case EEXIST:		return ("[EEXIST]");	case EXDEV:		return ("[EXDEV]");	case ENODEV:		return ("[ENODEV]");	case ENOTDIR:		return ("[ENOTDIR]");	case EISDIR:		return ("[EISDIR]");	case EINVAL:		return ("[EINVAL]");	case ENFILE:		return ("[ENFILE]");	case EMFILE:		return ("[EMFILE]");	case ENOTTY:		return ("[ENOTTY]");	case ETXTBSY:		return ("[ETXTBSY]");	case EFBIG:		return ("[EFBIG]");	case ENOSPC:		return ("[ENOSPC]");	case ESPIPE:		return ("[ESPIPE]");	case EROFS:		return ("[EROFS]");	case EMLINK:		return ("[EMLINK]");	case EPIPE:		return ("[EPIPE]");	case EDOM:		return ("[EDOM]");	case ERANGE:		return ("[ERANGE]");	case EDEADLK:		return ("[EDEADLK]");	case ENAMETOOLONG:		return ("[ENAMETOOLONG]");	case ENOLCK:		return ("[ENOLCK]");	case ENOSYS:		return ("[ENOSYS]");	case ENOTEMPTY:		return ("[ENOTEMPTY]");	case ELOOP:		return ("[ELOOP]");	case ENOMSG:		return ("[ENOMSG]");	case EIDRM:		return ("[EIDRM]");	case ECHRNG:		return ("[ECHRNG]");	case EL2NSYNC:		return ("[EL2NSYNC]");	case EL3HLT:		return ("[EL3HLT]");	case EL3RST:		return ("[EL3RST]");	case ELNRNG:		return ("[ELNRNG]");	case EUNATCH:		return ("[EUNATCH]");	case ENOCSI:		return ("[ENOCSI]");	case EL2HLT:		return ("[EL2HLT]");	case EBADE:		return ("[EBADE]");	case EBADR:		return ("[EBADR]");	case EXFULL:		return ("[EXFULL]");	case ENOANO:		return ("[ENOANO]");	case EBADRQC:		return ("[EBADRQC]");	case EBADSLT:		return ("[EBADSLT]");	case EBFONT:		return ("[EBFONT]");	case ENOSTR:		return ("[ENOSTR]");	case ENODATA:		return ("[ENODATA]");	case ETIME:		return ("[ETIME]");	case ENOSR:		return ("[ENOSR]");	case ENONET:		return ("[ENONET]");	case ENOPKG:		return ("[ENOPKG]");	case EREMOTE:		return ("[EREMOTE]");	case ENOLINK:		return ("[ENOLINK]");	case EADV:		return ("[EADV]");	case ESRMNT:		return ("[ESRMNT]");	case ECOMM:		return ("[ECOMM]");	case EPROTO:		return ("[EPROTO]");	case EMULTIHOP:		return ("[EMULTIHOP]");	case EDOTDOT:		return ("[EDOTDOT]");	case EBADMSG:		return ("[EBADMSG]");	case EOVERFLOW:		return ("[EOVERFLOW]");	case ENOTUNIQ:		return ("[ENOTUNIQ]");	case EBADFD:		return ("[EBADFD]");	case EREMCHG:		return ("[EREMCHG]");	case ELIBACC:		return ("[ELIBACC]");	case ELIBBAD:		return ("[ELIBBAD]");	case ELIBSCN:		return ("[ELIBSCN]");	case ELIBMAX:		return ("[ELIBMAX]");	case ELIBEXEC:		return ("[ELIBEXEC]");	case EILSEQ:		return ("[EILSEQ]");	case ERESTART:		return ("[ERESTART]");	case ESTRPIPE:		return ("[ESTRPIPE]");	case EUSERS:		return ("[EUSERS]");	case ENOTSOCK:		return ("[ENOTSOCK]");	case EDESTADDRREQ:		return ("[EDESTADDRREQ]");	case EMSGSIZE:		return ("[EMSGSIZE]");	case EPROTOTYPE:		return ("[EPROTOTYPE]");	case ENOPROTOOPT:		return ("[ENOPROTOOPT]");	case EPROTONOSUPPORT:		return ("[EPROTONOSUPPORT]");	case ESOCKTNOSUPPORT:		return ("[ESOCKTNOSUPPORT]");	case EOPNOTSUPP:		return ("[EOPNOTSUPP]");	case EPFNOSUPPORT:		return ("[EPFNOSUPPORT]");	case EAFNOSUPPORT:		return ("[EAFNOSUPPORT]");	case EADDRINUSE:		return ("[EADDRINUSE]");	case EADDRNOTAVAIL:		return ("[EADDRNOTAVAIL]");	case ENETDOWN:		return ("[ENETDOWN]");	case ENETUNREACH:		return ("[ENETUNREACH]");	case ENETRESET:		return ("[ENETRESET]");	case ECONNABORTED:		return ("[ECONNABORTED]");	case ECONNRESET:		return ("[ECONNRESET]");	case ENOBUFS:		return ("[ENOBUFS]");	case EISCONN:		return ("[EISCONN]");	case ENOTCONN:		return ("[ENOTCONN]");	case ESHUTDOWN:		return ("[ESHUTDOWN]");	case ETOOMANYREFS:		return ("[ETOOMANYREFS]");	case ETIMEDOUT:		return ("[ETIMEDOUT]");	case ECONNREFUSED:		return ("[ECONNREFUSED]");	case EHOSTDOWN:		return ("[EHOSTDOWN]");	case EHOSTUNREACH:		return ("[EHOSTUNREACH]");	case EALREADY:		return ("[EALREADY]");	case EINPROGRESS:		return ("[EINPROGRESS]");	case ESTALE:		return ("[ESTALE]");	case EUCLEAN:		return ("[EUCLEAN]");	case ENOTNAM:		return ("[ENOTNAM]");	case ENAVAIL:		return ("[ENAVAIL]");	case EISNAM:		return ("[EISNAM]");	case EREMOTEIO:		return ("[EREMOTEIO]");	case EDQUOT:		return ("[EDQUOT]");	case ENOMEDIUM:		return ("[ENOMEDIUM]");	case EMEDIUMTYPE:		return ("[EMEDIUMTYPE]");	default:	{		static char buf[32];		snprintf(buf, sizeof(buf), "[%ld]", (long) err);		return buf;	}	}}char *nerrno_string(ulong nerr, long uerr){	switch (nerr) {	case NBADADDR:		return ("[NBADADDR]");	case NBADOPT:		return ("[NBADOPT]");	case NACCESS:		return ("[NACCESS]");	case NNOADDR:		return ("[NNOADDR]");	case NOUTSTATE:		return ("[NOUTSTATE]");	case NBADSEQ:		return ("[NBADSEQ]");	case NSYSERR:		return errno_string(uerr);	case NBADDATA:		return ("[NBADDATA]");	case NBADFLAG:		return ("[NBADFLAG]");	case NNOTSUPPORT:		return ("[NNOTSUPPORT]");	case NBOUND:		return ("[NBOUND]");	case NBADQOSPARAM:		return ("[NBADQOSPARAM]");	case NBADQOSTYPE:		return ("[NBADQOSTYPE]");	case NBADTOKEN:		return ("[NBADTOKEN]");	case NNOPROTOID:		return ("[NNOPROTOID]");	default:	{		static char buf[32];		snprintf(buf, sizeof(buf), "[%lu]", (ulong) nerr);		return buf;	}	}}const char *event_string(int child, int event){	switch (event) {	case __EVENT_EOF:		return ("END OF FILE");	case __EVENT_NO_MSG:		return ("NO MESSAGE");	case __EVENT_TIMEOUT:		return ("TIMEOUT");	case __EVENT_UNKNOWN:		return ("UNKNOWN");	case __RESULT_DECODE_ERROR:		return ("DECODE ERROR");	case __RESULT_SCRIPT_ERROR:		return ("SCRIPT ERROR");	case __RESULT_INCONCLUSIVE:		return ("INCONCLUSIVE");	case __RESULT_SUCCESS:		return ("SUCCESS");	case __RESULT_FAILURE:		return ("FAILURE");	case __TEST_CONN_REQ:		return ("N_CONN_REQ");	case __TEST_CONN_RES:		return ("N_CONN_RES");	case __TEST_DISCON_REQ:		return ("N_DISCON_REQ");	case __TEST_DATA_REQ:		return ("N_DATA_REQ");	case __TEST_EXDATA_REQ:		return ("N_EXDATA_REQ");	case __TEST_INFO_REQ:		return ("N_INFO_REQ");	case __TEST_BIND_REQ:		return ("N_BIND_REQ");	case __TEST_UNBIND_REQ:		return ("N_UNBIND_REQ");

⌨️ 快捷键说明

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