Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109405051
D33469.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
53 KB
Referenced Files
None
Subscribers
None
D33469.diff
View Options
Index: sbin/Makefile.i386
===================================================================
--- sbin/Makefile.i386
+++ sbin/Makefile.i386
@@ -2,4 +2,3 @@
SUBDIR += bsdlabel
SUBDIR += fdisk
-SUBDIR += sconfig
Index: sbin/sconfig/Makefile
===================================================================
--- sbin/sconfig/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# Cronyx Id: sbin.sconfig.Makefile,v 1.1.4.1 2003/02/17 12:51:24 rik Exp $
-# $FreeBSD$
-
-PACKAGE=runtime
-PROG= sconfig
-MAN= sconfig.8
-WARNS?= 2
-CFLAGS+= -I${SRCTOP}/sys/dev/cp
-
-.include <bsd.prog.mk>
Index: sbin/sconfig/Makefile.depend
===================================================================
--- sbin/sconfig/Makefile.depend
+++ /dev/null
@@ -1,15 +0,0 @@
-# $FreeBSD$
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
Index: sbin/sconfig/sconfig.8
===================================================================
--- sbin/sconfig/sconfig.8
+++ /dev/null
@@ -1,608 +0,0 @@
-.\" Copyright (c) 2002-2004 Roman Kurakin <rik@cronyx.ru>
-.\" Copyright (c) 2002-2004 Cronyx Engineering
-.\" All rights reserved.
-.\"
-.\" 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 a permission to use,
-.\" modify and redistribute this software in source and binary forms,
-.\" as long as this message is kept with the software, all derivative
-.\" works or modified versions.
-.\"
-.\" $FreeBSD$
-.Dd October 3, 2016
-.Dt SCONFIG 8 i386
-.Os
-.Sh NAME
-.Nm sconfig
-.Nd "channel configuration utility for Cronyx adapters"
-.Sh SYNOPSIS
-.Nm
-.Op Fl aimsxeftuc
-.Op Ar device
-.Op Ar data_rate_options
-.Op Ar protocol_options ...
-.Op Ar interface_options ...
-.Sh DESCRIPTION
-The
-.Nm
-utility is used for configuring the channel options of the Cronyx
-adapters.
-In asynchronous mode, all parameters should be set using the standard
-.Xr stty 1
-utility.
-With
-.Nm ,
-it is only possible to set some of them (see below).
-.Pp
-Some of the options can be set only on free channels,
-that is when the corresponding network interface is in the
-.Cm down
-state in the synchronous mode,
-and the terminal device
-.Pa /dev/tty*
-is closed in asynchronous mode.
-.Pp
-Other channel options can be changed
-.Dq "on the fly" .
-Generally, the channel options are set up during the operating system startup,
-for example, from the
-.Pa /etc/rc
-script.
-.Pp
-Note that not all options make sense in every particular case,
-and an attempt to set some of them may hung up the channel
-or the whole adapter.
-.\"--------------------------------------------------------------
-.Ss "Information Options"
-Only one of these options can be specified.
-If information option is specified,
-.Nm
-will show the corresponding information and will ignore all other options,
-except
-.Ar device .
-See also the description of the
-.Ar device
-argument.
-.Bl -tag -width indent
-.It <none>
-This will show settings of the channel.
-.It Fl a
-Print all settings of the channel.
-.It Fl i
-Print interface settings, equal to the output of the
-.Xr ifconfig 8
-utility.
-.It Fl m
-Print modem signal status.
-The description of all signals can be found in any modem documentation.
-Only LE signal should be described.
-If this signal is ON then the channel is busy.
-If it is OFF then the channel is free.
-.It Fl s
-Print brief channel statistics.
-This is the generic statistics,
-see also the
-.Fl x , e , f , t ,
-and
-.Fl u
-options.
-For a description of the output, see below.
-.Pp
-This statistics is very useful if something goes wrong.
-For example, if all interrupt counters are zero then the device
-was configured to use an interrupt that was not registered in the
-BIOS for use with the ISA bus.
-.It Fl x
-Print full channel statistics.
-This options prints additional counters,
-but with less precision than with the
-.Fl s
-option.
-.It Fl e
-Print brief E1/G703 statistics.
-If this option is selected, the
-statistics accumulated over the last 15 minutes is printed.
-For a description of the output, see below.
-.It Fl f
-Print full E1/G703 statistics.
-This option shows all E1/G703 statistics that the
-.Fl e
-option shows,
-plus total statistics for the whole period of time and statistics for
-last 24 hours (if available).
-For a description of the output, see below.
-.It Fl t
-Print brief E3/T3/STS-1 statistics.
-If this option is selected, the
-statistics accumulated over the last 15 minutes is printed.
-For a description of the output, see below.
-.It Fl u
-Print full E3/T3/STS-1 statistics.
-This option shows all E3/T3/STS-1 statistics that the
-.Fl t
-option shows,
-plus total statistics for the whole period of time and statistics for
-last 24 hours (if available).
-For a description of the output, see below.
-.It Fl c
-Cleans all kind of statistics.
-.El
-.\"--------------------------------------------------------------
-.Ss "Device Selection"
-The device is selected using the name of the network interface,
-as shown by
-.Xr ifconfig 8 .
-The channel number depends on the order the drivers were loaded into the system.
-Sometimes people confuse channel number and adapter number because of the
-same spelling.
-The adapter number appears in the kernel context, while the channel number
-is in the configuration context.
-.Bl -tag -width indent
-.It <none>
-If the device name is omitted,
-.Nm
-will print information about all channels of all Cronyx adapters
-available in the system.
-If some settings need to be made, the device name must be specified.
-.It Li cx Ns Ar ##
-This is the channel name for the Sigma family of Cronyx adapters.
-(ISA bus.)
-.It Li ct Ns Ar ##
-This is the channel name for the Tau family of Cronyx adapters.
-(ISA bus.)
-.It Li cp Ns Ar ##
-This is the channel name for the Tau-PCI family of Cronyx adapters.
-(PCI bus.)
-.It Li ce Ns Ar ##
-This is the channel name for the Tau32-PCI family of Cronyx adapters.
-(PCI bus.)
-.El
-.\"--------------------------------------------------------------
-.Ss "Data Rate Options"
-.Bl -tag -width indent
-.It Ar value
-A non-zero value will set the data rate to a given value
-in asynchronous mode,
-and will set the data rate and internal clock source of synchronization
-in synchronous mode.
-A zero value is equivalent to specifying the
-.Cm extclock
-option.
-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., when connecting two computers together
-in synchronous mode with a relatively short cable.
-This method should also be
-used for testing channels with an external loopback connector.
-.It Cm extclock
-Set the external timing clock source for synchronous channels.
-External clock mode is the most commonly used method for connecting
-external modem hardware.
-In this mode,
-the external timing signal is received on the TXCIN pin of the connector,
-and it is used as a synchronization clock for transmitting data (TxD).
-.Pp
-Note: in
-.Cm extclock
-mode, the device cannot determine the value of the external timing clock
-since it does not have the built-in clock gauge.
-.El
-.\"--------------------------------------------------------------
-.Ss "Protocol Options"
-Note: these option can only be used on a free channel, and they require
-specifying the device name.
-.Bl -tag -width indent
-.It Cm async
-(Only for Sigma family.)
-Select the asynchronous protocol (or mode).
-In this mode, Cronyx adapters behave as normal serial devices,
-and standard serial communications utilities can be used to
-work with them.
-All asynchronous settings should be set using the standard
-serial communications configuration utilities, e.g.,
-.Xr stty 1 .
-With
-.Nm ,
-it is only possible to set some of them.
-.It Cm cisco
-Select the Cisco HDLC synchronous protocol.
-.It Cm fr
-Select the Frame Relay synchronous protocol
-.Tn ( ANSI
-T1.617 Annex D).
-.It Cm ppp
-Select the synchronous PPP protocol.
-.It Sm Cm keepalive No = Bro Cm on , off Brc Sm
-Turn on/off transmission of keepalive messages.
-This option is used only for synchronous PPP.
-If this option is
-.Cm on ,
-PPP will periodically send ECHO-REQUEST messages.
-If it will not receive any ECHO-REPLY messages for
-some (definite) period of time it will break the connection.
-It is used for tracking the line state.
-.It Cm idle
-This mode is reported when using Netgraph.
-An actual protocol depends on the type of a connected Netgraph node,
-and it cannot be changed with
-.Nm .
-.El
-.\"--------------------------------------------------------------
-.Ss "Interface Options"
-Not all of these options can be set on a busy channel, and not all of them
-are applicable to all kinds of adapters/channels.
-For all dual-state options,
-.Cm off
-is the default value.
-None of these options can be used in the asynchronous mode,
-except for the
-.Cm debug
-option.
-.Bl -tag -width indent
-.It Sm Cm port No = Bro Cm rs232 , v35 , rs449 Brc Sm
-Set the port type for old Sigma models.
-.It Sm Cm cfg No = Bro Cm A , B , C Brc Sm
-Set the configuration for the adapter.
-This option can be used only with Tau/E1
-and Tau/G703 adapters, and only if all channels are free.
-.Bl -tag -width ".Cm cfg Ns = Ns Cm A"
-.It Cm cfg Ns = Ns Cm A
-Two independent E1/G703 channels.
-This is the default setting.
-.It Cm cfg Ns = Ns Cm B
-(Only for ISA models.)
-For Tau/G703 this means one G703 channel and one digital channel.
-For Tau/E1, the first physical channel is divided into two subchannels.
-One of them goes to the first logical channel, another one goes to the
-second physical channel.
-Second (logical) channel is the digital channel.
-.It Cm cfg Ns = Ns Cm C
-(Only for E1 models.)
-In this mode, first
-physical channel consists of three data flows.
-Two of them go to the two (logical) channels.
-The last one goes to the second physical channel.
-On newer models (Tau32-PCI, Tau-PCI/2E1 and Tau-PCI/4E1),
-this programs the hardware to use a single source of synchronization
-and pass all unused (in both channels) timeslots from
-one channel to another.
-.El
-.Pp
-For a detailed description of available configuration modes,
-see the adapter documentation.
-This option cannot be set on a busy channel.
-.It Sm Cm loop No = Bro Cm on , off Brc Sm
-Turn on/off internal loopback.
-This mode is useful for debugging.
-When this mode is
-.Cm on ,
-some data should be sent.
-If no interrupts are generated, chances are that
-the corresponding IRQ configuration entry in the BIOS
-was not switched from
-.Dq Li "PCI/ISA PNP"
-to
-.Dq Li "Legacy ISA" .
-.It Sm Cm rloop No = Bro Cm on , off Brc Sm
-(Only for Tau32-PCI and Tau-PCI/E3.)
-Turn on/off remote loopback feature.
-This mode is also useful for debugging.
-.It Sm Cm dpll No = Bro Cm on , off Brc Sm
-Turn on/off digital phase locked loop mode (DPLL).
-When enabled, the receiver
-timing clock signal is derived from the received data.
-Must be used with the NRZI
-encoding to avoid the synchronization loss.
-.It Sm Cm nrzi No = Bro Cm on , off Brc Sm
-Turn on/off NRZI encoding.
-If
-.Cm off ,
-NRZ encoding is used.
-.Bl -tag -width "NRZI"
-.It NRZ
-The zero bit is transmitted by the zero signal level,
-the one bit is transmitted by the positive signal level.
-.It NRZI
-The zero bit is transmitted by the change of the signal
-level, the one bit is by the constant signal level.
-Commonly used with the
-.Cm dpll Ns = Ns Cm on
-option.
-.El
-.It Sm Cm invclk No = Bro Cm on , off Brc Sm
-(Tau and Tau-PCI only.)
-Invert both the transmit and receive clock signals.
-.It Sm Cm invrclk No = Bro Cm on , off Brc Sm
-(Tau-PCI only.)
-Invert the receive clock signals.
-.It Sm Cm invtclk No = Bro Cm on , off Brc Sm
-(Tau-PCI only.)
-Invert the transmit clock signals.
-.It Sm Cm higain No = Bro Cm on , off Brc Sm
-(E1 only.)
-In off state the sensitivity is -12 dB.
-Turn on/off increasing the E1 receiver's non-linear sensitivity to -30dB.
-This allows increasing of the line distance.
-.It Sm Cm cablen No = Bro Cm on , off Brc Sm
-(Tau-PCI/T3 and Tau-PCI/STS-1 only.)
-Turn on/off adjusting of the transmit signal for a long cable T3/STS-1.
-.It Sm Cm monitor No = Bro Cm on , off Brc Sm
-(Tau32-PCI, Tau-PCI/2E1 and Tau-PCI/4E1 only.)
-Turn on/off increasing of the E1 receiver's linear sensitivity to -30dB.
-This can be used for the interception purposes.
-.It Sm Cm phony No = Bro Cm on , off Brc Sm
-(Tau32-PCI and Tau-PCI E1 family only.)
-Turn on/off the so-called
-.Dq phony
-mode.
-This mode allows
-receiving raw CEPT frames from the E1 line.
-Raw frames can be accessed, for example, with the raw protocol.
-Packets would come at a rate of 500 frames per second
-with length
-.No 16* Ns Ar N
-(for Tau-PCI/E1 model), where
-.Ar N
-is the number of timeslots.
-For
-Tau-PCI/2E1 and Tau-PCI/4E1,
-.Ar N
-should be equal to 32 regardless of the number of
-used timeslots.
-.It Sm Cm unfram No = Bro Cm on , off Brc Sm
-(Tau32-PCI, Tau-PCI/2E1 and Tau-PCI/4E1 only.)
-Turn on/off unframed mode.
-.Bl -tag -width ".Cm unfram Ns = Ns Cm off"
-.It Cm unfram Ns = Ns Cm on
-Switch channel to the unframed G.703 mode.
-.It Cm unfram Ns = Ns Cm off
-Switch channel to the framed E1 (G.704) mode.
-.El
-.It Sm Cm scrambler No = Bro Cm on , off Brc Sm
-(Tau32-PCI, Tau-PCI/G.703, Tau-PCI/2E1, and
-Tau-PCI/4E1 in unframed mode only.)
-Turn on/off scrambling of the G.703 data.
-.It Sm Cm use16 No = Bro Cm on , off Brc Sm
-(Tau32-PCI and Tau-PCI E1 family only.)
-Turn on/off the usage of the 16th timeslot for data transmission.
-Normally, the 16th timeslot is used for signalling information
-(multiframing CAS).
-.It Sm Cm crc4 No = Bro Cm on , off Brc Sm
-(E1 only.)
-Turn on/off CRC4 superframe mode.
-.It Sm Cm syn No = Bro Cm int , rcv , rcv0 , rcv1 , rcv2 , rcv3 Brc Sm
-.Bl -tag -width ".Cm rcv3"
-.It Cm int
-Use an internal clock generator for G703 transmitter
-(clock master).
-.It Cm rcv
-Use the G703 receiver data clock as the transmit clock
-(clock slave).
-.It Cm rcv0 , rcv1 , rcv2 , rcv3
-Use the G703 receiver clock of the other channel
-(E1 models only).
-.El
-.It Cm dir Ns = Ns Ar number
-(Tau32-PCI, Tau-PCI/2E1 and Tau-PCI/4E1 only.)
-Bind a logical channel to a physical channel.
-Using this parameter it is possible, for example, to split
-physical E1 channel into several logical channels.
-.It Cm ts Ns = Ns Ar interval
-(E1 only.)
-Set up the list of timeslots for use by the channel.
-The timeslots are numbered from 1 to 31,
-and are separated by a comma or a minus sign,
-giving an interval.
-Example:
-.Dq Li ts=1-3,5,17 .
-.It Cm pass Ns = Ns Ar interval
-(Tau/E1 only.)
-Set up the list of timeslots, translated to the E1 subchannel in
-.Cm cfg Ns = Ns Cm B
-and
-.Cm cfg Ns = Ns Cm C
-configurations.
-.It Sm Cm debug No = Bro Cm 0 , 1 , 2 Brc Sm
-Turn on/off debug messages.
-.Bl -tag -width 2n
-.It Cm 0
-Turn debug messages off.
-.It Cm 1
-Turn debug messages on, equivalent to the
-.Cm debug
-option of the
-.Xr ifconfig 8
-utility.
-.It Cm 2
-High intensive debug messages, for developers only.
-.El
-.El
-.\"--------------------------------------------------------------
-.Sh EXAMPLES
-Set up channel 1 for use with the HDSL modem or any other
-synchronous leased-line modem, and PPP/HDLC protocol (for Sigma):
-.Bd -literal -offset indent
-sconfig cx1 ppp extclock
-ifconfig cx1 158.250.244.2 158.250.244.1 up
-.Ed
-.Pp
-Set up channel 0 of Tau/E1 for use with the Cisco protocol
-over the E1 link, with a single virtual connection.
-The DLCI number is detected automatically.
-Use timeslots 1-10:
-.Bd -literal -offset indent
-sconfig ct0 cisco ts=1-10
-ifconfig ct0 158.250.244.2 158.250.244.1 up
-.Ed
-.Pp
-Set up channel 0 for the synchronous null-modem link to the nearby computer,
-internal clock source, 256000 bits/sec, protocol Cisco/HDLC (for Tau):
-.Bd -literal -offset indent
-sconfig ct0 cisco 256000
-ifconfig ct0 200.1.1.1 200.1.1.2 up
-.Ed
-.Pp
-Set up channel 1 for the leased line link using the data-only
-null-modem cable (or modems like Zelax+ M115).
-Synchronous DPLL mode, 128000
-bits/sec, protocol PPP/HDLC, NRZI encoding (for Sigma):
-.Bd -literal -offset indent
-sconfig cx1 ppp 128000 nrzi=on dpll=on
-ifconfig cx1 158.250.244.2 158.250.244.1 up
-.Ed
-.\"--------------------------------------------------------------
-.Sh DIAGNOSTICS
-This section contains a description of abbreviations used by
-.Nm
-while displaying various statistics.
-For a description of options related to
-statistics, please see above.
-.\"--------------------------------------------------------------
-.Ss Statistics
-When running, the driver gathers statistics about the channels, which
-can be accessed using the
-.Nm
-utility,
-or through the
-.Xr ioctl 2
-call
-.Dv SERIAL_GETSTAT .
-.Pp
-.Bl -tag -width indent -compact
-.It Va Rintr
-Total number of receive interrupts.
-.It Va Tintr
-Total number of transmit interrupts.
-.It Va Mintr
-Total number of modem interrupts.
-.It Va Ibytes
-Total bytes received.
-.It Va Ipkts
-Total packets received (for HDLC mode).
-.It Va Ierrs
-Number of receive errors.
-.It Va Obytes
-Total bytes transmitted.
-.It Va Opkts
-Total packets transmitted (for HDLC mode).
-.It Va Oerrs
-Number of transmit errors.
-.El
-.\"--------------------------------------------------------------
-.Ss E1/G.703 Statistics
-For E1 and G.703 channels, the SNMP-compatible statistics data are gathered
-(see RFC 1406).
-It can be accessed using the
-.Nm
-utility,
-or through the
-.Xr ioctl 2
-call
-.Dv SERIAL_GETESTAT .
-.Bl -tag -width ".Va RCRC Pq Va rcrce"
-.It Va Unav Pq Va uas
-Unavailable seconds: receiving all ones, loss of carrier, or loss of
-signal.
-.It Va Degr Pq Va dm
-Degraded minutes: having error rate more than 10E-6, not counting unavailable
-and severely errored seconds.
-.It Va Bpv Pq Va bpv
-HDB3 bipolar violation errors.
-.It Va Fsyn Pq Va fse
-Frame synchronization errors (E1 only).
-.It Va CRC Pq Va crce
-CRC4 errors (E1).
-.It Va RCRC Pq Va rcrce
-Remote CRC4 errors: E-bit counter (E1).
-.It Va Err Pq Va es
-Errored seconds: any framing errors, or out of frame sync, or any slip events.
-.It Va Lerr Pq Va les
-Line errored seconds: any BPV.
-.It Va Sev Pq Va ses
-Severely errored seconds: 832 or more framing errors, or 2048 or more bipolar
-violations.
-.It Va Bur Pq Va bes
-Bursty errored seconds: more than 1 framing error, but not severely errored.
-.It Va Oof Pq Va oofs
-Severely errored framing seconds: out of frame sync.
-.It Va Slp Pq Va css
-Controlled slip seconds: any slip buffer overflow or underflow.
-.El
-.\"--------------------------------------------------------------
-.Ss E1/G.703 Status
-The
-.Nm
-utility also prints the E1/G.703 channel status.
-The status can have the
-following values (non-exclusive):
-.Pp
-.Bl -tag -width ".Li FARLOMF" -compact
-.It Li Ok
-The channel is in a valid state, synchronized.
-.It Li LOS
-Loss of sync.
-.It Li AIS
-Receiving unframed all ones (E1 only).
-.It Li LOF
-Loss of framing (E1 only).
-.It Li LOMF
-Loss of multiframing (E1 only).
-.It Li FARLOF
-Receiving remote alarm (E1 only).
-.It Li AIS16
-Receiving all ones in the timeslot 16 (E1 only).
-.It Li FARLOMF
-Receiving distant multiframe alarm (E1 only).
-.It Li TSTREQ
-Receiving test request code (G.703 only).
-.It Li TSTERR
-Test error (G.703 only).
-.El
-.\"--------------------------------------------------------------
-.Sh SEE ALSO
-.Xr stty 1 ,
-.Xr ioctl 2 ,
-.Xr ifconfig 8 ,
-.Xr route 8 ,
-.\"--------------------------------------------------------------
-.Sh HISTORY
-The
-.Nm
-utility appeared in
-.Fx 5.2 .
-The
-.Nm
-utility is a replacement for the
-.Nm cxconfig
-and
-.Nm ctconfig
-utilities that were used in the past with
-.Fx
-drivers.
-Those two utilities and
-.Nm
-are not compatible,
-and therefore all scripts using them have to be rewritten.
-Moreover,
-.Tn Linux
-and
-.Fx
-versions of the
-.Nm
-utility are not fully compatible.
-.\"--------------------------------------------------------------
-.Sh AUTHORS
-.An Cronyx Engineering Aq Mt info@cronyx.ru
-.Pp
-.Pa http://www.cronyx.ru
-.\"--------------------------------------------------------------
-.Sh BUGS
-All software produced by Cronyx Engineering is thoroughly tested.
-But as created by a man, it can contain some bugs.
-If you have caught one, try to localize it and send an email with the
-description of the bug, and all operations that you have done.
-We will try to reproduce the error and fix it.
Index: sbin/sconfig/sconfig.c
===================================================================
--- sbin/sconfig/sconfig.c
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
- * Channel configuration utility for Cronyx serial adapters.
- *
- * Copyright (C) 1997-2002 Cronyx Engineering.
- * Author: Serge Vakulenko, <vak@cronyx.ru>
- *
- * Copyright (C) 1999-2005 Cronyx Engineering.
- * Author: Roman Kurakin, <rik@cronyx.ru>
- *
- * 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.
- *
- * Cronyx Id: sconfig.c,v 1.4.2.2 2005/11/09 13:01:35 rik Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <ctype.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include "cserial.h"
-
-#define MAXCHAN 128
-
-int vflag, eflag, sflag, mflag, cflag, fflag, iflag, aflag, xflag;
-int tflag, uflag;
-char mask[64];
-int adapter_type; /* 0-sigma, 1-tau, 2-taupci, 3-tau32 */
-char chan_name[16];
-
-static void
-usage (void)
-{
- printf(
-"Serial Adapter Configuration Utility\n"
-"Copyright (C) 1998-2005 Cronyx Engineering.\n"
-"See also man sconfig (8)\n"
-"Usage:\n"
-"\tsconfig [-aimsxeftuc] [device [parameters ...]]\n"
-"\n"
-"Options:\n"
-"\t<no options>\t\t -- print channel options\n"
-"\t-a\t\t\t -- print all settings of the channel\n"
-"\t-i\t\t\t -- print network interface status\n"
-"\t-m\t\t\t -- print modem signal status\n"
-"\t-s\t\t\t -- print channel statistics\n"
-"\t-x\t\t\t -- print extended channel statistics\n"
-"\t-e\t\t\t -- print short E1/G703 statistics\n"
-"\t-f\t\t\t -- print full E1/G703 statistics\n"
-"\t-t\t\t\t -- print short E3/T3/STS-1 statistics\n"
-"\t-u\t\t\t -- print full E3/T3/STS-1 statistics\n"
-"\t-c\t\t\t -- clear statistics\n"
-"\nParameters:\n"
-"\t<number>\t\t -- baud rate, internal clock\n"
-"\textclock\t\t -- external clock (default)\n"
-"\nProtocol options:\n"
-"\tasync\t\t\t -- asynchronous protocol\n"
-#ifdef __linux__
-"\tsync\t\t\t -- synchronous protocol\n"
-#endif
-"\tcisco\t\t\t -- Cisco/HDLC protocol\n"
-"\tfr\t\t\t -- Frame Relay protocol\n"
-#ifdef __linux__
-"\t dlci<number>\t -- Add new DLCI\n"
-#endif
-"\tppp\t\t\t -- PPP protocol\n"
-#ifdef __linux__
-"\trbrg\t\t\t -- Remote bridge\n"
-"\traw\t\t\t -- raw HDLC protocol\n"
-"\tpacket\t\t\t -- packetized HDLC protocol\n"
-"\tidle\t\t\t -- no protocol\n"
-#else
-"\t keepalive={on,of}\t -- Enable/disable keepalive\n"
-#endif
-"\nInterface options:\n"
-"\tport={rs232,v35,rs449}\t -- port type (for old models of Sigma)\n"
-"\tcfg={A,B,C}\t\t -- adapter configuration\n"
-"\tloop={on,off}\t\t -- internal loopback\n"
-"\trloop={on,off}\t\t -- remote loopback\n"
-"\tdpll={on,off}\t\t -- DPLL mode\n"
-"\tnrzi={on,off}\t\t -- NRZI encoding\n"
-"\tinvclk={on,off}\t\t -- invert receive and transmit clock\n"
-"\tinvrclk={on,off}\t -- invert receive clock\n"
-"\tinvtclk={on,off}\t -- invert transmit clock\n"
-"\thigain={on,off}\t\t -- E1 high non linear input sensitivity \n\t\t\t\t (long line)\n"
-"\tmonitor={on,off}\t -- E1 high linear input sensitivity \n\t\t\t\t (interception mode)\n"
-"\tphony={on,off}\t\t -- E1 telepnony mode\n"
-"\tunfram={on,off}\t\t -- E1 unframed mode\n"
-"\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"
- );
- exit (0);
-}
-
-static unsigned long
-scan_timeslots (char *s)
-{
- char *e;
- long v;
- int i;
- unsigned long ts, lastv;
-
- ts = lastv = 0;
- for (;;) {
- v = strtol (s, &e, 10);
- if (e == s)
- break;
- if (*e == '-') {
- lastv = v;
- s = e+1;
- continue;
- }
- if (*e == ',')
- ++e;
-
- if (lastv)
- for (i=lastv; i<v; ++i)
- ts |= 1L << i;
- ts |= 1L << v;
-
- lastv = 0;
- s = e;
- }
- return ts;
-}
-
-static int
-ppp_ok (void)
-{
-#ifdef __linux__
- int s, p;
- struct ifreq ifr;
- char pttyname[32];
- char *p1, *p2;
- int i, j;
- int ppp_disc = N_PPP;
-
- /*
- * Open a socket for doing the ioctl operations.
- */
- s = socket (AF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- fprintf (stderr, "Error opening socket.\n");
- return 0;
- }
- strncpy (ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
- if (ioctl (s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0) {
- /* Ok. */
- close (s);
- return 1;
- }
- close (s);
-
- /* open pseudo-tty and try to set PPP discipline */
- sprintf (pttyname, "/dev/ptyXX");
- p1 = &pttyname[8];
- p2 = &pttyname[9];
- for (i=0; i<16; i++) {
- struct stat stb;
-
- *p1 = "pqrstuvwxyzabcde"[i];
- *p2 = '0';
- if (stat (pttyname, &stb) < 0)
- continue;
- for (j=0; j<16; j++) {
- *p2 = "0123456789abcdef"[j];
- p = open (pttyname, 2);
- if (p > 0) {
- if (ioctl (p, TIOCSETD, &ppp_disc) < 0) {
- fprintf (stderr, "No PPP discipline in kernel.\n");
- close (p);
- return 0;
- }
- close (p);
- return 1;
- }
- }
- }
- fprintf (stderr, "Cannot get pseudo-tty.\n");
- return 0;
-#else
- return 1;
-#endif
-}
-
-static char *
-format_timeslots (unsigned long s)
-{
- static char buf [100];
- char *p = buf;
- int i;
-
- for (i=1; i<32; ++i)
- if ((s >> i) & 1) {
- int prev = (i > 1) & (s >> (i-1));
- int next = (i < 31) & (s >> (i+1));
-
- if (prev) {
- if (next)
- continue;
- *p++ = '-';
- } else if (p > buf)
- *p++ = ',';
-
- if (i >= 10)
- *p++ = '0' + i / 10;
- *p++ = '0' + i % 10;
- }
- *p = 0;
- return buf;
-}
-
-static void
-print_modems (int fd, int need_header)
-{
- int status;
-
- if (ioctl (fd, TIOCMGET, &status) < 0) {
- perror ("getting modem status");
- return;
- }
- if (need_header)
- printf ("Channel\tLE\tDTR\tDSR\tRTS\tCTS\tCD\n");
- printf ("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", chan_name,
- status & TIOCM_LE ? "On" : "-",
- status & TIOCM_DTR ? "On" : "-",
- status & TIOCM_DSR ? "On" : "-",
- status & TIOCM_RTS ? "On" : "-",
- status & TIOCM_CTS ? "On" : "-",
- status & TIOCM_CD ? "On" : "-");
-}
-
-static void
-#ifdef __linux__
-print_ifconfig (int fd)
-#else
-print_ifconfig (int fd __unused)
-#endif
-{
- char buf [64];
-#ifdef __linux__
- char protocol [8];
-
- if (ioctl (fd, SERIAL_GETPROTO, &protocol) >= 0 &&
- strcmp (protocol, "fr") == 0)
- sprintf (buf, "ifconfig %sd16 2>/dev/null", chan_name);
- else
-#endif
- sprintf (buf, "ifconfig %s 2>/dev/null", chan_name);
- system (buf);
-}
-
-static void
-set_debug_ifconfig (int on)
-{
- char buf [64];
- sprintf (buf, "ifconfig %s %sdebug 2>/dev/null", chan_name,
- on ? "" : "-");
- system (buf);
-}
-
-static char *
-format_long (unsigned long val)
-{
- static char s[32];
- int l;
- l = sprintf (s, "%lu", val);
- if (l>7 && !sflag) {
- s[3] = s[2];
- s[2] = s[1];
- s[1] = '.';
- s[4] = 'e';
- sprintf (s + 5, "%02d", l-1);
- }
- return s;
-}
-
-static void
-print_stats (int fd, int need_header)
-{
- struct serial_statistics st;
- unsigned long sarr [9];
- int i;
-
- if (ioctl (fd, SERIAL_GETSTAT, &st) < 0) {
- perror ("getting statistics");
- return;
- }
- if (need_header) {
- if (sflag) {
- printf (" ------------Receive----------- "
- "------------Transmit----------\n");
- printf ("Channel Interrupts Packets Errors "
- "Interrupts Packets Errors\n");
- }
- else {
- printf (" --------Receive--------------- "
- "--------Transmit-------------- Modem\n");
- printf ("Channel Intrs Bytes Packets Errors "
- "Intrs Bytes Packets Errors Intrs\n");
- }
- }
-
- sarr [0] = st.rintr;
- sarr [1] = st.ibytes;
- sarr [2] = st.ipkts;
- sarr [3] = st.ierrs;
- sarr [4] = st.tintr;
- sarr [5] = st.obytes;
- sarr [6] = st.opkts;
- sarr [7] = st.oerrs;
- sarr [8] = st.mintr;
- printf ("%s", chan_name);
- if (sflag) {
- printf ("\t%-12lu%-12lu%-12lu%-12lu%-12lu%-12lu", sarr[0],
- sarr[2], sarr[3], sarr[4], sarr[6], sarr[7]);
- } else {
- for (i = 0; i < 9; i++)
- printf ("\t%s", format_long (sarr [i]));
- printf ("\n");
- }
-}
-
-static void
-clear_stats (int fd)
-{
- if (ioctl (fd, SERIAL_CLRSTAT, 0) < 0) {
- perror ("clearing statistics");
- exit (-1);
- }
-}
-
-static char *
-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;
- if (status & E1_LOS) strcat (buf, ",LOS");
- 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");
-/* if (status & E1_TSTREQ) strcat (buf, ",TSTREQ");*/
-/* if (status & E1_TSTERR) strcat (buf, ",TSTERR");*/
- if (buf[0] == ',')
- return buf+1;
- return "Unknown";
-}
-
-static void
-print_frac (int leftalign, unsigned long numerator, unsigned long divider)
-{
- int n;
-
- if (numerator < 1 || divider < 1) {
- printf (leftalign ? "/- " : " -");
- return;
- }
- n = (int) (0.5 + 1000.0 * numerator / divider);
- if (n < 1000) {
- printf (leftalign ? "/.%-3d" : " .%03d", n);
- return;
- }
- putchar (leftalign ? '/' : ' ');
-
- if (n >= 1000000) n = (n+500) / 1000 * 1000;
- else if (n >= 100000) n = (n+50) / 100 * 100;
- else if (n >= 10000) n = (n+5) / 10 * 10;
-
- switch (n) {
- case 1000: printf (".999"); return;
- case 10000: n = 9990; break;
- case 100000: n = 99900; break;
- case 1000000: n = 999000; break;
- }
- if (n < 10000) printf ("%d.%d", n/1000, n/10%100);
- else if (n < 100000) printf ("%d.%d", n/1000, n/100%10);
- else if (n < 1000000) printf ("%d.", n/1000);
- else printf ("%d", n/1000);
-}
-
-static void
-print_e1_stats (int fd, int need_header)
-{
- struct e1_statistics st;
- int i, maxi;
-
- if (need_header)
- printf ("Chan\t Unav/Degr Bpv/Fsyn CRC/RCRC Err/Lerr Sev/Bur Oof/Slp Status\n");
-
- if (ioctl (fd, SERIAL_GETESTAT, &st) < 0)
- return;
- printf ("%s\t", chan_name);
-
- /* Unavailable seconds, degraded minutes */
- print_frac (0, st.currnt.uas, st.cursec);
- print_frac (1, 60 * st.currnt.dm, st.cursec);
-
- /* Bipolar violations, frame sync errors */
- print_frac (0, st.currnt.bpv, st.cursec);
- print_frac (1, st.currnt.fse, st.cursec);
-
- /* CRC errors, remote CRC errors (E-bit) */
- print_frac (0, st.currnt.crce, st.cursec);
- print_frac (1, st.currnt.rcrce, st.cursec);
-
- /* Errored seconds, line errored seconds */
- print_frac (0, st.currnt.es, st.cursec);
- print_frac (1, st.currnt.les, st.cursec);
-
- /* Severely errored seconds, bursty errored seconds */
- print_frac (0, st.currnt.ses, st.cursec);
- print_frac (1, st.currnt.bes, st.cursec);
-
- /* Out of frame seconds, controlled slip seconds */
- print_frac (0, st.currnt.oofs, st.cursec);
- print_frac (1, st.currnt.css, st.cursec);
-
- printf (" %s\n", format_e1_status (st.status));
-
- if (fflag) {
- /* Print total statistics. */
- printf ("\t");
- print_frac (0, st.total.uas, st.totsec);
- print_frac (1, 60 * st.total.dm, st.totsec);
-
- print_frac (0, st.total.bpv, st.totsec);
- print_frac (1, st.total.fse, st.totsec);
-
- print_frac (0, st.total.crce, st.totsec);
- print_frac (1, st.total.rcrce, st.totsec);
-
- print_frac (0, st.total.es, st.totsec);
- print_frac (1, st.total.les, st.totsec);
-
- print_frac (0, st.total.ses, st.totsec);
- print_frac (1, st.total.bes, st.totsec);
-
- print_frac (0, st.total.oofs, st.totsec);
- print_frac (1, st.total.css, st.totsec);
-
- printf (" -- Total\n");
-
- /* Print 24-hour history. */
- maxi = (st.totsec - st.cursec) / 900;
- if (maxi > 48)
- maxi = 48;
- for (i=0; i<maxi; ++i) {
- printf (" ");
- print_frac (0, st.interval[i].uas, 15*60);
- print_frac (1, 60 * st.interval[i].dm, 15*60);
-
- print_frac (0, st.interval[i].bpv, 15*60);
- print_frac (1, st.interval[i].fse, 15*60);
-
- print_frac (0, st.interval[i].crce, 15*60);
- print_frac (1, st.interval[i].rcrce, 15*60);
-
- print_frac (0, st.interval[i].es, 15*60);
- print_frac (1, st.interval[i].les, 15*60);
-
- print_frac (0, st.interval[i].ses, 15*60);
- print_frac (1, st.interval[i].bes, 15*60);
-
- print_frac (0, st.interval[i].oofs, 15*60);
- print_frac (1, st.interval[i].css, 15*60);
-
- if (i < 3)
- printf (" -- %dm\n", (i+1)*15);
- else
- printf (" -- %dh %dm\n", (i+1)/4, (i+1)%4*15);
- }
- }
-}
-
-static char *
-format_e3_status (unsigned long status)
-{
- static char buf [80];
-
- buf[0] = 0;
- if (status & E3_LOS) strcat (buf, ",LOS");
- if (status & E3_TXE) strcat (buf, ",XMIT");
- if (buf[0] == ',')
- return buf+1;
- return "Ok";
-}
-
-static char *
-format_e3_cv (unsigned long cv, unsigned long baud, unsigned long atime)
-{
- static char buf[80];
-
- if (!cv || !baud || !atime)
- sprintf (buf, " - ");
- else
- sprintf (buf, "%10lu (%.1e)", cv, (double)cv/baud/atime);
- return buf;
-}
-
-static void
-print_e3_stats (int fd, int need_header)
-{
- struct e3_statistics st;
- int i, maxi;
- long baud;
-
- if (need_header)
- printf ("Chan\t--Code Violations---\t\t\t\t\t ----Status----\n");
-
- if (ioctl (fd, SERIAL_GETE3STAT, &st) < 0 ||
- ioctl (fd, SERIAL_GETBAUD, &baud) < 0)
- return;
-
- if (!st.cursec)
- st.cursec = 1;
-
- printf ("%s\t%s\t\t\t\t\t", chan_name,
- format_e3_cv (st.ccv, baud, st.cursec));
-
- printf (" %s\n", format_e3_status (st.status));
-
-
- if (uflag) {
- /* Print total statistics. */
- printf ("\t%s\t\t\t\t\t",
- format_e3_cv (st.tcv, baud, st.totsec));
- printf (" -- Total\n");
-
- /* Print 24-hour history. */
- maxi = (st.totsec - st.cursec) / 900;
- if (maxi > 48)
- maxi = 48;
- for (i=0; i<maxi; ++i) {
- printf ("\t%s\t\t\t\t\t",
- format_e3_cv (st.icv[i], baud, 15*60));
- if (i < 3)
- printf (" -- %2dm\n", (i+1)*15);
- else
- printf (" -- %2dh %2dm\n", (i+1)/4, (i+1)%4*15);
- }
- }
-}
-
-static void
-print_chan (int fd)
-{
- char protocol [8];
- 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, 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, 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;
- baud_valid = ioctl (fd, SERIAL_GETBAUD, &baud) >= 0;
- loop_valid = ioctl (fd, SERIAL_GETLOOP, &loop) >= 0;
- dpll_valid = ioctl (fd, SERIAL_GETDPLL, &dpll) >= 0;
- nrzi_valid = ioctl (fd, SERIAL_GETNRZI, &nrzi) >= 0;
- invclk_valid = ioctl (fd, SERIAL_GETINVCLK, &invclk) >= 0;
- invrclk_valid = ioctl (fd, SERIAL_GETINVRCLK, &invrclk) >= 0;
- invtclk_valid = ioctl (fd, SERIAL_GETINVTCLK, &invtclk) >= 0;
- clk_valid = ioctl (fd, SERIAL_GETCLK, &clk) >= 0;
- timeslots_valid = ioctl (fd, SERIAL_GETTIMESLOTS, ×lots) >= 0;
- subchan_valid = ioctl (fd, SERIAL_GETSUBCHAN, &subchan) >= 0;
- higain_valid = ioctl (fd, SERIAL_GETHIGAIN, &higain) >= 0;
- phony_valid = ioctl (fd, SERIAL_GETPHONY, &phony) >= 0;
- unfram_valid = ioctl (fd, SERIAL_GETUNFRAM, &unfram) >= 0;
- 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;
- port_valid = ioctl (fd, SERIAL_GETPORT, &port) >= 0;
- cable_valid = ioctl (fd, SERIAL_GETCABLE, &cable) >= 0;
- dir_valid = ioctl (fd, SERIAL_GETDIR, &dir) >= 0;
- 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)
- switch (port) {
- case 0: printf (" (rs232)"); break;
- case 1: printf (" (v35)"); break;
- case 2: printf (" (rs530)"); break;
- }
- else if (cable_valid)
- switch (cable) {
- case 0: printf (" (rs232)"); break;
- case 1: printf (" (v35)"); break;
- case 2: printf (" (rs530)"); break;
- case 3: printf (" (x21)"); break;
- case 4: printf (" (rs485)"); break;
- case 9: printf (" (no cable)"); break;
- }
- if (debug_valid && debug)
- printf (" debug=%d", debug);
- if (protocol_valid && *protocol)
- printf (" %.8s", protocol);
- else
- printf (" idle");
- if (cablen_valid)
- printf (" cablen=%s", cablen ? "on" : "off");
- if (keepalive_valid)
- printf (" keepalive=%s", keepalive ? "on" : "off");
-
- if (cfg_valid)
- switch (cfg) {
- case 'a' : printf (" cfg=A"); break;
- case 'b' : printf (" cfg=B"); break;
- case 'c' : printf (" cfg=C"); break;
- case 'd' : printf (" cfg=D"); break;
- default : printf (" cfg=unknown");
- }
- if (dir_valid)
- printf (" dir=%d", dir);
-
- if (baud_valid) {
- if (baud)
- printf (" %ld", baud);
- 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;
- case E1CLK_RECEIVE: printf (" syn=rcv"); break;
- case E1CLK_RECEIVE_CHAN0: printf (" syn=rcv0"); break;
- case E1CLK_RECEIVE_CHAN1: printf (" syn=rcv1"); break;
- case E1CLK_RECEIVE_CHAN2: printf (" syn=rcv2"); break;
- case E1CLK_RECEIVE_CHAN3: printf (" syn=rcv3"); break;
- default: printf (" syn=%d", clk); break;
- }
-
- if (dpll_valid)
- printf (" dpll=%s", dpll ? "on" : "off");
- if (nrzi_valid)
- printf (" nrzi=%s", nrzi ? "on" : "off");
- if (invclk_valid)
- printf (" invclk=%s", invclk ? "on" : "off");
- if (invrclk_valid)
- printf (" invrclk=%s", invrclk ? "on" : "off");
- if (invtclk_valid)
- printf (" invtclk=%s", invtclk ? "on" : "off");
- if (unfram_valid)
- printf (" unfram=%s", unfram ? "on" : "off");
- if (use16_valid)
- printf (" use16=%s", use16 ? "on" : "off");
- if (aflag) {
- if (crc4_valid)
- printf (" crc4=%s", crc4 ? "on" : "off");
- if (higain_valid)
- printf (" higain=%s", higain ? "on" : "off");
- if (monitor_valid)
- printf (" monitor=%s", monitor ? "on" : "off");
- if (phony_valid)
- printf (" phony=%s", phony ? "on" : "off");
- if (scrambler_valid)
- printf (" scrambler=%s", scrambler ? "on" : "off");
- if (loop_valid)
- 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));
- if (subchan_valid)
- printf (" pass=%s", format_timeslots (subchan));
- if (level_valid)
- printf (" (level=-%.1fdB)", level / 10.0);
- printf ("\n");
-}
-
-static void
-setup_chan (int fd, int argc, char **argv)
-{
- 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;
- int mode_valid;
- long baud, timeslots, mtu, rqlen;
-
- for (i=0; i<argc; ++i) {
- if (argv[i][0] >= '0' && argv[i][0] <= '9') {
- baud = strtol (argv[i], 0, 10);
- ioctl (fd, SERIAL_SETBAUD, &baud);
- } else if (strcasecmp ("extclock", argv[i]) == 0) {
- baud = 0;
- ioctl (fd, SERIAL_SETBAUD, &baud);
- } else if (strncasecmp ("cfg=", argv[i], 4) == 0) {
- if (strncasecmp ("a", argv[i]+4, 1) == 0)
- ioctl (fd, SERIAL_SETCFG, "a");
- else if (strncasecmp ("b", argv[i]+4, 1) == 0)
- ioctl (fd, SERIAL_SETCFG, "b");
- else if (strncasecmp ("c", argv[i]+4, 1) == 0)
- ioctl (fd, SERIAL_SETCFG, "c");
- else if (strncasecmp ("d", argv[i]+4, 1) == 0)
- ioctl (fd, SERIAL_SETCFG, "d");
- else {
- fprintf (stderr, "invalid cfg\n");
- exit (-1);
- }
- } else if (strcasecmp ("idle", argv[i]) == 0)
- ioctl (fd, SERIAL_SETPROTO, "\0\0\0\0\0\0\0");
- else if (strcasecmp ("async", argv[i]) == 0) {
- mode = SERIAL_ASYNC;
- if (ioctl (fd, SERIAL_SETMODE, &mode) >= 0)
- ioctl (fd, SERIAL_SETPROTO, "async\0\0");
- } else if (strcasecmp ("sync", argv[i]) == 0) {
- mode = SERIAL_HDLC;
- if (ioctl (fd, SERIAL_SETMODE, &mode) >= 0)
- ioctl (fd, SERIAL_SETPROTO, "sync\0\0\0");
- } else if (strcasecmp ("cisco", argv[i]) == 0) {
- mode = SERIAL_HDLC;
- ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "cisco\0\0");
- } else if (strcasecmp ("rbrg", argv[i]) == 0) {
- mode = SERIAL_HDLC;
- ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "rbrg\0\0\0");
- } else if (strcasecmp ("raw", argv[i]) == 0) {
- mode = SERIAL_HDLC;
- ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "raw\0\0\0\0");
- } else if (strcasecmp ("packet", argv[i]) == 0) {
- mode = SERIAL_HDLC;
- ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "packet\0");
- } else if (strcasecmp ("ppp", argv[i]) == 0) {
- /* check that ppp line discipline is present */
- if (ppp_ok ()) {
- mode = SERIAL_HDLC;
- ioctl (fd, SERIAL_SETMODE, &mode);
- ioctl (fd, SERIAL_SETPROTO, "ppp\0\0\0\0");
- }
- } else if (strncasecmp ("keepalive=", argv[i], 10) == 0) {
- keepalive = (strcasecmp ("on", argv[i] + 10) == 0);
- ioctl (fd, SERIAL_SETKEEPALIVE, &keepalive);
- } else if (strcasecmp ("fr", argv[i]) == 0) {
- 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);
- mode_valid = ioctl (fd, SERIAL_GETMODE, &mode) >= 0;
- if (!mode_valid || mode != SERIAL_ASYNC) {
- if (debug == 0) {
- set_debug_ifconfig(0);
- } else {
- ioctl (fd, SERIAL_SETDEBUG, &debug);
- set_debug_ifconfig(1);
- }
- } else {
- ioctl (fd, SERIAL_SETDEBUG, &debug);
- }
- } else if (strncasecmp ("loop=", argv[i], 5) == 0) {
- loop = (strcasecmp ("on", argv[i] + 5) == 0);
- ioctl (fd, SERIAL_SETLOOP, &loop);
- } else if (strncasecmp ("rloop=", argv[i], 6) == 0) {
- rloop = (strcasecmp ("on", argv[i] + 6) == 0);
- ioctl (fd, SERIAL_SETRLOOP, &rloop);
- } else if (strncasecmp ("dpll=", argv[i], 5) == 0) {
- dpll = (strcasecmp ("on", argv[i] + 5) == 0);
- ioctl (fd, SERIAL_SETDPLL, &dpll);
- } else if (strncasecmp ("nrzi=", argv[i], 5) == 0) {
- nrzi = (strcasecmp ("on", argv[i] + 5) == 0);
- ioctl (fd, SERIAL_SETNRZI, &nrzi);
- } else if (strncasecmp ("invclk=", argv[i], 7) == 0) {
- invclk = (strcasecmp ("on", argv[i] + 7) == 0);
- ioctl (fd, SERIAL_SETINVCLK, &invclk);
- } else if (strncasecmp ("invrclk=", argv[i], 8) == 0) {
- invrclk = (strcasecmp ("on", argv[i] + 8) == 0);
- ioctl (fd, SERIAL_SETINVRCLK, &invrclk);
- } else if (strncasecmp ("invtclk=", argv[i], 8) == 0) {
- invtclk = (strcasecmp ("on", argv[i] + 8) == 0);
- ioctl (fd, SERIAL_SETINVTCLK, &invtclk);
- } else if (strncasecmp ("higain=", argv[i], 7) == 0) {
- higain = (strcasecmp ("on", argv[i] + 7) == 0);
- ioctl (fd, SERIAL_SETHIGAIN, &higain);
- } else if (strncasecmp ("phony=", argv[i], 6) == 0) {
- phony = (strcasecmp ("on", argv[i] + 6) == 0);
- ioctl (fd, SERIAL_SETPHONY, &phony);
- } else if (strncasecmp ("unfram=", argv[i], 7) == 0) {
- unfram = (strcasecmp ("on", argv[i] + 7) == 0);
- ioctl (fd, SERIAL_SETUNFRAM, &unfram);
- } else if (strncasecmp ("scrambler=", argv[i], 10) == 0) {
- scrambler = (strcasecmp ("on", argv[i] + 10) == 0);
- ioctl (fd, SERIAL_SETSCRAMBLER, &scrambler);
- } else if (strncasecmp ("monitor=", argv[i], 8) == 0) {
- monitor = (strcasecmp ("on", argv[i] + 8) == 0);
- ioctl (fd, SERIAL_SETMONITOR, &monitor);
- } else if (strncasecmp ("use16=", argv[i], 6) == 0) {
- use16 = (strcasecmp ("on", argv[i] + 6) == 0);
- ioctl (fd, SERIAL_SETUSE16, &use16);
- } 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);
- } else if (strcasecmp ("syn=rcv", argv[i]) == 0) {
- clk = E1CLK_RECEIVE;
- ioctl (fd, SERIAL_SETCLK, &clk);
- } else if (strcasecmp ("syn=rcv0", argv[i]) == 0) {
- clk = E1CLK_RECEIVE_CHAN0;
- ioctl (fd, SERIAL_SETCLK, &clk);
- } else if (strcasecmp ("syn=rcv1", argv[i]) == 0) {
- clk = E1CLK_RECEIVE_CHAN1;
- ioctl (fd, SERIAL_SETCLK, &clk);
- } else if (strcasecmp ("syn=rcv2", argv[i]) == 0) {
- clk = E1CLK_RECEIVE_CHAN2;
- ioctl (fd, SERIAL_SETCLK, &clk);
- } else if (strcasecmp ("syn=rcv3", argv[i]) == 0) {
- clk = E1CLK_RECEIVE_CHAN3;
- ioctl (fd, SERIAL_SETCLK, &clk);
- } else if (strncasecmp ("ts=", argv[i], 3) == 0) {
- timeslots = scan_timeslots (argv[i] + 3);
- ioctl (fd, SERIAL_SETTIMESLOTS, ×lots);
- } else if (strncasecmp ("pass=", argv[i], 5) == 0) {
- timeslots = scan_timeslots (argv[i] + 5);
- ioctl (fd, SERIAL_SETSUBCHAN, ×lots);
- } else if (strncasecmp ("dlci", argv[i], 4) == 0) {
- dlci = strtol (argv[i]+4, 0, 10);
- ioctl (fd, SERIAL_ADDDLCI, &dlci);
- } else if (strncasecmp ("dir=", argv[i], 4) == 0) {
- dir = strtol (argv[i]+4, 0, 10);
- ioctl (fd, SERIAL_SETDIR, &dir);
- } else if (strncasecmp ("port=", argv[i], 5) == 0) {
- if (strncasecmp ("rs232", argv[i]+5, 5) == 0) {
- port = 0;
- ioctl (fd, SERIAL_SETPORT, &port);
- } else if (strncasecmp ("v35", argv[i]+5, 3) == 0) {
- port = 1;
- ioctl (fd, SERIAL_SETPORT, &port);
- } else if (strncasecmp ("rs449", argv[i]+5, 5) == 0) {
- port = 2;
- ioctl (fd, SERIAL_SETPORT, &port);
- } else {
- fprintf (stderr, "invalid port type\n");
- exit (-1);
- }
-#if 1
- } else if (strcasecmp ("reset", argv[i]) == 0) {
- ioctl (fd, SERIAL_RESET, 0);
- } else if (strcasecmp ("hwreset", argv[i]) == 0) {
- ioctl (fd, SERIAL_HARDRESET, 0);
-#endif
- } else if (strncasecmp ("cablen=", argv[i], 7) == 0) {
- loop = (strcasecmp ("on", argv[i] + 7) == 0);
- ioctl (fd, SERIAL_SETCABLEN, &cablen);
- }
- }
-}
-
-static void
-get_mask (void)
-{
-#ifdef __linux__
- int fd;
-
- fd = open ("/dev/serial/ctl0", 0);
- if (fd < 0) {
- perror ("/dev/serial/ctl0");
- exit (-1);
- }
- if (ioctl (fd, SERIAL_GETREGISTERED, &mask) < 0) {
- perror ("getting list of channels");
- exit (-1);
- }
- close (fd);
-#else
- int fd, fd1, fd2, fd3, i;
- char buf [80];
-
- for (i=0, fd=-1; i<12 && fd<0; i++) {
- sprintf (buf, "/dev/cx%d", i*4);
- fd = open (buf, 0);
- }
-
- for (i=0, fd1=-1; i<3 && fd1<0; i++) {
- sprintf (buf, "/dev/ct%d", i*2);
- fd1 = open (buf, 0);
- }
-
- for (i=0, fd2=-1; i<3 && fd2<0; i++) {
- sprintf (buf, "/dev/cp%d", i*4);
- fd2 = open (buf, 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);
- }
-
- if (fd >= 0) {
- if (ioctl (fd, SERIAL_GETREGISTERED, &mask) < 0) {
- perror ("getting list of channels");
- exit (-1);
- }
- close (fd);
- }
-
- if (fd1 >= 0) {
- if (ioctl (fd1, SERIAL_GETREGISTERED, (mask+16)) < 0) {
- perror ("getting list of channels");
- exit (-1);
- }
- close (fd1);
- }
-
- if (fd2 >= 0) {
- if (ioctl (fd2, SERIAL_GETREGISTERED, (mask+32)) < 0) {
- perror ("getting list of channels");
- exit (-1);
- }
- close (fd2);
- }
-
- if (fd3 >= 0) {
- if (ioctl (fd3, SERIAL_GETREGISTERED, (mask+48)) < 0) {
- perror ("getting list of channels");
- exit (-1);
- }
- close (fd3);
- }
-#endif
-}
-
-static int
-open_chan_ctl (int num)
-{
- char device [80];
- int fd;
-
-#ifdef __linux__
- sprintf (device, "/dev/serial/ctl%d", num);
-#else
- switch (adapter_type) {
- case 0:
- sprintf (device, "/dev/cx%d", num);
- break;
- case 1:
- sprintf (device, "/dev/ct%d", num);
- break;
- case 2:
- sprintf (device, "/dev/cp%d", num);
- break;
- case 3:
- sprintf (device, "/dev/ce%d", num);
- break;
- }
-#endif
- fd = open (device, 0);
- if (fd < 0) {
- if (errno == ENODEV)
- fprintf (stderr, "chan%d: not configured\n", num);
- else
- perror (device);
- exit (-1);
- }
-#ifdef __linux__
- if (ioctl (fd, SERIAL_GETNAME, &chan_name) < 0)
- sprintf (chan_name, "chan%d", num);
-#else
- switch (adapter_type) {
- 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;
-}
-
-int
-main (int argc, char **argv)
-{
- char *p;
- int fd, need_header, chan_num;
-
- if (argc > 1 && strcmp(argv[1], "help") == 0)
- usage();
-
- for (;;) {
- switch (getopt (argc, argv, "mseftucviax")) {
- case -1:
- break;
- case 'a':
- ++aflag;
- continue;
- case 'm':
- ++mflag;
- continue;
- case 's':
- ++sflag;
- continue;
- case 'e':
- ++eflag;
- continue;
- case 'f':
- ++eflag;
- ++fflag;
- continue;
- case 't':
- ++tflag;
- continue;
- case 'u':
- ++tflag;
- ++uflag;
- continue;
- case 'c':
- ++cflag;
- continue;
- case 'v':
- ++vflag;
- continue;
- case 'i':
- ++iflag;
- continue;
- case 'x':
- ++xflag;
- continue;
- default:
- usage();
- }
- break;
- }
- argc -= optind;
- argv += optind;
-
- if (argc <= 0) {
- get_mask ();
- need_header = 1;
- adapter_type = 0;
-#ifndef __linux__
- for (; adapter_type < 4; ++adapter_type)
-#endif
- {
- for (chan_num=0; chan_num<MAXCHAN; ++chan_num)
- if (mask[adapter_type*16+chan_num/8] & 1 << (chan_num & 7)) {
- fd = open_chan_ctl (chan_num);
- if (vflag) {
-#ifdef __linux__
- char buf[256];
- if (ioctl (fd, SERIAL_GETVERSIONSTRING, &buf) >= 0) {
- printf ("Version: %s\n", buf);
- close (fd);
- return (0);
- }
-#endif
- }
- if (iflag) {
- print_chan (fd);
- print_ifconfig (fd);
- } else if (sflag||xflag)
- print_stats (fd, need_header);
- else if (mflag)
- print_modems (fd, need_header);
- else if (eflag)
- print_e1_stats (fd, need_header);
- else if (tflag)
- print_e3_stats (fd, need_header);
- else if (cflag)
- clear_stats (fd);
- else
- print_chan (fd);
- close (fd);
- need_header = 0;
- }
- }
- return (0);
- }
-
- p = argv[0] + strlen (argv[0]);
- while (p > argv[0] && p[-1] >= '0' && p[-1] <= '9')
- --p;
- chan_num = strtol (p, 0, 10);
-#ifndef __linux__
- if (strncasecmp ("cx", argv[0], 2)==0)
- adapter_type = 0;
- else if (strncasecmp ("ct", argv[0], 2)==0)
- 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);
- }
-#endif
- argc--;
- argv++;
-
- fd = open_chan_ctl (chan_num);
- if (vflag) {
-#ifdef __linux__
- char buf[256];
- if (ioctl (fd, SERIAL_GETVERSIONSTRING, &buf) >= 0)
- printf ("Version: %s\n", buf);
-#endif
- }
- if (iflag) {
- print_chan (fd);
- print_ifconfig (fd);
- close (fd);
- return (0);
- }
- if (sflag||xflag) {
- print_stats (fd, 1);
- close (fd);
- return (0);
- }
- if (mflag) {
- print_modems (fd, 1);
- close (fd);
- return (0);
- }
- if (eflag) {
- print_e1_stats (fd, 1);
- close (fd);
- return (0);
- }
- if (tflag) {
- print_e3_stats (fd, 1);
- close (fd);
- return (0);
- }
- if (cflag) {
- clear_stats (fd);
- close (fd);
- return (0);
- }
- if (argc > 0)
- setup_chan (fd, argc, argv);
- else
- print_chan (fd);
- close (fd);
- return (0);
-}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Feb 5, 3:45 PM (20 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16476589
Default Alt Text
D33469.diff (53 KB)
Attached To
Mode
D33469: sbin: Remove sconfig
Attached
Detach File
Event Timeline
Log In to Comment