summaryrefslogtreecommitdiffstats
path: root/sbin/sconfig
diff options
context:
space:
mode:
authorrik <rik@FreeBSD.org>2006-01-30 21:08:30 +0000
committerrik <rik@FreeBSD.org>2006-01-30 21:08:30 +0000
commit5ab7d295cd76224062b8c66f11fd977a5d378836 (patch)
tree3e384c64d84c5de6641be1602144809e8a4209d6 /sbin/sconfig
parent2d1ec6cb7741d15821119ca1c6a618bbc2db95fc (diff)
downloadFreeBSD-src-5ab7d295cd76224062b8c66f11fd977a5d378836.zip
FreeBSD-src-5ab7d295cd76224062b8c66f11fd977a5d378836.tar.gz
Add support for Cronyx TAU-PCI/32 ce(4).
Diffstat (limited to 'sbin/sconfig')
-rw-r--r--sbin/sconfig/sconfig.c84
1 files changed, 68 insertions, 16 deletions
diff --git a/sbin/sconfig/sconfig.c b/sbin/sconfig/sconfig.c
index d2130df..783eac0 100644
--- a/sbin/sconfig/sconfig.c
+++ b/sbin/sconfig/sconfig.c
@@ -4,7 +4,7 @@
* Copyright (C) 1997-2002 Cronyx Engineering.
* Author: Serge Vakulenko, <vak@cronyx.ru>
*
- * Copyright (C) 1999-2003 Cronyx Engineering.
+ * Copyright (C) 1999-2005 Cronyx Engineering.
* Author: Roman Kurakin, <rik@cronyx.ru>
*
* This software is distributed with NO WARRANTIES, not even the implied
@@ -14,7 +14,7 @@
* or modify this software as long as this message is kept with the software,
* all derivative works or modified versions.
*
- * Cronyx Id: sconfig.c,v 1.2.2.4 2003/06/20 16:20:48 rik Exp $
+ * Cronyx Id: sconfig.c,v 1.4.2.2 2005/11/09 13:01:35 rik Exp $
* $FreeBSD$
*/
#include <stdio.h>
@@ -35,8 +35,8 @@
int vflag, eflag, sflag, mflag, cflag, fflag, iflag, aflag, xflag;
int tflag, uflag;
-char mask[48];
-int adapter_type; /* 0-sigma, 1-tau, 2-tau */
+char mask[64];
+int adapter_type; /* 0-sigma, 1-tau, 2-taupci, 3-tau32 */
char chan_name[16];
extern char *optarg;
@@ -47,7 +47,7 @@ usage (void)
{
printf(
"Serial Adapter Configuration Utility\n"
-"Copyright (C) 1998-1999 Cronyx Engineering Ltd.\n"
+"Copyright (C) 1998-2005 Cronyx Engineering.\n"
"See also man sconfig (8)\n"
"Usage:\n"
"\tsconfig [-aimsxeftuc] [device [parameters ...]]\n"
@@ -103,10 +103,15 @@ usage (void)
"\tscrambler={on,off}\t -- G.703 scrambling mode\n"
"\tuse16={on,off}\t\t -- E1 timeslot 16 usage\n"
"\tcrc4={on,off}\t\t -- E1 CRC4 mode\n"
+#ifdef __linux__
+"\tami={on,off}\t\t -- E1 AMI or HDB3 line code\n"
+"\tmtu={size}\t\t -- set MTU in bytes\n"
+#endif
"\tsyn={int,rcv,rcvX}\t -- G.703 transmit clock\n"
"\tts=...\t\t\t -- E1 timeslots\n"
"\tpass=...\t\t -- E1 subchannel timeslots\n"
"\tdir=<num>\t\t -- connect channel to link<num>\n"
+/*"\trqken={size}\t\t -- set receive queue length in packets\n"*/
/*"\tcablen={on,off}\t\t -- T3/STS-1 high transmitter output for long cable\n"*/
"\tdebug={0,1,2}\t\t -- enable/disable debug messages\n"
);
@@ -343,6 +348,8 @@ format_e1_status (unsigned long status)
{
static char buf [80];
+ if (status == 0)
+ return "n/a";
if (status & E1_NOALARM)
return "Ok";
buf[0] = 0;
@@ -350,6 +357,7 @@ format_e1_status (unsigned long status)
if (status & E1_AIS) strcat (buf, ",AIS");
if (status & E1_LOF) strcat (buf, ",LOF");
if (status & E1_LOMF) strcat (buf, ",LOMF");
+ if (status & E1_CRC4E) strcat (buf, ",CRC4E");
if (status & E1_FARLOF) strcat (buf, ",FARLOF");
if (status & E1_AIS16) strcat (buf, ",AIS16");
if (status & E1_FARLOMF) strcat (buf, ",FARLOMF");
@@ -562,16 +570,16 @@ print_chan (int fd)
char cfg;
int loop, dpll, nrzi, invclk, clk, higain, phony, use16, crc4;
int level, keepalive, debug, port, invrclk, invtclk, unfram, monitor;
- int cable, dir, scrambler;
- int cablen, rloop;
+ int cable, dir, scrambler, ami, mtu;
+ int cablen, rloop, rqlen;
long baud, timeslots, subchan;
int protocol_valid, baud_valid, loop_valid, use16_valid, crc4_valid;
int dpll_valid, nrzi_valid, invclk_valid, clk_valid, phony_valid;
int timeslots_valid, subchan_valid, higain_valid, level_valid;
int keepalive_valid, debug_valid, cfg_valid, port_valid;
int invrclk_valid, invtclk_valid, unfram_valid, monitor_valid;
- int cable_valid, dir_valid, scrambler_valid;
- int cablen_valid, rloop_valid;
+ int cable_valid, dir_valid, scrambler_valid, ami_valid, mtu_valid;
+ int cablen_valid, rloop_valid, rqlen_valid;
protocol_valid = ioctl (fd, SERIAL_GETPROTO, &protocol) >= 0;
cfg_valid = ioctl (fd, SERIAL_GETCFG, &cfg) >= 0;
@@ -591,6 +599,7 @@ print_chan (int fd)
monitor_valid = ioctl (fd, SERIAL_GETMONITOR, &monitor) >= 0;
use16_valid = ioctl (fd, SERIAL_GETUSE16, &use16) >= 0;
crc4_valid = ioctl (fd, SERIAL_GETCRC4, &crc4) >= 0;
+ ami_valid = ioctl (fd, SERIAL_GETLCODE, &ami) >= 0;
level_valid = ioctl (fd, SERIAL_GETLEVEL, &level) >= 0;
keepalive_valid = ioctl (fd, SERIAL_GETKEEPALIVE, &keepalive) >= 0;
debug_valid = ioctl (fd, SERIAL_GETDEBUG, &debug) >= 0;
@@ -600,6 +609,8 @@ print_chan (int fd)
scrambler_valid = ioctl (fd, SERIAL_GETSCRAMBLER, &scrambler) >= 0;
cablen_valid = ioctl (fd, SERIAL_GETCABLEN, &cablen) >= 0;
rloop_valid = ioctl (fd, SERIAL_GETRLOOP, &rloop) >= 0;
+ mtu_valid = ioctl (fd, SERIAL_GETMTU, &mtu) >= 0;
+ rqlen_valid = ioctl (fd, SERIAL_GETRQLEN, &rqlen) >= 0;
printf ("%s", chan_name);
if (port_valid)
@@ -645,6 +656,12 @@ print_chan (int fd)
else
printf (" extclock");
}
+ if (mtu_valid)
+ printf (" mtu=%d", mtu);
+
+ if (aflag && rqlen_valid)
+ printf (" rqlen=%d", rqlen);
+
if (clk_valid)
switch (clk) {
case E1CLK_INTERNAL: printf (" syn=int"); break;
@@ -685,6 +702,8 @@ print_chan (int fd)
printf (" loop=%s", loop ? "on" : "off");
if (rloop_valid)
printf (" rloop=%s", rloop ? "on" : "off");
+ if (ami_valid)
+ printf (" ami=%s", ami ? "on" : "off");
}
if (timeslots_valid)
printf (" ts=%s", format_timeslots (timeslots));
@@ -698,10 +717,10 @@ print_chan (int fd)
static void
setup_chan (int fd, int argc, char **argv)
{
- int i, mode, loop, nrzi, dpll, invclk, phony, use16, crc4, unfram;
+ int i, mode, loop, nrzi, dpll, invclk, phony, use16, crc4, unfram, ami;
int higain, clk, keepalive, debug, port, dlci, invrclk, invtclk;
int monitor, dir, scrambler, rloop, cablen;
- long baud, timeslots;
+ long baud, timeslots, mtu, rqlen;
for (i=0; i<argc; ++i) {
if (argv[i][0] >= '0' && argv[i][0] <= '9') {
@@ -732,7 +751,7 @@ setup_chan (int fd, int argc, char **argv)
} else if (strcasecmp ("sync", argv[i]) == 0) {
mode = SERIAL_HDLC;
if (ioctl (fd, SERIAL_SETMODE, &mode) >= 0)
- ioctl (fd, SERIAL_SETPROTO, "sync\0\0");
+ ioctl (fd, SERIAL_SETPROTO, "sync\0\0\0");
} else if (strcasecmp ("cisco", argv[i]) == 0) {
mode = SERIAL_HDLC;
ioctl (fd, SERIAL_SETMODE, &mode);
@@ -748,7 +767,7 @@ setup_chan (int fd, int argc, char **argv)
} else if (strcasecmp ("packet", argv[i]) == 0) {
mode = SERIAL_HDLC;
ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "packet\0\0\0\0");
+ ioctl (fd, SERIAL_SETPROTO, "packet\0");
} else if (strcasecmp ("ppp", argv[i]) == 0) {
/* check that ppp line discipline is present */
if (ppp_ok ()) {
@@ -763,6 +782,10 @@ setup_chan (int fd, int argc, char **argv)
mode = SERIAL_HDLC;
ioctl (fd, SERIAL_SETMODE, &mode);
ioctl (fd, SERIAL_SETPROTO, "fr\0\0\0\0\0");
+ } else if (strcasecmp ("zaptel", argv[i]) == 0) {
+ mode = SERIAL_HDLC;
+ ioctl (fd, SERIAL_SETMODE, &mode);
+ ioctl (fd, SERIAL_SETPROTO, "zaptel\0");
} else if (strncasecmp ("debug=", argv[i], 6) == 0) {
debug = strtol (argv[i]+6, 0, 10);
ioctl (fd, SERIAL_SETDEBUG, &debug);
@@ -808,6 +831,15 @@ setup_chan (int fd, int argc, char **argv)
} else if (strncasecmp ("crc4=", argv[i], 5) == 0) {
crc4 = (strcasecmp ("on", argv[i] + 5) == 0);
ioctl (fd, SERIAL_SETCRC4, &crc4);
+ } else if (strncasecmp ("ami=", argv[i], 4) == 0) {
+ ami = (strcasecmp ("on", argv[i] + 4) == 0);
+ ioctl (fd, SERIAL_SETLCODE, &ami);
+ } else if (strncasecmp ("mtu=", argv[i], 4) == 0) {
+ mtu = strtol (argv[i] + 4, 0, 10);
+ ioctl (fd, SERIAL_SETMTU, &mtu);
+ } else if (strncasecmp ("rqlen=", argv[i], 6) == 0) {
+ rqlen = strtol (argv[i] + 6, 0, 10);
+ ioctl (fd, SERIAL_SETRQLEN, &rqlen);
} else if (strcasecmp ("syn=int", argv[i]) == 0) {
clk = E1CLK_INTERNAL;
ioctl (fd, SERIAL_SETCLK, &clk);
@@ -881,7 +913,7 @@ get_mask (void)
}
close (fd);
#else
- int fd, fd1, fd2, i;
+ int fd, fd1, fd2, fd3, i;
char buf [80];
for (i=0, fd=-1; i<12 && fd<0; i++) {
@@ -899,7 +931,13 @@ get_mask (void)
fd2 = open (buf, 0);
}
- if ((fd < 0) && (fd1 < 0) && (fd2 < 0)) {
+ /* Try only one */
+ for (i=0, fd3=-1; i<1 && fd3<0; i++) {
+ sprintf (buf, "/dev/ce%d", i*4);
+ fd3 = open (buf, 0);
+ }
+
+ if ((fd < 0) && (fd1 < 0) && (fd2 < 0) && (fd3 < 0)) {
fprintf (stderr, "No Cronyx adapters installed\n");
exit (-1);
}
@@ -927,6 +965,14 @@ get_mask (void)
}
close (fd2);
}
+
+ if (fd3 >= 0) {
+ if (ioctl (fd3, SERIAL_GETREGISTERED, (mask+48)) < 0) {
+ perror ("getting list of channels");
+ exit (-1);
+ }
+ close (fd3);
+ }
#endif
}
@@ -949,6 +995,9 @@ open_chan_ctl (int num)
case 2:
sprintf (device, "/dev/cp%d", num);
break;
+ case 3:
+ sprintf (device, "/dev/ce%d", num);
+ break;
}
#endif
fd = open (device, 0);
@@ -967,6 +1016,7 @@ open_chan_ctl (int num)
case 0: sprintf (chan_name, "cx%d", num); break;
case 1: sprintf (chan_name, "ct%d", num); break;
case 2: sprintf (chan_name, "cp%d", num); break;
+ case 3: sprintf (chan_name, "ce%d", num); break;
}
#endif
return fd;
@@ -1033,7 +1083,7 @@ main (int argc, char **argv)
need_header = 1;
adapter_type = 0;
#ifndef __linux__
- for (; adapter_type < 3; ++adapter_type)
+ for (; adapter_type < 4; ++adapter_type)
#endif
{
for (chan_num=0; chan_num<MAXCHAN; ++chan_num)
@@ -1082,6 +1132,8 @@ main (int argc, char **argv)
adapter_type = 1;
else if (strncasecmp ("cp", argv[0], 2)==0)
adapter_type = 2;
+ else if (strncasecmp ("ce", argv[0], 2)==0)
+ adapter_type = 3;
else {
fprintf (stderr, "Wrong channel name\n");
exit (-1);
OpenPOWER on IntegriCloud