📄 test-xnet.c
字号:
case TS_WIND_ORDREL: return ("TS_WIND_ORDREL"); case TS_WREQ_ORDREL: return ("TS_WRES_ORDREL"); case TS_WACK_DREQ6: return ("TS_WACK_DREQ6"); case TS_WACK_DREQ7: return ("TS_WACK_DREQ7"); case TS_WACK_DREQ9: return ("TS_WACK_DREQ9"); case TS_WACK_DREQ10: return ("TS_WACK_DREQ10"); case TS_WACK_DREQ11: return ("TS_WACK_DREQ11"); default: return ("(unknown)"); }}#if 0voidprint_addr(char *add_ptr, size_t add_len){ sctp_addr_t *a = (sctp_addr_t *) add_ptr; size_t anum = add_len >= sizeof(a->port) ? (add_len - sizeof(a->port)) / sizeof(a->addr[0]) : 0; dummy = lockf(fileno(stdout), F_LOCK, 0); if (add_len) { int i; if (add_len != sizeof(a->port) + anum * sizeof(a->addr[0])) fprintf(stdout, "Aaarrg! add_len = %d, anum = %d, ", add_len, anum); fprintf(stdout, "[%d]", ntohs(a->port)); for (i = 0; i < anum; i++) { fprintf(stdout, "%s%d.%d.%d.%d", i ? "," : "", (a->addr[i] >> 0) & 0xff, (a->addr[i] >> 8) & 0xff, (a->addr[i] >> 16) & 0xff, (a->addr[i] >> 24) & 0xff); } } else fprintf(stdout, "(no address)"); fprintf(stdout, "\n"); fflush(stdout); dummy = lockf(fileno(stdout), F_ULOCK, 0);}char *addr_string(char *add_ptr, size_t add_len){ static char buf[128]; size_t len = 0; sctp_addr_t *a = (sctp_addr_t *) add_ptr; size_t anum = add_len >= sizeof(a->port) ? (add_len - sizeof(a->port)) / sizeof(a->addr[0]) : 0; if (add_len) { int i; if (add_len != sizeof(a->port) + anum * sizeof(a->addr[0])) len += snprintf(buf + len, sizeof(buf) - len, "Aaarrg! add_len = %d, anum = %d, ", add_len, anum); len += snprintf(buf + len, sizeof(buf) - len, "[%d]", ntohs(a->port)); for (i = 0; i < anum; i++) { len += snprintf(buf + len, sizeof(buf) - len, "%s%d.%d.%d.%d", i ? "," : "", (a->addr[i] >> 0) & 0xff, (a->addr[i] >> 8) & 0xff, (a->addr[i] >> 16) & 0xff, (a->addr[i] >> 24) & 0xff); } } else len += snprintf(buf + len, sizeof(buf) - len, "(no address)"); /* len += snprintf(buf + len, sizeof(buf) - len, "\0"); */ return buf;}voidprint_addrs(int fd, char *add_ptr, size_t add_len){ fprintf(stdout, "Stupid!\n");}#elsevoidprint_addr(char *add_ptr, size_t add_len){ struct sockaddr_in *a = (struct sockaddr_in *) add_ptr; dummy = lockf(fileno(stdout), F_LOCK, 0); if (add_len) { if (add_len != sizeof(*a)) fprintf(stdout, "Aaarrg! add_len = %lu, ", (ulong) add_len); fprintf(stdout, "%d.%d.%d.%d:%d", (a->sin_addr.s_addr >> 0) & 0xff, (a->sin_addr.s_addr >> 8) & 0xff, (a->sin_addr.s_addr >> 16) & 0xff, (a->sin_addr.s_addr >> 24) & 0xff, ntohs(a->sin_port)); } else fprintf(stdout, "(no address)"); fprintf(stdout, "\n"); fflush(stdout); dummy = lockf(fileno(stdout), F_ULOCK, 0);}char *addr_string(char *add_ptr, size_t add_len){ static char buf[128]; size_t len = 0; struct sockaddr_in *a = (struct sockaddr_in *) add_ptr; if (add_len) { if (add_len != sizeof(*a)) len += snprintf(buf + len, sizeof(buf) - len, "Aaarrg! add_len = %lu, ", (ulong) add_len); len += snprintf(buf + len, sizeof(buf) - len, "%d.%d.%d.%d:%d", (a->sin_addr.s_addr >> 0) & 0xff, (a->sin_addr.s_addr >> 8) & 0xff, (a->sin_addr.s_addr >> 16) & 0xff, (a->sin_addr.s_addr >> 24) & 0xff, ntohs(a->sin_port)); } else len += snprintf(buf + len, sizeof(buf) - len, "(no address)"); /* len += snprintf(buf + len, sizeof(buf) - len, "\0"); */ return buf;}voidprint_addrs(int fd, char *add_ptr, size_t add_len){ struct sockaddr_in *sin; if (verbose < 3) return; for (sin = (typeof(sin)) add_ptr; add_len >= sizeof(*sin); sin++, add_len -= sizeof(*sin)) { char buf[128]; snprintf(buf, sizeof(buf), "%d.%d.%d.%d:%d", (sin->sin_addr.s_addr >> 0) & 0xff, (sin->sin_addr.s_addr >> 8) & 0xff, (sin->sin_addr.s_addr >> 16) & 0xff, (sin->sin_addr.s_addr >> 24) & 0xff, ntohs(sin->sin_port)); if (fd == test_fd[0]) { fprintf(stdout, "%-20s| | | \n", buf); } if (fd == test_fd[1]) { fprintf(stdout, " | | | %-15s\n", buf); } if (fd == test_fd[2]) { fprintf(stdout, " | | | %-15s\n", buf); } }}#endifchar *status_string(struct t_opthdr *oh){ switch (oh->status) { case 0: return (NULL); case T_SUCCESS: return ("T_SUCCESS"); case T_FAILURE: return ("T_FAILURE"); case T_PARTSUCCESS: return ("T_PARTSUCCESS"); case T_READONLY: return ("T_READONLY"); case T_NOTSUPPORT: return ("T_NOTSUPPORT"); default: { static char buf[32]; snprintf(buf, sizeof(buf), "(unknown status %ld)", (long) oh->status); return buf; } }}#ifndef T_ALLLEVELS#define T_ALLLEVELS -1#endifchar *level_string(struct t_opthdr *oh){ switch (oh->level) { case T_ALLLEVELS: return ("T_ALLLEVELS"); case XTI_GENERIC: return ("XTI_GENERIC");#if 0 case T_INET_IP: return ("T_INET_IP"); case T_INET_UDP: return ("T_INET_UDP"); case T_INET_TCP: return ("T_INET_TCP"); case T_INET_SCTP: return ("T_INET_SCTP");#endif default: { static char buf[32]; snprintf(buf, sizeof(buf), "(unknown level %ld)", (long) oh->level); return buf; } }}char *name_string(struct t_opthdr *oh){ if (oh->name == T_ALLOPT) return ("T_ALLOPT"); switch (oh->level) { case XTI_GENERIC: switch (oh->name) { case XTI_DEBUG: return ("XTI_DEBUG"); case XTI_LINGER: return ("XTI_LINGER"); case XTI_RCVBUF: return ("XTI_RCVBUF"); case XTI_RCVLOWAT: return ("XTI_RCVLOWAT"); case XTI_SNDBUF: return ("XTI_SNDBUF"); case XTI_SNDLOWAT: return ("XTI_SNDLOWAT"); } break;#if 0 case T_INET_IP: switch (oh->name) { case T_IP_OPTIONS: return ("T_IP_OPTIONS"); case T_IP_TOS: return ("T_IP_TOS"); case T_IP_TTL: return ("T_IP_TTL"); case T_IP_REUSEADDR: return ("T_IP_REUSEADDR"); case T_IP_DONTROUTE: return ("T_IP_DONTROUTE"); case T_IP_BROADCAST: return ("T_IP_BROADCAST"); case T_IP_ADDR: return ("T_IP_ADDR"); } break; case T_INET_UDP: switch (oh->name) { case T_UDP_CHECKSUM: return ("T_UDP_CHECKSUM"); } break; case T_INET_TCP: switch (oh->name) { case T_TCP_NODELAY: return ("T_TCP_NODELAY"); case T_TCP_MAXSEG: return ("T_TCP_MAXSEG"); case T_TCP_KEEPALIVE: return ("T_TCP_KEEPALIVE"); case T_TCP_CORK: return ("T_TCP_CORK"); case T_TCP_KEEPIDLE: return ("T_TCP_KEEPIDLE"); case T_TCP_KEEPINTVL: return ("T_TCP_KEEPINTVL"); case T_TCP_KEEPCNT: return ("T_TCP_KEEPCNT"); case T_TCP_SYNCNT: return ("T_TCP_SYNCNT"); case T_TCP_LINGER2: return ("T_TCP_LINGER2"); case T_TCP_DEFER_ACCEPT: return ("T_TCP_DEFER_ACCEPT"); case T_TCP_WINDOW_CLAMP: return ("T_TCP_WINDOW_CLAMP"); case T_TCP_INFO: return ("T_TCP_INFO"); case T_TCP_QUICKACK: return ("T_TCP_QUICKACK"); } break; case T_INET_SCTP: switch (oh->name) { case T_SCTP_NODELAY: return ("T_SCTP_NODELAY"); case T_SCTP_CORK: return ("T_SCTP_CORK"); case T_SCTP_PPI: return ("T_SCTP_PPI"); case T_SCTP_SID: return ("T_SCTP_SID"); case T_SCTP_SSN: return ("T_SCTP_SSN"); case T_SCTP_TSN: return ("T_SCTP_TSN"); case T_SCTP_RECVOPT: return ("T_SCTP_RECVOPT"); case T_SCTP_COOKIE_LIFE: return ("T_SCTP_COOKIE_LIFE"); case T_SCTP_SACK_DELAY: return ("T_SCTP_SACK_DELAY"); case T_SCTP_PATH_MAX_RETRANS: return ("T_SCTP_PATH_MAX_RETRANS"); case T_SCTP_ASSOC_MAX_RETRANS: return ("T_SCTP_ASSOC_MAX_RETRANS"); case T_SCTP_MAX_INIT_RETRIES: return ("T_SCTP_MAX_INIT_RETRIES"); case T_SCTP_HEARTBEAT_ITVL: return ("T_SCTP_HEARTBEAT_ITVL"); case T_SCTP_RTO_INITIAL: return ("T_SCTP_RTO_INITIAL"); case T_SCTP_RTO_MIN: return ("T_SCTP_RTO_MIN"); case T_SCTP_RTO_MAX: return ("T_SCTP_RTO_MAX"); case T_SCTP_OSTREAMS: return ("T_SCTP_OSTREAMS"); case T_SCTP_ISTREAMS: return ("T_SCTP_ISTREAMS"); case T_SCTP_COOKIE_INC: return ("T_SCTP_COOKIE_INC"); case T_SCTP_THROTTLE_ITVL: return ("T_SCTP_THROTTLE_ITVL"); case T_SCTP_MAC_TYPE: return ("T_SCTP_MAC_TYPE"); case T_SCTP_CKSUM_TYPE: return ("T_SCTP_CKSUM_TYPE"); case T_SCTP_ECN: return ("T_SCTP_ECN"); case T_SCTP_ALI: return ("T_SCTP_ALI"); case T_SCTP_ADD: return ("T_SCTP_ADD"); case T_SCTP_SET: return ("T_SCTP_SET"); case T_SCTP_ADD_IP: return ("T_SCTP_ADD_IP"); case T_SCTP_DEL_IP: return ("T_SCTP_DEL_IP"); case T_SCTP_SET_IP: return ("T_SCTP_SET_IP"); case T_SCTP_PR: return ("T_SCTP_PR"); case T_SCTP_LIFETIME: return ("T_SCTP_LIFETIME"); case T_SCTP_DISPOSITION: return ("T_SCTP_DISPOSITION"); case T_SCTP_MAX_BURST: return ("T_SCTP_MAX_BURST"); case T_SCTP_HB: return ("T_SCTP_HB"); case T_SCTP_RTO: return ("T_SCTP_RTO"); case T_SCTP_MAXSEG: return ("T_SCTP_MAXSEG"); case T_SCTP_STATUS: return ("T_SCTP_STATUS"); case T_SCTP_DEBUG: return ("T_SCTP_DEBUG"); } break;#endif } { static char buf[32]; snprintf(buf, sizeof(buf), "(unknown name %ld)", (long) oh->name); return buf; }}char *yesno_string(struct t_opthdr *oh){ switch (*((t_uscalar_t *) T_OPT_DATA(oh))) { case T_YES: return ("T_YES"); case T_NO: return ("T_NO"); default: return ("(invalid)"); }}char *number_string(struct t_opthdr *oh){ static char buf[32]; snprintf(buf, 32, "%d", *((t_scalar_t *) T_OPT_DATA(oh))); return (buf);}char *value_string(int child, struct t_opthdr *oh){#if 0 static char buf[64] = "(invalid)";#endif if (oh->len == sizeof(*oh)) return (NULL); switch (oh->level) { case XTI_GENERIC: switch (oh->name) { case XTI_DEBUG: break; case XTI_LINGER: break; case XTI_RCVBUF: break; case XTI_RCVLOWAT: break; case XTI_SNDBUF: break; case XTI_SNDLOWAT: break; } break;#if 0 case T_INET_IP: switch (oh->name) { case T_IP_OPTIONS: break; case T_IP_TOS: if (oh->len == sizeof(*oh) + sizeof(unsigned char)) snprintf(buf, sizeof(buf), "0x%02x", *((unsigned char *) T_OPT_DATA(oh))); return buf; case T_IP_TTL: if (oh->len == sizeof(*oh) + sizeof(unsigned char)) snprintf(buf, sizeof(buf), "0x%02x", *((unsigned char *) T_OPT_DATA(oh))); return buf; case T_IP_REUSEADDR: return yesno_string(oh); case T_IP_DONTROUTE: return yesno_string(oh); case T_IP_BROADCAST: return yesno_string(oh); case T_IP_ADDR: if (oh->len == sizeof(*oh) + sizeof(uint32_t)) { uint32_t addr = *((uint32_t *) T_OPT_DATA(oh)); snprintf(buf, sizeof(buf), "%d.%d.%d.%d", (addr >> 0) & 0x00ff, (addr >> 8) & 0x00ff, (addr >> 16) & 0x00ff, (addr >> 24) & 0x00ff); } return buf; } break; case T_INET_UDP: switch (oh->name) { case T_UDP_CHECKSUM: return yesno_string(oh); } break; case T_INET_TCP: switch (oh->name) { case T_TCP_NODELAY: return yesno_string(oh); case T_TCP_MAXSEG: if (oh->len == sizeof(*oh) + sizeof(t_uscalar_t)) snprintf(buf, sizeof(buf), "%lu", (ulong) *((t_uscalar_t *) T_OPT_DATA(oh))); return buf; case T_TCP_KEEPALIVE: break; case T_TCP_CORK: return yesno_string(oh); case T_TCP_KEEPIDLE: break; case T_TCP_KEEPINTVL: break; case T_TCP_KEEPCNT: break; case T_TCP_SYNCNT: break; case T_TCP_LINGER2: break; case T_TCP_DEFER_ACCEPT: break; case T_TCP_WINDOW_CLAMP: break; case T_TCP_INFO: break; case T_TCP_QUICKACK: break; } break; case T_INET_SCTP: switch (oh->name) { case T_SCTP_NODELAY: return yesno_string(oh); case T_SCTP_CORK: return yesno_string(oh); case T_SCTP_PPI: return number_string(oh);; case T_SCTP_SID: /* sid[child] = *((t_uscalar_t *) T_OPT_DATA(oh)); */ return number_string(oh);; case T_SCTP_SSN: case T_SCTP_TSN: return number_string(oh);; case T_SCTP_RECVOPT: return yesno_string(oh); case T_SCTP_COOKIE_LIFE: case T_SCTP_SACK_DELAY: case T_SCTP_PATH_MAX_RETRANS: case T_SCTP_ASSOC_MAX_RETRANS: case T_SCTP_MAX_INIT_RETRIES: case T_SCTP_HEARTBEAT_ITVL: case T_SCTP_RTO_INITIAL: case T_SCTP_RTO_MIN: case T_SCTP_RTO_MAX: case T_SCTP_OSTREAMS: case T_SCTP_ISTREAMS: case T_SCTP_COOKIE_INC: case T_SCTP_THROTTLE_ITVL: return number_string(oh);; case T_SCTP_MAC_TYPE: break; case T_SCTP_CKSUM_TYPE: break; case T_SCTP_ECN: break; case T_SCTP_ALI: break; case T_SCTP_ADD: break; case T_SCTP_SET: break; case T_SCTP_ADD_IP: break; case T_SCTP_DEL_IP: break; case T_SCTP_SET_IP: break; case T_SCTP_PR: break; case T_SCTP_LIFETIME: case T_SCTP_DISPOSITION: case T_SCTP_MAX_BURST: case T_SCTP_HB: case T_SCTP_RTO: case T_SCTP_MAXSEG: return number_string(oh); case T_SCTP_STATUS: break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -