diff options
-rw-r--r-- | sbin/Makefile | 2 | ||||
-rw-r--r-- | sbin/cxconfig/Makefile | 6 | ||||
-rw-r--r-- | sbin/cxconfig/cxconfig.8 | 329 | ||||
-rw-r--r-- | sbin/cxconfig/cxconfig.c | 768 |
4 files changed, 1 insertions, 1104 deletions
diff --git a/sbin/Makefile b/sbin/Makefile index 71e5440..5e49d8f 100644 --- a/sbin/Makefile +++ b/sbin/Makefile @@ -102,7 +102,7 @@ SUBDIR+=vinum .endif .if ${MACHINE_ARCH} == "i386" -SUBDIR+=cxconfig +SUBDIR+=sconfig .if ${MACHINE} == "pc98" SUBDIR+=fdisk_pc98 .else diff --git a/sbin/cxconfig/Makefile b/sbin/cxconfig/Makefile deleted file mode 100644 index e851ec9..0000000 --- a/sbin/cxconfig/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# $FreeBSD$ - -PROG= cxconfig -MAN= cxconfig.8 - -.include <bsd.prog.mk> diff --git a/sbin/cxconfig/cxconfig.8 b/sbin/cxconfig/cxconfig.8 deleted file mode 100644 index 62b06e3..0000000 --- a/sbin/cxconfig/cxconfig.8 +++ /dev/null @@ -1,329 +0,0 @@ -.\" $FreeBSD$ -.Dd December 2, 1994 -.Dt CXCONFIG 8 -.Os -.Sh NAME -.Nm cxconfig -.Nd channel options management utility for Cronyx-Sigma adapter -.Sh SYNOPSIS -.Nm -.Op Fl a -.Op Ar <channel> Op Ar <option>... -.Sh DESCRIPTION -The -.Nm -utility is used for configuring the channel options of -the Cronyx-Sigma adapter. -.Pp -To change channel options the channel should be free: the corresponding -network interface in ``down'' state, the asynchronous terminal device -.Pa /dev/tty* -closed. -Generally, the channel options are set up during the operating -system startup, for example from the -.Pa /etc/rc -file. -.Pp -Note, that not all options have a sense for every particular -case, and an attempt to set some of them can hang up the channel or -the whole adapter. -.Pp -The following option is available: -.Bl -tag -width indent -.It Fl a -Display full information. -.El -.Sh "Channel options" -.Bl -tag -width 10n -.It ispeed=# -Set the receiver baud rate to the number given. -The maximal value is 256000 bits/sec. -In the synchronous mode the receiver baud rate is significant -only when DPLL mode is used. -.It ospeed=# -Set the transmitter baud rate to the number given. -The maximal value is 256000 bits/sec. -In the synchronous mode the transmitter baud rate is significant -only in the case of the internal clock source. -If receiver and transmitter have equal data rate, then it could -be set by specifying only the numerical argument. -.It async -Set the asynchronous channel mode. -.It "hdlc, bisync, bsc, x.21, x21 -Set the synchronous channel mode: HDLC, Bisync (BSC) or X.21. -.It ppp -Set the link-level protocol: PpP/HDLC. The built-in simplified synchronous PPP -implementation is used (see RFC-1548, RFC-1549). -.It cisco -Set the link-level protocol: Cisco/HDLC (see RFC-1547). -This protocol is intended for compatibility with old models of Cisco routers, -and with early versions of -.Tn BSD/386 -drivers. -The extensive usage of this protocol is not recommended. -.It ext -Use the external link-level protocol suite (for -.Tn BSD/386 -only). -.It "+keepalive, -keepalive" -Enable the automatic line state control sub-protocol. -This setting is not significant when the external link-level protocol is used. -.It "+autorts, -autorts" -Enable the automatic RTS signal control. -When enabled, the RTS signal goes up only when both halves of -the receiver ring buffer are free and ready for receive, -and goes down when one or both buffers are busy. -.It "port=rs232, port=rs449, port=v35 -Set the zero channel hardware interface type. -.El -.Sh "Common options" -.Bl -tag -width 10n -.It "nrz, nrzi, manchester" -Set the data line signal encoding. -In the case of -.Em NRZ -encoding the zero bit is transmitted by the zero signal -level, the one bit - by the positive signal level. -In the case of -.Em NRZI -encoding the zero bit is transmitted by the change of -the signal level, the one bit - by the constant signal level. -In the case of -.Em Manchester -encoding the zero bit is encoded as 01 value, -the one bit - as 10 value. -.It "+dpll, -dpll" -Enable the digital phase locked loop mode (DPLL). -When enabled, the receiver timing clock signal -is derived from the received data. -.It "+lloop, -lloop" -Set the local loopback mode. -.It "+extclock, -extclock" -Set the timing clock source of synchronous channels. There are -two possible variants: -.Em "external clock" -source or -.Em "internal clock" -generation. -.Pp -.Em "External clock" -mode is the most common method for connecting -external modem hardware. In this mode the external timing -signal is received on TXCIN pin of the connector, and it is -used as a synchronization clock for transmitting data (TXD). -.Pp -In the case of -.Em "internal clock" -mode the transmitted data (TXD) -are synchronized using the internal on-board timing generator, -the internally generated timing signal is driven on the TXCOUT -pin, and the signal on the TXCIN pin is ignored. This mode -is used for direct terminal-to-terminal communication, -e.g. for connecting two computers together in a synchronous mode -via relatively short cable. This method should also be used -for testing channels with an external loopback connector. -.It fifo=# -FIFO threshold level setup for receiver and transmitter. -.It rfifo=# -Hardware RTS/CTS flow control FIFO threshold setup. -.It "+ctsup, -ctsup" -Enable/disable interrupts on CTS (Clear To Send) signal setup (0 to 1 transition). -.It "+ctsdown, -ctsdown" -Enable/disable interrupts on CTS (Clear To Send) signal clear (1 to 0 transition). -.It "+cdup, -cdup" -Enable/disable interrupts on CD (Carrier Detect) signal setup (0 to 1 transition). -.It "+cddown, -cddown" -Enable/disable interrupts on CD (Carrier Detect) signal clear (1 to 0 transition). -.It "+dsrup, -dsrup" -Enable/disable interrupts on DSR (Data Set Ready) signal setup (0 to 1 transition). -.It "+dsrdown, -dsrdown" -Enable/disable interrupts on DSR (Data Set Ready) signal clear (1 to 0 transition). -.El -.Sh "Asynchronous mode options" -.Bl -tag -width 10n -.It cs# -Select character size: 5, 6, 7 or 8 bits. -.It "parodd, pareven -Parity mode: odd or even. -.It "+ignpar, -ignpar -Disable/enable parity detection. -.It nopar -Disable parity bit generation. -.It forcepar -Force parity: even - 0, odd - 1. -.It "stopb1, stopb1.5, stopb2 -Use 1 or 1.5 or 2 stop bits per character. -.It "+dsr, -dsr" -Use the DSR input signal as receiver enable/disable. -.It "+cts, -cts" -Use the CTS input signal as transmitter enable/disable. -.It "+rts, -rts" -Drive the RTS output signal as transmitter ready. -.It "+rloop, -rloop" -Set the remote loopback mode. -.It "+etc, -etc" -Enable the embedded transmit commands mode. -.It "+ixon, -ixon" -Enable the hardware XON/XOFF flow control support. -.It "+ixany, -ixany" -Use the hardware IXANY mode support. -.It "+sdt, -sdt" -Detect the spec. characters SCHR1 and SCHR2 in the receive data. -.It "+flowct, -flowct" -Receive the flow control spec. characters as data. -.It "+rdt, -rdt" -Detect the spec. characters in range SCRL..SCRH in the receive data. -.It "+exdt, -exdt" -Detect the spec. characters SCHR3 and SCHR4 in the receive data. -.It "parintr, parnull, parign, pardisc, parffnull -Action on parity errors: -.Pp -.Bl -tag -width parffnullxxx -compact -.It Mode -Action -.It parintr -Generate the receiver error interrupt -.It parnull -Input the NUL character -.It parign -Ignore the error, receive as good data -.It pardisc -Ignore the character -.It parffnull -Input the sequence <0xFF, NUL, character> -.El -.It "brkintr, brknull, brkdisc -Line break state action: -.Pp -.Bl -tag -width parffnullxxx -compact -.It Mode -Action -.It brkintr -Generate the receiver error interrupt -.It brknull -Input the NUL character -.It brkdisc -Ignore the line break state -.El -.It "+inlcr, -inlcr" -Translate received NL characters to CR. -.It "+icrnl, -icrnl" -Translate received CR characters to NL. -.It "+igncr, -igncr" -Ignore received CR characters. -.It "+ocrnl, -ocrnl" -Translate transmitted CR characters to NL. -.It "+onlcr, -onlcr" -Translate transmitted NL characters to CR. -.It "+fcerr, -fcerr" -Process (don't process) the characters, received with errors, -for special character/flow control matching. -.It "+lnext, -lnext" -Enable the LNEXT character option: the character following -the LNEXT character is not processed for special character/flow -control matching. -.It "+istrip, -istrip" -Strip input characters to seven bits. -.It schr1=# -The XON flow control character value. -.It schr2=# -The XOFF flow control character value. -.It schr3=# -The SCHR3 spec. character value. -.It schr4=# -The SCHR4 spec. character value. -.It "scrl=#, scrh=# -The spec. character range (inclusive). -.It lnext=# -The LNEXT spec. character value. -.El -.Sh "HDLC mode options" -.Bl -tag -width 10n -.It if# -The minimum number of flags transmitted before a frame is started. -.It noaddr -No frame address recognition. -.It "addrlen1, addrlen2" -Address field length: 1 or 2 bytes. -.It "addr1, addr2" -Addressing mode: 4x1 bytes or 2x2 bytes. -Registers RFAR1..RFAR4 should contain the address to be matched. -.It "+clrdet, -clrdet" -Enable/disable clear detect for X.21 protocol support. -.It "+dsr, -dsr" -Use the DSR input signal as receiver enable/disable. -.It "+cts, -cts" -Use the CTS input signal as transmitter enable/disable. -.It "+rts, -rts" -Drive the RTS output signal as transmitter ready. -.It "+fcs, -fcs" -Enable/disable the frame checksum generation and checking. -.It "crc-16, crc-v.41 -Select the CRC polynomial: CRC-16 (x^16+x^15+x^2+1) -or CRC V.41 (x^16+x^12+x^5+1). -.It "fcs-crc-16, fcs-v.41 -Frame checksum preset: all zeros (CRC-16) or all ones (CRC V.41). -.It "+crcinv, -crcinv" -Invert (ie. CRC V.41) or don't invert (ie. CRC-16) the transmitted frame checksum. -.It "+fcsapd, -fcsapd" -Pass the received CRC to the host at the end of receiver data buffer. -.It "idlemark, idleflag -Idle mode: idle in mark (transmit all ones) or idle in flag (transmit flag). -.It "+syn, -syn" -Enable/disable sending pad characters before sending flag when coming out -of the idle mode. -.It pad# -The number of synchronous characters sent (0..4). -.It "syn=0xaa, syn=0x00 -Send sync pattern. -.It "rfar1=#, rfar2=#, rfar3=#, rfar4=# -Frame address registers for address recognition. -.El -.Sh EXAMPLES -Set up the channel 7 of the adapter Sigma-400 under -.Fx . -Physical 4-wire leased line with Zelax+ M115 short-range modems. -Synchronous mode, 128000 bits/sec, interface RS-232, -protocol PpP/HDLC without keepalive support, NRZI encoding, -DPLL mode, no flow control: -.Bd -literal -cxconfig cx7 128000 hdlc ppp -keepalive nrzi -cts +dpll -extclock -ifconfig cx7 158.250.244.2 158.250.244.1 up -.Ed -.Pp -Set up the channel 0 of the adapter Sigma-100 under -.Fx . -Attachment to the near computer by short cable, internal clock source. -Synchronous mode, 256000 bits/sec, interface RS-232, -protocol Cisco/HDLC with keepalive support: -.Bd -literal -cxconfig cx0 hdlc 256000 cisco +keepalive -extclock -ifconfig cx0 200.1.1.1 200.1.1.2 up -.Ed -.Pp -Set up the channel 1 of the adapter Sigma-840 under -.Tn BSD/386 . -Synchronous 64 kbit/sec leased line, external clock source. -Synchronous mode, interface V.35, external protocol suite: -.Bd -literal -cxconfig cx1 hdlc ext -ifconfig cx1 193.124.254.50 193.124.254.49 multicast up -.Ed -.Pp -Set up the channel 0 of the adapter Sigma-840 under -.Fx . -Attachment to the Cisco-4000 router by null-modem cable, internal clock source. -Synchronous mode, 64000 bits/sec, interface RS-232, -protocol PpP/HDLC with keepalive support and flow control, -LCP and IPCP protocols (see RFC-1548 and RFC-1332) debug tracing enabled: -.Bd -literal -cxconfig cx0 hdlc 64000 port=rs232 ppp +keepalive -extclock +cts -ifconfig cx0 100.0.0.2 100.0.0.1 debug up -.Ed -.Sh FILES -.Bl -tag -width /dev/cronyx -compact -.It Pa /dev/cronyx -the special device file for adapter options management -.El -.Sh SEE ALSO -.Xr cx 4 diff --git a/sbin/cxconfig/cxconfig.c b/sbin/cxconfig/cxconfig.c deleted file mode 100644 index 05fd0d5..0000000 --- a/sbin/cxconfig/cxconfig.c +++ /dev/null @@ -1,768 +0,0 @@ -/* - * Cronyx-Sigma adapter configuration utility for Unix. - * - * Copyright (C) 1994 Cronyx Ltd. - * Author: Serge Vakulenko, <vak@zebub.msk.su> - * - * This software is distributed with NO WARRANTIES, not even the implied - * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Authors grant any other persons or organisations permission to use - * or modify this software as long as this message is kept with the software, - * all derivative works or modified versions. - * - * Version 1.9, Wed Oct 4 18:58:15 MSK 1995 - * - * Usage: - * cxconfig [-a] - * -- print status of all channels - * cxconfig [-a] <channel> - * -- print status of the channel - * cxconfig <channel> <option>... - * -- set channel options - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/types.h> -#include <sys/ioctl.h> -#include <sys/socket.h> -#include <net/if.h> -#include <machine/cronyx.h> - -#include <err.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#define NBRD 3 -#define CXDEV "/dev/cronyx" -#define atoi(a) strtol((a), (char**)0, 0) - -cx_options_t o; -cx_stat_t st; -int aflag; -int sflag; - -static char * -symbol(unsigned char sym) -{ - static char buf[40]; - - if (sym < ' ') - sprintf (buf, "^%c", sym+0100); - else if (sym == '\\') - strcat (buf, "\\\\"); - else if (sym < 127) - sprintf (buf, "%c", sym); - else - sprintf (buf, "\\%03o", sym); - return (buf); -} - -static unsigned char -atosym(char *s) -{ - if (*s == '^') - return (*++s & 037); - if (*s == '\\') - return (strtol (++s, 0, 8)); - return (*s); -} - -static void -usage(void) -{ - fprintf (stderr, - "Cronyx-Sigma Adapter Configuration Utility, Version 1.0\n"); - fprintf (stderr, "Copyright (C) 1994 Cronyx Ltd.\n"); - fprintf (stderr, "usage: cxconfig [-a] [<channel> [<option>...]]\n"); - exit (1); -} - -static const char * -chantype(int type) -{ - switch (type) { - default: - case T_NONE: return ("none"); - case T_ASYNC: return ("RS-232"); - case T_UNIV_RS232: return ("RS-232"); - case T_UNIV_RS449: return ("RS-232/RS-449"); - case T_UNIV_V35: return ("RS-232/V.35"); - case T_SYNC_RS232: return ("RS-232"); - case T_SYNC_V35: return ("V.35"); - case T_SYNC_RS449: return ("RS-449"); - } -} - -static const char * -chanmode(int mode) -{ - switch (mode) { - case M_ASYNC: return ("Async"); - case M_HDLC: return ("HDLC"); - case M_BISYNC: return ("Bisync"); - case M_X21: return ("X.21"); - default: return ("???"); - } -} - -static void -getchan(int channel) -{ - int s = open (CXDEV, 0); - if (s < 0) - err (1, "%s", CXDEV); - o.board = channel/NCHAN; - o.channel = channel%NCHAN; - if (ioctl (s, CXIOCGETMODE, (caddr_t)&o) < 0) - err (1, "CXIOCGETMODE"); - close (s); - if (o.type == T_NONE) - errx (1, "cx%d: channel %d not configured", o.board, - o.channel); -} - -static int -printstats(int channel, int hflag) -{ - int s, res; - - s = open (CXDEV, 0); - if (s < 0) - err (1, "%s", CXDEV); - st.board = channel/NCHAN; - st.channel = channel%NCHAN; - res = ioctl (s, CXIOCGETSTAT, (caddr_t)&st); - close (s); - if (res < 0) - return (-1); - - if (hflag) - printf ("Chan Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n"); - printf ("cx%-2d %7ld %7ld %7ld %8ld %7ld %7ld %8ld %7ld %7ld\n", - channel, st.rintr, st.tintr, st.mintr, st.ibytes, st.ipkts, - st.ierrs, st.obytes, st.opkts, st.oerrs); - return (0); -} - -static void -printallstats(void) -{ - int b, c; - - printf ("Chan Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n"); - for (b=0; b<NBRD; ++b) - for (c=0; c<NCHAN; ++c) - printstats (b*NCHAN + c, 0); -} - -static void -setchan(int channel) -{ - int s = open (CXDEV, 0); - if (s < 0) - err (1, "%s", CXDEV); - o.board = channel/NCHAN; - o.channel = channel%NCHAN; - if (ioctl (s, CXIOCSETMODE, (caddr_t)&o) < 0) - err (1, "CXIOCSETMODE"); - close (s); -} - -static void -printopt(void) -{ - /* Common channel options */ - /* channel option register 4 */ - printf ("\t"); - printf ("fifo=%d ", o.opt.cor4.thr); /* FIFO threshold */ - printf ("%cctsdown ", o.opt.cor4.cts_zd ? '+' : '-'); /* detect 1 to 0 transition on the CTS */ - printf ("%ccddown ", o.opt.cor4.cd_zd ? '+' : '-'); /* detect 1 to 0 transition on the CD */ - printf ("%cdsrdown ", o.opt.cor4.dsr_zd ? '+' : '-'); /* detect 1 to 0 transition on the DSR */ - printf ("\n"); - - /* channel option register 5 */ - printf ("\t"); - printf ("rfifo=%d ", o.opt.cor5.rx_thr); /* receive flow control FIFO threshold */ - printf ("%cctsup ", o.opt.cor5.cts_od ? '+' : '-'); /* detect 0 to 1 transition on the CTS */ - printf ("%ccdup ", o.opt.cor5.cd_od ? '+' : '-'); /* detect 0 to 1 transition on the CD */ - printf ("%cdsrup ", o.opt.cor5.dsr_od ? '+' : '-'); /* detect 0 to 1 transition on the DSR */ - printf ("\n"); - - /* receive clock option register */ - printf ("\t"); - printf ("%s ", o.opt.rcor.encod == ENCOD_NRZ ? "nrz" : /* signal encoding */ - o.opt.rcor.encod == ENCOD_NRZI ? "nrzi" : - o.opt.rcor.encod == ENCOD_MANCHESTER ? "manchester" : "???"); - printf ("%cdpll ", o.opt.rcor.dpll ? '+' : '-'); /* DPLL enable */ - - /* transmit clock option register */ - printf ("%clloop ", o.opt.tcor.llm ? '+' : '-'); /* local loopback mode */ - printf ("%cextclock ", o.opt.tcor.ext1x ? '+' : '-'); /* external 1x clock mode */ - printf ("\n"); - - switch (o.mode) { - case M_ASYNC: /* async mode options */ - /* channel option register 1 */ - printf ("\t"); - printf ("cs%d ", o.aopt.cor1.charlen+1); /* character length, 5..8 */ - printf ("par%s ", o.aopt.cor1.parity ? "odd" : "even"); /* parity */ - printf ("%cignpar ", o.aopt.cor1.ignpar ? '+' : '-'); /* ignore parity */ - if (o.aopt.cor1.parmode != PARM_NORMAL) /* parity mode */ - printf ("%s ", o.aopt.cor1.parmode == PARM_NOPAR ? "nopar" : - o.aopt.cor1.parmode == PARM_FORCE ? "forcepar" : "???"); - printf ("\n"); - - /* channel option register 2 */ - printf ("\t"); - printf ("%cdsr ", o.aopt.cor2.dsrae ? '+' : '-'); /* DSR automatic enable */ - printf ("%ccts ", o.aopt.cor2.ctsae ? '+' : '-'); /* CTS automatic enable */ - printf ("%crts ", o.aopt.cor2.rtsao ? '+' : '-'); /* RTS automatic output enable */ - printf ("%crloop ", o.aopt.cor2.rlm ? '+' : '-'); /* remote loopback mode enable */ - printf ("%cetc ", o.aopt.cor2.etc ? '+' : '-'); /* embedded transmitter cmd enable */ - printf ("%cxon ", o.aopt.cor2.ixon ? '+' : '-'); /* in-band XON/XOFF enable */ - printf ("%cxany ", o.aopt.cor2.ixany ? '+' : '-'); /* XON on any character */ - printf ("\n"); - - /* option register 3 */ - printf ("\t"); - printf ("%s ", o.aopt.cor3.stopb == STOPB_1 ? "stopb1" : /* stop bit length */ - o.aopt.cor3.stopb == STOPB_15 ? "stopb1.5" : - o.aopt.cor3.stopb == STOPB_2 ? "stopb2" : "???"); - printf ("%csdt ", o.aopt.cor3.scde ? '+' : '-'); /* special char detection enable */ - printf ("%cflowct ", o.aopt.cor3.flowct ? '+' : '-'); /* flow control transparency mode */ - printf ("%crdt ", o.aopt.cor3.rngde ? '+' : '-'); /* range detect enable */ - printf ("%cexdt ", o.aopt.cor3.escde ? '+' : '-'); /* extended spec. char detect enable */ - printf ("\n"); - - /* channel option register 6 */ - printf ("\t"); - printf ("%s ", o.aopt.cor6.parerr == PERR_INTR ? "parintr" : /* parity/framing error actions */ - o.aopt.cor6.parerr == PERR_NULL ? "parnull" : - o.aopt.cor6.parerr == PERR_IGNORE ? "parign" : - o.aopt.cor6.parerr == PERR_DISCARD ? "pardisc" : - o.aopt.cor6.parerr == PERR_FFNULL ? "parffnull" : "???"); - printf ("%s ", o.aopt.cor6.brk == BRK_INTR ? "brkintr" : /* action on break condition */ - o.aopt.cor6.brk == BRK_NULL ? "brknull" : - o.aopt.cor6.brk == BRK_DISCARD ? "brkdisc" : "???"); - printf ("%cinlcr ", o.aopt.cor6.inlcr ? '+' : '-'); /* translate NL to CR on input */ - printf ("%cicrnl ", o.aopt.cor6.icrnl ? '+' : '-'); /* translate CR to NL on input */ - printf ("%cigncr ", o.aopt.cor6.igncr ? '+' : '-'); /* discard CR on input */ - printf ("\n"); - - /* channel option register 7 */ - printf ("\t"); - printf ("%cocrnl ", o.aopt.cor7.ocrnl ? '+' : '-'); /* translate CR to NL on output */ - printf ("%conlcr ", o.aopt.cor7.onlcr ? '+' : '-'); /* translate NL to CR on output */ - printf ("%cfcerr ", o.aopt.cor7.fcerr ? '+' : '-'); /* process flow ctl err chars enable */ - printf ("%clnext ", o.aopt.cor7.lnext ? '+' : '-'); /* LNext option enable */ - printf ("%cistrip ", o.aopt.cor7.istrip ? '+' : '-'); /* strip 8-bit on input */ - printf ("\n"); - - printf ("\t"); - printf ("schr1=%s ", symbol (o.aopt.schr1)); /* special character register 1 (XON) */ - printf ("schr2=%s ", symbol (o.aopt.schr2)); /* special character register 2 (XOFF) */ - printf ("schr3=%s ", symbol (o.aopt.schr3)); /* special character register 3 */ - printf ("schr4=%s ", symbol (o.aopt.schr4)); /* special character register 4 */ - printf ("scrl=%s ", symbol (o.aopt.scrl)); /* special character range low */ - printf ("scrh=%s ", symbol (o.aopt.scrh)); /* special character range high */ - printf ("lnext=%s ", symbol (o.aopt.lnxt)); /* LNext character */ - printf ("\n"); - break; - - case M_HDLC: /* hdlc mode options */ - /* hdlc channel option register 1 */ - printf ("\t"); - printf ("if%d ", o.hopt.cor1.ifflags); /* number of inter-frame flags sent */ - printf ("%s ", o.hopt.cor1.admode == ADMODE_NOADDR ? "noaddr" : /* addressing mode */ - o.hopt.cor1.admode == ADMODE_4_1 ? "addr1" : - o.hopt.cor1.admode == ADMODE_2_2 ? "addr2" : "???"); - printf ("%cclrdet ", o.hopt.cor1.clrdet ? '+' : '-'); /* clear detect for X.21 data transfer phase */ - printf ("addrlen%d ", o.hopt.cor1.aflo + 1); /* address field length option */ - printf ("\n"); - - /* hdlc channel option register 2 */ - printf ("\t"); - printf ("%cdsr ", o.hopt.cor2.dsrae ? '+' : '-'); /* DSR automatic enable */ - printf ("%ccts ", o.hopt.cor2.ctsae ? '+' : '-'); /* CTS automatic enable */ - printf ("%crts ", o.hopt.cor2.rtsao ? '+' : '-'); /* RTS automatic output enable */ - printf ("%ccrcinv ", o.hopt.cor2.crcninv ? '-' : '+'); /* CRC invertion option */ - printf ("%cfcsapd ", o.hopt.cor2.fcsapd ? '+' : '-'); /* FCS append */ - printf ("\n"); - - /* hdlc channel option register 3 */ - printf ("\t"); - printf ("pad%d ", o.hopt.cor3.padcnt); /* pad character count */ - printf ("idle%s ", o.hopt.cor3.idle ? "mark" : "flag"); /* idle mode */ - printf ("%cfcs ", o.hopt.cor3.nofcs ? '-' : '+'); /* FCS disable */ - printf ("fcs-%s ", o.hopt.cor3.fcspre ? "crc-16" : "v.41"); /* FCS preset */ - printf ("syn=%s ", o.hopt.cor3.syncpat ? "0xAA" : "0x00"); /* send sync pattern */ - printf ("%csyn ", o.hopt.cor3.sndpad ? '+' : '-'); /* send pad characters before flag enable */ - printf ("\n"); - - printf ("\t"); - printf ("rfar1=0x%02x ", o.hopt.rfar1); /* receive frame address register 1 */ - printf ("rfar2=0x%02x ", o.hopt.rfar2); /* receive frame address register 2 */ - printf ("rfar3=0x%02x ", o.hopt.rfar3); /* receive frame address register 3 */ - printf ("rfar4=0x%02x ", o.hopt.rfar4); /* receive frame address register 4 */ - printf ("crc-%s ", o.hopt.cpsr ? "16" : "v.41"); /* CRC polynomial select */ - printf ("\n"); - break; - - case M_BISYNC: /* bisync mode options */ - /* channel option register 1 */ - printf ("\t"); - printf ("cs%d ", o.bopt.cor1.charlen+1); /* character length, 5..8 */ - printf ("par%s ", o.bopt.cor1.parity ? "odd" : "even"); /* parity */ - printf ("%cignpar ", o.bopt.cor1.ignpar ? '+' : '-'); /* ignore parity */ - if (o.bopt.cor1.parmode != PARM_NORMAL) /* parity mode */ - printf ("%s ", o.bopt.cor1.parmode == PARM_NOPAR ? "nopar" : - o.bopt.cor1.parmode == PARM_FORCE ? "forcepar" : "???"); - printf ("\n"); - - /* channel option register 2 */ - printf ("\t"); - printf ("syn%d ", o.bopt.cor2.syns+2); /* number of extra SYN chars before a frame */ - printf ("%ccrcinv ", o.bopt.cor2.crcninv ? '-' : '+'); /* CRC invertion option */ - printf ("%s ", o.bopt.cor2.ebcdic ? "ebcdic" : "ascii"); /* use EBCDIC as char set (instead of ASCII) */ - printf ("%cbccapd ", o.bopt.cor2.bcc ? '+' : '-'); /* BCC append enable */ - printf ("%s ", o.bopt.cor2.lrc ? "lrc" : "crc-16"); /* longitudinal redundancy check */ - printf ("\n"); - - /* channel option register 3 */ - printf ("\t"); - printf ("pad%d ", o.bopt.cor3.padcnt); /* pad character count */ - printf ("idle%s ", o.bopt.cor3.idle ? "mark" : "syn"); /* idle mode */ - printf ("%cfcs ", o.bopt.cor3.nofcs ? '-' : '+'); /* FCS disable */ - printf ("fcs-%s ", o.bopt.cor3.fcspre ? "crc-16" : "v.41"); /* FCS preset */ - printf ("syn=%s ", o.bopt.cor3.padpat ? "0x55" : "0xAA"); /* send sync pattern */ - printf ("%csyn ", o.bopt.cor3.sndpad ? '+' : '-'); /* send pad characters before flag enable */ - printf ("\n"); - - /* channel option register 6 */ - printf ("\t"); - printf ("specterm=%s ", symbol (o.bopt.cor6.specterm)); /* special termination character */ - - printf ("crc-%s ", o.bopt.cpsr ? "16" : "v.41"); /* CRC polynomial select */ - printf ("\n"); - break; - - case M_X21: /* x.21 mode options */ - /* channel option register 1 */ - printf ("\t"); - printf ("cs%d ", o.xopt.cor1.charlen+1); /* character length, 5..8 */ - printf ("par%s ", o.xopt.cor1.parity ? "odd" : "even"); /* parity */ - printf ("%cignpar ", o.xopt.cor1.ignpar ? '+' : '-'); /* ignore parity */ - if (o.xopt.cor1.parmode != PARM_NORMAL) /* parity mode */ - printf ("%s ", o.xopt.cor1.parmode == PARM_NOPAR ? "nopar" : - o.xopt.cor1.parmode == PARM_FORCE ? "forcepar" : "???"); - printf ("\n"); - - /* channel option register 2 */ - printf ("\t"); - printf ("%cetc ", o.xopt.cor2.etc ? '+' : '-'); /* embedded transmitter cmd enable */ - - /* channel option register 3 */ - printf ("%csdt ", o.xopt.cor3.scde ? '+' : '-'); /* special char detection enable */ - printf ("%cstripsyn ", o.xopt.cor3.stripsyn ? '+' : '-'); /* treat SYN chars as special condition */ - printf ("%cssdt ", o.xopt.cor3.ssde ? '+' : '-'); /* steady state detect enable */ - printf ("syn%c ", o.xopt.cor3.syn ? '1' : '2'); /* the number of SYN chars on receive */ - printf ("\n"); - - /* channel option register 6 */ - printf ("\t"); - printf ("syn=%s ", symbol (o.xopt.cor6.synchar)); /* syn character */ - - printf ("schr1=%s ", symbol (o.xopt.schr1)); /* special character register 1 */ - printf ("schr2=%s ", symbol (o.xopt.schr2)); /* special character register 2 */ - printf ("schr3=%s ", symbol (o.xopt.schr3)); /* special character register 3 */ - printf ("\n"); - break; - } -} - -static void -printchan(int channel) -{ - printf ("cx%d (%s) %s", channel, chantype (o.type), chanmode (o.mode)); - if (o.txbaud == o.rxbaud) - printf (" %lu", o.rxbaud); - else - printf (" ospeed=%lu ispeed=%lu", o.txbaud, o.rxbaud); - if ((o.channel == 0 || o.channel == 8) && - (o.type == T_UNIV_V35 || o.type == T_UNIV_RS449)) - printf (" port=%s", o.iftype ? (o.type == T_UNIV_V35 ? - "v35" : "rs449") : "rs232"); - printf (o.sopt.ext ? " ext" : o.sopt.cisco ? " cisco" : " ppp"); - printf (" %ckeepalive", o.sopt.keepalive ? '+' : '-'); - printf (" %cautorts", o.sopt.norts ? '-' : '+'); - if (*o.master) - printf (" master=%s", o.master); - printf ("\n"); - if (aflag) - printopt (); -} - -static void -printall(void) -{ - struct ifconf ifc; - struct ifreq *ifr; - char buf[BUFSIZ], *cp; - int s, c; - - s = socket (AF_INET, SOCK_DGRAM, 0); - if (s < 0) - err (1, "socket"); - ifc.ifc_len = sizeof (buf); - ifc.ifc_buf = buf; - if (ioctl (s, SIOCGIFCONF, (caddr_t)&ifc) < 0) - err (1, "SIOCGIFCONF"); - close (s); - s = open (CXDEV, 0); - if (s < 0) - err (1, "%s", CXDEV); - - ifr = ifc.ifc_req; -#define max(a,b) ((a)>(b) ? (a) : (b)) -#define size(p) max((p).sa_len, sizeof(p)) - for (cp=buf; cp<buf+ifc.ifc_len; cp+=sizeof(ifr->ifr_name)+size(ifr->ifr_addr)) { - ifr = (struct ifreq*) cp; - if (ifr->ifr_addr.sa_family != AF_LINK) - continue; - if (strncmp (ifr->ifr_name, "cx", 2) != 0) - continue; - c = atoi (ifr->ifr_name + 2); - o.board = c/NCHAN; - o.channel = c%NCHAN; - if (ioctl (s, CXIOCGETMODE, (caddr_t)&o) < 0) - err (1, "CXIOCGETMODE"); - printchan (c); - } - close (s); -} - -static void -set_interface_type(char *type) -{ - if (o.channel != 0 && o.channel != 8) { - printf ("interface option is applicable only for channels 0 and 8\n"); - exit (1); - } - if (o.type != T_UNIV_V35 && o.type != T_UNIV_RS449) { - printf ("interface option is applicable only for universal channels\n"); - exit (1); - } - if (! strcasecmp (type, "port=rs232")) - o.iftype = 0; - else - o.iftype = 1; -} - -static void -set_master(char *ifname) -{ - if (o.type == T_ASYNC) { - printf ("master option is not applicable for async channels\n"); - exit (1); - } - strcpy (o.master, ifname); -} - -static void -set_async_opt(char *opt) -{ - /* channel option register 1 */ - if (! strncasecmp (opt, "cs", 2)) o.aopt.cor1.charlen = atoi (opt + 2) - 1; - else if (! strcasecmp (opt, "parodd")) o.aopt.cor1.parity = 1; - else if (! strcasecmp (opt, "pareven")) o.aopt.cor1.parity = 0; - else if (! strcasecmp (opt, "-ignpar")) o.aopt.cor1.ignpar = 0; - else if (! strcasecmp (opt, "+ignpar")) o.aopt.cor1.ignpar = 1; - else if (! strcasecmp (opt, "nopar")) o.aopt.cor1.parmode = PARM_NOPAR; - else if (! strcasecmp (opt, "forcepar")) o.aopt.cor1.parmode = PARM_FORCE; - - /* channel option register 2 */ - else if (! strcasecmp (opt, "-dsr")) o.aopt.cor2.dsrae = 0; - else if (! strcasecmp (opt, "+dsr")) o.aopt.cor2.dsrae = 1; - else if (! strcasecmp (opt, "-cts")) o.aopt.cor2.ctsae = 0; - else if (! strcasecmp (opt, "+cts")) o.aopt.cor2.ctsae = 1; - else if (! strcasecmp (opt, "-rts")) o.aopt.cor2.rtsao = 0; - else if (! strcasecmp (opt, "+rts")) o.aopt.cor2.rtsao = 1; - else if (! strcasecmp (opt, "-rloop")) o.aopt.cor2.rlm = 0; - else if (! strcasecmp (opt, "+rloop")) o.aopt.cor2.rlm = 1; - else if (! strcasecmp (opt, "-etc")) o.aopt.cor2.etc = 0; - else if (! strcasecmp (opt, "+etc")) o.aopt.cor2.etc = 1; - else if (! strcasecmp (opt, "-ixon")) o.aopt.cor2.ixon = 0; - else if (! strcasecmp (opt, "+ixon")) o.aopt.cor2.ixon = 1; - else if (! strcasecmp (opt, "-ixany")) o.aopt.cor2.ixany = 0; - else if (! strcasecmp (opt, "+ixany")) o.aopt.cor2.ixany = 1; - - /* option register 3 */ - else if (! strcasecmp (opt, "stopb1")) o.aopt.cor3.stopb = STOPB_1; - else if (! strcasecmp (opt, "stopb1.5")) o.aopt.cor3.stopb = STOPB_15; - else if (! strcasecmp (opt, "stopb2")) o.aopt.cor3.stopb = STOPB_2; - else if (! strcasecmp (opt, "-sdt")) o.aopt.cor3.scde = 0; - else if (! strcasecmp (opt, "+sdt")) o.aopt.cor3.scde = 1; - else if (! strcasecmp (opt, "-flowct")) o.aopt.cor3.flowct = 0; - else if (! strcasecmp (opt, "+flowct")) o.aopt.cor3.flowct = 1; - else if (! strcasecmp (opt, "-rdt")) o.aopt.cor3.rngde = 0; - else if (! strcasecmp (opt, "+rdt")) o.aopt.cor3.rngde = 1; - else if (! strcasecmp (opt, "-exdt")) o.aopt.cor3.escde = 0; - else if (! strcasecmp (opt, "+exdt")) o.aopt.cor3.escde = 1; - - /* channel option register 6 */ - else if (! strcasecmp (opt, "parintr")) o.aopt.cor6.parerr = PERR_INTR; - else if (! strcasecmp (opt, "parnull")) o.aopt.cor6.parerr = PERR_NULL; - else if (! strcasecmp (opt, "parign")) o.aopt.cor6.parerr = PERR_IGNORE; - else if (! strcasecmp (opt, "pardisc")) o.aopt.cor6.parerr = PERR_DISCARD; - else if (! strcasecmp (opt, "parffnull")) o.aopt.cor6.parerr = PERR_FFNULL; - else if (! strcasecmp (opt, "brkintr")) o.aopt.cor6.brk = BRK_INTR; - else if (! strcasecmp (opt, "brknull")) o.aopt.cor6.brk = BRK_NULL; - else if (! strcasecmp (opt, "brkdisc")) o.aopt.cor6.brk = BRK_DISCARD; - else if (! strcasecmp (opt, "-inlcr")) o.aopt.cor6.inlcr = 0; - else if (! strcasecmp (opt, "+inlcr")) o.aopt.cor6.inlcr = 1; - else if (! strcasecmp (opt, "-icrnl")) o.aopt.cor6.icrnl = 0; - else if (! strcasecmp (opt, "+icrnl")) o.aopt.cor6.icrnl = 1; - else if (! strcasecmp (opt, "-igncr")) o.aopt.cor6.igncr = 0; - else if (! strcasecmp (opt, "+igncr")) o.aopt.cor6.igncr = 1; - - /* channel option register 7 */ - else if (! strcasecmp (opt, "-ocrnl")) o.aopt.cor7.ocrnl = 0; - else if (! strcasecmp (opt, "+ocrnl")) o.aopt.cor7.ocrnl = 1; - else if (! strcasecmp (opt, "-onlcr")) o.aopt.cor7.onlcr = 0; - else if (! strcasecmp (opt, "+onlcr")) o.aopt.cor7.onlcr = 1; - else if (! strcasecmp (opt, "-fcerr")) o.aopt.cor7.fcerr = 0; - else if (! strcasecmp (opt, "+fcerr")) o.aopt.cor7.fcerr = 1; - else if (! strcasecmp (opt, "-lnext")) o.aopt.cor7.lnext = 0; - else if (! strcasecmp (opt, "+lnext")) o.aopt.cor7.lnext = 1; - else if (! strcasecmp (opt, "-istrip")) o.aopt.cor7.istrip = 0; - else if (! strcasecmp (opt, "+istrip")) o.aopt.cor7.istrip = 1; - - else if (! strncasecmp (opt, "schr1=", 6)) o.aopt.schr1 = atosym (opt+6); - else if (! strncasecmp (opt, "schr2=", 6)) o.aopt.schr2 = atosym (opt+6); - else if (! strncasecmp (opt, "schr3=", 6)) o.aopt.schr3 = atosym (opt+6); - else if (! strncasecmp (opt, "schr4=", 6)) o.aopt.schr4 = atosym (opt+6); - else if (! strncasecmp (opt, "scrl=", 5)) o.aopt.scrl = atosym (opt+5); - else if (! strncasecmp (opt, "scrh=", 5)) o.aopt.scrh = atosym (opt+5); - else if (! strncasecmp (opt, "lnext=", 6)) o.aopt.lnxt = atosym (opt+6); - else - usage (); -} - -static void -set_hdlc_opt(char *opt) -{ - /* hdlc channel option register 1 */ - if (! strncasecmp (opt, "if", 2)) o.hopt.cor1.ifflags = atoi (opt + 2); - else if (! strcasecmp (opt, "noaddr")) o.hopt.cor1.admode = ADMODE_NOADDR; - else if (! strcasecmp (opt, "addr1")) o.hopt.cor1.admode = ADMODE_4_1; - else if (! strcasecmp (opt, "addr2")) o.hopt.cor1.admode = ADMODE_2_2; - else if (! strcasecmp (opt, "-clrdet")) o.hopt.cor1.clrdet = 0; - else if (! strcasecmp (opt, "+clrdet")) o.hopt.cor1.clrdet = 1; - else if (! strcasecmp (opt, "addrlen1")) o.hopt.cor1.aflo = 0; - else if (! strcasecmp (opt, "addrlen2")) o.hopt.cor1.aflo = 1; - - /* hdlc channel option register 2 */ - else if (! strcasecmp (opt, "-dsr")) o.hopt.cor2.dsrae = 0; - else if (! strcasecmp (opt, "+dsr")) o.hopt.cor2.dsrae = 1; - else if (! strcasecmp (opt, "-cts")) o.hopt.cor2.ctsae = 0; - else if (! strcasecmp (opt, "+cts")) o.hopt.cor2.ctsae = 1; - else if (! strcasecmp (opt, "-rts")) o.hopt.cor2.rtsao = 0; - else if (! strcasecmp (opt, "+rts")) o.hopt.cor2.rtsao = 1; - else if (! strcasecmp (opt, "-fcsapd")) o.hopt.cor2.fcsapd = 0; - else if (! strcasecmp (opt, "+fcsapd")) o.hopt.cor2.fcsapd = 1; - else if (! strcasecmp (opt, "-crcinv")) o.hopt.cor2.crcninv = 1; - else if (! strcasecmp (opt, "+crcinv")) o.hopt.cor2.crcninv = 0; - - /* hdlc channel option register 3 */ - else if (! strncasecmp (opt, "pad", 3)) o.hopt.cor3.padcnt = atoi (opt + 3); - else if (! strcasecmp (opt, "idlemark")) o.hopt.cor3.idle = 1; - else if (! strcasecmp (opt, "idleflag")) o.hopt.cor3.idle = 0; - else if (! strcasecmp (opt, "-fcs")) o.hopt.cor3.nofcs = 1; - else if (! strcasecmp (opt, "+fcs")) o.hopt.cor3.nofcs = 0; - else if (! strcasecmp (opt, "fcs-crc-16")) o.hopt.cor3.fcspre = 1; - else if (! strcasecmp (opt, "fcs-v.41")) o.hopt.cor3.fcspre = 0; - else if (! strcasecmp (opt, "syn=0xaa")) o.hopt.cor3.syncpat = 1; - else if (! strcasecmp (opt, "syn=0x00")) o.hopt.cor3.syncpat = 0; - else if (! strcasecmp (opt, "-syn")) o.hopt.cor3.sndpad = 0; - else if (! strcasecmp (opt, "+syn")) o.hopt.cor3.sndpad = 1; - - else if (! strncasecmp (opt, "rfar1=", 6)) o.hopt.rfar1 = atoi (opt + 6); - else if (! strncasecmp (opt, "rfar2=", 6)) o.hopt.rfar2 = atoi (opt + 6); - else if (! strncasecmp (opt, "rfar3=", 6)) o.hopt.rfar3 = atoi (opt + 6); - else if (! strncasecmp (opt, "rfar4=", 6)) o.hopt.rfar4 = atoi (opt + 6); - else if (! strcasecmp (opt, "crc-16")) o.hopt.cpsr = 1; - else if (! strcasecmp (opt, "crc-v.41")) o.hopt.cpsr = 0; - else usage (); -} - -static void -set_bisync_opt(char *opt __unused) -{ - usage (); -} - -static void -set_x21_opt(char *opt __unused) -{ - usage (); -} - -int -main(int argc, char **argv) -{ - int channel; - - for (--argc, ++argv; argc>0 && **argv=='-'; --argc, ++argv) - if (! strcasecmp (*argv, "-a")) - ++aflag; - else if (! strcasecmp (*argv, "-s")) - ++sflag; - else - usage (); - - if (argc <= 0) { - if (sflag) - printallstats (); - else - printall (); - return (0); - } - - if (argv[0][0]=='c' && argv[0][1]=='x') - *argv += 2; - if (**argv<'0' || **argv>'9') - usage (); - channel = atoi (*argv); - --argc, ++argv; - - if (sflag) { - if (printstats (channel, 1) < 0) - printf ("channel cx%d not available\n", channel); - return (0); - } - - getchan (channel); - - if (argc <= 0) { - printchan (channel); - return (0); - } - - for (; argc>0; --argc, ++argv) - if (**argv == '(') - continue; - else if (! strncasecmp (*argv, "ispeed=", 7)) - o.rxbaud = atoi (*argv+7); - else if (! strncasecmp (*argv, "ospeed=", 7)) - o.txbaud = atoi (*argv+7); - else if (! strcasecmp (*argv, "async")) - o.mode = M_ASYNC; - else if (! strcasecmp (*argv, "hdlc")) - o.mode = M_HDLC; - else if (! strcasecmp (*argv, "bisync") || - ! strcasecmp (*argv, "bsc")) - o.mode = M_BISYNC; - else if (! strcasecmp (*argv, "x.21") || - ! strcasecmp (*argv, "x21")) - o.mode = M_X21; - else if (**argv>='0' && **argv<='9') - o.txbaud = o.rxbaud = atoi (*argv); - else if (! strcasecmp (*argv, "cisco")) { - o.sopt.cisco = 1; - o.sopt.ext = 0; - } else if (! strcasecmp (*argv, "ppp")) { - o.sopt.cisco = 0; - o.sopt.ext = 0; - } else if (! strcasecmp (*argv, "ext")) - o.sopt.ext = 1; - else if (! strcasecmp (*argv, "+keepalive")) - o.sopt.keepalive = 1; - else if (! strcasecmp (*argv, "-keepalive")) - o.sopt.keepalive = 0; - else if (! strcasecmp (*argv, "+autorts")) - o.sopt.norts = 0; - else if (! strcasecmp (*argv, "-autorts")) - o.sopt.norts = 1; - else if (! strcasecmp (*argv, "port=rs232") || - ! strcasecmp (*argv, "port=rs449") || - ! strcasecmp (*argv, "port=v35")) - set_interface_type (*argv); - else if (! strncasecmp (*argv, "master=",7)) - set_master (*argv+7); - - /* - * Common channel options - */ - /* channel option register 4 */ - else if (! strcasecmp (*argv, "-ctsdown")) - o.opt.cor4.cts_zd = 0; - else if (! strcasecmp (*argv, "+ctsdown")) - o.opt.cor4.cts_zd = 1; - else if (! strcasecmp (*argv, "-cddown")) - o.opt.cor4.cd_zd = 0; - else if (! strcasecmp (*argv, "+cddown")) - o.opt.cor4.cd_zd = 1; - else if (! strcasecmp (*argv, "-dsrdown")) - o.opt.cor4.dsr_zd = 0; - else if (! strcasecmp (*argv, "+dsrdown")) - o.opt.cor4.dsr_zd = 1; - else if (! strncasecmp (*argv, "fifo=", 5)) - o.opt.cor4.thr = atoi (*argv + 5); - - /* channel option register 5 */ - else if (! strcasecmp (*argv, "-ctsup")) - o.opt.cor5.cts_od = 0; - else if (! strcasecmp (*argv, "+ctsup")) - o.opt.cor5.cts_od = 1; - else if (! strcasecmp (*argv, "-cdup")) - o.opt.cor5.cd_od = 0; - else if (! strcasecmp (*argv, "+cdup")) - o.opt.cor5.cd_od = 1; - else if (! strcasecmp (*argv, "-dsrup")) - o.opt.cor5.dsr_od = 0; - else if (! strcasecmp (*argv, "+dsrup")) - o.opt.cor5.dsr_od = 1; - else if (! strncasecmp (*argv, "rfifo=", 6)) - o.opt.cor5.rx_thr = atoi (*argv + 6); - - /* receive clock option register */ - else if (! strcasecmp (*argv, "nrz")) - o.opt.rcor.encod = ENCOD_NRZ; - else if (! strcasecmp (*argv, "nrzi")) - o.opt.rcor.encod = ENCOD_NRZI; - else if (! strcasecmp (*argv, "manchester")) - o.opt.rcor.encod = ENCOD_MANCHESTER; - else if (! strcasecmp (*argv, "-dpll")) - o.opt.rcor.dpll = 0; - else if (! strcasecmp (*argv, "+dpll")) - o.opt.rcor.dpll = 1; - - /* transmit clock option register */ - else if (! strcasecmp (*argv, "-lloop")) - o.opt.tcor.llm = 0; - else if (! strcasecmp (*argv, "+lloop")) - o.opt.tcor.llm = 1; - else if (! strcasecmp (*argv, "-extclock")) - o.opt.tcor.ext1x = 0; - else if (! strcasecmp (*argv, "+extclock")) - o.opt.tcor.ext1x = 1; - - /* - * Mode dependent channel options - */ - else switch (o.mode) { - case M_ASYNC: set_async_opt (*argv); break; - case M_HDLC: set_hdlc_opt (*argv); break; - case M_BISYNC: set_bisync_opt (*argv); break; - case M_X21: set_x21_opt (*argv); break; - } - - setchan (channel); - return (0); -} |