📄 ss7capd.c
字号:
break; case LMI_ERROR_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # LMI_ERROR_IND\n"); return CAP_NONE; case LMI_STATS_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # LMI_STATS_IND\n"); return CAP_NONE; case LMI_EVENT_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # LMI_EVENT_IND\n"); return CAP_NONE; case SDT_RC_CONGESTION_ACCEPT_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_RC_CONGESTION_ACCEPT_IND\n"); return CAP_NONE; case SDT_RC_CONGESTION_DISCARD_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_RC_CONGESTION_DISCARD_IND\n"); return CAP_NONE; case SDT_RC_NO_CONGESTION_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_RC_NO_CONGESTION_IND\n"); return CAP_NONE; case SDT_IAC_CORRECT_SU_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_IAC_CORRECT_SU_IND\n"); return CAP_NONE; case SDT_IAC_ABORT_PROVING_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_IAC_ABORT_PROVING_IND\n"); return CAP_NONE; case SDT_LSC_LINK_FAILURE_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_LSC_LINK_FAILURE_IND\n"); return CAP_NONE; case SDT_TXC_TRANSMISSION_REQUEST_IND: ftimestamp(); fprint_time(stdout); fprintf(stdout, " # SDT_TXC_TRANSMISSION_REQUEST_IND\n"); return CAP_NONE; default: break; } if (flag) return CAP_PCPROTO; return CAP_PROTO;}intwait_event(int wait){ for (;;) { struct pollfd pfd[] = { {cap_fd, POLLIN | POLLPRI | POLLERR | POLLHUP, 0} }; if (trm_signal) { trm_signal = 0; trm_action(); } if (hup_signal) { hup_signal = 0; hup_action(); } if (alm_signal) { alm_signal = 0; alm_action(); return CAP_TIMEOUT; } if (output > 2) fprintf(stderr, "entering poll loop\n"); switch (poll(pfd, 1, wait)) { case -1: if (errno == EAGAIN || errno == EINTR || errno == ERESTART) continue; syslog(LOG_ERR, "%s: poll error", __FUNCTION__); syslog(LOG_ERR, "%s: %m", __FUNCTION__); cap_exit(1); return CAP_FAILURE; case 0: return CAP_NONE; case 1: if (pfd[0].revents & (POLLIN | POLLPRI)) { int ret, flags = 0; ctrl.maxlen = BUFSIZE; ctrl.len = 0; ctrl.buf = cbuf; data.maxlen = BUFSIZE; data.len = 0; data.buf = dbuf; if (getmsg(cap_fd, &ctrl, &data, &flags) < 0) { syslog(LOG_ERR, "%s: getmsg error", __FUNCTION__); syslog(LOG_ERR, "%s: %m", __FUNCTION__); cap_exit(1); break; } if (ctrl.len > 0) { if ((ret = decode_ctrl(flags)) == CAP_NONE) continue; return ret; } if (data.len > 0) { if ((ret = decode_data()) == CAP_NONE) continue; return ret; } break; } if (pfd[0].revents & POLLNVAL) { syslog(LOG_ERR, "%s: device invalid", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } if (pfd[0].revents & POLLHUP) { syslog(LOG_ERR, "%s: device hangup", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } if (pfd[0].revents & POLLERR) { syslog(LOG_ERR, "%s: device error", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } break; default: syslog(LOG_ERR, "%s: poll error", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } }}intcap_open(void){ if (output > 1) syslog(LOG_NOTICE, "opening %s", devname); if ((cap_fd = open(devname, O_NONBLOCK | O_RDWR)) < 0) { syslog(LOG_ERR, "%s: couldn't open devname: %s", __FUNCTION__, devname); syslog(LOG_ERR, "%s: %m", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } if (output > 1) syslog(LOG_NOTICE, "configuring %s", devname); if (ioctl(cap_fd, I_SRDOPT, RMSGD) < 0) { syslog(LOG_ERR, "%s: couldn't configure devname: %s", __FUNCTION__, devname); syslog(LOG_ERR, "%s: %m", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } return CAP_SUCCESS;}intcap_attach(void){ union LMI_primitives *p = (union LMI_primitives *) cbuf; unsigned short ppa = (card << 12) | (span << 8) | (slot << 0); int ret; ctrl.maxlen = sizeof(cbuf); ctrl.len = sizeof(p->attach_req) + sizeof(ppa); ctrl.buf = cbuf; p->lmi_primitive = LMI_ATTACH_REQ; bcopy(&ppa, p->attach_req.lmi_ppa, sizeof(ppa)); if ((ret = putmsg(cap_fd, &ctrl, NULL, RS_HIPRI)) < 0) { syslog(LOG_ERR, "%s: putmsg: %m", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } for (;;) { switch ((ret = wait_event(100))) { case CAP_NONE: syslog(LOG_ERR, "%s: error, no response to LMI_ATTACH_REQ", __FUNCTION__); cap_exit(1); return CAP_FAILURE; case CAP_PCPROTO: switch (p->lmi_primitive) { case LMI_OK_ACK: return CAP_SUCCESS; case LMI_ERROR_ACK: syslog(LOG_ERR, "%s: lmi_errno: %s", __FUNCTION__, strerror(p->error_ack.lmi_errno)); syslog(LOG_ERR, "%s: lmi_reason: 0x%08x", __FUNCTION__, p->error_ack.lmi_reason); syslog(LOG_ERR, "%s: lmi_error_primitive: %d", __FUNCTION__, p->error_ack.lmi_error_primitive); cap_exit(1); return CAP_FAILURE; default: syslog(LOG_ERR, "%s: error, unexpected response to LMI_ATTACH_REQ %d", __FUNCTION__, p->lmi_primitive); cap_exit(1); return CAP_FAILURE; } default: syslog(LOG_ERR, "%s: error, unexpected response to LMI_ATTACH_REQ %d", __FUNCTION__, ret); cap_exit(1); case CAP_FAILURE: return CAP_FAILURE; } }}intcap_enable(void){ union LMI_primitives *p = (union LMI_primitives *) cbuf; int ret; ctrl.maxlen = sizeof(cbuf); ctrl.len = sizeof(p->enable_req); ctrl.buf = cbuf; p->enable_req.lmi_primitive = LMI_ENABLE_REQ; if ((ret = putmsg(cap_fd, &ctrl, NULL, RS_HIPRI)) < 0) { syslog(LOG_ERR, "%s: putmsg: %m", __FUNCTION__); cap_exit(1); return CAP_FAILURE; } for (;;) { switch ((ret = wait_event(100))) { case CAP_NONE: syslog(LOG_ERR, "%s: error, no response to LMI_ENABLE_REQ", __FUNCTION__); cap_exit(1); return CAP_FAILURE; case CAP_PCPROTO: if (p->lmi_primitive == LMI_ENABLE_CON || p->lmi_primitive == LMI_OK_ACK) return CAP_SUCCESS; syslog(LOG_ERR, "%s: error, unexpected response to LMI_ENABLE_REQ %u", __FUNCTION__, p->lmi_primitive); cap_exit(1); return CAP_FAILURE; default: syslog(LOG_ERR, "%s: error, unexpected response to LMI_ENABLE_REQ %d", __FUNCTION__, ret); cap_exit(1); case CAP_FAILURE: return CAP_FAILURE; } }}voidshow_sdl_config(void){ fprintf(stderr, "\tifname: %s", capconf.sdl.ifname); fprintf(stderr, "\n\tifflags:"); if (capconf.sdl.ifflags & SDL_IF_UP) fprintf(stderr, " up"); if (capconf.sdl.ifflags & SDL_IF_RX_RUNNING) fprintf(stderr, " rx"); if (capconf.sdl.ifflags & SDL_IF_TX_RUNNING) fprintf(stderr, " tx"); fprintf(stderr, "\n\tiftype:"); switch (capconf.sdl.iftype) { case SDL_TYPE_NONE: fprintf(stderr, " none"); break; case SDL_TYPE_V35: fprintf(stderr, " v35"); break; case SDL_TYPE_DS0: fprintf(stderr, " ds0"); break; case SDL_TYPE_DS0A: fprintf(stderr, " ds0a"); break; case SDL_TYPE_E1: fprintf(stderr, " e1"); break; case SDL_TYPE_T1: fprintf(stderr, " t1"); break; case SDL_TYPE_ATM: fprintf(stderr, " atm"); break; case SDL_TYPE_PACKET: fprintf(stderr, " packet"); break; default: fprintf(stderr, " [%u]", capconf.sdl.iftype); break; } fprintf(stderr, "\n\tifrate: %u", capconf.sdl.ifrate); fprintf(stderr, "\n\tifgtype:"); switch (capconf.sdl.ifgtype) { case SDL_GTYPE_NONE: fprintf(stderr, " none"); break; case SDL_GTYPE_T1: fprintf(stderr, " t1"); break; case SDL_GTYPE_E1: fprintf(stderr, " e1"); break; case SDL_GTYPE_J1: fprintf(stderr, " j1"); break; case SDL_GTYPE_ATM: fprintf(stderr, " atm"); break; case SDL_GTYPE_ETH: fprintf(stderr, " eth"); break; case SDL_GTYPE_IP: fprintf(stderr, " ip"); break; case SDL_GTYPE_UDP: fprintf(stderr, " udp"); break; case SDL_GTYPE_TCP: fprintf(stderr, " tcp"); break; case SDL_GTYPE_RTP: fprintf(stderr, " rtp"); break; case SDL_GTYPE_SCTP: fprintf(stderr, " sctp"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifgtype); break; } fprintf(stderr, "\n\tifgrate: %u", capconf.sdl.ifgrate); fprintf(stderr, "\n\tifmode:"); switch (capconf.sdl.ifmode) { case SDL_MODE_NONE: fprintf(stderr, " none"); break; case SDL_MODE_DSU: fprintf(stderr, " dsu"); break; case SDL_MODE_CSU: fprintf(stderr, " csu"); break; case SDL_MODE_DTE: fprintf(stderr, " dte"); break; case SDL_MODE_DCE: fprintf(stderr, " dce"); break; case SDL_MODE_CLIENT: fprintf(stderr, " client"); break; case SDL_MODE_SERVER: fprintf(stderr, " server"); break; case SDL_MODE_PEER: fprintf(stderr, " peer"); break; case SDL_MODE_ECHO: fprintf(stderr, " echo"); break; case SDL_MODE_REM_LB: fprintf(stderr, " rem_lb"); break; case SDL_MODE_LOC_LB: fprintf(stderr, " loc_lb"); break; case SDL_MODE_LB_ECHO: fprintf(stderr, " lb_echo"); break; case SDL_MODE_TEST: fprintf(stderr, " test"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifmode); break; } fprintf(stderr, "\n\tifgmode:"); switch (capconf.sdl.ifgmode) { case SDL_GMODE_NONE: fprintf(stderr, " none"); break; case SDL_GMODE_LOC_LB: fprintf(stderr, " loc_lb"); break; case SDL_GMODE_REM_LB: fprintf(stderr, " rem_lb"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifgmode); break; } fprintf(stderr, "\n\tifgcrc:"); switch (capconf.sdl.ifgcrc) { case SDL_GCRC_NONE: fprintf(stderr, " none"); break; case SDL_GCRC_CRC4: fprintf(stderr, " crc4"); break; case SDL_GCRC_CRC5: fprintf(stderr, " crc5"); break; case SDL_GCRC_CRC6: fprintf(stderr, " crc6"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifgcrc); break; } fprintf(stderr, "\n\tifclock:"); switch (capconf.sdl.ifclock) { case SDL_CLOCK_NONE: fprintf(stderr, " none"); break; case SDL_CLOCK_INT: fprintf(stderr, " int"); break; case SDL_CLOCK_EXT: fprintf(stderr, " ext"); break; case SDL_CLOCK_LOOP: fprintf(stderr, " loop"); break; case SDL_CLOCK_MASTER: fprintf(stderr, " master"); break; case SDL_CLOCK_SLAVE: fprintf(stderr, " slave"); break; case SDL_CLOCK_DPLL: fprintf(stderr, " dpll"); break; case SDL_CLOCK_ABR: fprintf(stderr, " abr"); break; case SDL_CLOCK_SHAPER: fprintf(stderr, " shaper"); break; case SDL_CLOCK_TICK: fprintf(stderr, " tick"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifclock); break; } fprintf(stderr, "\n\tifcoding:"); switch (capconf.sdl.ifcoding) { case SDL_CODING_NONE: fprintf(stderr, " none"); break; case SDL_CODING_NRZ: fprintf(stderr, " nrz"); break; case SDL_CODING_NRZI: fprintf(stderr, " nrzi"); break; case SDL_CODING_AMI: fprintf(stderr, " ami"); break; case SDL_CODING_B6ZS: fprintf(stderr, " b6zs"); break; case SDL_CODING_B8ZS: fprintf(stderr, " b8zs"); break; case SDL_CODING_HDB3: fprintf(stderr, " hdb3"); break; case SDL_CODING_AAL1: fprintf(stderr, " aal1"); break; case SDL_CODING_AAL2: fprintf(stderr, " aal2"); break; case SDL_CODING_AAL5: fprintf(stderr, " aal5"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifcoding); break; } fprintf(stderr, "\n\tifframing:"); switch (capconf.sdl.ifframing) { case SDL_FRAMING_NONE: fprintf(stderr, " none"); break; case SDL_FRAMING_CCS: fprintf(stderr, " ccs"); break; case SDL_FRAMING_CAS: fprintf(stderr, " cas"); break; case SDL_FRAMING_SF: fprintf(stderr, " sf"); break; case SDL_FRAMING_ESF: fprintf(stderr, " esf"); break; default: fprintf(stderr, " [%u]", capconf.sdl.ifframing); break; } fprintf(stderr, "\n\tifblksize: %u", capconf.sdl.ifblksize); fprintf(stderr, "\n\tifleads:"); if (capconf.sdl.ifleads & SDL_LEAD_DTR) fprintf(stderr, " dtr"); if (capconf.sdl.ifleads & SDL_LEAD_RTS) fprintf(stderr, " rts"); if (capconf.sdl.ifleads & SDL_LEAD_DCD) fprintf(stderr, " dcd"); if (capconf.sdl.ifleads & SDL_LEAD_CTS) fprintf(stderr, " cts"); if (capconf.sdl.ifleads & SDL_LEAD_DSR) fprintf(stderr, " dsr"); fprintf(stderr, "\n\tifbpv: %u", capconf.sdl.ifbpv); fprintf(stderr, "\n\tifalarms:"); if (capconf.sdl.ifalarms & SDL_ALARM_RED) fprintf(stderr, " red"); if (capconf.sdl.ifalarms & SDL_ALARM_BLU) fprintf(stderr, " blue"); if (capconf.sdl.ifalarms & SDL_ALARM_YEL) fprintf(stderr, " yellow"); if (capconf.sdl.ifalarms & SDL_ALARM_REC) fprintf(stderr, " recovery"); fprintf(stderr, "\n\tifrxlevel: %u", capconf.sdl.ifrxlevel); fprintf(stderr, "\n\tiftxlevel: %u", capconf.sdl.iftxlevel); fprintf(stderr, "\n\tifsync: %u", capconf.sdl.ifsync); fprintf(stderr, "\n\tifsyncsrc:"); fprintf(stderr, " %u", capconf.sdl.ifsyncsrc[0]); fprintf(stderr, ",%u", capconf.sdl.ifsyncsrc[1]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -