📄 slmon.c
字号:
break; case SL_BSNT_NOT_RETRIEVABLE_IND: fprintf(stdout, "ctrl=SL_BSNT_NOT_RETRIEVABLE_IND"); fprintf(stdout, "{sl_bsnt=%u}", p->sl.bsnt_not_retr_ind.sl_bsnt); break; case SL_OPTMGMT_ACK: fprintf(stdout, "ctrl=SL_OPTMGMT_ACK"); break; case SL_NOTIFY_IND: fprintf(stdout, "ctrl=SL_NOTIFY_IND"); break; case SL_LOCAL_PROCESSOR_OUTAGE_IND: fprintf(stdout, "ctrl=SL_LOCAL_PROCESSOR_OUTAGE_IND"); fprintf(stdout, "{sl_timestamp=%u}", p->sl.loc_proc_out_ind.sl_timestamp); break; case SL_LOCAL_PROCESSOR_RECOVERED_IND: fprintf(stdout, "ctrl=SL_LOCAL_PROCESSOR_RECOVERED_IND"); fprintf(stdout, "{sl_timestamp=%u}", p->sl.loc_proc_recovered_ind.sl_timestamp); break; default: return (-1); } fputc('\n', stdout); return (prim);}intwait_event(int wait){ for (;;) { struct pollfd pfd[] = { {mon_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(); } if (usr_signal) { usr_signal = 0; usr_action(); } 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__); mon_exit(1); return (-1); case 0: return (0); case 1: if (pfd[0].revents & (POLLIN | POLLPRI)) { int flags = 0; ctrl.maxlen = BUFSIZE; ctrl.len = 0; ctrl.buf = cbuf; data.maxlen = BUFSIZE; data.len = 0; data.buf = dbuf; if (getmsg(mon_fd, &ctrl, &data, &flags) < 0) { syslog(LOG_ERR, "%s: getmsg error", __FUNCTION__); syslog(LOG_ERR, "%s: %m", __FUNCTION__); mon_exit(1); break; } if (ctrl.len > 0) return decode_ctrl(); if (data.len > 0) return decode_data(); break; } if (pfd[0].revents & POLLNVAL) { syslog(LOG_ERR, "%s: device invalid", __FUNCTION__); mon_exit(1); return (-1); } if (pfd[0].revents & POLLHUP) { syslog(LOG_ERR, "%s: device hangup", __FUNCTION__); mon_exit(1); return (-1); } if (pfd[0].revents & POLLERR) { syslog(LOG_ERR, "%s: device error", __FUNCTION__); mon_exit(1); return (-1); } break; default: syslog(LOG_ERR, "%s: poll error", __FUNCTION__); mon_exit(1); return (-1); } }}intmon_open(void){ if (output > 1) syslog(LOG_NOTICE, "opening %s", devname); if ((mon_fd = open(devname, O_NONBLOCK | O_RDWR)) < 0) { syslog(LOG_ERR, "%s: could not open devname: %s", __FUNCTION__, devname); syslog(LOG_ERR, "%s: %m", __FUNCTION__); mon_exit(1); return (-1); } if (output > 1) syslog(LOG_NOTICE, "configuring %s", devname); if (ioctl(mon_fd, I_SRDOPT, RMSGD) < 0) { syslog(LOG_ERR, "%s: could not configure devname: %s", __FUNCTION__, devname); syslog(LOG_ERR, "%s: %m", __FUNCTION__); mon_exit(1); return (-1); } return (0);}intmon_close(void){ close(mon_fd); return (0);}intmon_attach(void){ union LMI_primitives *p = (union LMI_primitives *) cbuf; int ret; size_t ppa_len; caddr_t ppa_ptr; if (ppa != 0) { ppa_len = sizeof(ppa); ppa_ptr = (caddr_t) &ppa; } else if (clei[0] != '\0') { ppa_len = strnlen(clei, sizeof(clei)); ppa_ptr = (caddr_t) clei; } else { syslog(LOG_ERR, "%s: no address to attach", __FUNCTION__); mon_exit(1); return (-1); } ctrl.maxlen = sizeof(cbuf); ctrl.len = sizeof(p->attach_req) + ppa_len; ctrl.buf = cbuf; p->lmi_primitive = LMI_ATTACH_REQ; bcopy(&ppa, p->attach_req.lmi_ppa, ppa_len); if ((ret = putmsg(mon_fd, &ctrl, NULL, RS_HIPRI)) < 0) { syslog(LOG_ERR, "%s: putmsg: %m", __FUNCTION__); mon_exit(1); return (-1); } for (;;) { switch ((ret = wait_event(100))) { case 0: syslog(LOG_ERR, "%s: error, no response to LMI_ATTACH_REQ", __FUNCTION__); mon_exit(1); return (-1); case LMI_OK_ACK: return (0); 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); mon_exit(1); return (-1); default: syslog(LOG_ERR, "%s: error, unexpected response to LMI_ATTACH_REQ %d", __FUNCTION__, ret); mon_exit(1); return (-1); case (-1): return (-1); } }}intmon_detach(void){ union LMI_primitives *p = (union LMI_primitives *) cbuf; int ret; ctrl.maxlen = sizeof(cbuf); ctrl.len = sizeof(p->detach_req); ctrl.buf = cbuf; p->lmi_primitive = LMI_DETACH_REQ; if ((ret = putmsg(mon_fd, &ctrl, NULL, RS_HIPRI)) < 0) { syslog(LOG_ERR, "%s: putmsg: %m", __FUNCTION__); mon_exit(1); return (-1); } for (;;) { switch ((ret = wait_event(100))) { case 0: syslog(LOG_ERR, "%s: error, no response to LMI_DETACH_REQ", __FUNCTION__); mon_exit(1); return (-1); case LMI_OK_ACK: return (0); 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); mon_exit(1); return (-1); default: syslog(LOG_ERR, "%s: error, unexpected response to LMI_DETACH_REQ %d", __FUNCTION__, ret); mon_exit(1); return (-1); case (-1): return (-1); } }}voidshow_sl_config(void){ ftimestamp(); fprint_time(stdout); fprintf(stdout, " # sl config: t1: %u\n", monconf.sl.t1); fprint_time(stdout); fprintf(stdout, " # sl config: t2: %u\n", monconf.sl.t2); fprint_time(stdout); fprintf(stdout, " # sl config: t2l: %u\n", monconf.sl.t2l); fprint_time(stdout); fprintf(stdout, " # sl config: t2h: %u\n", monconf.sl.t2h); fprint_time(stdout); fprintf(stdout, " # sl config: t3: %u\n", monconf.sl.t3); fprint_time(stdout); fprintf(stdout, " # sl config: t4n: %u\n", monconf.sl.t4n); fprint_time(stdout); fprintf(stdout, " # sl config: t4e: %u\n", monconf.sl.t4e); fprint_time(stdout); fprintf(stdout, " # sl config: t5: %u\n", monconf.sl.t5); fprint_time(stdout); fprintf(stdout, " # sl config: t6: %u\n", monconf.sl.t6); fprint_time(stdout); fprintf(stdout, " # sl config: t7: %u\n", monconf.sl.t7); fprint_time(stdout); fprintf(stdout, " # sl config: rb_abate: %u\n", monconf.sl.rb_abate); fprint_time(stdout); fprintf(stdout, " # sl config: rb_accept: %u\n", monconf.sl.rb_accept); fprint_time(stdout); fprintf(stdout, " # sl config: rb_discard: %u\n", monconf.sl.rb_discard); fprint_time(stdout); fprintf(stdout, " # sl config: tb_abate_1: %u\n", monconf.sl.tb_abate_1); fprint_time(stdout); fprintf(stdout, " # sl config: tb_onset_1: %u\n", monconf.sl.tb_onset_1); fprint_time(stdout); fprintf(stdout, " # sl config: tb_discd_1: %u\n", monconf.sl.tb_discd_1); fprint_time(stdout); fprintf(stdout, " # sl config: tb_abate_2: %u\n", monconf.sl.tb_abate_2); fprint_time(stdout); fprintf(stdout, " # sl config: tb_onset_2: %u\n", monconf.sl.tb_onset_2); fprint_time(stdout); fprintf(stdout, " # sl config: tb_discd_2: %u\n", monconf.sl.tb_discd_2); fprint_time(stdout); fprintf(stdout, " # sl config: tb_abate_3: %u\n", monconf.sl.tb_abate_3); fprint_time(stdout); fprintf(stdout, " # sl config: tb_onset_3: %u\n", monconf.sl.tb_onset_3); fprint_time(stdout); fprintf(stdout, " # sl config: tb_discd_3: %u\n", monconf.sl.tb_discd_3); fprint_time(stdout); fprintf(stdout, " # sl config: N1: %u\n", monconf.sl.N1); fprint_time(stdout); fprintf(stdout, " # sl config: N2: %u\n", monconf.sl.N2); fprint_time(stdout); fprintf(stdout, " # sl config: M: %u\n", monconf.sl.M);}voidshow_sdt_config(void){ ftimestamp(); fprint_time(stdout); fprintf(stdout, " # sdt config: t8: %u\n", monconf.sdt.t8); fprint_time(stdout); fprintf(stdout, " # sdt config: Tin: %u\n", monconf.sdt.Tin); fprint_time(stdout); fprintf(stdout, " # sdt config: Tie: %u\n", monconf.sdt.Tie); fprint_time(stdout); fprintf(stdout, " # sdt config: T: %u\n", monconf.sdt.T); fprint_time(stdout); fprintf(stdout, " # sdt config: D: %u\n", monconf.sdt.D); fprint_time(stdout); fprintf(stdout, " # sdt config: Te: %u\n", monconf.sdt.Te); fprint_time(stdout); fprintf(stdout, " # sdt config: De: %u\n", monconf.sdt.De); fprint_time(stdout); fprintf(stdout, " # sdt config: Ue: %u\n", monconf.sdt.Ue); fprint_time(stdout); fprintf(stdout, " # sdt config: N: %u\n", monconf.sdt.N); fprint_time(stdout); fprintf(stdout, " # sdt config: m: %u\n", monconf.sdt.m); fprint_time(stdout); fprintf(stdout, " # sdt config: b: %u\n", monconf.sdt.b); fprint_time(stdout); fprintf(stdout, " # sdt config: f: "); switch (monconf.sdt.f) { case SDT_FLAGS_ONE: fprintf(stdout, "one\n"); break; case SDT_FLAGS_SHARED: fprintf(stdout, "shared\n"); break; case SDT_FLAGS_TWO: fprintf(stdout, "two\n"); break; case SDT_FLAGS_THREE: fprintf(stdout, "three\n"); break; default: fprintf(stdout, "%d\n", monconf.sdt.f); break; }}voidshow_sdl_config(void){ int i; ftimestamp(); fprint_time(stdout); fprintf(stdout, " # sdl config: ifname: %s\n", monconf.sdl.ifname); fprint_time(stdout); fprintf(stdout, " # sdl config: ifflags:"); if (monconf.sdl.ifflags & SDL_IF_UP) fprintf(stdout, " up"); if (monconf.sdl.ifflags & SDL_IF_RX_RUNNING) fprintf(stdout, " rx"); if (monconf.sdl.ifflags & SDL_IF_TX_RUNNING) fprintf(stdout, " tx"); fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: iftype:"); switch (monconf.sdl.iftype) { case SDL_TYPE_NONE: fprintf(stdout, " none"); break; case SDL_TYPE_V35: fprintf(stdout, " v35"); break; case SDL_TYPE_DS0: fprintf(stdout, " ds0"); break; case SDL_TYPE_DS0A: fprintf(stdout, " ds0a"); break; case SDL_TYPE_E1: fprintf(stdout, " e1"); break; case SDL_TYPE_T1: fprintf(stdout, " t1"); break; case SDL_TYPE_J1: fprintf(stdout, " j1"); break; case SDL_TYPE_ATM: fprintf(stdout, " atm"); break; case SDL_TYPE_PACKET: fprintf(stdout, " packet"); break; default: fprintf(stdout, " [%u]", monconf.sdl.iftype); break; } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifrate:"); switch (monconf.sdl.ifrate) { case SDL_RATE_NONE: fprintf(stdout, " none"); break; case SDL_RATE_DS0A: fprintf(stdout, " ds0a"); break; case SDL_RATE_DS0: fprintf(stdout, " ds0"); break; case SDL_RATE_T1: /* SDL_RATE_J1 */ fprintf(stdout, " t1/j1"); break; case SDL_RATE_E1: fprintf(stdout, " e1"); break; default: fprintf(stdout, " %u", monconf.sdl.ifrate); break; } fputc('\n', stdout); fprintf(stdout, " # sdl config: ifgtype:"); switch (monconf.sdl.ifgtype) { case SDL_GTYPE_NONE: fprintf(stdout, " none"); break; case SDL_GTYPE_T1: fprintf(stdout, " t1"); break; case SDL_GTYPE_E1: fprintf(stdout, " e1"); break; case SDL_GTYPE_J1: fprintf(stdout, " j1"); break; case SDL_GTYPE_ATM: fprintf(stdout, " atm"); break; case SDL_GTYPE_ETH: fprintf(stdout, " eth"); break; case SDL_GTYPE_IP: fprintf(stdout, " ip"); break; case SDL_GTYPE_UDP: fprintf(stdout, " udp"); break; case SDL_GTYPE_TCP: fprintf(stdout, " tcp"); break; case SDL_GTYPE_RTP: fprintf(stdout, " rtp"); break; case SDL_GTYPE_SCTP: fprintf(stdout, " sctp"); break; default: fprintf(stdout, " [%u]", monconf.sdl.ifgtype); } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifgrate:"); switch (monconf.sdl.ifgrate) { case SDL_GRATE_NONE: fprintf(stdout, " none"); break; case SDL_GRATE_T1: /* SDL_GRATE_J1 */ fprintf(stdout, " t1/j1"); break; case SDL_GRATE_E1: fprintf(stdout, " e1"); break; default: fprintf(stdout, " %u", monconf.sdl.ifgrate); break; } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifmode:"); switch (monconf.sdl.ifmode) { case SDL_MODE_NONE: fprintf(stdout, " none"); break; case SDL_MODE_DSU: fprintf(stdout, " dsu"); break; case SDL_MODE_CSU: fprintf(stdout, " csu"); break; case SDL_MODE_DTE: fprintf(stdout, " dte"); break; case SDL_MODE_DCE: fprintf(stdout, " dce"); break; case SDL_MODE_CLIENT: fprintf(stdout, " client"); break; case SDL_MODE_SERVER: fprintf(stdout, " server"); break; case SDL_MODE_PEER: fprintf(stdout, " peer"); break; case SDL_MODE_ECHO: fprintf(stdout, " echo"); break; case SDL_MODE_REM_LB: fprintf(stdout, " rem-lb"); break; case SDL_MODE_LOC_LB: fprintf(stdout, " loc-lb"); break; case SDL_MODE_LB_ECHO: fprintf(stdout, " lb-echo"); break; case SDL_MODE_TEST: fprintf(stdout, " test"); break; default: fprintf(stdout, " [%u]", monconf.sdl.ifmode); break; } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifgmode:"); switch (monconf.sdl.ifgmode) { case SDL_GMODE_NONE: fprintf(stdout, " none"); break; case SDL_GMODE_LOC_LB: fprintf(stdout, " loc-lb"); break; case SDL_GMODE_REM_LB: fprintf(stdout, " rem-lb"); break; default: fprintf(stdout, " [%u]", monconf.sdl.ifgmode); break; } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifgcrc:"); switch (monconf.sdl.ifgcrc) { case SDL_GCRC_NONE: fprintf(stdout, " none"); break; case SDL_GCRC_CRC4: fprintf(stdout, " crc4"); break; case SDL_GCRC_CRC5: fprintf(stdout, " crc5"); break; case SDL_GCRC_CRC6: fprintf(stdout, " crc6"); break; case SDL_GCRC_CRC6J: fprintf(stdout, " crc6j"); break; default: fprintf(stdout, " [%u]", monconf.sdl.ifgcrc); break; } fputc('\n', stdout); fprint_time(stdout); fprintf(stdout, " # sdl config: ifclock:"); switch (monconf.sdl.ifclock) { case SDL_CLOCK_NONE: fprintf(stdout, " none"); break; case SDL_CLOCK_INT: fprintf(stdout, " int"); break; case SDL_CLOCK_EXT: fprintf(stdout, " ext"); break; case SDL_CLOCK_LOOP: fprintf(stdout, " loop"); break; case SDL_CLOCK_MASTER: fprintf(stdout, " master"); break; case SDL_CLOCK_SLAVE: fprintf(stdout, " slave"); break; case SDL_CLOCK_DPLL: fprintf(stdout, " dpll"); break; case SDL_CLOCK_ABR: fprintf(stdout, " abr"); break; case SDL_CLOCK_SHAPER: fprintf(stdout, " shaper"); break; case SDL_CLOCK_TICK:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -