OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/test/zurich01/test-sl-data.c#ident "@(#) $RCSfile: test-sl-data.c,v $ $Name: $($Revision: 0.8 $) $Date: 2002/10/25 17:45:52 $" static char const ident[] = "$RCSfile: test-sl-data.c,v $ $Name: $($Revision: 0.8 $) $Date: 2002/10/25 17:45:52 $"; #include <stropts.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/poll.h> #include <sys/time.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <fcntl.h> #include <getopt.h> #include <string.h> #include <time.h> #include <ss7/lmi.h> #include <ss7/lmi_ioctl.h> #include <ss7/sdli.h> #include <ss7/sdli_ioctl.h> #include <ss7/sdti.h> #include <ss7/sdti_ioctl.h> #include <ss7/sli.h> #include <ss7/sli_ioctl.h> static int board = 1; static int span = 1; static int channel = 16; lmi_option_t lmi_conf = { pvar:SS7_PVAR_ITUT_96, popt:0, }, lmi_conf_read; #ifndef HZ #define HZ 100 #endif sl_config_t sl_conf = { t1:45 * HZ, /* jiffies */ t2:5 * HZ, /* jiffies */ t2l:20 * HZ, /* jiffies */ t2h:100 * HZ, /* jiffies */ t3:1 * HZ, /* jiffies */ t4n:8 * HZ, /* jiffies */ t4e:500 * HZ / 1000, /* jiffies */ t5:100 * HZ / 1000, /* jiffies */ t6:4 * HZ, /* jiffies */ t7:1 * HZ, /* jiffies */ rb_abate:3, /* messages */ rb_accept:6, /* messages */ rb_discard:9, /* messages */ tb_abate_1:128 * 272, /* octets */ tb_onset_1:256 * 272, /* octets */ tb_discd_1:384 * 272, /* octets */ tb_abate_2:512 * 272, /* octets */ tb_onset_2:640 * 272, /* octets */ tb_discd_2:768 * 272, /* octets */ tb_abate_3:896 * 272, /* octets */ tb_onset_3:1024 * 272, /* octets */ tb_discd_3:1152 * 272, /* octets */ N1:127, /* messages */ N2:8192, /* octets */ M:5, }, sl_conf_read; sdt_config_t sdt_conf = { t8:100 * HZ / 1000, Tin:4, Tie:1, T:64, D:256, Te:577169, De:9308000, Ue:144292000, N:16, m:272, b:8, f:SDT_FLAGS_ONE, #if 0 f:SDT_FLAGS_SHARED, f:SDT_FLAGS_TWO, f:SDT_FLAGS_THREE, #endif }, sdt_conf_read; sdl_config_t sdl_conf = { ifflags:0, iftype:SDL_TYPE_DS0, ifrate:64000, ifgtype:SDL_GTYPE_NONE, ifgrate:2048000, ifmode:SDL_MODE_PEER, ifgmode:SDL_GMODE_NONE, ifgcrc:SDL_GCRC_CRC5, /* E1 only */ ifclock:SDL_CLOCK_SLAVE, ifcoding:SDL_CODING_HDB3, /* E1 only */ ifframing:SDL_FRAMING_CCS, /* E1 only */ ifleads:0, ifalarms:0, ifrxlevel:0, iftxlevel:0, ifsync:0, ifsyncsrc:{1, 2, 0, 0} }, sdl_conf_read; static void usage(int argc, char **argv) { fprintf(stderr, "\n\ Usage: %s [options]\n\ -h, --help\n\ prints this usage information and exits\n\ -b, --board board (default: %d)\n\ board specifies the board number to open\n\ -s, --span span (default: %d)\n\ span specifies the span on the card to open\n\ -c, --channel channel (default: %d)\n\ channel specifies the time slot in the span to open\n\ --flags number (default: %lu)\n\ number specifies the number of flags (0 means 1)\n\ --crc4, --crc5, --crc6 (default: crc5)\n\ specifies the crc to use\n\ --hdb3, --ami, --b8zs (default: hdb3)\n\ specifies the line coding to use\n\ --cas, --ccs, --sf, --esf (default: ccs)\n\ specifies the framing to use\n\ --t1, --e1 (default: e1)\n\ sets default settings for T1 or E1 operation\n\ \n", argv[0], board, span, channel, sdt_conf.f); }; static void help(int argc, char **argv) { usage(argc, argv); fprintf(stderr, "\ This program opens and attaches a Signalling Link channel, activates the\n\ links, and reads and writes SLTM/SLTA to and from the channel. The program\n\ prints continuous information to stdout.\n\ \n"); }; int fd; int mux; typedef unsigned short ppa_t; ppa_t ppa; #ifndef HZ #define HZ 100 #endif #define BUFSIZE 300 static char cbuf[BUFSIZE]; static char dbuf[BUFSIZE]; struct strioctl ctl; struct strbuf ctrl = { sizeof(*cbuf), 0, cbuf }; struct strbuf data = { sizeof(*dbuf), 0, dbuf }; union LMI_primitives *m = (union LMI_primitives *) cbuf; union SL_primitives *p = (union SL_primitives *) cbuf; static int timer_timeout = 0; static void timer_handler(int signum) { if (signum == SIGALRM) timer_timeout = 1; return; } static int timer_sethandler(void) { sigset_t mask; struct sigaction act; act.sa_handler = timer_handler; act.sa_flags = SA_RESTART | SA_ONESHOT; act.sa_restorer = NULL; sigemptyset(&act.sa_mask); if (sigaction(SIGALRM, &act, NULL)) return -1; sigemptyset(&mask); sigaddset(&mask, SIGALRM); sigprocmask(SIG_UNBLOCK, &mask, NULL); return 0; } /* * Start an interval timer as the overall test timer. */ static int start_timer(long duration) { struct itimerval setting = { {0, 0}, {duration / 1000, (duration % 1000) * 1000} }; if (timer_sethandler()) return -1; if (setitimer(ITIMER_REAL, &setting, NULL)) return -1; timer_timeout = 0; return 0; } static int stop_timer(void) { sigset_t mask; struct sigaction act; act.sa_handler = SIG_DFL; act.sa_flags = 0; act.sa_restorer = NULL; sigemptyset(&act.sa_mask); if (sigaction(SIGALRM, &act, NULL)) return -1; timer_timeout = 0; sigemptyset(&mask); sigaddset(&mask, SIGALRM); sigprocmask(SIG_BLOCK, &mask, NULL); return 0; } #define TIMEOUT (-2) static int decode_msg(void) { if (ctrl.len >= sizeof(ulong)) return *(ulong *) cbuf; return -1; } static int decode_data(void) { if (data.len > 5) return SL_PDU_IND; return -1; } static int wait_event(int wait) { while (1) { struct pollfd pfd[] = { {fd, POLLIN | POLLPRI, 0} }; if (timer_timeout) { timer_timeout = 0; return TIMEOUT; } switch (poll(pfd, 1, wait)) { case -1: if (errno == EAGAIN || errno == EINTR || errno == ERESTART) continue; perror(__FUNCTION__); exit(1); case 0: return (0); 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(fd, &ctrl, &data, &flags) < 0) { perror(__FUNCTION__); exit(1); } if (ctrl.len > 0 && (ret = decode_msg()) != -1) return ret; if (data.len > 0 && (ret = decode_data()) != -1) return ret; } default: break; } } } static void handle_message(void) { /* turn around SLTM into SLTA only */ unsigned char *q = dbuf; uint sio, dpc, opc, sls, h0, h1, b; int i; sio = *q++; printf("Received: "); for (i = 0; i < data.len; i++) printf("%02x ", dbuf[i]); printf("\n"); if ((sio & 0xf) == 1 || (sio & 0xf) == 2) { b = *q++ & 0x00ff; dpc = ((b << 0) & 0xff); b = *q++ & 0x00ff; dpc |= ((b << 8) & 0x3f00); opc = ((b >> 6) & 0x03); b = *q++ & 0x00ff; opc |= ((b << 2) & 0x3fc); b = *q++ & 0x00ff; opc |= ((b << 10) & 0x3c00); sls = (b >> 4) & 0x0f; b = *q++ & 0x00ff; h0 = *q & 0x0f; h1 = *q++ >> 4; if (h0 == 1 && h1 == 1) { q = dbuf; h1 = 2; q++; *q++ = opc; *q++ = ((opc >> 8) & 0x3f) | (dpc << 6); *q++ = (dpc >> 2); *q++ = ((dpc >> 10) & 0x0f) | (sls << 4); *q++ = h0 | (h1 << 4); printf("Responding: "); for (i = 0; i < data.len; i++) printf("%02x ", dbuf[i]); printf("\n"); /* send back */ ctrl.maxlen = BUFSIZE; ctrl.len = sizeof(p->pdu_req); ctrl.buf = cbuf; p->pdu_req.sl_primitive = SL_PDU_REQ; p->pdu_req.sl_mp = 0x3; if (putmsg(fd, &ctrl, &data, 0) < 0) perror(__FUNCTION__); } } } static int get_event(void) { return wait_event(-1); } static void get_stats(void) { sdl_stats_t sdl_stats; sdt_stats_t sdt_stats; sl_stats_t sl_stats; ctl.ic_cmd = SDL_IOCGSTATS; ctl.ic_timout = 0; ctl.ic_len = sizeof(sdl_stats); ctl.ic_dp = (char *) &sdl_stats; if (ioctl(fd, I_STR, &ctl) < 0) perror(__FUNCTION__); else { printf("\n"); printf("rx_octets = %lu\n", sdl_stats.rx_octets); printf("tx_octsts = %lu\n", sdl_stats.tx_octets); printf("rx_overruns = %lu\n", sdl_stats.rx_overruns); printf("tx_underruns = %lu\n", sdl_stats.tx_underruns); printf("rx_buffer_overflows = %lu\n", sdl_stats.rx_buffer_overflows); printf("tx_buffer_overflows = %lu\n", sdl_stats.tx_buffer_overflows); printf("lead_cts_lost = %lu\n", sdl_stats.lead_cts_lost); printf("lead_dcd_lost = %lu\n", sdl_stats.lead_dcd_lost); printf("carrier_lost = %lu\n", sdl_stats.carrier_lost); } ctl.ic_cmd = SDT_IOCGSTATS; ctl.ic_timout = 0; ctl.ic_len = sizeof(sdt_stats); ctl.ic_dp = (char *) &sdt_stats; if (ioctl(fd, I_STR, &ctl) < 0) perror(__FUNCTION__); else { printf("tx_bytes = %lu\n", sdt_stats.tx_bytes); printf("tx_sus = %lu\n", sdt_stats.tx_sus); printf("tx_sus_repeated = %lu\n", sdt_stats.tx_sus_repeated); printf("tx_underruns = %lu\n", sdt_stats.tx_underruns); printf("tx_aborts = %lu\n", sdt_stats.tx_aborts); printf("tx_buffer_overflows = %lu\n", sdt_stats.tx_buffer_overflows); printf("tx_sus_in_error = %lu\n", sdt_stats.tx_sus_in_error); printf("rx_bytes = %lu\n", sdt_stats.rx_bytes); printf("rx_sus = %lu\n", sdt_stats.rx_sus); printf("rx_sus_compressed = %lu\n", sdt_stats.rx_sus_compressed); printf("rx_overruns = %lu\n", sdt_stats.rx_overruns); printf("rx_aborts = %lu\n", sdt_stats.rx_aborts); printf("rx_buffer_overflows = %lu\n", sdt_stats.rx_buffer_overflows); printf("rx_sus_in_error = %lu\n", sdt_stats.rx_sus_in_error); printf("rx_sync_transitions = %lu\n", sdt_stats.rx_sync_transitions); printf("rx_bits_octet_counted = %lu\n", sdt_stats.rx_bits_octet_counted); printf("rx_crc_errors = %lu\n", sdt_stats.rx_crc_errors); printf("rx_frame_errors = %lu\n", sdt_stats.rx_frame_errors); printf("rx_frame_overflows = %lu\n", sdt_stats.rx_frame_overflows); printf("rx_frame_too_long = %lu\n", sdt_stats.rx_frame_too_long); printf("rx_frame_too_short = %lu\n", sdt_stats.rx_frame_too_short); printf("rx_residue_errors = %lu\n", sdt_stats.rx_residue_errors); printf("rx_length_error = %lu\n", sdt_stats.rx_length_error); printf("carrier_cts_lost = %lu\n", sdt_stats.carrier_cts_lost); printf("carrier_dcd_lost = %lu\n", sdt_stats.carrier_dcd_lost); printf("carrier_lost = %lu\n", sdt_stats.carrier_lost); } ctl.ic_cmd = SL_IOCGSTATS; ctl.ic_timout = 0; ctl.ic_len = sizeof(sl_stats); ctl.ic_dp = (char *) &sl_stats; if (ioctl(fd, I_STR, &ctl) < 0) perror(__FUNCTION__); else { printf("sl_dur_in_service = %lu\n", sl_stats.sl_dur_in_service); printf("sl_fail_align_or_proving= %lu\n", sl_stats.sl_fail_align_or_proving); printf("sl_nacks_received = %lu\n", sl_stats.sl_nacks_received); printf("sl_dur_unavail = %lu\n", sl_stats.sl_dur_unavail); printf("sl_dur_unavail_failed = %lu\n", sl_stats.sl_dur_unavail_failed); printf("sl_dur_unavail_rpo = %lu\n", sl_stats.sl_dur_unavail_rpo); printf("sl_sibs_sent = %lu\n", sl_stats.sl_sibs_sent); printf("sl_tran_sio_sif_octets = %lu\n", sl_stats.sl_tran_sio_sif_octets); printf("sl_retrans_octets = %lu\n", sl_stats.sl_retrans_octets); printf("sl_tran_msus = %lu\n", sl_stats.sl_tran_msus); printf("sl_recv_sio_sif_octets = %lu\n", sl_stats.sl_recv_sio_sif_octets); printf("sl_recv_msus = %lu\n", sl_stats.sl_recv_msus); printf("sl_cong_onset_ind[0] = %lu\n", sl_stats.sl_cong_onset_ind[0]); printf("sl_cong_onset_ind[1] = %lu\n", sl_stats.sl_cong_onset_ind[1]); printf("sl_cong_onset_ind[2] = %lu\n", sl_stats.sl_cong_onset_ind[2]); printf("sl_cong_onset_ind[3] = %lu\n", sl_stats.sl_cong_onset_ind[3]); printf("sl_dur_cong_status[0] = %lu\n", sl_stats.sl_dur_cong_status[0]); printf("sl_dur_cong_status[1] = %lu\n", sl_stats.sl_dur_cong_status[1]); printf("sl_dur_cong_status[2] = %lu\n", sl_stats.sl_dur_cong_status[2]); printf("sl_dur_cong_status[3] = %lu\n", sl_stats.sl_dur_cong_status[3]); printf("sl_cong_discd_ind[0] = %lu\n", sl_stats.sl_cong_discd_ind[0]); printf("sl_cong_discd_ind[1] = %lu\n", sl_stats.sl_cong_discd_ind[1]); printf("sl_cong_discd_ind[2] = %lu\n", sl_stats.sl_cong_discd_ind[2]); printf("sl_cong_discd_ind[3] = %lu\n", sl_stats.sl_cong_discd_ind[3]); } ctl.ic_cmd = SDL_IOCGCONFIG; ctl.ic_timout = 0; ctl.ic_len = sizeof(sdl_conf_read); ctl.ic_dp = (char *) &sdl_conf_read; bzero(&sdl_conf_read, sizeof(sdl_conf_read)); if (ioctl(fd, I_STR, &ctl) < 0) perror(__FUNCTION__); else { printf("ifflags = %s %s %s\n", (sdl_conf_read.ifflags & SDL_IF_TX_RUNNING) ? "TX" : "tx", (sdl_conf_read.ifflags & SDL_IF_RX_RUNNING) ? "RX" : "rx", (sdl_conf_read.ifflags & SDL_IF_UP) ? "UP" : "up"); printf("iftype = "); switch (sdl_conf_read.iftype) { case SDL_TYPE_NONE: printf("none"); break; case SDL_TYPE_V35: printf("V35"); break; case SDL_TYPE_DS0: printf("DS0"); break; case SDL_TYPE_DS0A: printf("DS0A"); break; case SDL_TYPE_E1: printf("E1"); break; case SDL_TYPE_T1: printf("T1"); break; case SDL_TYPE_ATM: printf("ATM"); break; case SDL_TYPE_PACKET: printf("PACKET"); break; default: printf("(UNKNOWN %lu)", sdl_conf_read.iftype); break; } printf("\n"); printf("ifrate = %lu\n", sdl_conf_read.ifrate); printf("ifgtype = "); switch (sdl_conf_read.ifgtype) { case SDL_GTYPE_NONE: printf("none"); break; case SDL_GTYPE_T1: printf("T1"); break; case SDL_GTYPE_E1: printf("E1"); break; case SDL_GTYPE_J1: printf("J1"); break; case SDL_GTYPE_ATM: printf("ATM"); break; case SDL_GTYPE_ETH: printf("ETHERNET"); break; case SDL_GTYPE_IP: printf("IP"); break; case SDL_GTYPE_UDP: printf("UDP"); break; case SDL_GTYPE_TCP: printf("TCP"); break; case SDL_GTYPE_RTP: printf("RTP"); break; case SDL_GTYPE_SCTP: printf("SCTP"); break; default: printf("(UNKNOWN %lu)", sdl_conf_read.ifgtype); break; } printf("\n"); printf("ifgrate = %lu\n", sdl_conf_read.ifgrate); printf("ifmode = "); switch (sdl_conf_read.ifmode) { case SDL_MODE_NONE: printf("none"); break; case SDL_MODE_DSU: printf("DSU"); break; case SDL_MODE_CSU: printf("CSU"); break; case SDL_MODE_DTE: printf("DTE"); break; case SDL_MODE_DCE: printf("DCE"); break; case SDL_MODE_CLIENT: printf("CLIENT"); break; case SDL_MODE_SERVER: printf("SERVER"); break; case SDL_MODE_PEER: printf("PEER"); break; case SDL_MODE_ECHO: printf("ECHO"); break; case SDL_MODE_REM_LB: printf("REM_LB"); break; case SDL_MODE_LOC_LB: printf("LOC_LB"); break; case SDL_MODE_LB_ECHO: printf("LB_ECHO"); break; case SDL_MODE_TEST: printf("TEST"); break; default: printf("(UNKNOWN %lu)", sdl_conf_read.ifmode); break; } printf("\n"); printf("ifgmode = "); switch (sdl_conf_read.ifgmode) { default: case SDL_GMODE_NONE: printf("Normal"); break; case SDL_GMODE_LOC_LB: printf("Local Loopback"); break; case SDL_GMODE_REM_LB: printf("Remove Loopback"); break; printf("(UNKNOWN %lu)", sdl_conf_read.ifgmode); break; } printf("\n"); printf("ifgcrc = "); switch (sdl_conf_read.ifgcrc) { default: case SDL_GCRC_NONE: printf("NONE"); break; case SDL_GCRC_CRC4: printf("CRC4"); break; case SDL_GCRC_CRC5: printf("CRC5"); break; case SDL_GCRC_CRC6: printf("CRC6"); break; printf("(UNKNOWN %lu)", sdl_conf_read.ifgcrc); break; } printf("\n"); printf("ifclock = "); switch (sdl_conf_read.ifclock) { default: case SDL_CLOCK_NONE: printf("none"); break; case SDL_CLOCK_INT: printf("Internal"); break; case SDL_CLOCK_EXT: printf("External"); break; case SDL_CLOCK_LOOP: printf("Loop"); break; case SDL_CLOCK_MASTER: printf("Master"); break; case SDL_CLOCK_SLAVE: printf("Slave"); break; case SDL_CLOCK_DPLL: printf("Digital PLL"); break; case SDL_CLOCK_ABR: printf("Average Bit Rate"); break; case SDL_CLOCK_SHAPER: printf("Traffic Shaper"); break; case SDL_CLOCK_TICK: printf("Tick Clock"); break; printf("(UNKNOWN %lu)", sdl_conf_read.ifclock); break; } printf("\n"); printf("ifcoding = "); switch (sdl_conf_read.ifcoding) { case SDL_CODING_NONE: printf("Normal"); break; case SDL_CODING_NRZ: printf("NRZ"); break; case SDL_CODING_NRZI: printf("NRZI"); break; case SDL_CODING_AMI: printf("AMI"); break; case SDL_CODING_B6ZS: printf("B6ZS"); break; case SDL_CODING_B8ZS: printf("B8ZS"); break; case SDL_CODING_ESF: printf("ESF"); break; case SDL_CODING_AAL1: printf("AAL1"); break; case SDL_CODING_AAL2: printf("AAL2"); break; case SDL_CODING_AAL5: printf("AAL5"); break; case SDL_CODING_HDB3: printf("HDB3"); break; default: printf("(UNKNOWN %lu)", sdl_conf_read.ifcoding); break; } printf("\n"); printf("ifframing = "); switch (sdl_conf_read.ifframing) { case SDL_FRAMING_NONE: printf("Default"); break; case SDL_FRAMING_CCS: printf("CCS"); break; case SDL_FRAMING_CAS: printf("CAS"); break; case SDL_FRAMING_SF: printf("SF"); break; case SDL_FRAMING_ESF: printf("ESF"); break; default: printf("(UNKNOWN %lu)", sdl_conf_read.ifframing); break; } printf("\n"); printf("ifleads = %s %s %s %s %s\n", (sdl_conf_read.ifleads & SDL_LEAD_DTR) ? "DTR" : "dtr", (sdl_conf_read.ifleads & SDL_LEAD_RTS) ? "RTS" : "rts", (sdl_conf_read.ifleads & SDL_LEAD_DCD) ? "DCD" : "dcd", (sdl_conf_read.ifleads & SDL_LEAD_CTS) ? "CTS" : "cts", (sdl_conf_read.ifleads & SDL_LEAD_DSR) ? "DSR" : "dsr"); printf("ifalarms = %s %s %s %s\n", (sdl_conf_read.ifalarms & SDL_ALARM_RED) ? "RED" : "red", (sdl_conf_read.ifalarms & SDL_ALARM_BLU) ? "BLU" : "blu", (sdl_conf_read.ifalarms & SDL_ALARM_YEL) ? "YEL" : "yel", (sdl_conf_read.ifalarms & SDL_ALARM_REC) ? "REC" : "rec"); printf("ifrxlevel = %lu\n", sdl_conf_read.ifrxlevel); printf("iftxlevel = %lu\n", sdl_conf_read.iftxlevel); printf("ifalarms = 0x%08lx\n", sdl_conf_read.ifalarms); printf("ifsync = %lu\n", sdl_conf_read.ifsync); fflush(stdout); printf("\n"); } } static void show_time(void) { time_t t; time(&t); printf("\n%s", ctime(&t)); } static int mymain(int argc, char **argv) { int ret, state = 0; unsigned char msg[] = { 0x01, 0xae, 0x11, 0x76, 0x04, 0x11, 0x70, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97 }; ppa = ((board - 1) << 12) | ((span - 1) << 8) | (channel << 0); fprintf(stderr, "\nRunning %s on board %d, span %d, channel %d.\n\n", argv[0], board, span, channel); printf("Opening mux.\n"); fflush(stdout); if ((mux = open("/dev/sl-mux", O_NONBLOCK | O_RDWR)) < 0) { perror(argv[0]); exit(1); } fd = mux; printf("Ioctl on mux.\n"); fflush(stdout); if (ioctl(mux, I_SRDOPT, RMSGD) < 0) { perror(argv[0]); exit(1); } printf("Start.\n"); fflush(stdout); ctrl.maxlen = BUFSIZE; ctrl.len = sizeof(p->start_req); ctrl.buf = cbuf; p->start_req.sl_primitive = SL_START_REQ; if (putmsg(fd, &ctrl, NULL, 0) < 0) { perror(argv[0]); exit(1); } printf("Writing data\n"); write(mux, msg, sizeof(msg)); write(mux, msg, sizeof(msg)); write(mux, msg, sizeof(msg)); get_stats(); close(mux); exit(0); } int main(int argc, char **argv) { int c; while (1) { int option_index = 0; static struct option long_options[] = { {"help", 0, 0, 'h'}, {"board", 1, 0, 'b'}, {"span", 1, 0, 's'}, {"channel", 1, 0, 'c'}, {"crc4", 0, 0, 1}, {"crc5", 0, 0, 2}, {"crc6", 0, 0, 3}, {"hdb3", 0, 0, 4}, {"ami", 0, 0, 5}, {"b8zs", 0, 0, 6}, {"cas", 0, 0, 7}, {"ccs", 0, 0, 8}, {"sf", 0, 0, 9}, {"esf", 0, 0, 10}, {"flags", 1, 0, 11}, {"t1", 0, 0, 12}, {"e1", 0, 0, 13} }; c = getopt_long(argc, argv, "hb:s:c:", long_options, &option_index); if (c == -1) break; switch (c) { case 0: switch (option_index) { case 0: /* -h */ help(argc, argv); exit(0); case 1: /* -b board */ board = atoi(optarg); break; case 2: /* -s span */ span = atoi(optarg); break; case 3: /* -c channel */ channel = atoi(optarg); break; default: usage(argc, argv); exit(1); } case 'h': help(argc, argv); exit(0); case 'b': board = atoi(optarg); break; case 's': span = atoi(optarg); break; case 'c': channel = atoi(optarg); break; case 1: /* crc4 */ sdl_conf.ifgcrc = SDL_GCRC_CRC4; break; case 2: /* crc5 */ sdl_conf.ifgcrc = SDL_GCRC_CRC5; break; case 3: /* crc6 */ sdl_conf.ifgcrc = SDL_GCRC_CRC6; break; case 4: /* hdb3 */ sdl_conf.ifcoding = SDL_CODING_HDB3; break; case 5: /* ami */ sdl_conf.ifcoding = SDL_CODING_AMI; break; case 6: /* b8zs */ sdl_conf.ifcoding = SDL_CODING_B8ZS; break; case 7: /* cas */ sdl_conf.ifframing = SDL_FRAMING_CAS; break; case 8: /* ccs */ sdl_conf.ifframing = SDL_FRAMING_CCS; break; case 9: /* sf */ sdl_conf.ifframing = SDL_FRAMING_SF; break; case 10: /* esf */ sdl_conf.ifframing = SDL_FRAMING_ESF; break; case 11: /* flags */ sdt_conf.f = atoi(optarg); break; case 12: /* t1 */ sdl_conf.ifgrate = 1540000; sdl_conf.ifgcrc = SDL_GCRC_CRC6; sdl_conf.ifcoding = SDL_CODING_B8ZS; sdl_conf.ifframing = SDL_FRAMING_SF; break; case 13: /* e1 */ sdl_conf.ifgrate = 2048000; sdl_conf.ifgcrc = SDL_GCRC_CRC5; sdl_conf.ifcoding = SDL_CODING_HDB3; sdl_conf.ifframing = SDL_FRAMING_CCS; break; default: usage(argc, argv); exit(1); } } if (optind < argc) { fprintf(stderr, "%s: illegal syntax -- ", argv[0]); for (; optind < argc; optind++) fprintf(stderr, "%s ", argv[optind]); fprintf(stderr, "\n"); usage(argc, argv); exit(1); } return mymain(argc, argv); }
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |