📄 test-inet_raw.c
字号:
m = m / 1000000; t += m; lockf(fileno(stdout), F_LOCK, 0); fprintf(stdout, " | %11.6g | | <%d>\n", t, state); fflush(stdout); lockf(fileno(stdout), F_ULOCK, 0); } return (event);}static int timer_timeout = 0;static voidtimer_handler(int signum){ if (signum == SIGALRM) timer_timeout = 1; return;}static inttimer_sethandler(void){ sigset_t mask; struct sigaction act; act.sa_handler = timer_handler; act.sa_flags = SA_RESTART | SA_ONESHOT; sigemptyset(&act.sa_mask); if (sigaction(SIGALRM, &act, NULL)) return __RESULT_FAILURE; sigemptyset(&mask); sigaddset(&mask, SIGALRM); sigprocmask(SIG_UNBLOCK, &mask, NULL); 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 (timer_sethandler()) return __RESULT_FAILURE; if (setitimer(ITIMER_REAL, &setting, NULL)) return __RESULT_FAILURE; timer_timeout = 0; return __RESULT_SUCCESS;}static intstart_st(long duration){ long sdur = (duration + timer_scale - 1) / timer_scale; return start_tt(sdur);}static intstop_tt(void){ struct itimerval setting = { {0, 0}, {0, 0} }; sigset_t mask; struct sigaction act; if (setitimer(ITIMER_REAL, &setting, NULL)) return __RESULT_FAILURE; act.sa_handler = SIG_DFL; act.sa_flags = 0; sigemptyset(&act.sa_mask); if (sigaction(SIGALRM, &act, NULL)) return __RESULT_FAILURE; timer_timeout = 0; sigemptyset(&mask); sigaddset(&mask, SIGALRM); sigprocmask(SIG_BLOCK, &mask, NULL); return __RESULT_SUCCESS;}/* * Options *//* * data options */struct { struct t_opthdr tos_hdr __attribute__ ((packed)); t_scalar_t tos_val __attribute__ ((packed)); struct t_opthdr ttl_hdr __attribute__ ((packed)); t_scalar_t ttl_val __attribute__ ((packed)); struct t_opthdr drt_hdr __attribute__ ((packed)); t_scalar_t drt_val __attribute__ ((packed)); struct t_opthdr csm_hdr __attribute__ ((packed)); t_scalar_t csm_val __attribute__ ((packed)); struct t_opthdr ppi_hdr __attribute__ ((packed)); t_scalar_t ppi_val __attribute__ ((packed)); struct t_opthdr sid_hdr __attribute__ ((packed)); t_scalar_t sid_val __attribute__ ((packed));} opt_data = { { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TOS, T_SUCCESS} , 0x0 , { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TTL, T_SUCCESS} , 64 , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_DONTROUTE, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_UDP, T_UDP_CHECKSUM, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_SCTP, T_SCTP_PPI, T_SUCCESS} , 10 , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_SCTP, T_SCTP_SID, T_SUCCESS} , 0};/* * receive data options */typedef struct rdat_opt { struct t_opthdr tos_hdr __attribute__ ((packed)); t_scalar_t tos_val __attribute__ ((packed)); struct t_opthdr ttl_hdr __attribute__ ((packed)); t_scalar_t ttl_val __attribute__ ((packed)); struct t_opthdr ppi_hdr __attribute__ ((packed)); t_scalar_t ppi_val __attribute__ ((packed)); struct t_opthdr sid_hdr __attribute__ ((packed)); t_scalar_t sid_val __attribute__ ((packed)); struct t_opthdr ssn_hdr __attribute__ ((packed)); t_scalar_t ssn_val __attribute__ ((packed)); struct t_opthdr tsn_hdr __attribute__ ((packed)); t_scalar_t tsn_val __attribute__ ((packed));} rdat_opt_t;/* * connect options */struct { struct t_opthdr tos_hdr __attribute__ ((packed)); t_scalar_t tos_val __attribute__ ((packed)); struct t_opthdr ttl_hdr __attribute__ ((packed)); t_scalar_t ttl_val __attribute__ ((packed)); struct t_opthdr drt_hdr __attribute__ ((packed)); t_scalar_t drt_val __attribute__ ((packed)); struct t_opthdr bca_hdr __attribute__ ((packed)); t_scalar_t bca_val __attribute__ ((packed)); struct t_opthdr reu_hdr __attribute__ ((packed)); t_scalar_t reu_val __attribute__ ((packed)); struct t_opthdr ist_hdr __attribute__ ((packed)); t_scalar_t ist_val __attribute__ ((packed)); struct t_opthdr ost_hdr __attribute__ ((packed)); t_scalar_t ost_val __attribute__ ((packed));} opt_conn = { { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TOS, T_SUCCESS} , 0x0 , { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TTL, T_SUCCESS} , 64 , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_DONTROUTE, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_BROADCAST, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_IP, T_IP_REUSEADDR, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_SCTP, T_SCTP_ISTREAMS, T_SUCCESS} , 1 , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_SCTP, T_SCTP_OSTREAMS, T_SUCCESS} , 1};/* * management options */struct { struct t_opthdr tos_hdr __attribute__ ((packed)); t_scalar_t tos_val __attribute__ ((packed)); struct t_opthdr ttl_hdr __attribute__ ((packed)); t_scalar_t ttl_val __attribute__ ((packed)); struct t_opthdr drt_hdr __attribute__ ((packed)); t_scalar_t drt_val __attribute__ ((packed)); struct t_opthdr bca_hdr __attribute__ ((packed)); t_scalar_t bca_val __attribute__ ((packed)); struct t_opthdr reu_hdr __attribute__ ((packed)); t_scalar_t reu_val __attribute__ ((packed));#if 0 struct t_opthdr ndl_hdr __attribute__ ((packed)); t_scalar_t ndl_val __attribute__ ((packed)); struct t_opthdr mxs_hdr __attribute__ ((packed)); t_scalar_t mxs_val __attribute__ ((packed)); struct t_opthdr kpa_hdr __attribute__ ((packed)); t_scalar_t kpa_val __attribute__ ((packed)); struct t_opthdr csm_hdr __attribute__ ((packed)); t_scalar_t csm_val __attribute__ ((packed)); struct t_opthdr nod_hdr __attribute__ ((packed)); t_scalar_t nod_val __attribute__ ((packed)); struct t_opthdr crk_hdr __attribute__ ((packed)); t_scalar_t crk_val __attribute__ ((packed)); struct t_opthdr ppi_hdr __attribute__ ((packed)); t_scalar_t ppi_val __attribute__ ((packed)); struct t_opthdr sid_hdr __attribute__ ((packed)); t_scalar_t sid_val __attribute__ ((packed)); struct t_opthdr rcv_hdr __attribute__ ((packed)); t_scalar_t rcv_val __attribute__ ((packed)); struct t_opthdr ckl_hdr __attribute__ ((packed)); t_scalar_t ckl_val __attribute__ ((packed)); struct t_opthdr skd_hdr __attribute__ ((packed)); t_scalar_t skd_val __attribute__ ((packed)); struct t_opthdr prt_hdr __attribute__ ((packed)); t_scalar_t prt_val __attribute__ ((packed)); struct t_opthdr art_hdr __attribute__ ((packed)); t_scalar_t art_val __attribute__ ((packed)); struct t_opthdr irt_hdr __attribute__ ((packed)); t_scalar_t irt_val __attribute__ ((packed)); struct t_opthdr hbi_hdr __attribute__ ((packed)); t_scalar_t hbi_val __attribute__ ((packed)); struct t_opthdr rin_hdr __attribute__ ((packed)); t_scalar_t rin_val __attribute__ ((packed)); struct t_opthdr rmn_hdr __attribute__ ((packed)); t_scalar_t rmn_val __attribute__ ((packed)); struct t_opthdr rmx_hdr __attribute__ ((packed)); t_scalar_t rmx_val __attribute__ ((packed)); struct t_opthdr ist_hdr __attribute__ ((packed)); t_scalar_t ist_val __attribute__ ((packed)); struct t_opthdr ost_hdr __attribute__ ((packed)); t_scalar_t ost_val __attribute__ ((packed)); struct t_opthdr cin_hdr __attribute__ ((packed)); t_scalar_t cin_val __attribute__ ((packed)); struct t_opthdr tin_hdr __attribute__ ((packed)); t_scalar_t tin_val __attribute__ ((packed)); struct t_opthdr mac_hdr __attribute__ ((packed)); t_scalar_t mac_val __attribute__ ((packed)); struct t_opthdr dbg_hdr __attribute__ ((packed)); t_scalar_t dbg_val __attribute__ ((packed));#endif} opt_optm = { { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TOS, T_SUCCESS}, 0x0 , { sizeof(struct t_opthdr) + sizeof(unsigned char), T_INET_IP, T_IP_TTL, T_SUCCESS}, 64 , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_DONTROUTE, T_SUCCESS}, T_NO , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_BROADCAST, T_SUCCESS}, T_NO , { sizeof(struct t_opthdr) + sizeof(unsigned int), T_INET_IP, T_IP_REUSEADDR, T_SUCCESS}, T_NO#if 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_TCP, T_TCP_NODELAY, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_TCP, T_TCP_MAXSEG, T_SUCCESS} , 576 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_TCP, T_TCP_KEEPALIVE, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_uscalar_t), T_INET_UDP, T_UDP_CHECKSUM, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_NODELAY, T_SUCCESS} , T_YES , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_CORK, T_SUCCESS} , T_YES , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_PPI, T_SUCCESS} , 10 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_SID, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_RECVOPT, T_SUCCESS} , T_NO , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_COOKIE_LIFE, T_SUCCESS} , 60000 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_SACK_DELAY, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_PATH_MAX_RETRANS, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_ASSOC_MAX_RETRANS, T_SUCCESS} , 12 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_MAX_INIT_RETRIES, T_SUCCESS} , 12 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_HEARTBEAT_ITVL, T_SUCCESS} , 200 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_RTO_INITIAL, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_RTO_MIN, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_RTO_MAX, T_SUCCESS} , 0 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_OSTREAMS, T_SUCCESS} , 1 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_ISTREAMS, T_SUCCESS} , 1 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_COOKIE_INC, T_SUCCESS} , 1000 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_THROTTLE_ITVL, T_SUCCESS} , 50 , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_MAC_TYPE, T_SUCCESS} , T_SCTP_HMAC_NONE , { sizeof(struct t_opthdr) + sizeof(t_scalar_t), T_INET_SCTP, T_SCTP_DEBUG, T_SUCCESS} , 0#endif};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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -