diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 1999-01-21 00:55:32 +0000 |
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 1999-01-21 00:55:32 +0000 |
| commit | 76b5366091f76c9bc73570149ef5055648fc2c39 (patch) | |
| tree | 590d020e0f2a5bea6e09d66d951a674443b21d67 /usr.sbin/i4b | |
| parent | 4b4d01da6f07f7754ff6a6e4f5223e9f0984d1a6 (diff) | |
Diffstat (limited to 'usr.sbin/i4b')
93 files changed, 0 insertions, 26459 deletions
diff --git a/usr.sbin/i4b/Makefile b/usr.sbin/i4b/Makefile deleted file mode 100644 index 3c12d78f8b903..0000000000000 --- a/usr.sbin/i4b/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -SUBDIR = isdntrace isdndebug isdnd alawulaw man isdntest \ - isdntel isdntelctl isdnmonitor isdndecode - -.include <bsd.subdir.mk> diff --git a/usr.sbin/i4b/Makefile.inc b/usr.sbin/i4b/Makefile.inc deleted file mode 100644 index 691d73809e061..0000000000000 --- a/usr.sbin/i4b/Makefile.inc +++ /dev/null @@ -1,14 +0,0 @@ -# if you don't like curses stuff in the daemon (i.e. don't intend -# to ever run it in the foreground but are using the monitoring -# utilities instead) define this to compile it without. -#I4B_WITHOUT_CURSES = 1 - -# if you would like monitoring support, define this -I4B_EXTERNAL_MONITOR = 1 - -# for the security conscious type: restrict monitoring to the -# local machine by not compiling any tcp/ip support for monitoring -# at all -#I4B_NOTCPIP_MONITOR = 1 - -.include "${.CURDIR}/../../Makefile.inc" diff --git a/usr.sbin/i4b/alawulaw/Makefile b/usr.sbin/i4b/alawulaw/Makefile deleted file mode 100644 index 1daa481e3b085..0000000000000 --- a/usr.sbin/i4b/alawulaw/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -PROG = alaw2ulaw -SRC = alaw2ulaw.c -CFLAGS += -Wall -g -DDEBUG -LINKS = ${BINDIR}/alaw2ulaw ${BINDIR}/ulaw2alaw -MAN1 = alaw2ulaw.1 ulaw2alaw.1 - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/alawulaw/alaw2ulaw.1 b/usr.sbin/i4b/alawulaw/alaw2ulaw.1 deleted file mode 100644 index fea7fa57a7ac5..0000000000000 --- a/usr.sbin/i4b/alawulaw/alaw2ulaw.1 +++ /dev/null @@ -1,70 +0,0 @@ -.\" -.\" Copyright (c) 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: alaw2ulaw.1,v 1.3 1998/12/05 18:02:35 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 17:57:34 1998] -.\" -.\" -hm writing manual pages -.\" -.\" -.Dd January 23, 1998 -.Dt alaw2ulaw 1 -.Sh NAME -.Nm alaw2ulaw -.Nd convert sound data -.Sh SYNOPSIS -.Nm -.Sh DESCRIPTION -.Nm alaw2ulaw -is part of the isdn4bsd package and is used convert sound data between -uLaw coded data to ALaw coded data and vice versa. -.Pp -It reads data from stdin and outputs converted data to stdout. -.Pp -In case it is run as -.Em alaw2ulaw -it converts ALaw input data to uLaw output. -.Pp -In case it is run as -.Em ulaw2alaw -it converts uLaw input data to ALaw output. -.Pp - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -alaw2ulaw <file.alaw >file.ulaw -.Ed -.Pp -converts ALaw input data file file.alaw to uLaw output file file.ulaw. - -.Sh STANDARDS -ITU Recommendations G.711 - -.Sh AUTHOR -The -.Nm -utility and this man page were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/alawulaw/alaw2ulaw.c b/usr.sbin/i4b/alawulaw/alaw2ulaw.c deleted file mode 100644 index d13e41de8ed87..0000000000000 --- a/usr.sbin/i4b/alawulaw/alaw2ulaw.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 1997 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * convert a-law / u-law sound files - * --------------------------------- - * - * last edit-date: [Sat Dec 5 17:57:56 1998] - * - * $Id: alaw2ulaw.c,v 1.2 1998/12/05 18:02:36 hm Exp $ - * - * -hm telephony is ready - * - *---------------------------------------------------------------------------*/ - -#include <string.h> -#include <unistd.h> - -#define BUF_SIZ 2048 - -unsigned char alaw_ulaw[]; -unsigned char ulaw_alaw[]; - -int main(int argc, char *argv[]) -{ - int i, j; - unsigned char buffer[BUF_SIZ]; - char *p; - unsigned char *cp; - - if((p = rindex(*argv, '/')) != NULL) - p++; - else - p = *argv; - - if(!strcmp(p, "ulaw2alaw")) - { - cp = ulaw_alaw; - } - else if(!strcmp(p, "alaw2ulaw")) - { - cp = alaw_ulaw; - } - else - { - return(1); - } - - while(((j = read(0, buffer, BUF_SIZ)) > 0)) - { - for(i = 0; i < j; i++) - buffer[i] = cp[buffer[i]]; - write(1, buffer, j); - } - return(0); -} - -unsigned char alaw_ulaw[] = { - 0x002a, 0x00a9, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0048, 0x00c8, - 0x0039, 0x00b9, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0055, 0x00d7, - 0x0022, 0x00a1, 0x005b, 0x00dd, 0x001f, 0x009f, 0x0040, 0x00c0, - 0x0031, 0x00b1, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004e, 0x00cf, - 0x002e, 0x00ad, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004c, 0x00cc, - 0x003d, 0x00bd, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0059, 0x00db, - 0x0026, 0x00a5, 0x005d, 0x00df, 0x001f, 0x009f, 0x0044, 0x00c4, - 0x0035, 0x00b5, 0x006b, 0x00ef, 0x001f, 0x009f, 0x0051, 0x00d3, - 0x0028, 0x00a7, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0046, 0x00c6, - 0x0037, 0x00b7, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0053, 0x00d5, - 0x0020, 0x009f, 0x005b, 0x00dd, 0x001f, 0x009f, 0x003f, 0x00bf, - 0x002f, 0x00af, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004d, 0x00ce, - 0x002c, 0x00ab, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004a, 0x00ca, - 0x003b, 0x00bb, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0057, 0x00d9, - 0x0024, 0x00a3, 0x005d, 0x00df, 0x001f, 0x009f, 0x0042, 0x00c2, - 0x0033, 0x00b3, 0x006b, 0x00ef, 0x001f, 0x009f, 0x004f, 0x00d1, - 0x002b, 0x00aa, 0x0063, 0x00e3, 0x001f, 0x009f, 0x0049, 0x00c9, - 0x003a, 0x00ba, 0x0077, 0x00f7, 0x001f, 0x009f, 0x0057, 0x00d7, - 0x0023, 0x00a2, 0x005d, 0x00dd, 0x001f, 0x009f, 0x0041, 0x00c1, - 0x0032, 0x00b2, 0x006b, 0x00eb, 0x001f, 0x009f, 0x004f, 0x00cf, - 0x002f, 0x00ae, 0x0067, 0x00e7, 0x001f, 0x009f, 0x004d, 0x00cd, - 0x003e, 0x00be, 0x00ff, 0x00ff, 0x001f, 0x009f, 0x005b, 0x00db, - 0x0027, 0x00a6, 0x005f, 0x00df, 0x001f, 0x009f, 0x0045, 0x00c5, - 0x0036, 0x00b6, 0x006f, 0x00ef, 0x001f, 0x009f, 0x0053, 0x00d3, - 0x0029, 0x00a8, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0047, 0x00c7, - 0x0038, 0x00b8, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0055, 0x00d5, - 0x0021, 0x00a0, 0x005b, 0x00dd, 0x001f, 0x009f, 0x003f, 0x00bf, - 0x0030, 0x00b0, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004e, 0x00ce, - 0x002d, 0x00ac, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004b, 0x00cb, - 0x003c, 0x00bc, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0059, 0x00d9, - 0x0025, 0x00a4, 0x005d, 0x00df, 0x001f, 0x009f, 0x0043, 0x00c3, - 0x0034, 0x00b4, 0x006b, 0x00ef, 0x001f, 0x009f, 0x0051, 0x00d1 -}; - -unsigned char ulaw_alaw[] = { - 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, - 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, - 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, - 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00ac, - 0x0050, 0x00d0, 0x0010, 0x0090, 0x0070, 0x00f0, 0x0030, 0x00b0, - 0x0040, 0x00c0, 0x0000, 0x0080, 0x0060, 0x00e0, 0x0020, 0x00a0, - 0x00d8, 0x0018, 0x0098, 0x0078, 0x00f8, 0x0038, 0x00b8, 0x0048, - 0x00c8, 0x0008, 0x0088, 0x0068, 0x00e8, 0x0028, 0x00a8, 0x00d6, - 0x0096, 0x0076, 0x00f6, 0x0036, 0x00b6, 0x0046, 0x00c6, 0x0006, - 0x0086, 0x0066, 0x00e6, 0x0026, 0x00a6, 0x00de, 0x009e, 0x00fe, - 0x00fe, 0x00be, 0x00be, 0x00ce, 0x00ce, 0x008e, 0x008e, 0x00ee, - 0x00ee, 0x00d2, 0x00d2, 0x00f2, 0x00f2, 0x00c2, 0x00c2, 0x00e2, - 0x00e2, 0x00e2, 0x00da, 0x00da, 0x00da, 0x00da, 0x00fa, 0x00fa, - 0x00fa, 0x00fa, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ea, 0x00ea, - 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00eb, 0x00eb, 0x00eb, 0x00eb, - 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00d1, 0x0011, 0x0091, 0x0071, 0x00f1, 0x0031, 0x00b1, 0x0041, - 0x00c1, 0x0001, 0x0081, 0x0061, 0x00e1, 0x0021, 0x00a1, 0x0059, - 0x00d9, 0x0019, 0x0099, 0x0079, 0x00f9, 0x0039, 0x00b9, 0x0049, - 0x00c9, 0x0009, 0x0089, 0x0069, 0x00e9, 0x0029, 0x00a9, 0x0057, - 0x0017, 0x0097, 0x0077, 0x00f7, 0x0037, 0x00b7, 0x0047, 0x00c7, - 0x0007, 0x0087, 0x0067, 0x00e7, 0x0027, 0x00a7, 0x00df, 0x009f, - 0x009f, 0x00ff, 0x00ff, 0x00bf, 0x00bf, 0x00cf, 0x00cf, 0x008f, - 0x008f, 0x00ef, 0x00ef, 0x00af, 0x00af, 0x00d3, 0x00d3, 0x00f3, - 0x00f3, 0x00f3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00e3, 0x00e3, - 0x00e3, 0x00e3, 0x00db, 0x00db, 0x00db, 0x00db, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00eb, 0x00eb, 0x00eb, 0x00eb -}; - -/* EOF */ diff --git a/usr.sbin/i4b/alawulaw/ulaw2alaw.1 b/usr.sbin/i4b/alawulaw/ulaw2alaw.1 deleted file mode 100644 index 4c43c153c670a..0000000000000 --- a/usr.sbin/i4b/alawulaw/ulaw2alaw.1 +++ /dev/null @@ -1,70 +0,0 @@ -.\" -.\" Copyright (c) 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: ulaw2alaw.1,v 1.3 1998/12/05 18:02:37 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 17:58:07 1998] -.\" -.\" -hm writing manual pages -.\" -.\" -.Dd January 23, 1998 -.Dt ulaw2alaw 1 -.Sh NAME -.Nm ulaw2alaw -.Nd convert sound data -.Sh SYNOPSIS -.Nm -.Sh DESCRIPTION -.Nm ulaw2alaw -is part of the isdn4bsd package and is used convert sound data between -uLaw coded data to ALaw coded data and vice versa. -.Pp -It reads data from stdin and outputs converted data to stdout. -.Pp -In case it is run as -.Em alaw2ulaw -it converts ALaw input data to uLaw output. -.Pp -In case it is run as -.Em ulaw2alaw -it converts uLaw input data to ALaw output. -.Pp - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -ulaw2alaw <file.ulaw >file.alaw -.Ed -.Pp -converts uLaw input data file file.ulaw to ALaw output file file.alaw. - -.Sh STANDARDS -ITU Recommendations G.711 - -.Sh AUTHOR -The -.Nm -utility and this man page were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/isdnd/Makefile b/usr.sbin/i4b/isdnd/Makefile deleted file mode 100644 index 37d3471357c21..0000000000000 --- a/usr.sbin/i4b/isdnd/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# $Id$ - -PROG = isdnd - -SRCS = rc_parse.y rc_scan.l main.c rc_config.c log.c curses.c \ - process.c rates.c msghdl.c fsm.c support.c timer.c \ - exec.c dial.c monitor.c pcause.c controller.c alias.c \ - y.tab.h - -COPTS += -I${.CURDIR}/../isdnmonitor -I${.CURDIR}/../isdntel -I${.OBJDIR} - -# compile debug support -COPTS += -DDEBUG - -# enable rtprio usage -COPTS += -DUSE_RTPRIO - -MAN8 = isdnd.8 -MAN5 = isdnd.rc.5 isdnd.rates.5 isdnd.acct.5 - -.if !defined(I4B_WITHOUT_CURSES) -COPTS += -DUSE_CURSES -DPADD = ${LIBCURSES} ${LIBTERMCAP} -LDADD = -lcurses -ltermcap -.endif - -.if defined(I4B_EXTERNAL_MONITOR) -COPTS += -DI4B_EXTERNAL_MONITOR -.if defined(I4B_NOTCPIP_MONITOR) -COPTS += -DI4B_NOTCPIP_MONITOR -.endif -.endif - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdnd/alias.c b/usr.sbin/i4b/isdnd/alias.c deleted file mode 100644 index b802776de7b24..0000000000000 --- a/usr.sbin/i4b/isdnd/alias.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdnd - common aliasfile handling - * ================================= - * - * NOTE: this has to stay in sync with isdntel/alias.c to be able - * to share a common aliasfile! - * - * $Id: alias.c,v 1.5 1998/12/05 18:03:03 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:05:40 1998] - * - *----------------------------------------------------------------------------*/ - -#include "isdnd.h" - -static struct alias *firsta = NULL; - -#define MAXBUFSZ 256 - -static void free_alias(struct alias *ptr); - -/*---------------------------------------------------------------------------* - * read in and init aliases - *---------------------------------------------------------------------------*/ -void -init_alias(char *filename) -{ - FILE *fp; - char buffer[MAXBUFSZ + 1]; - char number[MAXBUFSZ + 1]; - char name[MAXBUFSZ + 1]; - char *s, *d; - struct alias *newa = NULL; - struct alias *lasta = NULL; - - firsta = NULL; - - if((fp = fopen(filename, "r")) == NULL) - { - log(LL_ERR, "init_alias: error opening aliasfile %s: %s!", filename, strerror(errno)); - exit(1); - } - - while((fgets(buffer, MAXBUFSZ, fp)) != NULL) - { - if(buffer[0] == '#' || buffer[0] == ' ' || - buffer[0] == '\t' || buffer[0] == '\n') - { - continue; - } - - s = buffer; - d = number; - - while(*s && (isdigit(*s))) - *d++ = *s++; - - *d = '\0'; - - while(*s && (isspace(*s))) - s++; - - d = name; - - while(*s && (isprint(*s))) - *d++ = *s++; - - *d = '\0'; - - if((strlen(number) > 1) && (strlen(name) > 1)) - { - if((newa = (struct alias *) malloc(sizeof(struct alias))) == NULL) - { - log(LL_ERR, "init_alias: malloc failed for struct alias!\n"); - exit(1); - } - - if((newa->number = (char *) malloc(strlen(number)+1)) == NULL) - { - log(LL_ERR, "init_alias: malloc failed for number alias!\n"); - exit(1); - } - - if((newa->name = (char *) malloc(strlen(name)+1)) == NULL) - { - log(LL_ERR, "init_alias: malloc failed for name alias!\n"); - exit(1); - } - - strcpy(newa->name, name); - strcpy(newa->number, number); - newa->next = NULL; - - if(firsta == NULL) - { - firsta = newa; - } - else - { - lasta->next = newa; - } - lasta = newa; - } - } - fclose(fp); -} - -/*---------------------------------------------------------------------------* - * free all aliases - *---------------------------------------------------------------------------*/ -void -free_aliases(void) -{ - free_alias(firsta); -} - -/*---------------------------------------------------------------------------* - * free aliases - *---------------------------------------------------------------------------*/ -static void -free_alias(struct alias *ptr) -{ - - if(ptr == NULL) - return; - - if(ptr->next != NULL) - free_alias(ptr->next); - - if(ptr->number != NULL) - free(ptr->number); - - if(ptr->name != NULL) - free(ptr->name); - - free(ptr); -} - -/*---------------------------------------------------------------------------* - * try to find alias for number. if no alias found, return number. - *---------------------------------------------------------------------------*/ -char * -get_alias(char *number) -{ - struct alias *ca = NULL; - - if(firsta == NULL) - return(number); - - ca = firsta; - - for(;;) - { - if(strlen(number) == strlen(ca->number)) - { - if(!(strcmp(number, ca->number))) - return(ca->name); - } - if(ca->next == NULL) - break; - ca = ca->next; - } - return(number); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/config.h b/usr.sbin/i4b/isdnd/config.h deleted file mode 100644 index 22c947af84b33..0000000000000 --- a/usr.sbin/i4b/isdnd/config.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - compile time configuration header file - * --------------------------------------------------- - * - * $Id: config.h,v 1.6 1998/12/05 18:03:05 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:05:56 1998] - * - *---------------------------------------------------------------------------*/ - -#ifndef _CONFIG_H_ -#define _CONFIG_H_ - -/* general values */ - -#define UMASK 022 /* file creation perm mask */ -#define CFG_ENTRY_MAX 32 /* max no of config entries */ -#define ISDN_CTRL_MAX 4 /* max no of controllers */ -#define MAX_RE 8 /* max regular expression entries */ - -/* monitor max values */ - -#define MAX_MHOSTS 8 /* max allowed monitor hosts */ - -/* timouts */ - -#define TIMEOUT_CONNECT_ACTIVE 30 /* seconds to wait for MSG_CONN_ACT */ - -/* utility programs forked */ - -#define REGPROG_DEF "program" /* default program to use for regexpr */ -#define ANSWERPROG_DEF "answer" /* default telephone answer program */ - -#endif /* _CONFIG_H_ */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/controller.c b/usr.sbin/i4b/isdnd/controller.c deleted file mode 100644 index b3cfcf99b7e30..0000000000000 --- a/usr.sbin/i4b/isdnd/controller.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - controller state support routines - * ---------------------------------------------- - * - * $Id: controller.c,v 1.10 1998/12/05 18:03:06 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:06:10 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -/*--------------------------------------------------------------------------* - * init controller state table entry - *--------------------------------------------------------------------------*/ -int -init_controller_state(int controller, int ctrl_type, int card_type, int tei) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "init_controller_state: invalid controller number [%d]!", controller); - return(ERROR); - } - - /* init controller tab */ - - if(ctrl_type == CTRL_PASSIVE) - { - if((card_type > CARD_TYPEP_UNK) && - (card_type <= CARD_TYPEP_MAX)) - { - isdn_ctrl_tab[controller].ctrl_type = ctrl_type; - isdn_ctrl_tab[controller].card_type = card_type; - isdn_ctrl_tab[controller].state = CTRL_UP; - isdn_ctrl_tab[controller].stateb1 = CHAN_IDLE; - isdn_ctrl_tab[controller].stateb2 = CHAN_IDLE; - isdn_ctrl_tab[controller].freechans = MAX_CHANCTRL; - isdn_ctrl_tab[controller].tei = tei; - log(LL_DMN, "init_controller_state: controller %d is %s", - controller, - name_of_controller(isdn_ctrl_tab[controller].ctrl_type, - isdn_ctrl_tab[controller].card_type)); - } - else - { - log(LL_ERR, "init_controller_state: unknown card type %d", card_type); - return(ERROR); - } - - } - else if(ctrl_type == CTRL_DAIC) - { - isdn_ctrl_tab[controller].ctrl_type = ctrl_type; - isdn_ctrl_tab[controller].card_type = card_type; - isdn_ctrl_tab[controller].state = CTRL_DOWN; - isdn_ctrl_tab[controller].stateb1 = CHAN_IDLE; - isdn_ctrl_tab[controller].stateb2 = CHAN_IDLE; - isdn_ctrl_tab[controller].freechans = MAX_CHANCTRL; - isdn_ctrl_tab[controller].tei = -1; - log(LL_DMN, "init_controller_state: controller %d is %s", - controller, - name_of_controller(isdn_ctrl_tab[controller].ctrl_type, - isdn_ctrl_tab[controller].card_type)); - } - else - { - /* XXX active controller init here !!! */ - - log(LL_ERR, "init_controller_state: unknown controller type %d", ctrl_type); - return(ERROR); - } - return(GOOD); -} - -/*--------------------------------------------------------------------------* - * set controller state to UP/DOWN - *--------------------------------------------------------------------------*/ -int -set_controller_state(int controller, int state) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "set_controller_state: invalid controller number [%d]!", controller); - return(ERROR); - } - - if(state == CTRL_UP) - { - isdn_ctrl_tab[controller].state = CTRL_UP; - DBGL(DL_CNST, (log(LL_DBG, "set_controller_state: controller [%d] set UP!", controller))); - } - else if (state == CTRL_DOWN) - { - isdn_ctrl_tab[controller].state = CTRL_DOWN; - DBGL(DL_CNST, (log(LL_DBG, "set_controller_state: controller [%d] set DOWN!", controller))); - } - else - { - log(LL_ERR, "set_controller_state: invalid controller state [%d]!", state); - return(ERROR); - } - return(GOOD); -} - -/*--------------------------------------------------------------------------* - * get controller state - *--------------------------------------------------------------------------*/ -int -get_controller_state(int controller) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "set_controller_state: invalid controller number [%d]!", controller); - return(ERROR); - } - return(isdn_ctrl_tab[controller].state); -} - -/*--------------------------------------------------------------------------* - * decrement number of free channels for controller - *--------------------------------------------------------------------------*/ -int -decr_free_channels(int controller) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "decr_free_channels: invalid controller number [%d]!", controller); - return(ERROR); - } - if(isdn_ctrl_tab[controller].freechans > 0) - { - (isdn_ctrl_tab[controller].freechans)--; - DBGL(DL_CNST, (log(LL_DBG, "decr_free_channels: ctrl %d, now %d chan free", controller, isdn_ctrl_tab[controller].freechans))); - return(GOOD); - } - else - { - log(LL_ERR, "decr_free_channels: controller [%d] already 0 free chans!", controller); - return(ERROR); - } -} - -/*--------------------------------------------------------------------------* - * increment number of free channels for controller - *--------------------------------------------------------------------------*/ -int -incr_free_channels(int controller) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "incr_free_channels: invalid controller number [%d]!", controller); - return(ERROR); - } - if(isdn_ctrl_tab[controller].freechans < MAX_CHANCTRL) - { - (isdn_ctrl_tab[controller].freechans)++; - DBGL(DL_CNST, (log(LL_DBG, "incr_free_channels: ctrl %d, now %d chan free", controller, isdn_ctrl_tab[controller].freechans))); - return(GOOD); - } - else - { - log(LL_ERR, "incr_free_channels: controller [%d] already 2 free chans!", controller); - return(ERROR); - } -} - -/*--------------------------------------------------------------------------* - * get number of free channels for controller - *--------------------------------------------------------------------------*/ -int -get_free_channels(int controller) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "get_free_channels: invalid controller number [%d]!", controller); - return(ERROR); - } - DBGL(DL_CNST, (log(LL_DBG, "get_free_channels: ctrl %d, %d chan free", controller, isdn_ctrl_tab[controller].freechans))); - return(isdn_ctrl_tab[controller].freechans); -} - -/*--------------------------------------------------------------------------* - * set channel state to busy - *--------------------------------------------------------------------------*/ -int -set_channel_busy(int controller, int channel) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "set_channel_busy: invalid controller number [%d]!", controller); - return(ERROR); - } - - switch(channel) - { - case CHAN_B1: - if(isdn_ctrl_tab[controller].stateb1 == CHAN_RUN) - { - DBGL(DL_CNST, (log(LL_DBG, "set_channel_busy: controller [%d] channel B1 already busy!", controller))); - } - else - { - isdn_ctrl_tab[controller].stateb1 = CHAN_RUN; - DBGL(DL_CNST, (log(LL_DBG, "set_channel_busy: controller [%d] channel B1 set to BUSY!", controller))); - } - break; - - case CHAN_B2: - if(isdn_ctrl_tab[controller].stateb2 == CHAN_RUN) - { - DBGL(DL_CNST, (log(LL_DBG, "set_channel_busy: controller [%d] channel B2 already busy!", controller))); - } - else - { - isdn_ctrl_tab[controller].stateb2 = CHAN_RUN; - DBGL(DL_CNST, (log(LL_DBG, "set_channel_busy: controller [%d] channel B2 set to BUSY!", controller))); - } - break; - - default: - log(LL_ERR, "set_channel_busy: controller [%d], invalid channel [%d]!", controller, channel); - return(ERROR); - break; - } - return(GOOD); -} - -/*--------------------------------------------------------------------------* - * set channel state to idle - *--------------------------------------------------------------------------*/ -int -set_channel_idle(int controller, int channel) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "set_channel_idle: invalid controller number [%d]!", controller); - return(ERROR); - } - - switch(channel) - { - case CHAN_B1: - if(isdn_ctrl_tab[controller].stateb1 == CHAN_IDLE) - { - DBGL(DL_CNST, (log(LL_DBG, "set_channel_idle: controller [%d] channel B1 already idle!", controller))); - } - else - { - isdn_ctrl_tab[controller].stateb1 = CHAN_IDLE; - DBGL(DL_CNST, (log(LL_DBG, "set_channel_idle: controller [%d] channel B1 set to IDLE!", controller))); - } - break; - - case CHAN_B2: - if(isdn_ctrl_tab[controller].stateb2 == CHAN_IDLE) - { - DBGL(DL_CNST, (log(LL_DBG, "set_channel_idle: controller [%d] channel B2 already idle!", controller))); - } - else - { - isdn_ctrl_tab[controller].stateb2 = CHAN_IDLE; - DBGL(DL_CNST, (log(LL_DBG, "set_channel_idle: controller [%d] channel B2 set to IDLE!", controller))); - } - break; - - default: - log(LL_ERR, "set_channel_idle: controller [%d], invalid channel [%d]!", controller, channel); - return(ERROR); - break; - } - return(GOOD); -} - -/*--------------------------------------------------------------------------* - * return channel state - *--------------------------------------------------------------------------*/ -int -ret_channel_state(int controller, int channel) -{ - if((controller < 0) || (controller >= ncontroller)) - { - log(LL_ERR, "ret_channel_state: invalid controller number [%d]!", controller); - return(ERROR); - } - - switch(channel) - { - case CHAN_B1: - return(isdn_ctrl_tab[controller].stateb1); - break; - - case CHAN_B2: - return(isdn_ctrl_tab[controller].stateb2); - break; - - default: - log(LL_ERR, "ret_channel_state: controller [%d], invalid channel [%d]!", controller, channel); - return(ERROR); - break; - } - return(ERROR); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/curses.c b/usr.sbin/i4b/isdnd/curses.c deleted file mode 100644 index b5053828aa529..0000000000000 --- a/usr.sbin/i4b/isdnd/curses.c +++ /dev/null @@ -1,633 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - curses fullscreen output - * ------------------------------------- - * - * $Id: curses.c,v 1.27 1998/12/05 18:03:08 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:06:24 1998] - * - *---------------------------------------------------------------------------*/ - -#ifdef USE_CURSES - -#include "isdnd.h" - -#define CHPOS(cfgp) (((cfgp)->isdncontrollerused*2) + (cfgp)->isdnchannelused) - -/*---------------------------------------------------------------------------* - * init curses fullscreen display - *---------------------------------------------------------------------------*/ -void -init_screen(void) -{ - char buffer[512]; - int uheight, lheight; - int i, j; - cfg_entry_t *p; - - initscr(); /* curses init */ - - if((COLS < 80) || (LINES < 24)) - { - log(LL_ERR, "ERROR, minimal screensize must be 80x24, is %dx%d, terminating!",COLS, LINES); - do_exit(1); - } - - noecho(); - raw(); - - uheight = ncontroller * 2; /* cards * b-channels */ - lheight = LINES - uheight - 6 + 1; /* rest of display */ - - if((upper_w = newwin(uheight, COLS, UPPER_B, 0)) == NULL) - { - log(LL_ERR, "ERROR, curses init upper window, terminating!"); - exit(1); - } - - if((mid_w = newwin(1, COLS, UPPER_B+uheight+1, 0)) == NULL) - { - log(LL_ERR, "ERROR, curses init mid window, terminating!"); - exit(1); - } - - if((lower_w = newwin(lheight, COLS, UPPER_B+uheight+3, 0)) == NULL) - { - log(LL_ERR, "ERROR, curses init lower window, LINES = %d, lheight = %d, uheight = %d, terminating!", LINES, lheight, uheight); - exit(1); - } - - scrollok(lower_w, 1); - - sprintf(buffer, "----- isdn controller channel state ------------- isdnd %02d.%02d.%d [pid %d] -", VERSION, REL, STEP, (int)getpid()); - - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(0, 0); - standout(); - addstr(buffer); - standend(); - - move(1, 0); - /* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */ - addstr("c tei b remote iface dir outbytes obps inbytes ibps units"); - - sprintf(buffer, "----- isdn userland interface state ------------------------------------------"); - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(uheight+2, 0); - standout(); - addstr(buffer); - standend(); - - sprintf(buffer, "----- isdnd logfile display --------------------------------------------------"); - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(uheight+4, 0); - standout(); - addstr(buffer); - standend(); - - move(uheight+5, 0); - addstr("Date Time Typ Information Description"); - - refresh(); - - for(i=0, j=0; i <= ncontroller; i++, j+=2) - { - if(isdn_ctrl_tab[i].tei == -1) - mvwprintw(upper_w, j, H_CNTL, "%d --- 1 ", i); - else - mvwprintw(upper_w, j, H_CNTL, "%d %3d 1 ", i, isdn_ctrl_tab[i].tei); - mvwprintw(upper_w, j+1, H_CNTL, " L12 2 "); - } - wrefresh(upper_w); - - for(i=0, j=0; i < nentries; i++) /* walk thru all entries */ - { - p = &cfg_entry_tab[i]; /* get ptr to enry */ - - mvwprintw(mid_w, 0, j, "%s%d ", bdrivername(p->usrdevicename), p->usrdeviceunit); - - p->fs_position = j; - - j += ((strlen(bdrivername(p->usrdevicename)) + (p->usrdeviceunit > 9 ? 2 : 1) + 1)); - } - wrefresh(mid_w); - - wmove(lower_w, 0, 0); - wrefresh(lower_w); - - curses_ready = 1; -} - -/*---------------------------------------------------------------------------* - * curses menu for fullscreen command mode - *---------------------------------------------------------------------------*/ -void -do_menu(void) -{ - static char *menu[WMITEMS] = - { - "1 - (D)isplay refresh", - "2 - (H)angup (choose a channel)", - "3 - (R)eread config file", - "4 - (Q)uit the program", - }; - - WINDOW *menu_w; - int c; - int mpos; - fd_set set; - struct timeval timeout; - - /* create a new window in the lower screen area */ - - if((menu_w = newwin(WMENU_HGT, WMENU_LEN, WMENU_POSLN, WMENU_POSCO )) == NULL) - { - log(LL_WRN, "ERROR, curses init menu window!"); - return; - } - - /* create a border around the window */ - - box(menu_w, '|', '-'); - - /* add a title */ - - wstandout(menu_w); - mvwaddstr(menu_w, 0, (WMENU_LEN / 2) - (strlen(WMENU_TITLE) / 2), WMENU_TITLE); - wstandend(menu_w); - - /* fill the window with the menu options */ - - for(mpos=0; mpos <= (WMITEMS-1); mpos++) - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - - /* highlight the first menu option */ - - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - - /* input loop */ - - for(;;) - { - wrefresh(menu_w); - - FD_ZERO(&set); - FD_SET(STDIN_FILENO, &set); - timeout.tv_sec = WMTIMEOUT; - timeout.tv_usec = 0; - - /* if no char is available within timeout, exit menu*/ - - if((select(STDIN_FILENO + 1, &set, NULL, NULL, &timeout)) <= 0) - goto mexit; - - c = wgetch(menu_w); - - switch(c) - { - case ' ': - case '\t': /* hilite next option */ - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - mpos++; - if(mpos >= WMITEMS) - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - break; - - case ('0'+WREFRESH+1): /* display refresh */ - case 'D': - case 'd': - wrefresh(curscr); - goto mexit; - - case ('0'+WQUIT+1): /* quit program */ - case 'Q': - case 'q': - do_exit(0); - goto mexit; - - case ('0'+WHANGUP+1): /* hangup connection */ - case 'H': - case 'h': - display_chans(); - goto mexit; - - case ('0'+WREREAD+1): /* reread config file */ - case 'R': - case 'r': - rereadconfig(42); - goto mexit; - - case '\n': - case '\r': /* exec highlighted option */ - switch(mpos) - { - case WREFRESH: - wrefresh(curscr); - break; - - case WQUIT: - do_exit(0); - break; - - case WHANGUP: - display_chans(); - break; - - case WREREAD: - rereadconfig(42); - break; - } - goto mexit; - break; - - default: - goto mexit; - break; - } - } - -mexit: - /* delete the menu window */ - - delwin(menu_w); - - /* re-display the original lower window contents */ - - touchwin(lower_w); - wrefresh(lower_w); -} - -/*---------------------------------------------------------------------------* - * display the charge in units - *---------------------------------------------------------------------------*/ -void -display_charge(cfg_entry_t *cep) -{ - mvwprintw(upper_w, CHPOS(cep), H_UNITS, "%d", cep->charge); - wclrtoeol(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display the calculated charge in units - *---------------------------------------------------------------------------*/ -void -display_ccharge(cfg_entry_t *cep, int units) -{ - mvwprintw(upper_w, CHPOS(cep), H_UNITS, "(%d)", units); - wclrtoeol(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display accounting information - *---------------------------------------------------------------------------*/ -void -display_acct(cfg_entry_t *cep) -{ - mvwprintw(upper_w, CHPOS(cep), H_OUT, "%-10d", cep->outbytes); - mvwprintw(upper_w, CHPOS(cep), H_OUTBPS, "%-4d", cep->outbps); - mvwprintw(upper_w, CHPOS(cep), H_IN, "%-10d", cep->inbytes); - mvwprintw(upper_w, CHPOS(cep), H_INBPS, "%-4d", cep->inbps); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display connect information - *---------------------------------------------------------------------------*/ -void -display_connect(cfg_entry_t *cep) -{ - char buffer[256]; - - /* remote telephone number */ - - if(aliasing) - { - if(cep->direction == DIR_IN) - sprintf(buffer, "%s", get_alias(cep->real_phone_incoming)); - else - sprintf(buffer, "%s", get_alias(cep->remote_phone_dialout)); - } - else - { - if(cep->direction == DIR_IN) - sprintf(buffer, "%s/%s", cep->name, cep->real_phone_incoming); - else - sprintf(buffer, "%s/%s", cep->name, cep->remote_phone_dialout); - } - - buffer[H_IFN - H_TELN - 1] = '\0'; - - mvwprintw(upper_w, CHPOS(cep), H_TELN, "%s", buffer); - - /* interface */ - - mvwprintw(upper_w, CHPOS(cep), H_IFN, "%s%d ", - bdrivername(cep->usrdevicename), cep->usrdeviceunit); - - mvwprintw(upper_w, CHPOS(cep), H_IO, - cep->direction == DIR_OUT ? "out" : "in"); - - mvwprintw(upper_w, CHPOS(cep), H_OUT, "-"); - mvwprintw(upper_w, CHPOS(cep), H_OUTBPS, "-"); - mvwprintw(upper_w, CHPOS(cep), H_IN, "-"); - mvwprintw(upper_w, CHPOS(cep), H_INBPS, "-"); - - if(do_bell) - display_bell(); - - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * erase line at disconnect time - *---------------------------------------------------------------------------*/ -void -display_disconnect(cfg_entry_t *cep) -{ - wmove(upper_w, CHPOS(cep), - H_TELN); - wclrtoeol(upper_w); - wrefresh(upper_w); - - if(do_bell) - display_bell(); - -} - -/*---------------------------------------------------------------------------* - * display interface up/down information - *---------------------------------------------------------------------------*/ -void -display_updown(cfg_entry_t *cep, int updown) -{ - if(updown) - wstandend(mid_w); - else - wstandout(mid_w); - - mvwprintw(mid_w, 0, cep->fs_position, "%s%d ", - bdrivername(cep->usrdevicename), cep->usrdeviceunit); - - wstandend(mid_w); - wrefresh(mid_w); -} - -/*---------------------------------------------------------------------------* - * display interface up/down information - *---------------------------------------------------------------------------*/ -void -display_l12stat(int controller, int layer, int state) -{ - if(controller > ncontroller) - return; - if(!(layer == 1 || layer == 2)) - return; - - if(state) - wstandout(upper_w); - else - wstandend(upper_w); - - if(layer == 1) - { - mvwprintw(upper_w, (controller*2)+1, H_TEI+1, "1"); - if(!state) - mvwprintw(upper_w, (controller*2)+1, H_TEI+2, "2"); - } - else if(layer == 2) - { - mvwprintw(upper_w, (controller*2)+1, H_TEI+2, "2"); - if(state) - mvwprintw(upper_w, (controller*2)+1, H_TEI+1, "1"); - } - - wstandend(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display TEI - *---------------------------------------------------------------------------*/ -void -display_tei(int controller, int tei) -{ - if(controller > ncontroller) - return; - - if(tei == -1) - mvwprintw(upper_w, controller*2, H_TEI, "---"); - else - mvwprintw(upper_w, controller*2, H_TEI, "%3d", tei); - - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display bell :-) - *---------------------------------------------------------------------------*/ -void -display_bell(void) -{ - static char bell[1] = { 0x07 }; - write(STDOUT_FILENO, &bell[0], 1); -} - -/*---------------------------------------------------------------------------* - * display channel information for shutdown - *---------------------------------------------------------------------------*/ -void -display_chans(void) -{ - char buffer[80]; - int i; - int cnt = 0; - WINDOW *chan_w; - int nlines, ncols, pos_x, pos_y; - fd_set set; - struct timeval timeout; - cfg_entry_t *cep = NULL; - - /* need this later to close the connection */ - struct ctlr_chan { - int cntl; - int chn; - } *cc = NULL; - - for (i = 0; i < ncontroller; i++) - { - if((get_controller_state(i)) != CTRL_UP) - continue; - if((ret_channel_state(i, CHAN_B1)) == CHAN_RUN) - cnt++; - if((ret_channel_state(i, CHAN_B2)) == CHAN_RUN) - cnt++; - } - - if(cnt > 0) - { - if ((cc = (struct ctlr_chan *)malloc (cnt * - sizeof (struct ctlr_chan))) == NULL) - { - return; - } - nlines = cnt + 4; - ncols = 60; - } - else - { - nlines = 5; - ncols = 22; - } - - pos_y = WMENU_POSLN + 4; - pos_x = WMENU_POSCO + 10; - - /* create a new window in the lower screen area */ - - if((chan_w = newwin(nlines, ncols, pos_y, pos_x )) == NULL) - { - log(LL_WRN, "ERROR, curses init channel window!"); - if (cnt > 0) - free(cc); - return; - } - - /* create a border around the window */ - - box(chan_w, '|', '-'); - - /* add a title */ - - wstandout(chan_w); - mvwaddstr(chan_w, 0, (ncols / 2) - (strlen("Channels") / 2), "Channels"); - wstandend(chan_w); - - /* no active channels */ - if (cnt == 0) - { - mvwaddstr(chan_w, 2, 2, "No active channels"); - wrefresh(chan_w); - sleep(1); - - /* delete the channels window */ - - delwin(chan_w); - return; - } - - nlines = 2; - ncols = 1; - - for (i = 0; i < ncontroller; i++) - { - if((get_controller_state(i)) != CTRL_UP) - continue; - - if((ret_channel_state(i, CHAN_B1)) == CHAN_RUN) - { - sprintf(buffer, "%d - Controller %d channel %s", ncols, i, "B1"); - mvwaddstr(chan_w, nlines, 2, buffer); - cc[ncols - 1].cntl = i; - cc[ncols - 1].chn = CHAN_B1; - nlines++; - ncols++; - } - if((ret_channel_state(i, CHAN_B2)) == CHAN_RUN) - { - sprintf(buffer, "%d - Controller %d channel %s", ncols, i, "B2"); - mvwaddstr(chan_w, nlines, 2, buffer); - cc[ncols - 1].cntl = i; - cc[ncols - 1].chn = CHAN_B2; - nlines++; - ncols++; - } - } - - for(;;) - { - wrefresh(chan_w); - - FD_ZERO(&set); - FD_SET(STDIN_FILENO, &set); - timeout.tv_sec = WMTIMEOUT; - timeout.tv_usec = 0; - - /* if no char is available within timeout, exit menu*/ - - if((select(STDIN_FILENO + 1, &set, NULL, NULL, &timeout)) <= 0) - break; - - ncols = wgetch(chan_w); - - if (!(isdigit(ncols))) - { - display_bell(); - continue; - } - - nlines = ncols - '0'; - - if ((nlines == 0) || (nlines > cnt)) - { - display_bell(); - continue; - } - - if((cep = get_cep_by_cc(cc[nlines-1].cntl, cc[nlines-1].chn)) - != NULL) - { - log(LL_CHD, "%05d %s manual disconnect (fullscreen menu)", cep->cdid, cep->name); - cep->hangup = 1; - break; - } - } - - free(cc); - - /* delete the channels window */ - - delwin(chan_w); -} - -#endif - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/dial.c b/usr.sbin/i4b/isdnd/dial.c deleted file mode 100644 index 4308f98e20536..0000000000000 --- a/usr.sbin/i4b/isdnd/dial.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - dial handling routines - * ----------------------------------- - * - * $Id: dial.c,v 1.6 1998/12/05 18:03:09 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:06:36 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -/*---------------------------------------------------------------------------* - * select the first remote number to dial according to the - * dial strategy - *---------------------------------------------------------------------------*/ -void -select_first_dialno(cfg_entry_t *cep) -{ - int i, j; - - if(cep->remote_numbers_count < 1) - { - log(LL_ERR, "select_first_dialno: remote_numbers_count < 1!"); - return; - } - - if(cep->remote_numbers_count == 1) - { - strcpy(cep->remote_phone_dialout, cep->remote_numbers[0].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_first_dialno: only one no, no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = 0; - return; - } - - if(cep->remote_numbers_handling == RNH_FIRST) - { - strcpy(cep->remote_phone_dialout, cep->remote_numbers[0].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_first_dialno: use first, no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = 0; - return; - } - - i = cep->last_remote_number; - - for(j = cep->remote_numbers_count; j > 0; j--) - { - if(cep->remote_numbers[i].flag == RNF_SUCC) - { - if(cep->remote_numbers_handling == RNH_LAST) - { - strcpy(cep->remote_phone_dialout, cep->remote_numbers[i].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_first_dialno: use last, no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = i; - return; - } - else - { - if(++i >= cep->remote_numbers_count) - i = 0; - - strcpy(cep->remote_phone_dialout, cep->remote_numbers[i].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_first_dialno: use next, no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = i; - return; - } - } - - if(++i >= cep->remote_numbers_count) - i = 0; - } - strcpy(cep->remote_phone_dialout, cep->remote_numbers[0].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_first_dialno: no last found (use 0), no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = 0; -} - -/*---------------------------------------------------------------------------* - * select next remote number to dial (last was unsuccesfull) - *---------------------------------------------------------------------------*/ -void -select_next_dialno(cfg_entry_t *cep) -{ - if(cep->remote_numbers_count < 1) - { - log(LL_ERR, "select_next_dialno: remote_numbers_count < 1!"); - return; - } - - if(cep->remote_numbers_count == 1) - { - strcpy(cep->remote_phone_dialout, cep->remote_numbers[0].number); - DBGL(DL_DIAL, (log(LL_DBG, "select_next_dialno: only one no, no = %s", cep->remote_phone_dialout))); - cep->last_remote_number = 0; - return; - } - - /* mark last try as bad */ - - cep->remote_numbers[cep->last_remote_number].flag = RNF_IDLE; - - /* next one to try */ - - cep->last_remote_number++; - - if(cep->last_remote_number >= cep->remote_numbers_count) - cep->last_remote_number = 0; - - strcpy(cep->remote_phone_dialout, cep->remote_numbers[cep->last_remote_number].number); - - DBGL(DL_DIAL, (log(LL_DBG, "select_next_dialno: index=%d, no=%s", - cep->last_remote_number, - cep->remote_numbers[cep->last_remote_number].number))); -} - -/*---------------------------------------------------------------------------* - * dial succeded, store this number as the last successful - *---------------------------------------------------------------------------*/ -void -select_this_dialno(cfg_entry_t *cep) -{ - cep->remote_numbers[cep->last_remote_number].flag = RNF_SUCC; - - DBGL(DL_DIAL, (log(LL_DBG, "select_this_dialno: index = %d, no = %s", - cep->last_remote_number, - cep->remote_numbers[cep->last_remote_number].number))); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/exec.c b/usr.sbin/i4b/isdnd/exec.c deleted file mode 100644 index 1ed81a1ac8666..0000000000000 --- a/usr.sbin/i4b/isdnd/exec.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * exec.h - supplemental program/script execution - * ---------------------------------------------- - * - * $Id: exec.c,v 1.10 1998/12/05 18:03:11 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:06:49 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -#include <sys/wait.h> -#include <sys/socket.h> -#include <net/if.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#define MAX_PIDS 32 - -static struct pid_tab { - pid_t pid; - cfg_entry_t *cep; -} pid_tab[MAX_PIDS]; - -/*---------------------------------------------------------------------------* - * SIGCHLD signal handler - *---------------------------------------------------------------------------*/ -void -sigchild_handler(int sig) -{ - int retstat; - register int i; - pid_t pid; - - if((pid = waitpid(-1, &retstat, WNOHANG)) <= 0) - { - log(LL_ERR, "ERROR, waitpid: %s", strerror(errno)); - do_exit(1); - } - else - { - if(WIFEXITED(retstat)) - { - DBGL(DL_PROC, (log(LL_DBG, "normal child (pid=%d) termination, exitstat = %d", - pid, WEXITSTATUS(retstat)))); - } - else if(WIFSIGNALED(retstat)) - { - if(WCOREDUMP(retstat)) - log(LL_WRN, "child (pid=%d) termination due to signal %d (coredump)", - pid, WTERMSIG(retstat)); - else - log(LL_WRN, "child (pid=%d) termination due to signal %d", - pid, WTERMSIG(retstat)); - } - } - - /* check if hangup required */ - - for(i=0; i < MAX_PIDS; i++) - { - if(pid_tab[i].pid == pid) - { - if(pid_tab[i].cep->cdid != CDID_UNUSED) - { - DBGL(DL_PROC, (log(LL_DBG, "sigchild_handler: scheduling hangup for cdid %d, pid %d", - pid_tab[i].cep->cdid, pid_tab[i].pid))); - pid_tab[i].cep->hangup = 1; - } - pid_tab[i].pid = 0; - break; - } - } -} - -/*---------------------------------------------------------------------------* - * execute prog as a subprocess and pass an argumentlist - *---------------------------------------------------------------------------*/ -pid_t -exec_prog(char *prog, char **arglist) -{ - char tmp[MAXPATHLEN]; - char path[MAXPATHLEN+1]; - pid_t pid; - int a; - - sprintf(path, "%s/%s", ETCPATH, prog); - - arglist[0] = path; - - tmp[0] = '\0'; - - for(a=1; arglist[a] != NULL; ++a ) - { - strcat(tmp, " " ); - strcat(tmp, arglist[a]); - } - - DBGL(DL_PROC, (log(LL_DBG, "exec_prog: %s, args:%s", path, tmp))); - - switch(pid = fork()) - { - case -1: /* error */ - log(LL_ERR, "ERROR, exec_prog/fork: %s", strerror(errno)); - do_exit(1); - case 0: /* child */ - break; - default: /* parent */ - return(pid); - } - - /* this is the child now */ - - if(execvp(path,arglist) < 0 ) - _exit(127); - - return(-1); -} - -/*---------------------------------------------------------------------------* - * run interface up/down script - *---------------------------------------------------------------------------*/ -int -exec_connect_prog(cfg_entry_t *cep, const char *prog, int link_down) -{ - char *argv[32], **av = argv; - char devicename[MAXPATHLEN], addr[100]; - char *device; - int s; - struct ifreq ifr; - - /* the obvious things */ - device = bdrivername(cep->usrdevicename); - sprintf(devicename, "%s%d", device, cep->usrdeviceunit); - *av++ = (char*)prog; - *av++ = "-d"; - *av++ = devicename; - *av++ = "-f"; - *av++ = link_down ? "down" : "up"; - - /* try to figure AF_INET address of interface */ - addr[0] = '\0'; - memset(&ifr, 0, sizeof ifr); - ifr.ifr_addr.sa_family = AF_INET; - strncpy(ifr.ifr_name, devicename, sizeof(ifr.ifr_name)); - s = socket(AF_INET, SOCK_DGRAM, 0); - if (s >= 0) { - if (ioctl(s, SIOCGIFADDR, (caddr_t)&ifr) >= 0) { - struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr; - strcpy(addr, inet_ntoa(sin->sin_addr)); - *av++ = "-a"; - *av++ = addr; - } - close(s); - } - - /* terminate argv */ - *av++ = NULL; - - return exec_prog((char*)prog, argv); -} - -/*---------------------------------------------------------------------------* - * run answeringmachine application - *---------------------------------------------------------------------------*/ -int -exec_answer(cfg_entry_t *cep) -{ - char *argv[32]; - u_char devicename[MAXPATHLEN]; - int pid; - char *device; - - device = bdrivername(cep->usrdevicename); - - sprintf(devicename, "/dev/i4b%s%d", device, cep->usrdeviceunit); - - argv[0] = cep->answerprog; - argv[1] = "-D"; - argv[2] = devicename; - argv[3] = "-d"; - argv[4] = "unknown"; - argv[5] = "-s"; - argv[6] = "unknown"; - argv[7] = NULL; - - /* if destination telephone number avail, add it as argument */ - - if(*cep->local_phone_incoming) - argv[4] = cep->local_phone_incoming; - - /* if source telephone number avail, add it as argument */ - - if(*cep->real_phone_incoming) - argv[6] = cep->real_phone_incoming; - - if(*cep->display) - { - argv[7] = "-t"; - argv[8] = cep->display; - argv[9] = NULL; - } - - /* exec program */ - - DBGL(DL_PROC, (log(LL_DBG, "exec_answer: prog=[%s]", cep->answerprog))); - - pid = exec_prog(cep->answerprog, argv); - - /* enter pid and conf ptr entry addr into table */ - - if(pid != -1) - { - int i; - - for(i=0; i < MAX_PIDS; i++) - { - if(pid_tab[i].pid == 0) - { - pid_tab[i].pid = pid; - pid_tab[i].cep = cep; - break; - } - } - return(GOOD); - } - return(ERROR); -} - -/*---------------------------------------------------------------------------* - * check if a connection has an outstanding process, if yes, kill it - *---------------------------------------------------------------------------*/ -void -check_and_kill(cfg_entry_t *cep) -{ - int i; - - for(i=0; i < MAX_PIDS; i++) - { - if(pid_tab[i].cep == cep) - { - pid_t kp; - - DBGL(DL_PROC, (log(LL_DBG, "check_and_kill: killing pid %d", pid_tab[i].pid))); - - kp = pid_tab[i].pid; - pid_tab[i].pid = 0; - kill(kp, SIGHUP); - break; - } - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/fsm.c b/usr.sbin/i4b/isdnd/fsm.c deleted file mode 100644 index 13d57783cd9b7..0000000000000 --- a/usr.sbin/i4b/isdnd/fsm.c +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * FSM for isdnd - * ------------- - * - * $Id: fsm.c,v 1.15 1998/12/05 18:03:12 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:07:31 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -/* table of state descriptions */ - -static char *state_text[N_STATES] = { - "idle", - "dialing", - "waitdialretry", - "dialretry", - - "pcb-dialing", - "pcb-dialfail", - "pcb-waitcall", - - "acb-waitdisc", - "acb-waitdial", - "acb-dialing", - "acb-dialfail", - - "accepted", - "connected", - "waitdisconnect", - "down", - "alert", - - "Illegal State" -}; - -/* table of event descriptions */ - -static char *event_text[N_EVENTS] = { - - /* incoming messages */ - - "msg-con-ind", - "msg-con-act-ind", - "msg-disc-ind", - "msg-dialout", - - /* local events */ - - "timeout", - "disconnect-req", - "callback-req", - "alert-req", - - /* illegal */ - - "Illegal Event" -}; - -/*---------------------------------------------------------------------------* - * illegal state default action - *---------------------------------------------------------------------------*/ -static void -F_ill(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_ill: Illegal State reached !!!"))); -} - -/*---------------------------------------------------------------------------* - * No change, No action - *---------------------------------------------------------------------------*/ -static void -F_NcNa(cfg_entry_t *cep) -{ -} - -/*---------------------------------------------------------------------------* - * incoming CONNECT, accepting call - *---------------------------------------------------------------------------*/ -static void -F_MCI(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_MCI: tx SETUP_RESP_ACCEPT"))); - sendm_connect_resp(cep, cep->cdid, SETUP_RESP_ACCEPT, 0); - start_timer(cep, TIMEOUT_CONNECT_ACTIVE); -} - -/*---------------------------------------------------------------------------* - * incoming connect active, call is now active - *---------------------------------------------------------------------------*/ -static void -F_MCAI(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_MCAI: Connection active!"))); - - stop_timer(cep); - - if((cep->dialin_reaction == REACT_ANSWER) && - (cep->b1protocol == BPROT_NONE)) - { - exec_answer(cep); - } -} - -/*---------------------------------------------------------------------------* - * timeout - *---------------------------------------------------------------------------*/ -static void -F_TIMO(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_TIMO: Timout occured!"))); - sendm_disconnect_req(cep, (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); - cep->cdid = CDID_UNUSED; -} - -/*---------------------------------------------------------------------------* - * incoming disconnect indication - *---------------------------------------------------------------------------*/ -static void -F_IDIS(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_IDIS: disconnect indication"))); - cep->cdid = CDID_UNUSED; -} - -/*---------------------------------------------------------------------------* - * local disconnect request - *---------------------------------------------------------------------------*/ -static void -F_DRQ(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_DRQ: local disconnect request"))); - sendm_disconnect_req(cep, (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); -} - -/*---------------------------------------------------------------------------* - * disconnect indication after local disconnect req - *---------------------------------------------------------------------------*/ -static void -F_MDI(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_MDI: disconnect indication, local disconnected"))); - cep->cdid = CDID_UNUSED; -} - -/*---------------------------------------------------------------------------* - * local requested outgoing dial - *---------------------------------------------------------------------------*/ -static void -F_DIAL(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_DIAL: local dial out request"))); - - if(cep->dialrandincr) - cep->randomtime = (random() & RANDOM_MASK) + cep->recoverytime; - - cep->dial_count = 0; - - select_first_dialno(cep); - - sendm_connect_req(cep); -} - -/*---------------------------------------------------------------------------* - * outgoing dial successfull - *---------------------------------------------------------------------------*/ -static void -F_DOK(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_DOK: dial out ok"))); - select_this_dialno(cep); -} - -/*---------------------------------------------------------------------------* - * outgoing dial fail (ST_SUSE !!!) - *---------------------------------------------------------------------------*/ -static void -F_DFL(cfg_entry_t *cep) -{ - cep->last_release_time = time(NULL); - - if(cep->dialouttype == DIALOUT_NORMAL) - { - cep->dial_count++; - - if(cep->dial_count < cep->dialretries) - { - /* inside normal retry cycle */ - - DBGL(DL_STATE, (log(LL_DBG, "F_DFL: dial fail, dial retry"))); - select_next_dialno(cep); - cep->cdid = CDID_RESERVED; - cep->state = ST_DIALRTMRCHD; - return; - } - - /* retries exhausted */ - - if(!cep->usedown) - { - DBGL(DL_STATE, (log(LL_DBG, "F_DFL: dial retry fail, dial retries exhausted"))); - dialresponse(cep, DSTAT_TFAIL); - cep->cdid = CDID_UNUSED; - cep->dial_count = 0; - cep->state = ST_IDLE; - return; - } - - /* interface up/down active */ - - cep->down_retry_count++; - - if(cep->down_retry_count > cep->downtries) - { - /* set interface down */ - DBGL(DL_STATE, (log(LL_DBG, "F_DFL: dial retry cycle fail, setting interface down!"))); - dialresponse(cep, DSTAT_PFAIL); - if_down(cep); - cep->state = ST_DOWN; - } - else - { - /* enter new dial retry cycle */ - DBGL(DL_STATE, (log(LL_DBG, "F_DFL: dial retry cycle fail, enter new retry cycle!"))); - select_next_dialno(cep); - cep->state = ST_DIALRTMRCHD; - } - - cep->dial_count = 0; - cep->cdid = CDID_RESERVED; - } - else /* cdp->dialouttype == DIALOUT_CALLEDBACK */ - { - DBGL(DL_STATE, (log(LL_DBG, "F_DFL: calledback dial done, wait for incoming call"))); - cep->cdid = CDID_RESERVED; - cep->state = ST_PCB_WAITCALL; - } -} - -/*---------------------------------------------------------------------------* - * local requested outgoing dial - *---------------------------------------------------------------------------*/ -static void -F_ACBW(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_ACBW: local callback, wait callback recovery time"))); - - if(cep->dialrandincr) - cep->randomtime = (random() & RANDOM_MASK) + cep->recoverytime; - - cep->dial_count = 0; - - cep->cdid = CDID_RESERVED; -} - -/*---------------------------------------------------------------------------* - * active callback dialout retry (ST_SUSE !!!) - *---------------------------------------------------------------------------*/ -static void -F_ACBR(cfg_entry_t *cep) -{ - cep->dial_count++; - - if(cep->dial_count < cep->dialretries) - { - /* inside normal retry cycle */ - - DBGL(DL_STATE, (log(LL_DBG, "F_ACBR: dial fail, dial retry"))); - select_next_dialno(cep); - cep->cdid = CDID_RESERVED; - cep->state = ST_ACB_DIALFAIL; - return; - } - - /* retries exhausted */ - - if(!cep->usedown) - { - DBGL(DL_STATE, (log(LL_DBG, "F_ACBR: dial retry fail, dial retries exhausted"))); - dialresponse(cep, DSTAT_TFAIL); - cep->cdid = CDID_UNUSED; - cep->dial_count = 0; - cep->state = ST_IDLE; - return; - } - - /* interface up/down active */ - - cep->down_retry_count++; - - if(cep->down_retry_count > cep->downtries) - { - /* set interface down */ - DBGL(DL_STATE, (log(LL_DBG, "F_ACBR: dial retry cycle fail, setting interface down!"))); - dialresponse(cep, DSTAT_PFAIL); - if_down(cep); - cep->state = ST_DOWN; - } - else - { - /* enter new dial retry cycle */ - DBGL(DL_STATE, (log(LL_DBG, "F_ACBR: dial retry cycle fail, enter new retry cycle!"))); - select_next_dialno(cep); - cep->state = ST_ACB_DIALFAIL; - } - - cep->dial_count = 0; - cep->cdid = CDID_RESERVED; -} - -/*---------------------------------------------------------------------------* - * local requested to send ALERT message - *---------------------------------------------------------------------------*/ -static void -F_ALRT(cfg_entry_t *cep) -{ - DBGL(DL_STATE, (log(LL_DBG, "F_ALRT: local send alert request"))); - - cep->alert_time = cep->alert; - - sendm_alert_req(cep); -} - -/*---------------------------------------------------------------------------* - * isdn daemon state transition table - *---------------------------------------------------------------------------*/ -struct state_tab { - void(*func)(cfg_entry_t *cep); /* function to execute */ - int newstate; /* next state */ -} state_tab[N_EVENTS][N_STATES] = { - -/* STATE: ST_IDLE ST_DIAL ST_DIALRTMRCHD ST_DIALRETRY ST_PCB_DIAL ST_PCB_DIALFAIL ST_PCB_WAITCALL ST_ACB_WAITDISC ST_ACB_WAITDIAL ST_ACB_DIAL ST_ACB_DIALFAIL ST_ACCEPTED ST_CONNECTED ST_WAITDISCI ST_DOWN ST_ALERT ST_ILLEGAL */ -/* -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ -/* messages */ -/* EV_MCI */{{F_MCI, ST_ACCEPTED}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_MCI, ST_ACCEPTED}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_MCI, ST_ACCEPTED}, {F_ill, ST_ILL}}, -/* EV_MCAI */{{F_ill, ST_ILL}, {F_DOK, ST_CONNECTED}, {F_ill, ST_ILL}, {F_DOK, ST_CONNECTED}, {F_DOK, ST_CONNECTED}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_DOK, ST_CONNECTED}, {F_ill, ST_ILL}, {F_MCAI,ST_CONNECTED}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, -/* EV_MDI */{{F_ill, ST_ILL}, {F_DFL, ST_SUSE}, {F_ill, ST_ILL}, {F_DFL, ST_SUSE}, {F_DFL, ST_SUSE}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ACBW,ST_ACB_WAITDIAL},{F_ill, ST_ILL}, {F_ACBR, ST_SUSE}, {F_ACBR,ST_SUSE}, {F_IDIS,ST_IDLE}, {F_IDIS,ST_IDLE}, {F_MDI, ST_IDLE}, {F_ill, ST_ILL}, {F_MDI, ST_IDLE}, {F_ill, ST_ILL}}, -/* EV_MDO */{{F_DIAL,ST_DIAL}, {F_NcNa,ST_DIAL}, {F_NcNa,ST_DIALRTMRCHD},{F_NcNa,ST_DIALRETRY}, {F_NcNa,ST_PCB_DIAL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, - -/* local requests */ -/* EV_TIMO */{{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_TIMO,ST_IDLE}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, -/* EV_DRQ */{{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_DRQ, ST_WAITDISCI}, {F_NcNa,ST_WAITDISCI}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, -/* EV_CBRQ */{{F_NcNa,ST_ACB_WAITDIAL},{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_NcNa,ST_ACB_WAITDIAL},{F_NcNa, ST_ACB_DIAL}, {F_NcNa,ST_ACB_DIALFAIL},{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, -/* EV_ALRT */{{F_ALRT,ST_ALERT}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}, - -/* illegal */ - -/* EV_ILL */{{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}} -}; - -/*---------------------------------------------------------------------------* - * event handler - *---------------------------------------------------------------------------*/ -void -next_state(cfg_entry_t *cep, int event) -{ - int currstate, newstate; - - if(event > N_EVENTS) - { - log(LL_ERR, "FSM: event > N_EVENTS"); - do_exit(1); - } - - currstate = cep->state; - - if(currstate > N_STATES) - { - log(LL_ERR, "FSM: currstate > N_STATES"); - do_exit(1); - } - - newstate = state_tab[event][currstate].newstate; - - if(newstate > N_STATES) - { - log(LL_ERR, "FSM: newstate > N_STATES"); - do_exit(1); - } - - if(newstate != ST_SUSE) - { - DBGL(DL_STATE, (log(LL_DBG, "FSM event [%s]: [%s => %s]", event_text[event], - state_text[currstate], - state_text[newstate]))); - } - - (*state_tab[event][currstate].func)(cep); - - if(newstate == ST_ILL) - { - log(LL_ERR, "FSM ILLEGAL STATE, event=%s: oldstate=%s => newstate=%s]", - event_text[event], - state_text[currstate], - state_text[newstate]); - } - - if(newstate == ST_SUSE) - { - DBGL(DL_STATE, (log(LL_DBG, "FSM (SUSE) event [%s]: [%s => %s]", event_text[event], - state_text[currstate], - state_text[cep->state]))); - } - else - { - cep->state = newstate; - } -} - -/*---------------------------------------------------------------------------* - * return pointer to current state description - *---------------------------------------------------------------------------*/ -char * -printstate(cfg_entry_t *cep) -{ - return((char *) state_text[cep->state]); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/isdnd.8 b/usr.sbin/i4b/isdnd/isdnd.8 deleted file mode 100644 index 9913487e1a648..0000000000000 --- a/usr.sbin/i4b/isdnd/isdnd.8 +++ /dev/null @@ -1,419 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdnd.8,v 1.20 1998/12/18 09:47:09 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 12 21:13:59 1998] -.\" -.Dd November 3, 1998 -.Dt isdnd 8 -.Sh NAME -.Nm isdnd -.Nd isdn4bsd ISDN connection management daemon -.Sh SYNOPSIS -.Nm isdnd -.Op Fl b -.Op Fl c Ar configfile -.Op Fl d Ar debuglevel -.Op Fl f -.Op Fl F -.Op Fl l -.Op Fl L Ar logfile -.Op Fl P -.Op Fl r Ar device -.Op Fl s Ar facility -.Op Fl t Ar terminaltype -.Op Fl u Ar charging unit length -.Op Fl m -.Sh DESCRIPTION -.Nm Isdnd -is the isdn4bsd package demon which manages all ISDN related connection -and disconnection of ISDN devices supported by the package. -.Pp -The options are as follows: -.Bl -tag -width Ds -.It Fl b -Bell: in full-screen mode, ring the bell when connecting -or disconnecting a call. -.It Fl c -Use -.Ar configfile -as the name of the runtime configuration filename for -.Nm isdnd -instead of the default file -.Li /etc/isdn/isdnd.rc . -.It Fl d -If debugging support is compiled into -.Nm isdnd -this option is used to specify the debugging level, or better which kind -of debugging messages are displayed. The debugging level is the sum of the -following values: -.Pp -.Bl -tag -width Ds -compact -offset indent -.It Ar 0x001 -general debugging. -.It Ar 0x002 -rates calculation. -.It Ar 0x004 -timing calculations. -.It Ar 0x008 -state transitions. -.It Ar 0x010 -retry handling. -.It Ar 0x020 -dialing. -.It Ar 0x040 -process handling. -.It Ar 0x080 -isdn4bsd kernel i/o calls. -.It Ar 0x100 -controller and channel busy/free messages. -.El -.Pp -The value can be specified in any number base supported by the -.Xr sscanf 3 -library routine. -.Pp -In addition, this option accepts also the character 'n' as an argument to -disable displaying debug messages on the full-screen display. -.Pp -.It Fl f -Specifying this option causes -.Nm isdnd -to enter the full-screen mode of operation. When operating in this mode, -entering the control character -.Em Control-L -causes the display to be refreshed and entering -.Em Carriage-Return -or -.Em Enter -will pop-up a command window. Because the -.Nm -daemon will not listen to messages while the command window is active, -this command window will disappear automatically after 5 seconds without -any command key press. -.Pp -While the command window is active, -.Em Tab -or -.Em Space -advances to the next menu item. To execute a command, press -.Em Return -or -.Em Enter -for the highlighted menu item, or enter the number corresponding to the -item to be executed or enter the capitalized character in the menu item -description. -.It Fl l -If this option is set, logging is not done via the -.Xr syslogd 8 -facility but instead is appended to a file. -.It Fl L -Specifies the name of the logfile which is used when the option -.Em -l -is set. -.It Fl P -This option prints out the parsed and verified isdnd configuration in the same -format as the isdnd.rc file. This output can be used as an isdnd.rc file. This -feature is especially useful when debugging an isdnd.rc file to see, what the -default settings of options are when they are not set in the isdnd.rc input -file. -.Pp -The -.Nm -exits after the printout is done. -.It Fl F -This option prevents -.Nm isdnd -to detach from the controlling tty and become a daemon. -.It Fl r -In conjunction with the -.Fl t -option, -.Ar device -specifies a terminal device which becomes the controlling tty for -.Nm isdnd -and on which the full-screen mode output is displayed. -.It Fl s -This option may be used to specify the logging facility in case -.Xr syslog 3 -logging is configured and another facility than the default LOCAL0 -facility shall be used. The facility is to be specified as an integer in -the range 0-11 or 16-23 (see the file /usr/include/syslog.h). -.It Fl t -In conjunction with the -.Fl f -and -.Fl r -options, -.Ar terminaltype -specifies a terminal type or termcap entry name (such as vt220) for the device -used for -.Nm isdnd -full-screen output. This is useful if an unused (no getty running) tty line is -used for full-screen output for which no -.Li TERM -environment variable exists. -.It Fl u -Specifies the length of a charging unit in case the config file entry -keyword -.Em unitlenghtsrc -is set to -.Em cmdl . -.It Fl m -If the isdn daemon is compiled with local or remote monitoring support, -this option disables all monitoring access. It overrides the config -file option -.Em monitor-allowed . -.El -.Pp -.Sh INTERACTION WITH THE KERNEL -.Nm Isdnd -communicates with the kernel part of isdn4bsd by receiving status and -event messages ( -.Xr read 2 -from device /dev/i4b ) and by transmitting commands and responses ( -.Xr ioctl 2 -from device /dev/i4b ). -.Pp -The messages and message parameters are documented in the include -file -.Em /usr/include/machine/i4b_ioctl.h . -.Pp -Supported command and response messages (ioctl's) to the kernel are: -.Bl -tag -width Ds -compact -offset indent -.It Ar I4B_CDID_REQ -Request a unique Call Description IDentifier (cdid) which identifies -uniquely a single interaction of the local D channel with the exchange. -.It Ar I4B_CONNECT_REQ -Actively request a call setup to a remote ISDN subscriber. -.It Ar I4B_CONNECT_RESP -Respond to an incoming call, either accept, reject or ignore it. -.It Ar I4B_DISCONNECT_REQ -Actively terminate a connection. -.It Ar I4B_CTRL_INFO_REQ -Request information about an installed ISDN controller card. -.It Ar I4B_DIALOUT_RESP -Give information about call setup to driver who requested dialing out. -.It Ar I4B_TIMEOUT_UPD -Update the kernels timeout value(s) in case of dynamically calculated -shorthold mode timing changes. -.It Ar I4B_UPDOWN_IND -Inform the kernel userland drivers about interface soft up/down status -changes. -.It Ar I4B_CTRL_DOWNLOAD -Download firmware to active card(s). -.It Ar I4B_ACTIVE_DIAGNOSTIC -Return diagnostic information from active cards. -.El -.Pp -.Pp -Supported status and event messages from the kernel are: -.Bl -tag -width Ds -compact -offset indent -.It Ar MSG_CONNECT_IND -An incoming call from a remote ISDN user is indicated. -.It Ar MSG_CONNECT_ACTIVE_IND -After an incoming call has been accepted locally or an outgoing call has -been accepted by a remote, the exchange signaled an active connection -and the corresponding B-channel is switched through. -.It Ar MSG_DISCONNECT_IND -A call was terminated. -.It Ar MSG_DIALOUT_IND -A userland interface driver requests the daemon to dial out (typically a -network interface when a packet arrives in its send queue). -.It Ar MSG_IDLE_TIMEOUT_IND -A call was terminated by the isdn4bsd kernel driver because a B-channel -idle timeout occurred. -.It Ar MSG_ACCT_IND -Accounting information from a network driver. -.It Ar MSG_CHARGING_IND -Charging information from the kernel. -.El -.Pp -.Ss OUTGOING CALLS -Currently the only possibility to trigger an outgoing call is that an -isdn4bsd network driver -.Em (ipr<n>) -sends a -.Em MSG_DIALOUT_IND -to the -.Nm -daemon. -.Pp -The daemon requests a new CDID from the kernel by using the -.Em I4B_CDID_REQ -ioctl message, this CDID is now used in all interactions with the kernel -to identify this single call until a disconnect occurs. -.Pp -After getting the CDID, the daemon looks up several additional information -in its entry section of the configuration corresponding to that connection -and issues a -.Em I4B_CONNECT_REQ -ioctl message to the kernel. The kernel now dials the remote side and -if the remote side accepts the call, the kernel sends a -.Em MSG_CONNECT_ACTIVE_IND -to the daemon. -.Pp -The call is terminated by either the local site timing out or the remote -side hanging up the connection or the local side actively sending a -.Em DISCONNECT_REQ -ioctl message, both events are signaled to the -.Nm -by the kernel sending the -.Em DISCONNECT_IND -message and the CDID corresponding to the call is no longer valid. -.Pp -.Ss INCOMING CALLS -Incoming calls are signaled to the -.Nm -by the kernel transmitting the -.Em MSG_CONNECT_IND -message to the daemon. -.Pp -With the information contained in this message, the -.Nm -searches the entry section of its configuration database and if a match is -found, it accepts or rejects the call or, of no match is found, it ignores the -call - all by issuing a -.Em I4B_CONNECT_RESP -ioctl message with the appropriate parameters to the kernel. -.Pp -In case the daemon decided to accept the message, the kernel signal the then -active connection by sending a -.Em MSG_CONNECT_ACTIVE_IND -message to the daemon. -.Pp -The call is terminated by either the local site timing out or the remote -side hanging up the connection or the local side actively sending a -.Em DISCONNECT_REQ -ioctl message, both events are signaled to the -.Nm -by the kernel sending the -.Em DISCONNECT_IND -message and the CDID corresponding to the call is no longer valid. -.Pp - -.Sh SIGNALS - -Sending a HUP signal to -.Nm -causes all open connections to be terminated and the configuration file is -reread. In case aliasfile handling was enabled, the aliasfile is also -reread. - -Sending a USR1 signal to -.Nm -causes the accounting file and the logfile (if logging to a file is used -instead of logging via the -.Xr syslog 3 -facility) to be closed and reopened to make logfile rotation possible. - -.Sh ENVIRONMENT -The following environment variables affect the execution of -.Nm isdnd : -.Bl -tag -width Ds -.It Ev TERM -The terminal type when running in full-screen display mode. -See -.Xr environ 7 -for more information. -.El - -.Sh FILES -.Bl -tag -width /etc/isdn/isdnd.rates -compact -.It Pa /dev/i4b -The device-file used to communicate with the kernel ISDN driver subsystem. - -.It Pa /var/log/messages -A record of the actions in case of syslogd logging support. - -.It Pa /var/log/isdnd.acct -The default accounting information filename (if accounting is configured). - -.It Pa /var/log/isdnd.log -The default logging filename (if logging to a file is configured). - -.It Pa /var/run/isdnd.pid -The process id of the isdn daemon (also known as "lockfile" to isdnd, preventing multiple invocations of it). - -.It Pa /usr/local/lib/isdn -.It Pa /etc/isdn -The directory where isdnd expects some supplementary data files and programs -for telephone answering support. - -.It Pa /etc/isdn/isdnd.rc -The default runtime configuration file. - -.It Pa /etc/isdn/isdnd.rates -The default unit charging rates specification file. - -.It Pa /etc/isdn/isdntel.alias -The default table (if aliasing is enabled) to convert phone number to caller's name. -.El - -.Sh EXAMPLES -For a first try, the following command should be used to start -.Nm -in foreground mode for better debugging the configuration setup: -.Bd -literal -offset indent -isdnd -d0xf9 -F -.Ed -.Pp -This will start isdnd with reasonable debugging settings and produce -output on the current terminal. -.Nm Isdnd -can then be terminated by entering Control-C. -.Pp -Another example, the command: -.Bd -literal -offset indent -isdnd -d0xf9 -f -r /dev/ttyv3 -t vt100 -.Ed -.Pp -will start -.Nm isdnd -with reasonable debugging messages enabled, full-screen mode of operation, -full-screen display redirected to /dev/ttyv03 and using a termcap entry -for vt100 on this display. - -.Sh DIAGNOSTICS -Exit status is 0 on success, 1 on error. -.Pp - -.Sh SEE ALSO -.Xr syslogd 8 , -.Xr isdntrace 8 , -.Xr isdntel 8 , -.Xr isdnd.rc 5 , -.Xr isdnd.rates 5 , -.Xr i4bisppp 4 , -.Xr i4bipr 4 - -.Sh BUGS -Still one or more left. - -.Sh AUTHOR -The -.Nm -daemon and this manual page were written by Hellmuth Michaelis. He can -be contacted at hm@kts.org or hm@hcs.de. diff --git a/usr.sbin/i4b/isdnd/isdnd.acct.5 b/usr.sbin/i4b/isdnd/isdnd.acct.5 deleted file mode 100644 index 9329e80c87309..0000000000000 --- a/usr.sbin/i4b/isdnd/isdnd.acct.5 +++ /dev/null @@ -1,108 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdnd.acct.5,v 1.6 1998/12/05 18:03:18 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:09:33 1998] -.\" -.Dd September 11, 1998 -.Dt isdnd.acct 5 -.Sh NAME -.Nm isdnd.acct -.Nd isdn4bsd ISDN management daemon accounting file format -.Sh DESCRIPTION -The file -.Pa isdnd.acct -contains accounting information which is written if the variable -.Em useacctfile -in the -.Xr isdnd 8 -configuration file -.Xr isdnd.rc 5 -is set to -.Em on -and charging information transmission has been subscribed for the -ISDN connection (AOCD or AOCE). -.Pp -If the variable -.Em acctall -is set to -.Em on , -accounting information is written even if the local site was not charged -or no charging information is available or is not subscribed. -.Pp -The general format of an accounting line is a follows: -.Pp -.Dl FROM - UNTIL NAME UNITS (SECONDS) (INBYTES/OUTBYTES) -.Pp -.Em FROM -is the time the connection was established in the format -.Dl Day:Month:Year Hour:Minutes:seconds -.Pp -.Em UNTIL -is the time the connection was closed. The format is the same as -described for -.Em FROM -above. -.Pp -.Em NAME -is the symbolic name got from the -.Em name -entry of the -.Xr isdnd.rc 5 -config file for this connection. -.Pp -.Em UNITS -is the amount of charging units billed for the connection. -.Pp -.Em SECONDS -is the number of seconds the connection lasted. -.Pp -.Em INBYTES -and -.Em OUTBYTES -is the (optional) number of bytes that were transferred. - -.Sh FILES -.Bl -tag -width /var/log/isdnd.acct -compact -.It Pa /var/log/isdnd.acct -The default accounting information file for the -.Nm isdnd -ISDN daemon. - -.Sh EXAMPLES -This is a typical accounting line: -.Pp -.Dl 12.06.97 10:41:37 - 12.06.97 10:45:18 GROGGY 2 (65) (4711/1147) - -.Sh SEE ALSO -.Xr isdnd 8 , -.Xr isdnd.rc 5 - -.Sh AUTHOR -The -.Xr isdnd 8 -daemon and this manual page were written by Hellmuth Michaelis. -He can be contacted at hm@kts.org or hm@hcs.de. - diff --git a/usr.sbin/i4b/isdnd/isdnd.h b/usr.sbin/i4b/isdnd/isdnd.h deleted file mode 100644 index 009a2dde10f56..0000000000000 --- a/usr.sbin/i4b/isdnd/isdnd.h +++ /dev/null @@ -1,754 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - main header file - * ----------------------------- - * - * $Id: isdnd.h,v 1.56 1998/12/16 13:39:46 hm Exp $ - * - * last edit-date: [Mon Dec 14 10:06:39 1998] - * - *---------------------------------------------------------------------------*/ - -#ifndef _ISDND_H_ -#define _ISDND_H_ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <strings.h> -#include <ctype.h> -#include <syslog.h> -#include <regex.h> - -#ifdef USE_CURSES -#include <curses.h> -#endif - -#include <fcntl.h> -#include <errno.h> -#include <signal.h> - -#include <sys/param.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/ioctl.h> - -#ifdef USE_RTPRIO -#include <sys/rtprio.h> -#endif - -#include <machine/i4b_ioctl.h> -#include <machine/i4b_cause.h> - -#include "config.h" /* compile time configuration */ -#include "pathnames.h" /* location of files */ -#include "alias.h" /* alias file processing */ - -/*---------------------------------------------------------------------------* - * some general definitions - *---------------------------------------------------------------------------*/ -#define GOOD 0 /* general "good" or "ok" return*/ -#define ERROR (-1) /* general error return */ -#define WARNING (-2) /* warning return */ -#define INVALID (-1) /* an invalid integer */ - -/*---------------------------------------------------------------------------* - * misc - *---------------------------------------------------------------------------*/ -#define RTPRIO_NOTUSED (-1) /* rtprio is not used for isdnd */ - -/*---------------------------------------------------------------------------* - * debug flag bits - *---------------------------------------------------------------------------*/ -#define DL_MSG 0x0001 /* general debug messages */ -#define DL_RATES 0x0002 /* messages related to rates */ -#define DL_TIME 0x0004 /* messages related to timing */ -#define DL_STATE 0x0008 /* messages related to states changes */ -#define DL_RCVRY 0x0010 /* messages related to dial recovery */ -#define DL_DIAL 0x0020 /* messages related to dial recovery */ -#define DL_PROC 0x0040 /* messages related to process handling */ -#define DL_DRVR 0x0080 /* messages related to kernel i4b msg i/o*/ -#define DL_CNST 0x0100 /* messages related to controller state */ - -#ifdef DEBUG -#define DBGL(cond, dolog) if(cond & debug_flags) dolog -#else -#define DBGL(cond, dolog) -#endif - -/*---------------------------------------------------------------------------* - * curses fullscreen display definitions - *---------------------------------------------------------------------------*/ - -/* window dimensions */ -#define UPPER_B 2 /* upper window start */ - -/* horizontal positions for upper window */ -#define H_CNTL 0 /* controller */ -#define H_TEI 2 /* TEI */ -#define H_CHAN (H_TEI+4) /* channel */ -#define H_TELN (H_CHAN+2) /* telephone number */ -#define H_IFN (H_TELN+23) /* interfacename */ -#define H_IO (H_IFN+7) /* incoming or outgoing */ -#define H_OUT (H_IO+4) /* # of bytes out */ -#define H_OUTBPS (H_OUT+11) /* bytes per second out */ -#define H_IN (H_OUTBPS+5) /* # of bytes in */ -#define H_INBPS (H_IN+11) /* bytes per second in */ -#define H_UNITS (H_INBPS+6) /* # of charging units */ - -/* fullscreen mode menu window */ -#define WMENU_LEN 35 /* width of menu window */ -#define WMENU_TITLE "Command" /* title string */ -#define WMENU_POSLN 10 /* menu position, line */ -#define WMENU_POSCO 5 /* menu position, col */ -#define WMITEMS 4 /* no of menu items */ -#define WMENU_HGT (WMITEMS + 4) /* menu window height */ - -#define WREFRESH 0 -#define WHANGUP 1 -#define WREREAD 2 -#define WQUIT 3 - -#define WMTIMEOUT 5 /* timeout in seconds */ - -/*---------------------------------------------------------------------------* - * charging rates - *---------------------------------------------------------------------------*/ -#define NDAYS 7 /* number of days in a week */ -#define NRATES 4 /* number of rate structures supported */ - -/* struct for rates - each day has one or more */ -struct rates -{ - int start_hr; /* hour at which this rate starts, e.g. 12 */ - int start_min; /* minute of start ... */ - int end_hr; /* hour at which this rate ends, e.g. 19 */ - int end_min; /* minute of end ... */ - int rate; /* how long can I telephone at this price, seconds */ - struct rates *next; -}; - -/*---------------------------------------------------------------------------* - * the internal identifiers for isdnd log levels. CAUTION: this has to stay - * in sync with the loglevel to text and sysloglevel table in log.c !! - *---------------------------------------------------------------------------*/ -enum logids -{ - LL_ERR, /* error conditions - everything which caused an error */ - LL_WRN, /* warning conditions - nonfatal abnormal conditions */ - LL_DMN, /* normal but significant condition - status of daemon */ - LL_CHD, /* informational - everything regarding call handling */ - LL_DBG /* debug messages - everything which helps debugging */ -}; - -/*---------------------------------------------------------------------------* - * state machine events - *---------------------------------------------------------------------------*/ -enum events -{ - /* incoming messages */ - - EV_MCI, /* MSG_CONNECT_IND */ - EV_MCAI, /* MSG_CONNECT_ACTIVE_IND */ - EV_MDI, /* MSG_DISCONNECT_IND */ - EV_MDO, /* MSG_DIALOUT */ - - /* local requests */ - - EV_TIMO, /* timer expired */ - EV_DRQ, /* disconnect request */ - EV_CBRQ, /* callback request */ - EV_ALRT, /* alerting request */ - - /* illegal */ - - EV_ILL /* illegal event */ -}; - -#define N_EVENTS (EV_ILL+1) /* no of possible events */ - -/*---------------------------------------------------------------------------* - * this struct describes the numbers to try to dial out - *---------------------------------------------------------------------------*/ -typedef struct { - char number[TELNO_MAX]; /* remote number to dial */ - int flag; /* usage flag */ -#define RNF_IDLE 0 -#define RNF_SUCC 1 /* last dial was ok */ -} remote_number_t; - -/*---------------------------------------------------------------------------* - * this struct describes numbers allowed to dial in - *---------------------------------------------------------------------------*/ -typedef struct { - char number[TELNO_MAX]; /* calling party number */ -} incoming_number_t; - -/*---------------------------------------------------------------------------* - * this structure describes a prematurely aborted called-back dialout - *---------------------------------------------------------------------------*/ -typedef struct { - int cdid; /* call handle */ - int controller; /* the controller used to dial out */ - int channel; /* the channel assigned to the outgoing call */ - /* XXX - timeout handling and error recovery? */ -} phantom_t; - -/*---------------------------------------------------------------------------* - * this struct describes one complete configuration entry - *---------------------------------------------------------------------------*/ -typedef struct cfg_entry { - - /* ====== filled in at startup configuration, then static ===========*/ - - char name[32]; /* id for this entry */ - - int isdncontroller; /* controller to use 0 ... n */ - int isdnchannel; /* channel to use */ - - int isdntxdelin; /* tx delay, incoming connections */ - int isdntxdelout; /* tx delay, outgoing connections */ - - int usrdevicename; /* userland device to use */ - int usrdeviceunit; /* userland unit to use */ - - int remote_numbers_count; /* number of remote numbers */ -#define MAXRNUMBERS 8 /* max remote numbers */ - - remote_number_t remote_numbers[MAXRNUMBERS]; /* remote numbers to dial */ - - int remote_numbers_handling; /* how to handle the remote dialing */ -#define RNH_NEXT 0 /* use next number after last successfull */ -#define RNH_LAST 1 /* use last successfull for next call */ -#define RNH_FIRST 2 /* always use first number for next call */ - - char local_phone_dialout[TELNO_MAX]; /* our number to tell remote*/ - char local_phone_incoming[TELNO_MAX]; /* answer calls for this local number */ - -#define MAX_INCOMING 8 - int incoming_numbers_count; /* number of incoming allowed numbers */ - incoming_number_t remote_phone_incoming[MAX_INCOMING]; /* answer calls from this remote machine */ - - int dialin_reaction; /* what to do with incoming calls */ -#define REACT_ACCEPT 0 -#define REACT_REJECT 1 -#define REACT_IGNORE 2 -#define REACT_ANSWER 3 -#define REACT_CALLBACK 4 - - int b1protocol; /* hdlc / raw */ - - int idle_time_in; /* max idle time incoming calls */ - int idle_time_out; /* max idle time outgoing calls */ - - int unitlength; /* length of a charging unit */ -#define UNITLENGTH_DEFAULT 60 /* last resort unit length */ - - int earlyhangup; /* time in seconds to hangup */ - /* before the next expected */ - /* charging unit */ -#define EARLYHANGUP_DEFAULT 5 - - int ratetype; /* type of rate */ -#define NO_RATE (NRATES+1) -#define INVALID_RATE (-1) - - int unitlengthsrc; /* where we get the unit length from */ -#define ULSRC_NONE 0 /* nowhere specified */ -#define ULSRC_CMDL 1 /* specified on commandline */ -#define ULSRC_CMDLMIN 5 /* minimum value from cmdl */ -#define ULSRC_CMDLMAX 3600 /* minimum value from cmdl */ -#define ULSRC_CONF 2 /* get it from config file */ -#define ULSRC_RATE 3 /* get it dynamic from ratesfile*/ -#define ULSRC_DYN 4 /* dynamic calculated from AOCD */ - - char *answerprog; /* program to use for answering */ - char *connectprog; /* program run after negotiation finished */ - char *disconnectprog; /* program run after shutdown is complete */ - - int callbackwait; /* time to wait before calling back */ -#define CALLBACKWAIT_MIN 1 - - int calledbackwait; /* time to wait for remote callback */ -#define CALLEDBACKWAIT_MIN 2 - - int dialretries; /* no. of dial tries */ -#define DIALRETRIES_DEF 1 - - int recoverytime; /* time between 2 dial tries */ -#define RECOVERYTIME_MIN 1 - - int dialrandincr; /* use random dial time incr */ - - int usedown; /* set interface down yes/no */ - int downtries; /* retries before i/f is set down */ -#define DOWN_TRIES_MIN 2 -#define DOWN_TRIES_MAX 20 - int downtime; /* time i/f is down */ -#define DOWN_TIME_MIN 10 /* 10 seconds */ -#define DOWN_TIME_MAX 3600 /* 1 hour */ - - int dialouttype; /* type of outgoing connection */ -#define DIALOUT_NORMAL 0 /* normal dialout behaviour */ -#define DIALOUT_CALLEDBACK 1 /* remote is expected to callback */ - - int alert; /* alert time in sec if nonzero */ -#define MINALERT 5 /* 5 secs min */ -#define MAXALERT (3*60) /* 3 minutes max */ - - int inout; /* in/out, in-only or out-only */ -#define DIR_INOUT 0 -#define DIR_INONLY 1 -#define DIR_OUTONLY 2 - -/*===========================================================================*/ -/*============ filled in after start, then dynamic ==========================*/ -/*===========================================================================*/ - - int cdid; /* cdid for call */ -#define CDID_RESERVED (-1) - - int isdncontrollerused; /* the one we are using */ - int isdnchannelused; /* the one we are using */ - - int fs_position; /* fullscreen position */ - - int state; /* state of connection */ -#define ST_IDLE 0 /* connection is idle / disconnected */ - - /* normal dial out to remote */ -#define ST_DIAL 1 /* dialing */ -#define ST_DIALRTMRCHD 2 /* wait for dial retry time reached */ -#define ST_DIALRETRY 3 /* last/first dialing failed, retry */ - - /* PCB: passive callback, i'm being called back */ -#define ST_PCB_DIAL 4 /* dialing, trigger a callback */ -#define ST_PCB_DIALFAIL 5 /* dialing failed triggering a callbk */ -#define ST_PCB_WAITCALL 6 /* waiting for callback from remote */ - - /* ACB: active callback, i'm calling back */ -#define ST_ACB_WAITDISC 7 /* got call, wait for disconnect */ -#define ST_ACB_WAITDIAL 8 /* wait until allowed to callback */ -#define ST_ACB_DIAL 9 /* callback to remote */ -#define ST_ACB_DIALFAIL 10 /* callback to remote failed */ - - /* normal non-dialling states */ -#define ST_ACCEPTED 11 /* remote accepted */ -#define ST_CONNECTED 12 /* connected with remote */ -#define ST_WAITDISCI 13 /* tx disc req, wait for disc ind */ -#define ST_DOWN 14 /* interface is down */ -#define ST_ALERT 15 /* interface is waiting for alert time*/ - - /* illegal and pseudo states */ -#define ST_ILL 16 /* illegal state */ -#define ST_SUSE 17 /* subroutine sets new state */ - -#define N_STATES (ST_ILL+1) /* max number of states */ - - int disc_cause; /* cause from disconnect */ - - int local_disconnect; /* flag, who disconnected */ -#define DISCON_LOC 0 -#define DISCON_REM 1 - - int timerval; /* value for timer, 0 if inactive */ - int timerremain; /* remaining time */ - - int hangup; /* flag, hangup connection asap */ - - char real_phone_incoming[TELNO_MAX]; /* real remote telno in case of wildcard */ - - int last_remote_number; /* index of last used dialout number*/ - - char remote_phone_dialout[TELNO_MAX]; /* used remote number to dial */ - - int direction; /* incoming or outgoing */ -#define DIR_IN 0 -#define DIR_OUT 1 - - int charge; /* charge in units */ - int last_charge; /* last charge in units */ - - int inbytes; /* # of bytes from remote */ - int iinbytes; /* # of bytes from remote on the line */ - int inbps; /* bytes/sec from remote */ - int outbytes; /* # of bytes to remote */ - int ioutbytes; /* # of bytes to remote on the line */ - int outbps; /* bytes/sec to remote */ - - time_t connect_time; /* time connection was established */ - - time_t aoc_last; /* last AOCD timestamp */ - time_t aoc_now; /* current AOCD timestamp */ - time_t aoc_diff; /* current unit length */ - time_t aoc_lastdiff; /* last charge unit length */ - int aoc_valid; /* flag: time diff is valid */ -#define AOC_INVALID 0 /* aoc_diff is NOT valid */ -#define AOC_VALID 1 /* aoc_diff is valid */ - - time_t last_dial_time; /* time of last dialing */ - time_t last_release_time; /* time of last hangup */ - - int dial_count; /* number of dialout tries */ - int randomtime; /* random() part of recoverytime*/ -#define RANDOM_MASK 0x04 /* bits used from randomtime */ - - int down_retry_count; /* retry cycle count for usedown*/ - time_t went_down_time; /* time i/f went down */ - phantom_t saved_call; /* outgoing call state if called - back too early */ - - int alert_time; /* count down of alert time */ - char display[DISPLAY_MAX]; -} cfg_entry_t; - -/*---------------------------------------------------------------------------* - * this struct describes state of controller with 2 b channels - *---------------------------------------------------------------------------*/ -typedef struct isdn_ctrl_state { - int ctrl_type; /* type: active/passive */ - int card_type; /* manufacturer (CARD_XXXX) */ - int state; /* controller state */ -#define CTRL_DOWN 0 /* controller inoparable */ -#define CTRL_UP 1 /* controller may be used */ - int stateb1; /* B-channel 1 */ - int stateb2; /* B-channel 2 */ -#define CHAN_IDLE 0 /* channel is free for usage */ -#define CHAN_RUN 1 /* channel is occupied */ - int freechans; /* number of unused channels */ -#define MAX_CHANCTRL 2 /* free channels per controller */ - int tei; /* tei or -1 if invalid */ -} isdn_ctrl_state_t; - -/*---------------------------------------------------------------------------* - * this struct describes a logging regular expression - *---------------------------------------------------------------------------*/ -struct rarr { - int re_flg; /* valid entry flag */ - char *re_expr; /* plain text expression */ - regex_t re; /* compiled expression */ - char *re_prog; /* the program to be executed */ -}; - -#ifdef I4B_EXTERNAL_MONITOR -/* for each rights entry we keep one of this structures around: */ -struct monitor_rights { - char name[FILENAME_MAX]; /* net/host spec or filename */ - int rights; /* bitmask of allowed acces rights */ - u_int32_t net; /* net/host address (host byte order!) */ - u_int32_t mask; /* bitmask 1 = network, 0 = host (host byte order!) */ - int local; /* zero if remote access via tcp/ip */ -}; -#endif - -/*---------------------------------------------------------------------------* - * global variables, storage allocation - *---------------------------------------------------------------------------*/ -#ifdef MAIN - -int isdnfd; /* file handle, /dev/i4b */ - -char *configfile = CONFIG_FILE_DEF; /* configuration filename */ -int config_error_flag = 0; /* error counter */ - -#ifdef DEBUG -int do_debug = 0; /* debug mode flag */ -int debug_flags = 0; /* debug options */ -int debug_noscreen = 0; /* not on fullscreen */ -#endif - -int do_bell = 0; /* bell on connect/disconnect */ - -int do_fork = 1; /* run as daemon/foreground */ - -int do_ttytype = 0; /* got new terminal type */ -char *ttype = ""; /* termcap entry name string */ - -int do_rdev = 0; /* redirect output */ -char *rdev = ""; /* new device string */ - -int do_print = 0; /* config file printout */ - -int got_unitlen = 0; /* flag, got length of a unit */ -time_t unit_length; /* length of a unit */ - -cfg_entry_t cfg_entry_tab[CFG_ENTRY_MAX]; /* configuration table */ -isdn_ctrl_state_t isdn_ctrl_tab[ISDN_CTRL_MAX]; /* controller states table */ - -int ncontroller = 0; /* # of controllers available */ -int nentries = 0; /* # of entries in config tab */ - -int uselogfile = 0; /* flag, use a logfile */ -char logfile[MAXPATHLEN] = LOG_FILE_DEF; /* log filename */ -FILE *logfp = NULL; /* log file pointer */ -int logfacility = LOG_LOCAL0; /* the syslog facility used */ -int nregex = 0; /* number of reg expr */ -struct rarr rarr[MAX_RE]; /* regexpr & progs table */ - -char ratesfile[MAXPATHLEN] = RATES_FILE_DEF; /* rates filename */ -char *rate_error = NULL; /* errorcase: error string */ -int got_rate = 0; /* flag, ratesfile found */ -struct rates *rates[NRATES][NDAYS]; /* the rates structure */ - -int useacctfile = 0; /* flag, write accounting */ -char acctfile[MAXPATHLEN] = ACCT_FILE_DEF; /* accounting filename */ -FILE *acctfp = NULL; /* accounting file pointer */ -int acct_all = 1; /* account all connections */ - -int aliasing = 0; /* enable alias processing */ -char aliasfile[MAXPATHLEN] = ALIASFILE; /* alias file location */ - -int do_fullscreen = 0; /* fullscreen log */ -int curses_ready = 0; /* curses initialized */ - -#ifdef USE_CURSES -WINDOW *upper_w; /* curses upper window pointer */ -WINDOW *mid_w; /* curses mid window pointer */ -WINDOW *lower_w; /* curses lower window pointer */ -#endif - -int rt_prio = RTPRIO_NOTUSED; /* realtime priority */ - -/* monitor via network */ - -int do_monitor = 0; -int inhibit_monitor = 0; -#ifdef I4B_EXTERNAL_MONITOR -int monitorport = DEF_MONPORT; -#else -int monitorport = -1; -#endif -int accepted = 0; - -int isdntime = 0; /* flag, log time from exchange */ - -#else /* !MAIN */ - -int isdnfd; - -char *configfile; -int config_error_flag; - -#ifdef DEBUG -int do_debug; -int debug_flags; -int debug_noscreen; -#endif - -int do_bell; - -int do_fork; - -int do_ttytype; -char *ttype; - -int do_rdev; -char *rdev; - -int do_print; - -int got_unitlen; -time_t unit_length; - -cfg_entry_t cfg_entry_tab[CFG_ENTRY_MAX]; /* configuration table */ -isdn_ctrl_state_t isdn_ctrl_tab[ISDN_CTRL_MAX]; /* controller states table */ - -int ncontroller; -int nentries; - -int uselogfile; -char logfile[MAXPATHLEN]; -int logfacility; -int nregex; -struct rarr rarr[MAX_RE]; - -char ratesfile[MAXPATHLEN]; -char *rate_error; -int got_rate; -struct rates *rates[NRATES][NDAYS]; - -int useacctfile; -char acctfile[MAXPATHLEN]; -FILE *acctfp; -int acct_all; - -int aliasing; -char aliasfile[MAXPATHLEN]; - -int do_fullscreen; -int curses_ready; - -#ifdef USE_CURSES -WINDOW *upper_w; -WINDOW *mid_w; -WINDOW *lower_w; -#endif - -int rt_prio; - -int do_monitor; -int inhibit_monitor; -int monitorport; -int accepted; - -int isdntime; - -#endif /* MAIN */ - -char * bdrivername ( int drivertype ); -void cfg_setval ( int keyword ); -void check_and_kill ( cfg_entry_t *cep ); -void check_pid ( void ); -void close_allactive ( void ); -void configure ( char *filename, int reread ); -void daemonize ( void ); -void dialresponse(cfg_entry_t *cep, int dstat); -void display_acct ( cfg_entry_t *cep ); -void display_bell ( void ); -void display_ccharge ( cfg_entry_t *cep, int units ); -void display_chans ( void ); -void display_charge ( cfg_entry_t *cep ); -void display_connect ( cfg_entry_t *cep ); -void display_disconnect ( cfg_entry_t *cep ); -void display_l12stat(int controller, int layer, int state); -void display_tei(int controller, int tei); -void display_updown ( cfg_entry_t *cep, int updown ); -void hangup_channel ( int channel ); -void do_exit ( int exitval ); -void do_menu ( void ); -int exec_answer ( cfg_entry_t *cep ); -int exec_connect_prog ( cfg_entry_t *cep, const char *prog, int link_down ); -pid_t exec_prog ( char *prog, char **arglist ); -cfg_entry_t * find_by_device_for_dialout ( int drivertype, int driverunit ); -cfg_entry_t * find_matching_entry_incoming ( msg_connect_ind_t *mp ); -cfg_entry_t * find_active_entry_by_driver ( int drivertype, int driverunit ); -void finish_log ( void ); -char * getlogdatetime ( void ); -int get_cdid ( void ); -cfg_entry_t * get_cep_by_cc ( int ctrlr, int chan ); -cfg_entry_t * get_cep_by_driver ( int drivertype, int driverunit ); -cfg_entry_t * get_cep_by_cdid ( int cdid ); -int get_current_rate ( cfg_entry_t *cep, int logit ); -void handle_charge ( cfg_entry_t *cep ); -void handle_recovery ( void ); -void if_up(cfg_entry_t *cep); -void if_down(cfg_entry_t *cep); -void init_controller ( void ); -void init_log ( void ); -void init_screen ( void ); -void log ( int what, const char *fmt, ... ); -int main ( int argc, char **argv ); -void msg_accounting ( msg_accounting_ind_t *mp ); -void msg_alert_ind ( msg_alert_ind_t *mp ); -void msg_charging_ind ( msg_charging_ind_t *mp ); -void msg_connect_active_ind ( msg_connect_active_ind_t *mp ); -void msg_connect_ind ( msg_connect_ind_t *mp ); -void msg_pdeact_ind(msg_pdeact_ind_t *md); -void msg_negcomplete_ind(msg_negcomplete_ind_t *ind); -void msg_ifstatechg_ind(msg_ifstatechg_ind_t *ind); -void msg_drvrdisc_req(msg_drvrdisc_req_t *mp); -void msg_dialout ( msg_dialout_ind_t *mp ); -void msg_disconnect_ind ( msg_disconnect_ind_t *mp ); -void msg_idle_timeout_ind ( msg_idle_timeout_ind_t *mp ); -void msg_l12stat_ind(msg_l12stat_ind_t *ml); -void msg_teiasg_ind(msg_teiasg_ind_t *mt); -void msg_proceeding_ind ( msg_proceeding_ind_t *mp ); -const char * name_of_controller(int ctrl_type, int card_type); -void next_state ( cfg_entry_t *cep, int event ); -char * print_i4b_cause( cause_t code ); -char * printstate ( cfg_entry_t *cep ); -int readrates ( char *filename ); -int ret_channel_state(int controller, int channel); -void reopenfiles ( int dummy ); -void rereadconfig ( int dummy ); -void select_first_dialno ( cfg_entry_t *cep ); -void select_next_dialno ( cfg_entry_t *cep ); -void select_this_dialno ( cfg_entry_t *cep ); -int sendm_alert_req ( cfg_entry_t *cep ); -int sendm_connect_req ( cfg_entry_t *cep ); -int sendm_connect_resp ( cfg_entry_t *cep, int cdid, int response, int cause ); -int sendm_disconnect_req ( cfg_entry_t *cep, int cause ); -int set_channel_busy(int controller, int channel); -int set_channel_idle(int controller, int channel); -int setup_dialout(cfg_entry_t *cep); -void sigchild_handler ( int sig ); -void start_timer ( cfg_entry_t *cep, int seconds ); -void stop_timer ( cfg_entry_t *cep ); -void unitlen_chkupd( cfg_entry_t *cep ); -void write_pid ( void ); -void yyerror ( const char *msg ); - -/* montior server module */ -void monitor_init(); -void monitor_exit(); -void monitor_clear_rights(); -void monitor_fixup_rights(); -int monitor_start_rights(const char *clientspec); -void monitor_add_rights(int rights); - -/* possible return codes from monitor_start_rights: */ -#define I4BMAR_OK 0 /* rights added successfully */ -#define I4BMAR_LENGTH 1 /* local socket name to long */ -#define I4BMAR_DUP 2 /* entry already exists */ -#define I4BMAR_CIDR 3 /* cidr netmask is invalid */ -#define I4BMAR_NOIP 4 /* host/net could not be resolved */ - -int monitor_create_local_socket(); - -#ifndef I4B_NOTCPIP_MONITOR -int monitor_create_remote_socket(int portno); -#endif - -void monitor_prepselect(fd_set *selset, int *max_fd); -void monitor_handle_input(fd_set *selset); -void monitor_handle_connect(int sockfd, int is_local); -void monitor_evnt_charge(cfg_entry_t *cep, int units, int estimated); -void monitor_evnt_connect(cfg_entry_t *cep); -void monitor_evnt_disconnect(cfg_entry_t *cep); -void monitor_evnt_updown(cfg_entry_t *cep, int up); -void monitor_evnt_log(int prio, const char * what, const char * msg); - -/* controller.c */ - -int init_controller_state(int controller, int ctrl_type, int card_type, int tei); -int set_controller_state(int controller, int state); -int get_controller_state(int controller); -int decr_free_channels(int controller); -int incr_free_channels(int controller); -int get_free_channels(int controller); -int set_channel_busy(int controller, int channel); -int set_channel_idle(int controller, int channel); -int ret_channel_state(int controller, int channel); - -/* alias.c */ - -void init_alias(char *filename); -void free_aliases(void); -char *get_alias(char *number); - -#endif /* _ISDND_H_ */ diff --git a/usr.sbin/i4b/isdnd/isdnd.rates.5 b/usr.sbin/i4b/isdnd/isdnd.rates.5 deleted file mode 100644 index 450cd5eac3f85..0000000000000 --- a/usr.sbin/i4b/isdnd/isdnd.rates.5 +++ /dev/null @@ -1,115 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdnd.rates.5,v 1.6 1998/12/05 18:03:21 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:09:57 1998] -.\" -.Dd September 11, 1998 -.Dt isdnd.rates 5 -.Sh NAME -.Nm isdnd.rates -.Nd isdn4bsd ISDN management daemon rates description file -.Sh DESCRIPTION -The file -.Pa isdnd.rates -contains descriptions how long charging units last at a given time of day, -day of week and the distance to the destination. If this file is available, -this information may be used by the -.Xr isdnd 8 -ISDN connection management daemon to calculate the short hold time for a -connection. -.Pp -The format of a rate entry line is a follows: -.Pp -The first field, the -.Pq Fa rate-code -defines a collection of rates (for each day of the week) which can be -referenced in the -.Xr isdnd 8 -configuration file -.Xr isdnd.rc 5 . -This field must start with the identifier -.Dq ra -followed by a digit in the range of zero to four. -.Pp - -The second field, the -.Pq Fa day-number -selects the day of week for which this entry defines the rates, where 0 stands -for Sunday, 1 for Monday and so on until the digit 6 which stands for Saturday. -.Pp - -The rest of the line consists of one or more space separated fields which have -the following syntax: -.Bd -filled -offset indent -start_hour.start_minutes-end_hour.end_minutes:charge_unit_length -.Ed -.Pp -Start_hour and start_minutes define the begin of a time section and end_hour -and end_minutes define the end. Charge_unit_length define the length of a -charging unit in the previously defined time section. No spaces or tabs are -allowed inside this field. The hour and minutes specifications MUST have -exactly 2 digits, in case just one digit is needed, a leading 0 must be used. -.Pp -For example, -.Bd -filled -offset indent -14.00-18.00:90 -.Ed -.Pp -defines, that between 2:00 PM and 6:00 PM the length of one charging unit -lasts 90 seconds. -.Pp - -.Sh FILES -.Bl -tag -width /etc/isdn/isdnd.rates -compact -.It Pa /etc/isdn/isdnd.rates -The default rates specification file for the -.Nm isdnd -ISDN daemon. - -.Sh EXAMPLES -The line: -.Bd -literal -ra0 0 00.00-05.00:240 05.00-21.00:150 21.00-24.00:240 -.Ed -.Pp -defines the unit lengths for a Sunday. - -.Sh SEE ALSO -.Xr isdnd 8 , -.Xr isdnd.rc 5 - -.Sh AUTHOR -The rates subsystem for the -.Xr isdnd 8 -daemon to which -.Nm -belongs was designed and written by Gary Jennejohn. -.Pp -The -.Xr isdnd 8 -daemon and this manual page were written by Hellmuth Michaelis. -He can be reached at hm@kts.org or hm@hcs.de. - diff --git a/usr.sbin/i4b/isdnd/isdnd.rc.5 b/usr.sbin/i4b/isdnd/isdnd.rc.5 deleted file mode 100644 index 03d1a3a528f30..0000000000000 --- a/usr.sbin/i4b/isdnd/isdnd.rc.5 +++ /dev/null @@ -1,642 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdnd.rc.5,v 1.27 1998/12/05 18:03:23 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:10:08 1998] -.\" -.Dd October 27, 1998 -.Dt isdnd.rc 5 -.Sh NAME -.Nm isdnd.rc -.Nd isdn4bsd ISDN connection management daemon config file format -.Sh DESCRIPTION -The file -.Pa /etc/isdn/isdnd.rc -contains (if not otherwise specified on the command line) the runtime -configuration for the -.Xr isdnd 8 -ISDN connection management daemon which is part of the isdn4bsd package. -.Pp -The configuration file consists of keywords which start in column 1 followed by -one or more spaces or tabs, an equal sign, one or more spaces or tabs -and a keyword dependent parameter value. -.Pp -A line beginning with '#' is treated as a comment line. -.Pp -For keywords requiring the specification of a boolean value, the truth -value can be either -.Em yes -or -.Em on -while the false value can be either -.Em no -or -.Em off . -.Pp -The configuration file consists of one -.Em system -section and one or more -.Em entry -sections. -In the -.Em system -section parameters regarding the daemon operation or parameters -not associated with a single remote connection can be set. -In the -.Em entry -section(s) parameters directly associated with a single remote -connection can be set. -.Pp -The following keywords are recognized by -.Nm isdnd : -.Pp -.Bl -tag -width system -compact - -.It Li system -This keyword starts the system configuration section. It must not -have a parameter and may be used only once. The keyword is mandatory. -The following keywords are valid in the system configuration section: -.Bl -tag -width useacctfile -compact - -.It Li acctall -If this parameter is set to -.Em on , -accounting information is written even if the local site was not charged -or no charging information is available or is not subscribed. (optional) - -.It Li acctfile -Specifies the name of the accounting file which is used when the keyword -.Em useacctfile -(see below) is set to -.Em on . -If this keyword is omitted the system default is used. (optional) - -.It Li aliasing -If this parameter is set to -.Em on , -alias processing of telephone-number to name is enabled (see also the -.Em aliasfile -keyword below). The default is off. (optional) - -.It Li aliasfile -Specifies the name of the telephone number-to-name alias database file shared -with the -.Xr isdntel 1 -utility when alias processing is enabled via the -.Em aliasing -keyword. (optional) - -.It Li isdntime -If this parameter is set to -.Em on , -date/time information from the exchange (if provided) is written to the -logfile. The default is off. (optional) - -.It Li monitor-allowed -If this parameter is set to -.Em on -or -.Em yes , -monitoring via a local or remote machine is enabled. -This parameter is optional and is set to -.Em off -by default. - -.It Li monitor-port -sets the TCP port number for remote monitoring. -This integer parameter is optional and is set to port 451 by default. - -.It Li monitor -This keyword specifies a local socket name or a host or network for remote -monitoring. The -.Em monitor -specification may either be: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar the name of a local (UNIX-domain) socket -this MUST start with a "/", example: /var/run/isdn-monitor -.It Ar a dotted-quad host specification -example: 192.168.1.2 -.It Ar a dotted-quad network address with netmask -example: 192.168.1.0/24 -.It Ar a resolvable host name -example: localhost -.It Ar a resolvable network name with netmask -example: up-vision-net/24 -.El - -.It Li monitor-access -This keyword specifies the access rights for a previously used -.Em monitor -keyword. The supported access rights are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar fullcmd -.It Ar restrictedcmd -.It Ar channelstate -.It Ar logevents -.It Ar callin -.It Ar callout -.El - -.It Li ratesfile -Specifies the name of the ratesfile. If this keyword is omitted the system -default is used. (optional) - -.It Li regexpr -This keyword is used to specify regular expressions. It can be specified -more than once up to a compile time dependent value (currently set to 5 by -the MAX_RE definition in the source). -.Pp -All specified regular expressions are compared to the log strings at runtime -and if a match is found, a program is run with the log text as a parameter -(see also the keyword -.Em regprog -below). -.Pp -For an explanation how regular expressions are specified, please have a -look at -.Xr re_format 7 -and -.Xr regex 3 . -The -.Em extended -regular expression syntax is supported here. -.Pp -Hint: it might be necessary to properly quote the expression to avoid -improper interpretation by the configuration file parser. -(optional) - -.It Li regprog -This keyword is used to specify the name of a program which is run in -case a corresponding regular expression is matched by a logging string. -.Nm Isdnd -expects to find the program below the path -.Pa /etc/isdn -which is prepended to the string specified as a parameter to this keyword. -(optional) - -.It Li rtprio -Specifies the realtime priority -.Nm isdnd -runs at as an integer value in the range 0...31 with 0 being the highest -priority. This keyword is optional; if not specified the process priority of -.Nm isdnd -is not touched in any way. -( See also -.Xr rtprio 1 -). -This keyword is only available if -.Nm -was compiled with -DUSE_RTPRIO. - -.It Li useacctfile -If this parameter is set to -.Em on -charging (if available) and accounting information is written to the -accounting file. (optional) - -.El - -.It Li entry -This keyword starts one configuration entry. It must not have a parameter. -This keyword must be used at least once. -The following keywords are valid in an entry section: -.Bl -tag -width unitlengthsrc -compact - -.It Li answerprog -This keyword is used to specify the name of a program which is run in -case an incoming telephone connection specified -.Em answer -in its configuration entry. The default name is -.Em answer . -.Nm Isdnd -expects to find this program beneath the path -.Pa /etc/isdn -which is prepended to the string specified as a parameter to this keyword. -(optional) - -.It Li alert -is used to specify a time in seconds to wait before accepting a call. This -keyword is only usable for incoming telephone calls (dialin-reaction = answer). -It is used to have a chance to accept an incoming call on the phone before -the answering machine starts to run. The minimum value for the alert parameter -is 5 seconds and the maximum parameter allowed is 180 seconds. -(optional) - -.It Li b1protocol -The B channel layer 1 protocol used for this connection. The keyword is mandatory. -The currently configurable values are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar hdlc -HDLC framing. -.It Ar raw -No framing at all (used for telephony). -.El - -.It Li callbackwait -The time in seconds to wait between hanging up the call from a remote site -and calling back the remote site. (optional) - -.It Li calledbackwait -The time in seconds to wait for a remote site calling back the local site -after a call from the local site to the remote site has been made. (optional) - -.It Li dialin-reaction -Used to specify what to do when an incoming connection request is received. -The keyword is mandatory. -The currently supported parameters are: -.Pp -.Bl -tag -width calledback -compact -offset -.It Ar accept -Accept an incoming call. -.It Ar reject -Reject an incoming call. -.It Ar ignore -Ignore an incoming call. -.It Ar answer -Start telephone answering for an incoming voice call. -.It Ar callback -When a remote site calls, hangup and call back the remote site. -.El - -.It Li dialout-type -This keyword ist used to configure what type of dialout mode is used. -The keyword is mandatory. -The currently supported parameters are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar normal -Normal behavior, call the remote site which is supposed to accept the call. -.It Ar calledback -Callback behavior, call the remote side which rejects the call and calls -us back. -.El - -.It Li dialrandincr -When dialing or re-dialing and this parameter is set to -.Em on , -the dial retry time is added with a random value (currently 0...3 seconds) -to minimize the chance of two sites dialing synchronously so each gets a busy -each time it dials because the other side is also dialing. - -.It Li dialretries -The number of dialing retries before giving up. (optional) - -.It Li direction -This keyword is used to configure if incoming and outgoing, incoming-only or -outgoing only connections are possible. -The keyword is optional, the default is -.Em inout . -.Pp -The currently supported parameters are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar inout -Normal behavior, connection establishment is possible from remote and local. -.It Ar in -Only incoming connections are possible. -.It Ar out -Only outgoing connections are possible. -.El - -.It Li downtries -is used to configure the number of unsuccessful tries (= retry cycles!) before -the interface is disabled (for -.Em downtime -seconds). -(see also the keyword -.Em usedown -further up). This keyword is optional. - -.It Li downtime -is used to configure the time in seconds an interface is disabled -after the configured number of -.Em downtries . -(see also the keyword -.Em usedown -further up). -This keyword is optional and is set to 60 seconds by default. - -.It Li earlyhangup -A (safety) time in seconds which specifies the time to hangup before an -expected next charging unit will occur. (optional) - -.It Li idletime-outgoing -The time in seconds an outgoing connection must be idle before hanging up. -(optional) - -.It Li idletime-incoming -The time in seconds an incoming connection must be idle before hanging up. -(optional) - -.It Li isdncontroller -The ISDN controller number to be used for connections for this entry. -(mandatory) - -.It Li isdnchannel -The ISDN controller channel number to be used for connections for this entry. -In case a channel is explicitly selected here, the SETUP message will request -this channel but mark the request as -.Em preferred -(the indicated channel is preferred) instead of exclusive (only the indicated -channel is acceptable). Thus the exchange is still free to select another -than the requested channel! -(mandatory) - -.It Li isdntxdel-incoming -A delay value suitable for the -.Em timeout() -kernel subroutine to delay the transmittion of the first packet after a -successfull connection is made by this value for -.Em incoming -ISDN connections. The specification unit is 1/100 second. A zero (0) disables -this feature and is the default value. This feature is implemented (and makes -sense only) for the -.Xr i4bipr 4 -IP over raw HDLC ISDN driver. (optional) - -.It Li isdntxdel-outgoing -A delay value suitable for the -.Em timeout() -kernel subroutine to delay the transmittion of the first packet after a -successfull connection is made by this value for -.Em outgoing -ISDN connections. The specification unit is 1/100 second. A zero (0) disables -this feature and is the default value. This feature is implemented (and makes -sense only) for the -.Xr i4bipr 4 -IP over raw HDLC ISDN driver. (optional) - -.It Li local-phone-dialout -The local telephone number used when the local site dials out. When dialing -out to a remote site, the number specified here is put into the -.Em "Calling Party Number Information Element" . -.Pp -This keyword is mandatory for the -.em -ipr -userland interfaces. - -.It Li local-phone-incoming -The local telephone number used for verifying the destination of incoming -calls. When a remote site dials in, this number is used to verify that it -is the local site which the remote site wants to connect to. It is compared -with the -.Em "Called Party Number Information Element" -got from the telephone exchange. -.Pp -This keyword is mandatory for the ipr interfaces. - -.It Li name -Defines a symbolic name for this configuration entry. It's purpose is to -use this name in the full-screen display for easy identification of a link -to a remote site and for accounting purposes. (mandatory) - -.It Li ratetype -The rate entry used from the rates file. (optional) -.br -For example, ratetype=0 selects lines beginning "ra0" in /etc/isdn/isdnd.rates; -(typically ra0 lines are a set of tables for local call rates on different -days of the week & times per day). - -.It Li recoverytime -The time in seconds to wait between dial retries. (optional) - -.It Li remdial-handling -is used to specify the dialout behavior in case more than one outgoing -number is specified. -The currently supported parameters are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar first -For every new (non-retry) call setup, start with the first number. -.It Ar last -For every new (non-retry) call setup, start with the last number with -which a successful connection was made. -.It Ar next -For every new (non-retry) call setup, start with the next number which -follows the last one used. -.El - -.It Li remote-phone-dialout -The remote telephone number used when the local site dials out. When dialing -out to a remote site, the number specified here is put into the -.Em "Called Party Number Information Element" . -.Pp -This keyword is mandatory for the -.em -ipr -interfaces. It may be specified more than once to try to dial to several -numbers until one succeeds. - -.It Li remote-phone-incoming -The remote telephone number used to verify an incoming call. When a remote site -dials in, this number is used to verify that it is the correct remote site -which is herewith authorized to connect into the local system. This parameter -is compared against the -.Em "Calling Party Number Information Element" -got from the telephone exchange. -.Pp -This keyword is mandatory for the ipr interfaces. -.Pp -This keyword may have a wildcard parameter '*' to permit anyone dialing in. - -.It Li unitlength -The length of a charging unit in seconds. This is used in conjunction with -the idletime to decide when to hangup a connection. (optional) - -.It Li unitlengthsrc -This keyword is used to specify from which source -.Xr isdnd 8 -takes the unitlength for shorthold mode. The currently configurable values are: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar none -Then unitlength is not specified anywhere. -.It Ar cmdl -Use the unitlength specified on the commandline. -.It Ar conf -Use the unitlength specified in the configuration file with the keyword -.Em unitlength . -.It Ar rate -Use the unitlength from the ratesfile specified in the configuration -file with the keyword -.Em ratetype . -.It Ar aocd -Use a dynamically calculated unitlength in case AOCD is subscribed on -the ISDN line. (AOCD is an acronym for ``Advice Of Charge During the call'' -which is a service provided by the telecommunications (ie phone) provider, -to indicate billable units). -.El - -.It Li usrdevicename -Specifies the userland interface which is used for interfacing ISDN B channel -data to the userland. The keyword is mandatory. -This keyword accepts the following parameters: -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar ipr -This parameter configures a raw HDLC IP over ISDN interface. -.It Ar isp -This parameter configures a synchronous PPP over ISDN interface. -.It Ar rbch -This specifies a Raw B CHannel access interface. -.It Ar tel -ISDN telephony. -.El - -.It Li usrdeviceunit -Specifies the unit number for the with the -.em -usrdevicename -specified device. - -.It Li usedown -is used to enable the use of the keywords -.Em downtries -and -.Em downtime -in the entries section(s). It is used in the -.Nm isdnd -daemon to dynamically enable and disable the IP interfaces to avoid excessive -dialing activities in case of transient failures (such as busy lines). -This parameter is optional and is set to -.Em off -by default. - -.It Li connectprog -specifies a program run everytime after a connection is established and -address negotiation is complete (i.e.: the connection is useable). -.Nm Isdnd -expects to find the program below the path -.Pa /etc/isdn -which is prepended to the string specified as a parameter to this keyword. -(optional) - -.It Li disconnectprog -specifies a program run everytime after a connection was shut down. -.Nm Isdnd -expects to find the program below the path -.Pa /etc/isdn -which is prepended to the string specified as a parameter to this keyword. -(optional) - -.El -.El - -.Sh IDLETIME CALCULATION AND SHORTHOLD MODE -.Bl -tag -width incoming calls -compact -.It Li incoming calls -It is assumed that the calling side knows most about charging structures and -such and as a consequence only the keyword -.Em idletime-incoming -has a function for incoming calls. -.Pp -For incoming calls the line is constantly monitored, and in case there was -not traffic taking place for the time in seconds specified by -.Em idletime-incoming -the call is closed. -.Pp -Typically, -.Em idletime-incoming -is used as a last resort and is therefore set much higher than a charging -unit time: typical values are one to five minutes. - -.It Li outgoing calls -Outgoing call disconnect time can be setup in one of two ways: - -.Bl -tag -width shorthold mode -compact -.It Li simple mode -For simple mode, the selected -.Em unitlength -must be 0 (zero) and -.Em idletime-outgoing -greater zero. -.Pp -The outgoing traffic is constantly monitored, and in case there was -not traffic taking place for the time in seconds specified by -.Em idletime-outgoing -the call is closed. -.Pp -Typical values in simple mode are 10 to 30 seconds. - -.It Li shorthold mode -For shorthold mode, the selected -.Em unitlength -and -.Em idletime-outgoing -must be greater than 0 (zero); -.Em earlyhangup must be >= 0 (zero). - -.Bd -literal - -|<unchecked-window>|<checkwindow>|<safetywindow>| -| | | | -+------------------+-------------+--------------+ -| | | | -| |<-idle-time->|<earlyhangup->| -|<--------------unitlength--------------------->| - -.Ed - -During the unchecked window which is (unitlength - (idle-time+earlyhangup)) -in length, no idle check is done. After the unchecked window has ended, -the line is checked for idle-time length if no traffic takes place. In case -there was traffic detected in the check-window, the same procedure is restarted -at the beginning of the next unit. In case no traffic was detected during -the check-window, the line is closed at the end of the check window. -.Pp -Notice: -.Em unitlength -must (!) be greater than the sum of -.Em idletime-outgoing -and -.Em earlyhangup ! - -.El -.El - -.Pp - -.Sh FILES -.Bl -tag -width /etc/isdn/isdnd.rc -compact -.It Pa /etc/isdn/isdnd.rc -The default configuration file for the -.Nm isdnd -ISDN daemon. - -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnmonitor 8 -.Xr regex 3 -.Xr re_format 7 - -.Sh AUTHOR -The -.Xr isdnd 8 -daemon and this manual page were written by Hellmuth Michaelis. -He can be reached at hm@kts.org. diff --git a/usr.sbin/i4b/isdnd/log.c b/usr.sbin/i4b/isdnd/log.c deleted file mode 100644 index 4c1ffb63b59d5..0000000000000 --- a/usr.sbin/i4b/isdnd/log.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - logging routines - * ----------------------------- - * - * $Id: log.c,v 1.14 1998/12/05 18:03:24 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:10:22 1998] - * - *---------------------------------------------------------------------------*/ - -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> -#include <time.h> -#include <errno.h> -#include <syslog.h> -#include <unistd.h> -#include <regex.h> - -#include <machine/i4b_ioctl.h> - -#include "isdnd.h" - -#define LOGBUFLEN 256 - -extern int do_monitor; -extern int accepted; -extern FILE *logfp; - -static void check_reg(char *logstring); - -struct logtab { - char *text; - int pri; -}; - -/*---------------------------------------------------------------------------* - * table for converting internal log levels into syslog levels - *---------------------------------------------------------------------------*/ -static struct logtab logtab[] = { - {"ERR", LOG_ERR}, /* error conditions */ - {"WRN", LOG_WARNING}, /* warning conditions, nonfatal */ - {"DMN", LOG_NOTICE}, /* normal but significant condition, daemon*/ - {"CHD", LOG_INFO}, /* informational, call handling */ - {"DBG", LOG_DEBUG} /* debug messages */ -}; - -/*---------------------------------------------------------------------------* - * initialize logging - *---------------------------------------------------------------------------*/ -void -init_log(void) -{ - int i; - - if(uselogfile) - { - if((logfp = fopen(logfile, "a")) == NULL) - { - fprintf(stderr, "ERROR, cannot open logfile %s: %s\n", - logfile, strerror(errno)); - exit(1); - } - - /* set unbuffered operation */ - - setvbuf(logfp, (char *)NULL, _IONBF, 0); - } - else - { -#if DEBUG - if(do_debug && do_fork == 0 && do_fullscreen == 0) - (void)openlog("isdnd", - LOG_PID|LOG_CONS|LOG_NDELAY|LOG_PERROR, - logfacility); - else -#endif - (void)openlog("isdnd", LOG_PID|LOG_CONS|LOG_NDELAY, - logfacility); - } - - /* initialize the regexp array */ - - for(i = 0; i < MAX_RE; i++) - { - char *p; - char buf[64]; - - sprintf(buf, "%s%d", REGPROG_DEF, i); - - rarr[i].re_flg = 0; - - if((p = malloc(strlen(buf) + 1)) == NULL) - { - log(LL_DBG, "init_log: malloc failed: %s", strerror(errno)); - do_exit(1); - } - - strcpy(p, buf); - - rarr[i].re_prog = p; - } -} - -/*---------------------------------------------------------------------------* - * finish logging - *---------------------------------------------------------------------------*/ -void -finish_log(void) -{ - if(uselogfile) - { - fflush(logfp); - fclose(logfp); - } - else - { - (void)closelog(); - } -} - -/*---------------------------------------------------------------------------* - * place entry into logfile - *---------------------------------------------------------------------------*/ -void -log(int what, const char *fmt, ...) -{ - char buffer[LOGBUFLEN]; - register char *dp; - va_list ap; - - va_start(ap, fmt); - vsnprintf(buffer, LOGBUFLEN-1, fmt, ap); - va_end(ap); - - dp = getlogdatetime(); /* get time string ptr */ - -#ifdef USE_CURSES - - /* put log on screen ? */ - - if((do_fullscreen && curses_ready) && - ((!debug_noscreen) || (debug_noscreen && (what != LL_DBG)))) - { - wprintw(lower_w, "%s %s %-.*s\n", dp, logtab[what].text, - COLS-((strlen(dp))+(strlen(logtab[what].text))+2), buffer); - wrefresh(lower_w); - } -#endif - -#ifdef I4B_EXTERNAL_MONITOR - monitor_evnt_log(logtab[what].pri, logtab[what].text, buffer); -#endif - - if(uselogfile) - { - fprintf(logfp, "%s %s %s\n", dp, logtab[what].text, buffer); - } - else - { - register char *s = buffer; - - /* strip leading spaces from syslog output */ - - while(*s && (*s == ' ')) - s++; - - syslog(logtab[what].pri, "%s %s", logtab[what].text, s); - } - - -#if DEBUG - if(what != LL_DBG) /* don't check debug logs, endless loop !!! */ -#endif - check_reg(buffer); -} - -/*---------------------------------------------------------------------------* - * return ptr to static area containing date/time - *---------------------------------------------------------------------------*/ -char * -getlogdatetime() -{ - static char logdatetime[41]; - time_t tim; - register struct tm *tp; - - tim = time(NULL); - tp = localtime(&tim); - strftime(logdatetime,40,I4B_TIME_FORMAT,tp); - return(logdatetime); -} - -/*---------------------------------------------------------------------------* - * check for a match in the regexp array - *---------------------------------------------------------------------------*/ -static void -check_reg(char *logstring) -{ - register int i; - - for(i = 0; i < MAX_RE; i++) - { - if(rarr[i].re_flg && (!regexec(&(rarr[i].re), logstring, (size_t) 0, NULL, 0))) - { - char* argv[3]; - argv[0] = rarr[i].re_prog; - argv[1] = logstring; - argv[2] = NULL; - - exec_prog(rarr[i].re_prog, argv); - break; - } - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/main.c b/usr.sbin/i4b/isdnd/main.c deleted file mode 100644 index 9d16717d485d4..0000000000000 --- a/usr.sbin/i4b/isdnd/main.c +++ /dev/null @@ -1,707 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - main program entry - * ------------------------------- - * - * $Id: main.c,v 1.29 1998/12/05 18:03:26 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:10:38 1998] - * - *---------------------------------------------------------------------------*/ - -#ifdef I4B_EXTERNAL_MONITOR -#include "monitor.h" -#endif - -#define MAIN -#include "isdnd.h" -#undef MAIN - -#ifdef I4B_EXTERNAL_MONITOR - -#ifdef I4B_NOTCPIP_MONITOR -/* monitor via local socket */ -static void mloop(int sockfd); -#else /* I4B_NOTCPIP_MONITOR */ -/* monitor via local and tcp/ip socket */ -static void mloop(int localsock, int remotesock); -#endif /* I4B_NOTCPIP_MONITOR */ - -#else /* I4B_EXTERNAL_MONITOR */ -/* no monitoring at all */ -static void mloop(); -#endif /* I4B_EXTERNAL_MONITOR */ - -#ifdef USE_CURSES -static void kbdrdhdl(void); -#endif - -static void isdnrdhdl(void); -static void usage(void); - -#define MSG_BUF_SIZ 1024 /* message buffer size */ - -/*---------------------------------------------------------------------------* - * usage display and exit - *---------------------------------------------------------------------------*/ -static void -usage(void) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "isdnd - i4b ISDN manager daemon, version %02d.%02d.%d, %s %s\n", VERSION, REL, STEP, __DATE__, __TIME__); -#ifdef DEBUG - fprintf(stderr, " usage: isdnd [-b] [-c file] [-d level] [-F]\n"); -#else - fprintf(stderr, " usage: isdnd [-b] [-c file] [-F]\n"); -#endif - fprintf(stderr, " [-f [-r dev] [-t termtype]] [-u time]\n"); - fprintf(stderr, " [-l] [-L file] [-s facility] [-m]\n"); - fprintf(stderr, " -b audible bell in fullscreen mode at connect/disconnect\n"); - fprintf(stderr, " -c <filename> configuration file name (def: %s)\n", CONFIG_FILE_DEF); -#ifdef DEBUG - fprintf(stderr, " -d <level> set debug flag bits:\n"); - fprintf(stderr, " general = 0x%04x, rates = 0x%04x, timing = 0x%04x\n", DL_MSG, DL_RATES, DL_TIME); - fprintf(stderr, " state = 0x%04x, retry = 0x%04x, dial = 0x%04x\n", DL_STATE, DL_RCVRY, DL_DIAL); - fprintf(stderr, " process = 0x%04x, kernio = 0x%04x ctrlstat = 0x%04x\n", DL_PROC, DL_DRVR, DL_CNST); - fprintf(stderr, " -dn no debug output on fullscreen display\n"); -#endif - fprintf(stderr, " -f fullscreen status display\n"); - fprintf(stderr, " -F do not become a daemon process\n"); - fprintf(stderr, " -l use a logfile instead of syslog\n"); - fprintf(stderr, " -L <file> use file instead of %s for logging\n", LOG_FILE_DEF); - fprintf(stderr, " -P pretty print real config to stdout and exit\n"); - fprintf(stderr, " -r <device> redirect output to other device (for -f)\n"); - fprintf(stderr, " -s <facility> use facility instead of %d for syslog logging\n", LOG_LOCAL0 >> 3); - fprintf(stderr, " -t <termtype> terminal type of redirected screen (for -f)\n"); - fprintf(stderr, " -u <time> length of a charging unit in seconds\n"); - fprintf(stderr, " -m inhibit network/local monitoring\n"); - fprintf(stderr, "\n"); - exit(1); -} - -/*---------------------------------------------------------------------------* - * program entry - *---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int i; - msg_vr_req_t mvr; - -#ifdef I4B_EXTERNAL_MONITOR - int sockfd = -1; /* local monitor socket */ -#ifndef I4B_NOTCPIP_MONITOR - int remotesockfd = -1; /* tcp/ip monitor socket */ -#endif -#endif - - while ((i = getopt(argc, argv, "bmc:d:fFlL:Pr:s:t:u:?")) != EOF) - { - switch (i) - { - case 'b': - do_bell = 1; - break; - - case 'm': - inhibit_monitor = 1; - break; - - case 'c': - configfile = optarg; - break; - -#ifdef DEBUG - case 'd': - if(*optarg == 'n') - debug_noscreen = 1; - else if((sscanf(optarg, "%i", &debug_flags)) == 1) - do_debug = 1; - else - usage(); - break; -#endif - - case 'f': - do_fullscreen = 1; - do_fork = 0; -#ifndef USE_CURSES - fprintf(stderr, "Sorry, no fullscreen mode available - daemon compiled without USE_CURSES\n"); - exit(1); -#endif - break; - - case 'F': - do_fork = 0; - break; - - case 'l': - uselogfile = 1; - break; - - case 'L': - strcpy(logfile, optarg); - break; - - case 'P': - do_print = 1; - break; - - case 'r': - rdev = optarg; - do_rdev = 1; - break; - - case 's': - if(isdigit(*optarg)) - { - int facility; - logfacility = strtoul(optarg, NULL, 10); - facility = logfacility << 3; - - if((facility < LOG_KERN) || - (facility > LOG_FTP && facility < LOG_LOCAL0) || - (facility > LOG_LOCAL7)) - { - fprintf(stderr, "Error, option -s has invalid logging facility %d", logfacility); - usage(); - } - logfacility = facility; - } - else - { - fprintf(stderr, "Error: option -s requires a numeric argument!\n"); - usage(); - } - break; - - case 't': - ttype = optarg; - do_ttytype = 1; - break; - - case 'u': - if(isdigit(*optarg)) - { - unit_length = strtoul(optarg, NULL, 10); - if(unit_length < ULSRC_CMDLMIN) - unit_length = ULSRC_CMDLMIN; - else if(unit_length > ULSRC_CMDLMAX) - unit_length = ULSRC_CMDLMAX; - got_unitlen = 1; - } - else - { - fprintf(stderr, "Error: option -T requires a numeric argument!\n"); - usage(); - } - break; - - case '?': - default: - usage(); - break; - } - } -#ifdef DEBUG - if(!do_debug) - debug_noscreen = 0; -#endif - - if(!do_print) - { - umask(UMASK); /* set our umask ... */ - - init_log(); /* initialize the logging subsystem */ - } - - check_pid(); /* check if we are already running */ - - if(!do_print) - { - if(do_fork || (do_fullscreen && do_rdev)) /* daemon mode ? */ - daemonize(); - - write_pid(); /* write our pid to file */ - - /* set signal handler(s) */ - - signal(SIGCHLD, sigchild_handler); /* process handling */ - signal(SIGHUP, rereadconfig); /* reread configuration */ - signal(SIGUSR1, reopenfiles); /* reopen acct/log files*/ - signal(SIGPIPE, SIG_IGN); /* handled manually */ - signal(SIGINT, do_exit); /* clean up on SIGINT */ - signal(SIGTERM, do_exit); /* clean up on SIGTERM */ - signal(SIGQUIT, do_exit); /* clean up on SIGQUIT */ - } - - /* open isdn device */ - - if((isdnfd = open(I4BDEVICE, O_RDWR)) < 0) - { - log(LL_ERR, "main: cannot open %s: %s", I4BDEVICE, strerror(errno)); - exit(1); - } - - /* check kernel and userland have same version/release numbers */ - - if((ioctl(isdnfd, I4B_VR_REQ, &mvr)) < 0) - { - log(LL_ERR, "main: ioctl I4B_VR_REQ failed: %s", strerror(errno)); - do_exit(1); - } - - if(mvr.version != VERSION) - { - log(LL_ERR, "main: version mismatch, kernel %d, daemon %d", mvr.version, VERSION); - do_exit(1); - } - - if(mvr.release != REL) - { - log(LL_ERR, "main: release mismatch, kernel %d, daemon %d", mvr.release, REL); - do_exit(1); - } - - if(mvr.step != STEP) - { - log(LL_ERR, "main: step mismatch, kernel %d, daemon %d", mvr.step, STEP); - do_exit(1); - } - - /* init controller state array */ - - init_controller(); - - /* read runtime configuration file and configure ourselves */ - - configure(configfile, 0); - - if(config_error_flag) - { - log(LL_ERR, "there were %d error(s) in the configuration file, terminating!", config_error_flag); - exit(1); - } - - /* handle the rates stuff */ - - if((i = readrates(ratesfile)) == ERROR) - { - if(rate_error != NULL) - log(LL_ERR, "%s", rate_error); - exit(1); - } - - if(i == GOOD) - { - got_rate = 1; /* flag, ratesfile read and ok */ - DBGL(DL_MSG, (log(LL_DBG, "ratesfile %s read successfully", ratesfile))); - } - else - { - if(rate_error != NULL) - log(LL_WRN, "%s", rate_error); - } - - /* if writing accounting info, open file, set unbuffered */ - - if(useacctfile) - { - if((acctfp = fopen(acctfile, "a")) == NULL) - { - log(LL_ERR, "ERROR, can't open acctfile %s for writing, terminating!", acctfile); - exit(1); - } - setvbuf(acctfp, (char *)NULL, _IONBF, 0); - } - - /* initialize alias processing */ - - if(aliasing) - init_alias(aliasfile); - - /* init remote monitoring */ - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor) - { - monitor_init(); - sockfd = monitor_create_local_socket(); -#ifndef I4B_NOTCPIP_MONITOR - remotesockfd = monitor_create_remote_socket(monitorport); -#endif - } -#endif - - /* in case fullscreendisplay, initialize */ - -#ifdef USE_CURSES - if(do_fullscreen) - { - init_screen(); - } -#endif - - /* init realtime priority */ - -#ifdef USE_RTPRIO - if(rt_prio != RTPRIO_NOTUSED) - { - struct rtprio rtp; - - rtp.type = RTP_PRIO_REALTIME; - rtp.prio = rt_prio; - - if((rtprio(RTP_SET, getpid(), &rtp)) == -1) - { - log(LL_ERR, "rtprio failed: %s", strerror(errno)); - do_exit(1); - } - } -#endif - - srandom(580403); /* init random number gen */ - - mloop( /* enter loop of no return .. */ -#ifdef I4B_EXTERNAL_MONITOR - sockfd -#ifndef I4B_NOTCPIP_MONITOR - , remotesockfd -#endif -#endif - ); - do_exit(0); - return(0); -} - -/*---------------------------------------------------------------------------* - * program exit - *---------------------------------------------------------------------------*/ -void -do_exit(int exitval) -{ - close_allactive(); - - unlink(PIDFILE); - - log(LL_DMN, "daemon terminating, exitval = %d", exitval); - -#ifdef USE_CURSES - if(do_fullscreen) - endwin(); -#endif - -#ifdef I4B_EXTERNAL_MONITOR - monitor_exit(); -#endif - - exit(exitval); -} - -/*---------------------------------------------------------------------------* - * main loop - *---------------------------------------------------------------------------*/ -static void -mloop( -#ifdef I4B_EXTERNAL_MONITOR - int localmonitor -#ifndef I4B_NOTCPIP_MONITOR - , int remotemonitor -#endif -#endif -) -{ - fd_set set; - struct timeval timeout; - int ret; - int high_selfd; - - /* go into loop */ - - log(LL_DMN, "daemon started (pid = %d)", getpid()); - - for(;;) - { - FD_ZERO(&set); - -#ifdef USE_CURSES - if(do_fullscreen) - FD_SET(fileno(stdin), &set); -#endif - - FD_SET(isdnfd, &set); - - high_selfd = isdnfd; - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor) - { - if (localmonitor != -1) { - /* always watch for new connections */ - FD_SET(localmonitor, &set); - if(localmonitor > high_selfd) - high_selfd = localmonitor; - } -#ifndef I4B_NOTCPIP_MONITOR - if (remotemonitor != -1) { - FD_SET(remotemonitor, &set); - if(remotemonitor > high_selfd) - high_selfd = remotemonitor; - } -#endif - - /* if there are client connections, let monitor module - * enter them into the fdset */ - if(accepted) - { - monitor_prepselect(&set, &high_selfd); - } - } -#endif - - timeout.tv_sec = 1; - timeout.tv_usec = 0; - - ret = select(high_selfd + 1, &set, NULL, NULL, &timeout); - - if(ret > 0) - { - if(FD_ISSET(isdnfd, &set)) - isdnrdhdl(); - -#ifdef USE_CURSES - if(FD_ISSET(fileno(stdin), &set)) - kbdrdhdl(); -#endif - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor) - { - if(localmonitor != -1 && FD_ISSET(localmonitor, &set)) - monitor_handle_connect(localmonitor, 1); - -#ifndef I4B_NOTCPIP_MONITOR - if(remotemonitor != -1 && FD_ISSET(remotemonitor, &set)) - monitor_handle_connect(remotemonitor, 0); -#endif - if(accepted) - monitor_handle_input(&set); - } -#endif - } - else if(ret == -1) - { - if(errno != EINTR) - log(LL_WRN, "ERROR, select error on isdn device, errno = %d!", errno); - } - - /* handle timeout and recovery */ - - handle_recovery(); - } -} - -#ifdef USE_CURSES -/*---------------------------------------------------------------------------* - * data from keyboard available, read and process it - *---------------------------------------------------------------------------*/ -static void -kbdrdhdl(void) -{ - int ch = getch(); - - switch(ch) - { - case 0x0c: /* control L */ - wrefresh(curscr); - break; - - case '\n': - case '\r': - do_menu(); - break; - } -} -#endif - -/*---------------------------------------------------------------------------* - * data from /dev/isdn available, read and process them - *---------------------------------------------------------------------------*/ -static void -isdnrdhdl(void) -{ - static unsigned char msg_rd_buf[MSG_BUF_SIZ]; - msg_hdr_t *hp = (msg_hdr_t *)&msg_rd_buf[0]; - - register int len; - - if((len = read(isdnfd, msg_rd_buf, MSG_BUF_SIZ)) > 0) - { - switch(hp->type) - { - case MSG_CONNECT_IND: - msg_connect_ind((msg_connect_ind_t *)msg_rd_buf); - break; - - case MSG_CONNECT_ACTIVE_IND: - msg_connect_active_ind((msg_connect_active_ind_t *)msg_rd_buf); - break; - - case MSG_DISCONNECT_IND: - msg_disconnect_ind((msg_disconnect_ind_t *)msg_rd_buf); - break; - - case MSG_DIALOUT_IND: - msg_dialout((msg_dialout_ind_t *)msg_rd_buf); - break; - - case MSG_ACCT_IND: - msg_accounting((msg_accounting_ind_t *)msg_rd_buf); - break; - - case MSG_IDLE_TIMEOUT_IND: - msg_idle_timeout_ind((msg_idle_timeout_ind_t *)msg_rd_buf); - break; - - case MSG_CHARGING_IND: - msg_charging_ind((msg_charging_ind_t *)msg_rd_buf); - break; - - case MSG_PROCEEDING_IND: - msg_proceeding_ind((msg_proceeding_ind_t *)msg_rd_buf); - break; - - case MSG_ALERT_IND: - msg_alert_ind((msg_alert_ind_t *)msg_rd_buf); - break; - - case MSG_DRVRDISC_REQ: - msg_drvrdisc_req((msg_drvrdisc_req_t *)msg_rd_buf); - break; - - case MSG_L12STAT_IND: - msg_l12stat_ind((msg_l12stat_ind_t *)msg_rd_buf); - break; - - case MSG_TEIASG_IND: - msg_teiasg_ind((msg_teiasg_ind_t *)msg_rd_buf); - break; - - case MSG_PDEACT_IND: - msg_pdeact_ind((msg_pdeact_ind_t *)msg_rd_buf); - break; - - case MSG_NEGCOMP_IND: - msg_negcomplete_ind((msg_negcomplete_ind_t *)msg_rd_buf); - break; - - case MSG_IFSTATE_CHANGED_IND: - msg_ifstatechg_ind((msg_ifstatechg_ind_t *)msg_rd_buf); - break; - - default: - log(LL_WRN, "ERROR, unknown message received from /dev/isdn (0x%x)", msg_rd_buf[0]); - break; - } - } - else - { - log(LL_WRN, "ERROR, read error on isdn device, errno = %d, length = %d", errno, len); - } -} - -/*---------------------------------------------------------------------------* - * re-read the config file on SIGHUP or menu command - *---------------------------------------------------------------------------*/ -void -rereadconfig(int dummy) -{ - extern int entrycount; - - log(LL_DMN, "re-reading configuration file"); - - close_allactive(); - - entrycount = -1; - nentries = 0; - - /* read runtime configuration file and configure ourselves */ - - configure(configfile, 1); - - if(config_error_flag) - { - log(LL_ERR, "there were %d error(s) in the configuration file, terminating!", config_error_flag); - unlink(PIDFILE); - exit(1); - } - - if(aliasing) - { - /* reread alias database */ - free_aliases(); - init_alias(aliasfile); - } -} - -/*---------------------------------------------------------------------------* - * re-open the log/acct files on SIGUSR1 - *---------------------------------------------------------------------------*/ -void -reopenfiles(int dummy) -{ - if(useacctfile) - { - fflush(acctfp); - fclose(acctfp); - - if((acctfp = fopen(acctfile, "a")) == NULL) - { - log(LL_ERR, "ERROR, can't open acctfile %s for writing, terminating!", acctfile); - exit(1); - } - setvbuf(acctfp, (char *)NULL, _IONBF, 0); - } - - if(uselogfile) - { - finish_log(); - - if((logfp = fopen(logfile, "a")) == NULL) - { - fprintf(stderr, "ERROR, cannot open logfile %s: %s\n", - logfile, strerror(errno)); - exit(1); - } - - /* set unbuffered operation */ - - setvbuf(logfp, (char *)NULL, _IONBF, 0); - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/monitor.c b/usr.sbin/i4b/isdnd/monitor.c deleted file mode 100644 index 884df137819b7..0000000000000 --- a/usr.sbin/i4b/isdnd/monitor.c +++ /dev/null @@ -1,811 +0,0 @@ -/* - * Copyright (c) 1998 Martin Husemann. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - network monitor server module - * ------------------------------------------ - * - * $Id: monitor.c,v 1.6 1998/08/10 13:55:24 hm Exp $ - * - * last edit-date: [Fri Jul 17 18:07:00 1998] - * - * -mh created - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -#ifndef I4B_EXTERNAL_MONITOR -/* dummy version of routines needed by config file parser - * (config files should be valid with and without external montioring - * support compiled into the daemon) */ -void monitor_clear_rights() -{ } -int monitor_start_rights(const char *clientspec) -{ return I4BMAR_OK; } -void monitor_add_rights(int rights_mask) -{ } -void monitor_fixup_rights() -{ } -#else - -#include "monitor.h" -#include "vararray.h" -#include <sys/socket.h> -#include <sys/un.h> -#ifndef I4B_NOTCPIP_MONITOR -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#endif - -VARA_DECL(struct monitor_rights) rights = VARA_INITIALIZER; -#define INITIAL_RIGHTS_ALLOC 10 /* most users will have one or two entries */ - -static int local_rights = -1; /* index of entry for local socket, -1 if none */ - -/* for each active monitor connection we have one of this: */ -struct monitor_connection { - int sock; /* socket for this connection */ - int rights; /* active rights for this connection */ - int events; /* bitmask of events client is interested in */ -}; -static VARA_DECL(struct monitor_connection) connections = VARA_INITIALIZER; -#define INITIAL_CONNECTIONS_ALLOC 30 /* high guess */ - -/* derive channel number from config pointer */ -#define CHNO(cfgp) (((cfgp)->isdncontrollerused*2) + (cfgp)->isdnchannelused) - -/* local prototypes */ -static int cmp_rights(const void *a, const void *b); -static int monitor_command(int con_index, int fd, int rights); -static void cmd_dump_rights(int fd, int rights, BYTE *cmd); -static void cmd_dump_mcons(int fd, int rights, BYTE *cmd); -static void cmd_reread_cfg(int fd, int rights, BYTE *cmd); -static void cmd_hangup(int fd, int rights, BYTE *cmd); -static void monitor_broadcast(int mask, const BYTE *pkt, size_t bytes); -static int anybody(int mask); - -/* - * Due to the way we structure config files, the rights for an external - * monitor might be stated in multiple steps. First a call to - * monitor_start_rights opens an entry. Further (optional) calls to - * montior_add_rights assemble additional rights for this "current" - * entry. When closing the sys-file section of the config file, the - * "current" entry becomes invalid. - */ -static int cur_add_entry = -1; - -/* - * Initialize the monitor server module. This affects only active - * connections, the access rights are not modified here! - */ -void monitor_init() -{ - accepted = 0; - VARA_EMPTY(connections); -} - -/* - * Prepare for exit - */ -void monitor_exit() -{ - int i; - - /* Close all open connections. */ - VARA_FOREACH(connections, i) - close(VARA_AT(connections, i).sock); - - /* Remove their descriptions */ - VARA_EMPTY(connections); -} - -/* - * Initialize access rights. No active connections are affected! - */ -void monitor_clear_rights() -{ - VARA_EMPTY(rights); - cur_add_entry = -1; -} - -/* - * Add an entry to the access lists. The clientspec either is - * the name of the local socket or a host- or networkname or - * numeric ip/host-bit-len spec. - */ -int monitor_start_rights(const char *clientspec) -{ - int i; - struct monitor_rights r; - - /* initialize the new rights entry */ - memset(&r, 0, sizeof r); - - /* check clientspec */ - if (*clientspec == '/') { - struct sockaddr_un sa; - - /* this is a local socket spec, check if we already have one */ - if (VARA_VALID(rights, local_rights)) - return I4BMAR_DUP; - /* does it fit in a local socket address? */ - if (strlen(clientspec) > sizeof sa.sun_path) - return I4BMAR_LENGTH; - r.local = 1; - strcpy(r.name, clientspec); -#ifndef I4B_NOTCPIP_MONITOR - } else { - /* remote entry, parse host/net and cidr */ - char hostname[FILENAME_MAX]; - char *p; - p = strchr(clientspec, '/'); - if (!p) { - struct hostent *host; - u_int32_t hn; - /* must be a host spec */ - r.mask = ~0; - host = gethostbyname(clientspec); - if (!host) - return I4BMAR_NOIP; - memcpy(&hn, host->h_addr_list[0], sizeof hn); - r.net = (u_int32_t)ntohl(hn); - } else if (p[1]) { - /* must be net/cidr spec */ - int l; - struct netent *net; - u_int32_t s = ~0U; - int num = strtol(p+1, NULL, 10); - if (num < 0 || num > 32) - return I4BMAR_CIDR; - s >>= num; - s ^= ~0U; - l = p - clientspec; - if (l >= sizeof hostname) - return I4BMAR_LENGTH; - strncpy(hostname, clientspec, l); - hostname[l] = '\0'; - net = getnetbyname(hostname); - if (net == NULL) - r.net = (u_int32_t)inet_network(hostname); - else - r.net = (u_int32_t)net->n_net; - r.mask = s; - r.net &= s; - } else - return I4BMAR_CIDR; - - /* check for duplicate entry */ - VARA_FOREACH(rights, i) - if (VARA_AT(rights, i).mask == r.mask && - VARA_AT(rights, i).net == r.net && - VARA_AT(rights, i).local == r.local) - return I4BMAR_DUP; -#endif - } - r.rights = 0; - - /* entry ok, add it to the collection */ - cur_add_entry = i = VARA_NUM(rights); - VARA_ADD_AT(rights, i, struct monitor_rights, INITIAL_RIGHTS_ALLOC); - memcpy(&VARA_AT(rights, i), &r, sizeof r); - if (r.local) - local_rights = i; - - log(LL_DBG, "system: monitor = %s", clientspec); - - return I4BMAR_OK; -} - -/* - * Add rights to the currently constructed entry - if any. - */ -void monitor_add_rights(int rights_mask) -{ - if (cur_add_entry < 0) return; /* noone under construction */ - - VARA_AT(rights, cur_add_entry).rights |= rights_mask; - - log(LL_DBG, "system: monitor-access = 0x%x", rights_mask); -} - -/* - * All rights have been added now. Sort the to get most specific - * host/net masks first, so we can travel the list and use the first - * match for actual rights. - */ -void monitor_fixup_rights() -{ - int i; - - /* no more rights may be added to the current entry */ - cur_add_entry = -1; - - /* sort the rights array */ - qsort(VARA_PTR(rights), VARA_NUM(rights), sizeof(struct monitor_rights), cmp_rights); - - /* now the local entry may have moved, update its index */ - if (VARA_VALID(rights, local_rights)) { - local_rights = -1; - VARA_FOREACH(rights, i) { - if (VARA_AT(rights, i).local) { - local_rights = i; - break; - } - } - } -} - -/* comparator for rights */ -static int cmp_rights(const void *a, const void *b) -{ - u_int32_t mask; - struct monitor_rights const * pa = (struct monitor_rights const*)a; - struct monitor_rights const * pb = (struct monitor_rights const*)b; - - /* local sorts first */ - if (pa->local) - return -1; - - /* which is the less specific netmask? */ - mask = pa->mask; - if ((pb->mask & mask) == 0) - mask = pb->mask; - /* are the entries disjunct? */ - if ((pa->net & mask) != (pb->net & mask)) { - /* simply compare net part of address */ - return ((pa->net & mask) < (pb->net & mask)) ? -1 : 1; - } - /* One entry is part of the others net. We already now "mask" is - * the netmask of the less specific (i.e. greater) one */ - return (pa->mask == mask) ? 1 : -1; -} - -#ifndef I4B_NOTCPIP_MONITOR -/* - * Check if access rights for a remote socket are specified and - * create this socket. Return -1 otherwise. - */ -int monitor_create_remote_socket(int portno) -{ - struct sockaddr_in sa; - int val; - int remotesockfd = socket(AF_INET, SOCK_STREAM, 0); - if (remotesockfd == -1) { - log(LL_ERR, "could not create remote monitor socket, errno = %d", errno); - exit(1); - } - val = 1; - if (setsockopt(remotesockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof val)) { - log(LL_ERR, "could not setsockopt, errno = %d", errno); - exit(1); - } - memset(&sa, 0, sizeof sa); - sa.sin_len = sizeof sa; - sa.sin_family = AF_INET; - sa.sin_port = htons(portno); - sa.sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(remotesockfd, (struct sockaddr *)&sa, sizeof sa) == -1) { - log(LL_ERR, "could not bind remote monitor socket to port %d, errno = %d", portno, errno); - exit(1); - } - if (listen(remotesockfd, 0)) { - log(LL_ERR, "could not listen on monitor socket, errno = %d", errno); - exit(1); - } - - return remotesockfd; -} -#endif - -/* - * Check if access rights for a local socket are specified and - * create this socket. Return -1 otherwise. - */ -int monitor_create_local_socket() -{ - int s; - struct sockaddr_un sa; - - /* check for a local entry */ - if (!VARA_VALID(rights, local_rights)) - return -1; - - /* create and setup socket */ - s = socket(AF_LOCAL, SOCK_STREAM, 0); - if (s == -1) { - log(LL_ERR, "could not create local monitor socket, errno = %d", errno); - exit(1); - } - unlink(VARA_AT(rights, local_rights).name); - memset(&sa, 0, sizeof sa); - sa.sun_len = sizeof sa; - sa.sun_family = AF_LOCAL; - strcpy(sa.sun_path, VARA_AT(rights, local_rights).name); - if (bind(s, (struct sockaddr *)&sa, sizeof sa)) { - log(LL_ERR, "could not bind local monitor socket [%s], errno = %d", VARA_AT(rights, local_rights).name, errno); - exit(1); - } - if (listen(s, 0)) { - log(LL_ERR, "could not listen on local monitor socket, errno = %d", errno); - exit(1); - } - - return s; -} - -/* - * Prepare a fd_set for a select call. Add all our local - * filedescriptors to the set, increment max_fd if appropriate. - */ -void monitor_prepselect(fd_set *selset, int *max_fd) -{ - int i; - - VARA_FOREACH(connections, i) { - int fd = VARA_AT(connections, i).sock; - if (fd > *max_fd) - *max_fd = fd; - FD_SET(fd, selset); - } -} - -/* - * Check if the result from a select call indicates something - * to do for us. - */ -void monitor_handle_input(fd_set *selset) -{ - int i; - - VARA_FOREACH(connections, i) { - int fd = VARA_AT(connections, i).sock; - if (FD_ISSET(fd, selset)) { - /* handle command from this client */ - if (monitor_command(i, fd, VARA_AT(connections, i).rights) != 0) { - /* broken or closed connection */ - log(LL_DBG, "monitor connection #%d closed", i); - VARA_REMOVEAT(connections, i); - i--; - } - } - } - - /* all connections gone? */ - if (VARA_NUM(connections) == 0) - accepted = 0; -} - -/* - * Try new incoming connection on the given socket. - * Setup client descriptor and send initial data. - */ -void monitor_handle_connect(int sockfd, int is_local) -{ - struct monitor_connection *con; -#ifndef I4B_NOTCPIP_MONITOR - struct sockaddr_in ia; - u_int32_t ha = 0; -#endif - struct sockaddr_un ua; - BYTE idata[I4B_MON_IDATA_SIZE]; - int fd = -1, s, i, r_mask; - char source[FILENAME_MAX]; - - /* accept the connection */ - if (is_local) { - s = sizeof ua; - fd = accept(sockfd, (struct sockaddr *)&ua, &s); - strcpy(source, "local connection"); -#ifndef I4B_NOTCPIP_MONITOR - } else { - s = sizeof ia; - fd = accept(sockfd, (struct sockaddr *)&ia, &s); - snprintf(source, sizeof source, "tcp/ip connection from %s\n", - inet_ntoa(ia.sin_addr)); - memcpy(&ha, &ia.sin_addr.s_addr, sizeof ha); - ha = ntohl(ha); -#endif - } - - /* check the access rights of this connection */ - r_mask = 0; - VARA_FOREACH(rights, i) { - struct monitor_rights *r = &VARA_AT(rights, i); - if (r->local) { - if (is_local) { - r_mask = r->rights; - break; - } -#ifndef I4B_NOTCPIP_MONITOR - } else { - if ((ha & r->mask) == r->net) { - r_mask = r->rights; - break; - } -#endif - } - } - - if (r_mask == 0) { - /* no rights - go away */ - log(LL_DBG, "monitor access denied: %s", source); - close(fd); - return; - } - - accepted = 1; - i = VARA_NUM(connections); - VARA_ADD_AT(connections, i, struct monitor_connection, INITIAL_CONNECTIONS_ALLOC); - con = &VARA_AT(connections, i); - memset(con, 0, sizeof *con); - con->sock = fd; - con->rights = r_mask; - log(LL_DBG, "monitor access granted, rights = %x, #%d, %s", - r_mask, i, source); - - /* send initial data */ - I4B_PREP_CMD(idata, I4B_MON_IDATA_CODE); - I4B_PUT_2B(idata, I4B_MON_IDATA_VERSMAJOR, MPROT_VERSION); - I4B_PUT_2B(idata, I4B_MON_IDATA_VERSMINOR, MPROT_REL); - I4B_PUT_2B(idata, I4B_MON_IDATA_NUMCTRL, ncontroller); - I4B_PUT_4B(idata, I4B_MON_IDATA_CLACCESS, r_mask); - write(fd, idata, sizeof idata); - - for (i = 0; i < ncontroller; i++) { - BYTE ictrl[I4B_MON_ICTRL_SIZE]; - I4B_PREP_CMD(ictrl, I4B_MON_ICTRL_CODE); - I4B_PUT_STR(ictrl, I4B_MON_ICTRL_NAME, name_of_controller(isdn_ctrl_tab[i].ctrl_type, isdn_ctrl_tab[i].card_type)); - I4B_PUT_2B(ictrl, I4B_MON_ICTRL_BUSID, 0); - I4B_PUT_4B(ictrl, I4B_MON_ICTRL_FLAGS, 0); - I4B_PUT_4B(ictrl, I4B_MON_ICTRL_NCHAN, 2); - write(fd, ictrl, sizeof ictrl); - } -} - -/* dump all monitor rights */ -static void cmd_dump_rights(int fd, int r_mask, BYTE *cmd) -{ - int i; - BYTE drini[I4B_MON_DRINI_SIZE]; - BYTE dr[I4B_MON_DR_SIZE]; - - I4B_PREP_EVNT(drini, I4B_MON_DRINI_CODE); - I4B_PUT_2B(drini, I4B_MON_DRINI_COUNT, VARA_NUM(rights)); - write(fd, drini, sizeof drini); - - VARA_FOREACH(rights, i) { - I4B_PREP_EVNT(dr, I4B_MON_DR_CODE); - I4B_PUT_4B(dr, I4B_MON_DR_RIGHTS, VARA_AT(rights, i).rights); - I4B_PUT_4B(dr, I4B_MON_DR_NET, VARA_AT(rights, i).net); - I4B_PUT_4B(dr, I4B_MON_DR_MASK, VARA_AT(rights, i).mask); - I4B_PUT_1B(dr, I4B_MON_DR_LOCAL, VARA_AT(rights, i).local); - write(fd, dr, sizeof dr); - } -} - -/* rescan config file */ -static void cmd_reread_cfg(int fd, int rights, BYTE *cmd) -{ - rereadconfig(42); -} - -/* drop one connection */ -static void cmd_hangup(int fd, int rights, BYTE *cmd) -{ - int channel = I4B_GET_4B(cmd, I4B_MON_HANGUP_CHANNEL); - hangup_channel(channel); -} - -/* dump all active monitor connections */ -static void cmd_dump_mcons(int fd, int rights, BYTE *cmd) -{ - int i; - BYTE dcini[I4B_MON_DCINI_SIZE]; - - I4B_PREP_EVNT(dcini, I4B_MON_DCINI_CODE); - I4B_PUT_2B(dcini, I4B_MON_DCINI_COUNT, VARA_NUM(connections)); - write(fd, dcini, sizeof dcini); - - VARA_FOREACH(connections, i) { -#ifndef I4B_NOTCPIP_MONITOR - int namelen; - struct sockaddr_in name; -#endif - BYTE dc[I4B_MON_DC_SIZE]; - - I4B_PREP_EVNT(dc, I4B_MON_DC_CODE); - I4B_PUT_4B(dc, I4B_MON_DC_RIGHTS, VARA_AT(connections, i).rights); -#ifndef I4B_NOTCPIP_MONITOR - namelen = sizeof name; - if (getpeername(VARA_AT(connections, i).sock, (struct sockaddr*)&name, &namelen) == 0) - memcpy(dc+I4B_MON_DC_WHO, &name.sin_addr, sizeof name.sin_addr); -#endif - write(fd, dc, sizeof dc); - } -} - -/* - * Handle a command from the given socket. The client - * has rights as specified in the rights parameter. - * Return non-zero if connection is closed. - */ -static int monitor_command(int con_index, int fd, int rights) -{ - char cmd[I4B_MAX_MON_CLIENT_CMD]; - u_int code; - /* command dispatch table */ - typedef void (*cmd_func_t)(int fd, int rights, BYTE *cmd); - static struct { - cmd_func_t call; /* function to execute */ - u_int rights; /* necessary rights */ - } cmd_tab[] = - { - /* 0 */ { NULL, 0 }, - /* 1 */ { cmd_dump_rights, I4B_CA_COMMAND_FULL }, - /* 2 */ { cmd_dump_mcons, I4B_CA_COMMAND_FULL }, - /* 3 */ { cmd_reread_cfg, I4B_CA_COMMAND_FULL }, - /* 4 */ { cmd_hangup, I4B_CA_COMMAND_FULL }, - }; -#define NUMCMD (sizeof cmd_tab / sizeof cmd_tab[0]) - - u_long u; - int bytes; - - /* Network transfer may deliver two or more packets concatenated. - * Peek at the header and read only one event at a time... */ - ioctl(fd, FIONREAD, &u); - if (u < I4B_MON_CMD_HDR) { - if (u == 0) { - /* socket closed by peer */ - close(fd); - return 1; - } - return 0; /* not enough data there yet */ - } - bytes = recv(fd, cmd, I4B_MON_CMD_HDR, MSG_PEEK); - if (bytes < I4B_MON_CMD_HDR) - return 0; /* errh? something must be wrong... */ - bytes = I4B_GET_2B(cmd, I4B_MON_CMD_LEN); - if (bytes >= sizeof cmd) { - close(fd); - log(LL_ERR, "garbage on monitor connection #%d, closing it", con_index); - return 1; - } - /* now we know the size, it fits, so lets read it! */ - if (read(fd, cmd, bytes) <= 0) { - close(fd); - return 1; - } - - /* decode command */ - code = I4B_GET_2B(cmd, I4B_MON_CMD); - - /* special case: may modify our connection descriptor, is - * beyound all rights checks */ - if (code == I4B_MON_CCMD_SETMASK) { - /* - u_int major = I4B_GET_2B(cmd, I4B_MON_ICLIENT_VERMAJOR); - u_int minor = I4B_GET_2B(cmd, I4B_MON_ICLIENT_VERMINOR); - */ - int events = I4B_GET_4B(cmd, I4B_MON_ICLIENT_EVENTS); - VARA_AT(connections, con_index).events = events & rights; - return 0; - } - - if (code < 0 || code >= NUMCMD) { - log(LL_ERR, "illegal command from client #%d: code = %d\n", - con_index, code); - return 0; - } - if (cmd_tab[code].call == NULL) - return 0; - if ((cmd_tab[code].rights & rights) == cmd_tab[code].rights) - cmd_tab[code].call(fd, rights, cmd); - - return 0; -} - -/* - * Check if somebody would receive an event with this mask. - * We are lazy and try to avoid assembling unneccesary packets. - * Return 0 if no one interested, nonzero otherwise. - */ -static int anybody(int mask) -{ - int i; - - VARA_FOREACH(connections, i) - if ((VARA_AT(connections, i).events & mask) == mask) - return 1; - - return 0; -} - -/* - * Send an event to every connection interested in this kind of - * event - */ -static void monitor_broadcast(int mask, const BYTE *pkt, size_t bytes) -{ - int i; - - VARA_FOREACH(connections, i) { - if ((VARA_AT(connections, i).events & mask) == mask) { - int fd = VARA_AT(connections, i).sock; - write(fd, pkt, bytes); - } - } -} - -/* - * Post a logfile event - */ -void monitor_evnt_log(int prio, const char * what, const char * msg) -{ - BYTE evnt[I4B_MON_LOGEVNT_SIZE]; - time_t now; - - if (!anybody(I4B_CA_EVNT_I4B)) return; - - time(&now); - I4B_PREP_EVNT(evnt, I4B_MON_LOGEVNT_CODE); - I4B_PUT_4B(evnt, I4B_MON_LOGEVNT_TSTAMP, (long)now); - I4B_PUT_4B(evnt, I4B_MON_LOGEVNT_PRIO, prio); - I4B_PUT_STR(evnt, I4B_MON_LOGEVNT_WHAT, what); - I4B_PUT_STR(evnt, I4B_MON_LOGEVNT_MSG, msg); - - monitor_broadcast(I4B_CA_EVNT_I4B, evnt, sizeof evnt); -} - -/* - * Post a charging event on the connection described - * by the given config entry. - */ -void monitor_evnt_charge(cfg_entry_t *cep, int units, int estimate) -{ - int chno = CHNO(cep); - int mask = (cep->direction == DIR_IN) ? I4B_CA_EVNT_CALLIN : I4B_CA_EVNT_CALLOUT; - time_t now; - BYTE evnt[I4B_MON_CHRG_SIZE]; - - if (!anybody(mask)) return; - - time(&now); - I4B_PREP_EVNT(evnt, I4B_MON_CHRG_CODE); - I4B_PUT_4B(evnt, I4B_MON_CHRG_TSTAMP, (long)now); - I4B_PUT_4B(evnt, I4B_MON_CHRG_CHANNEL, chno); - I4B_PUT_4B(evnt, I4B_MON_CHRG_UNITS, units); - I4B_PUT_4B(evnt, I4B_MON_CHRG_ESTIMATED, estimate ? 1 : 0); - - monitor_broadcast(mask, evnt, sizeof evnt); -} - -/* - * Post a connection event - */ -void monitor_evnt_connect(cfg_entry_t *cep) -{ - BYTE evnt[I4B_MON_CONNECT_SIZE]; - char devname[I4B_MAX_MON_STRING]; - int chno = CHNO(cep); - int mask = (cep->direction == DIR_IN) ? I4B_CA_EVNT_CALLIN : I4B_CA_EVNT_CALLOUT; - time_t now; - - if (!anybody(mask)) return; - - time(&now); - snprintf(devname, sizeof devname, "%s%d", bdrivername(cep->usrdevicename), cep->usrdeviceunit); - I4B_PREP_EVNT(evnt, I4B_MON_CONNECT_CODE); - I4B_PUT_4B(evnt, I4B_MON_CONNECT_TSTAMP, (long)now); - I4B_PUT_4B(evnt, I4B_MON_CONNECT_DIR, cep->direction == DIR_OUT ? 1 : 0); - I4B_PUT_4B(evnt, I4B_MON_CONNECT_CHANNEL, chno); - I4B_PUT_STR(evnt, I4B_MON_CONNECT_CFGNAME, cep->name); - I4B_PUT_STR(evnt, I4B_MON_CONNECT_DEVNAME, devname); - I4B_PUT_STR(evnt, I4B_MON_CONNECT_REMPHONE, cep->real_phone_incoming); - I4B_PUT_STR(evnt, I4B_MON_CONNECT_LOCPHONE, cep->remote_phone_dialout); - - monitor_broadcast(mask, evnt, sizeof evnt); -} - -/* - * Post a disconnect event - */ -void monitor_evnt_disconnect(cfg_entry_t *cep) -{ - BYTE evnt[I4B_MON_DISCONNECT_SIZE]; - int chno = CHNO(cep); - int mask = (cep->direction == DIR_IN) ? I4B_CA_EVNT_CALLIN : I4B_CA_EVNT_CALLOUT; - time_t now; - - if (!anybody(mask)) return; - - time(&now); - I4B_PREP_EVNT(evnt, I4B_MON_DISCONNECT_CODE); - I4B_PUT_4B(evnt, I4B_MON_DISCONNECT_TSTAMP, (long)now); - I4B_PUT_4B(evnt, I4B_MON_DISCONNECT_CHANNEL, chno); - - monitor_broadcast(mask, evnt, sizeof evnt); -} - -/* - * Post an up/down event - */ -void monitor_evnt_updown(cfg_entry_t *cep, int up) -{ - BYTE evnt[I4B_MON_UPDOWN_SIZE]; - int chno = CHNO(cep); - int mask = (cep->direction == DIR_IN) ? I4B_CA_EVNT_CALLIN : I4B_CA_EVNT_CALLOUT; - time_t now; - - if (!anybody(mask)) return; - - time(&now); - I4B_PREP_EVNT(evnt, I4B_MON_UPDOWN_CODE); - I4B_PUT_4B(evnt, I4B_MON_UPDOWN_TSTAMP, (long)now); - I4B_PUT_4B(evnt, I4B_MON_UPDOWN_CHANNEL, chno); - I4B_PUT_4B(evnt, I4B_MON_UPDOWN_ISUP, up); - - monitor_broadcast(mask, evnt, sizeof evnt); -} - -void hangup_channel(int channel) -{ - int i; - cfg_entry_t * cep = NULL; - - for (i = 0; i < ncontroller; i++) - { - if(isdn_ctrl_tab[i].state != CTRL_UP) - continue; - if(isdn_ctrl_tab[i].stateb1 != CHAN_IDLE) - { - cep = get_cep_by_cc(i, 0); - if (cep != NULL && CHNO(cep) == channel) - goto found; - } - if(isdn_ctrl_tab[i].stateb2 != CHAN_IDLE) - { - cep = get_cep_by_cc(i, 1); - if (cep != NULL && CHNO(cep) == channel) - goto found; - } - } - /* not found */ - return; - -found: - cep->hangup = 1; - return; -} - -#endif /* I4B_EXTERNAL_MONITOR */ diff --git a/usr.sbin/i4b/isdnd/msghdl.c b/usr.sbin/i4b/isdnd/msghdl.c deleted file mode 100644 index 61ac0edae2895..0000000000000 --- a/usr.sbin/i4b/isdnd/msghdl.c +++ /dev/null @@ -1,983 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - message from kernel handling routines - * -------------------------------------------------- - * - * $Id: msghdl.c,v 1.54 1998/12/19 09:03:16 hm Exp $ - * - * last edit-date: [Sat Dec 19 09:57:16 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -/*---------------------------------------------------------------------------* - * handle incoming CONNECT_IND (=SETUP) message - *---------------------------------------------------------------------------*/ -void -msg_connect_ind(msg_connect_ind_t *mp) -{ - cfg_entry_t *cep; - char *src_tela = "ERROR-src_tela"; - char *dst_tela = "ERROR-dst_tela"; - -#define SRC (aliasing == 0 ? mp->src_telno : src_tela) -#define DST (aliasing == 0 ? mp->dst_telno : dst_tela) - - if((cep = find_matching_entry_incoming(mp)) == NULL) - { - /* log message generated in find_matching_entry_incoming() */ - sendm_connect_resp(NULL, mp->header.cdid, SETUP_RESP_DNTCRE, 0); - return; - } - - if(cep->cdid != CDID_UNUSED && cep->cdid != CDID_RESERVED) - { - /* - * This is an incoming call on a number we just dialed out. - * Stop our dial-out and accept the incoming call. - */ - if(cep->saved_call.cdid != CDID_UNUSED && - cep->saved_call.cdid != CDID_RESERVED) - { - int cdid; - - /* disconnect old, not new */ - - cdid = cep->cdid; - cep->cdid = cep->saved_call.cdid; - sendm_disconnect_req(cep, (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); - cep->cdid = cdid; - - /* - * Shortcut the state machine and mark this - * entry as free - */ -/* XXX */ cep->state = ST_IDLE; /* this is an invalid */ - /* transition, */ - /* so no next_state() */ - /* we have to wait here for an incoming */ - /* disconnect message !!! (-hm) */ - } - } - - if(aliasing) - { - src_tela = get_alias(mp->src_telno); - dst_tela = get_alias(mp->dst_telno); - } - - if(cep->inout == DIR_OUTONLY) - { - log(LL_CHD, "%05d %s incoming call from %s to %s not allowed by configuration!", - mp->header.cdid, cep->name, SRC, DST); - sendm_connect_resp(NULL, mp->header.cdid, SETUP_RESP_DNTCRE, 0); - return; - } - - cep->charge = 0; - cep->last_charge = 0; - - switch(cep->dialin_reaction) - { - case REACT_ACCEPT: - log(LL_CHD, "%05d %s accepting: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - decr_free_channels(mp->controller); - next_state(cep, EV_MCI); - break; - - case REACT_REJECT: - log(LL_CHD, "%05d %s rejecting: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - sendm_connect_resp(cep, mp->header.cdid, SETUP_RESP_REJECT, - (CAUSET_I4B << 8) | CAUSE_I4B_REJECT); - cep->cdid = CDID_UNUSED; - break; - - case REACT_IGNORE: - log(LL_CHD, "%05d %s ignoring: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - sendm_connect_resp(NULL, mp->header.cdid, SETUP_RESP_DNTCRE, 0); - break; - - case REACT_ANSWER: - decr_free_channels(mp->controller); - if(cep->alert) - { - if(mp->display) - { - log(LL_CHD, "%05d %s alerting: incoming call from %s to %s (%s)", - mp->header.cdid, cep->name, SRC, DST, mp->display); - } - else - { - log(LL_CHD, "%05d %s alerting: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - } - next_state(cep, EV_ALRT); - } - else - { - if(mp->display) - { - log(LL_CHD, "%05d %s answering: incoming call from %s to %s (%s)", - mp->header.cdid, cep->name, SRC, DST, mp->display); - } - else - { - log(LL_CHD, "%05d %s answering: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - } - next_state(cep, EV_MCI); - } - break; - - case REACT_CALLBACK: -#ifdef NOTDEF -/*XXX reserve channel ??? */ decr_free_channels(mp->controller); -#endif - if(cep->cdid == CDID_RESERVED) - { - log(LL_CHD, "%05d %s reserved: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - sendm_connect_resp(cep, mp->header.cdid, SETUP_RESP_REJECT, - (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); - /* no state change */ - } - else - { - log(LL_CHD, "%05d %s callback: incoming call from %s to %s", - mp->header.cdid, cep->name, SRC, DST); - sendm_connect_resp(cep, mp->header.cdid, SETUP_RESP_REJECT, - (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); - cep->last_release_time = time(NULL); - cep->cdid = CDID_RESERVED; - next_state(cep, EV_CBRQ); - } - break; - - default: - log(LL_WRN, "msg_connect_ind: unknown response type, tx SETUP_RESP_DNTCRE"); - sendm_connect_resp(NULL, mp->header.cdid, SETUP_RESP_DNTCRE, 0); - break; - } -#undef SRC -#undef DST -} - -/*---------------------------------------------------------------------------* - * handle incoming CONNECT_ACTIVE_IND message - *---------------------------------------------------------------------------*/ -void -msg_connect_active_ind(msg_connect_active_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_connect_active_ind: cdid not found!"); - return; - } - - cep->isdncontrollerused = mp->controller; - cep->isdnchannelused = mp->channel; - - cep->aoc_now = cep->connect_time = time(NULL); - cep->aoc_last = 0; - cep->aoc_diff = 0; - cep->aoc_valid = AOC_INVALID; - - cep->local_disconnect = DISCON_REM; - - cep->inbytes = INVALID; - cep->outbytes = INVALID; - cep->hangup = 0; - - /* set the B-channel to active */ - - if((set_channel_busy(cep->isdncontrollerused, cep->isdnchannelused)) == ERROR) - log(LL_ERR, "msg_connect_active_ind: set_channel_busy failed!"); - - if(cep->direction == DIR_OUT) - { - log(LL_CHD, "%05d %s outgoing call active (ctl %d, ch %d)", - cep->cdid, cep->name, - cep->isdncontrollerused, cep->isdnchannelused); - } - else - { - log(LL_CHD, "%05d %s incoming call active (ctl %d, ch %d)", - cep->cdid, cep->name, - cep->isdncontrollerused, cep->isdnchannelused); - } - -#ifdef USE_CURSES - if(do_fullscreen) - display_connect(cep); -#endif -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor && accepted) - monitor_evnt_connect(cep); -#endif - - if(isdntime && (mp->datetime[0] != '\0')) - { - log(LL_DMN, "date/time from exchange = %s", mp->datetime); - } - - next_state(cep, EV_MCAI); -} - -/*---------------------------------------------------------------------------* - * handle incoming PROCEEDING_IND message - *---------------------------------------------------------------------------*/ -void -msg_proceeding_ind(msg_proceeding_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_proceeding_ind: cdid not found!"); - return; - } - - cep->isdncontrollerused = mp->controller; - cep->isdnchannelused = mp->channel; - - /* set the B-channels active */ - - if((set_channel_busy(cep->isdncontrollerused, cep->isdnchannelused)) == ERROR) - log(LL_ERR, "msg_proceeding_ind: set_channel_busy failed!"); - - log(LL_CHD, "%05d %s outgoing call proceeding (ctl %d, ch %d)", - cep->cdid, cep->name, - cep->isdncontrollerused, cep->isdnchannelused); -} - -/*---------------------------------------------------------------------------* - * handle incoming ALERT_IND message - *---------------------------------------------------------------------------*/ -void -msg_alert_ind(msg_alert_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_alert_ind: cdid not found!"); - return; - } -#ifdef NOTDEF - log(LL_CHD, "%05d %s incoming alert", cep->cdid, cep->name); -#endif -} - -/*---------------------------------------------------------------------------* - * handle incoming L12STAT_IND message - *---------------------------------------------------------------------------*/ -void -msg_l12stat_ind(msg_l12stat_ind_t *ml) -{ -#ifdef USE_CURSES - if(do_fullscreen) - display_l12stat(ml->controller, ml->layer, ml->state); -#endif - - DBGL(DL_CNST, (log(LL_DBG, "msg_l12stat_ind: unit %d, layer %d, state %d", - ml->controller, ml->layer, ml->state))); -} - -/*---------------------------------------------------------------------------* - * handle incoming TEIASG_IND message - *---------------------------------------------------------------------------*/ -void -msg_teiasg_ind(msg_teiasg_ind_t *mt) -{ -#ifdef USE_CURSES - if(do_fullscreen) - display_tei(mt->controller, mt->tei); -#endif - - DBGL(DL_CNST, (log(LL_DBG, "msg_teiasg_ind: unit %d, tei = %d", - mt->controller, mt->tei))); -} - -/*---------------------------------------------------------------------------* - * handle incoming L12STAT_IND message - *---------------------------------------------------------------------------*/ -void -msg_pdeact_ind(msg_pdeact_ind_t *md) -{ - int i; - int ctrl = md->controller; - cfg_entry_t *cep; - -#ifdef USE_CURSES - if(do_fullscreen) - { - display_l12stat(ctrl, LAYER_ONE, LAYER_IDLE); - display_l12stat(ctrl, LAYER_TWO, LAYER_IDLE); - display_tei(ctrl, -1); - } -#endif - - DBGL(DL_CNST, (log(LL_DBG, "msg_pdeact_ind: unit %d, persistent deactivation", ctrl))); - - for(i=0; i < nentries; i++) - { - if((cfg_entry_tab[i].cdid != CDID_UNUSED) && - (cfg_entry_tab[i].isdncontrollerused == ctrl)) - { - cep = &cfg_entry_tab[i]; - - if(cep->cdid == CDID_RESERVED) - { - cep->cdid = CDID_UNUSED; - continue; - } - - cep->cdid = CDID_UNUSED; - - cep->last_release_time = time(NULL); - - SET_CAUSE_TYPE(cep->disc_cause, CAUSET_I4B); - SET_CAUSE_VAL(cep->disc_cause, CAUSE_I4B_L1ERROR); - - if(cep->direction == DIR_OUT) - { - log(LL_CHD, "%05d %s outgoing call disconnected (local)", - cep->cdid, cep->name); - } - else - { - log(LL_CHD, "%05d %s incoming call disconnected (local)", - cep->cdid, cep->name); - } - - log(LL_CHD, "%05d %s cause %s", - cep->cdid, cep->name, print_i4b_cause(cep->disc_cause)); - -#ifdef USE_CURSES - if(do_fullscreen && (cep->connect_time > 0)) - display_disconnect(cep); -#endif - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor && accepted) - monitor_evnt_disconnect(cep); -#endif - if(cep->disconnectprog) - exec_connect_prog(cep, cep->disconnectprog, 1); - - if(cep->connect_time > 0) - { - if(cep->direction == DIR_OUT) - { - log(LL_CHD, "%05d %s charging: %d units, %d seconds", - cep->cdid, cep->name, cep->charge, - (int)difftime(time(NULL), cep->connect_time)); - } - else - { - log(LL_CHD, "%05d %s connected %d seconds", - cep->cdid, cep->name, - (int)difftime(time(NULL), cep->connect_time)); - } - - if((cep->inbytes != INVALID) && (cep->outbytes != INVALID)) - { - if((cep->ioutbytes != cep->outbytes) || - (cep->iinbytes != cep->inbytes)) - { - log(LL_CHD, "%05d %s accounting: in %d, out %d (in %d, out %d)", - cep->cdid, cep->name, - cep->inbytes, cep->outbytes, - cep->iinbytes, cep->ioutbytes); - } - else - { - log(LL_CHD, "%05d %s accounting: in %d, out %d", - cep->cdid, cep->name, - cep->inbytes, cep->outbytes); - } - } - } - - if(useacctfile && (cep->connect_time > 0)) - { - int con_secs; - char logdatetime[41]; - struct tm *tp; - - con_secs = difftime(time(NULL), cep->connect_time); - - tp = localtime(&cep->connect_time); - - strftime(logdatetime,40,I4B_TIME_FORMAT,tp); - - if(cep->inbytes != INVALID && cep->outbytes != INVALID) - { - fprintf(acctfp, "%s - %s %s %d (%d) (%d/%d)\n", - logdatetime, getlogdatetime(), - cep->name, cep->charge, con_secs, - cep->inbytes, cep->outbytes); - } - else - { - fprintf(acctfp, "%s - %s %s %d (%d)\n", - logdatetime, getlogdatetime(), - cep->name, cep->charge, con_secs); - } - } - - /* set the B-channel inactive */ - - if((set_channel_idle(cep->isdncontrollerused, cep->isdnchannelused)) == ERROR) - log(LL_ERR, "msg_pdeact_ind: set_channel_idle failed!"); - - incr_free_channels(cep->isdncontrollerused); - - cep->connect_time = 0; - } - } -} - -/*---------------------------------------------------------------------------* - * handle incoming NEGCOMP_IND message - *---------------------------------------------------------------------------*/ -void -msg_negcomplete_ind(msg_negcomplete_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_negcomp_ind: cdid not found"); - return; - } - - if(cep->connectprog) - exec_connect_prog(cep, cep->connectprog, 0); -} - -/*---------------------------------------------------------------------------* - * handle incoming IFSTATE_CHANGED indication - *---------------------------------------------------------------------------*/ -void -msg_ifstatechg_ind(msg_ifstatechg_ind_t *mp) -{ - cfg_entry_t *cep; - char *device; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_negcomp_ind: cdid not found"); - return; - } - - device = bdrivername(cep->usrdevicename); - log(LL_DBG, "%s%d: switched to state %d\n", device, cep->usrdeviceunit, mp->state); -} - -/*---------------------------------------------------------------------------* - * handle incoming DISCONNECT_IND message - *---------------------------------------------------------------------------*/ -void -msg_disconnect_ind(msg_disconnect_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_disconnect_ind: cdid not found"); - return; - } - - /* is this an aborted out-call prematurely called back? */ - if (cep->saved_call.cdid == mp->header.cdid) - { - DBGL(DL_CNST, (log(LL_DBG, "aborted outcall %05d disconnected", - mp->header.cdid))); - cep->saved_call.cdid = CDID_UNUSED; - - if((set_channel_idle(cep->saved_call.controller, cep->saved_call.channel)) == ERROR) - log(LL_ERR, "msg_disconnect_ind: set_channel_idle failed!"); - - incr_free_channels(cep->saved_call.controller); - return; - } - - cep->last_release_time = time(NULL); - cep->disc_cause = mp->cause; - - if(cep->direction == DIR_OUT) - { - log(LL_CHD, "%05d %s outgoing call disconnected %s", - cep->cdid, cep->name, - cep->local_disconnect == DISCON_LOC ? - "(local)" : "(remote)"); - } - else - { - log(LL_CHD, "%05d %s incoming call disconnected %s", - cep->cdid, cep->name, - cep->local_disconnect == DISCON_LOC ? - "(local)" : "(remote)"); - } - - log(LL_CHD, "%05d %s cause %s", - cep->cdid, cep->name, print_i4b_cause(mp->cause)); - -#ifdef USE_CURSES - if(do_fullscreen && (cep->connect_time > 0)) - display_disconnect(cep); -#endif - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor && accepted) - monitor_evnt_disconnect(cep); -#endif - - if(cep->disconnectprog) - exec_connect_prog(cep, cep->disconnectprog, 1); - - if(cep->connect_time > 0) - { - if(cep->direction == DIR_OUT) - { - log(LL_CHD, "%05d %s charging: %d units, %d seconds", - cep->cdid, cep->name, cep->charge, - (int)difftime(time(NULL), cep->connect_time)); - } - else - { - log(LL_CHD, "%05d %s connected %d seconds", - cep->cdid, cep->name, - (int)difftime(time(NULL), cep->connect_time)); - } - - if((cep->inbytes != INVALID) && (cep->outbytes != INVALID)) - { - if((cep->ioutbytes != cep->outbytes) || - (cep->iinbytes != cep->inbytes)) - { - log(LL_CHD, "%05d %s accounting: in %d, out %d (in %d, out %d)", - cep->cdid, cep->name, - cep->inbytes, cep->outbytes, - cep->iinbytes, cep->ioutbytes); - } - else - { - log(LL_CHD, "%05d %s accounting: in %d, out %d", - cep->cdid, cep->name, - cep->inbytes, cep->outbytes); - } - } - } - - if(useacctfile && (cep->connect_time > 0)) - { - int con_secs; - char logdatetime[41]; - struct tm *tp; - - con_secs = difftime(time(NULL), cep->connect_time); - - tp = localtime(&cep->connect_time); - - strftime(logdatetime,40,I4B_TIME_FORMAT,tp); - - if(cep->inbytes != INVALID && cep->outbytes != INVALID) - { - fprintf(acctfp, "%s - %s %s %d (%d) (%d/%d)\n", - logdatetime, getlogdatetime(), - cep->name, cep->charge, con_secs, - cep->inbytes, cep->outbytes); - } - else - { - fprintf(acctfp, "%s - %s %s %d (%d)\n", - logdatetime, getlogdatetime(), - cep->name, cep->charge, con_secs); - } - } - - /* set the B-channel inactive */ - - if((set_channel_idle(cep->isdncontrollerused, cep->isdnchannelused)) == ERROR) - log(LL_ERR, "msg_disconnect_ind: set_channel_idle failed!"); - - incr_free_channels(cep->isdncontrollerused); - - cep->connect_time = 0; - - next_state(cep, EV_MDI); -} - -/*---------------------------------------------------------------------------* - * handle incoming DIALOUT message - *---------------------------------------------------------------------------*/ -void -msg_dialout(msg_dialout_ind_t *mp) -{ - cfg_entry_t *cep; - - DBGL(DL_DRVR, (log(LL_DBG, "msg_dialout: dial req from %s, unit %d", bdrivername(mp->driver), mp->driver_unit))); - - if((cep = find_by_device_for_dialout(mp->driver, mp->driver_unit)) == NULL) - { - DBGL(DL_DRVR, (log(LL_DBG, "msg_dialout: config entry reserved or no match"))); - return; - } - - if(cep->inout == DIR_INONLY) - { - dialresponse(cep, DSTAT_INONLY); - return; - } - - if((cep->cdid = get_cdid()) == 0) - { - DBGL(DL_DRVR, (log(LL_DBG, "msg_dialout: get_cdid() returned 0!"))); - return; - } - - cep->charge = 0; - cep->last_charge = 0; - - next_state(cep, EV_MDO); -} - -/*---------------------------------------------------------------------------* - * handle incoming DRVRDISC_REQ message - *---------------------------------------------------------------------------*/ -void -msg_drvrdisc_req(msg_drvrdisc_req_t *mp) -{ - cfg_entry_t *cep; - - DBGL(DL_DRVR, (log(LL_DBG, "msg_drvrdisc_req: req from %s, unit %d", bdrivername(mp->driver), mp->driver_unit))); - - if((cep = get_cep_by_driver(mp->driver, mp->driver_unit)) == NULL) - { - DBGL(DL_DRVR, (log(LL_DBG, "msg_drvrdisc_req: config entry not found"))); - return; - } - next_state(cep, EV_DRQ); -} - -/*---------------------------------------------------------------------------* - * handle incoming ACCOUNTING message - *---------------------------------------------------------------------------*/ -void -msg_accounting(msg_accounting_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = find_active_entry_by_driver(mp->driver, mp->driver_unit)) == NULL) - { - log(LL_WRN, "msg_accounting: no config entry found!"); - return; - } - - cep->inbytes = mp->inbytes; - cep->iinbytes = mp->iinbytes; - cep->outbytes = mp->outbytes; - cep->ioutbytes = mp->ioutbytes; - cep->inbps = mp->inbps; - cep->outbps = mp->outbps; - - if(mp->accttype == ACCT_DURING) - { -#ifdef USE_CURSES - if(do_fullscreen) - display_acct(cep); -#endif -#ifdef NOTDEF - else - DBGL(DL_DRVR, (log(LL_DBG, "msg_accounting: %s%d, ioutb=%d, iinb=%d, outb=%d, inb=%d, outbps=%d, inbps=%d", - bdrivername(mp->driver), mp->driver_unit, - mp->ioutbytes, mp->iinbytes, - mp->outbytes, mp->inbytes, - mp->outbps, mp->inbps))); -#endif - } -} - -/*---------------------------------------------------------------------------* - * handle incoming CHARGING message - *---------------------------------------------------------------------------*/ -void -msg_charging_ind(msg_charging_ind_t *mp) -{ - static char *cttab[] = { - "invalid", - "AOCD", - "AOCE", - "estimated" }; - - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_charging_ind: cdid not found"); - return; - } - - if(mp->units_type < CHARGE_INVALID || mp->units_type > CHARGE_CALC) - { - log(LL_ERR, "msg_charging: units_type %d out of range!", mp->units_type); - do_exit(1); - } - - DBGL(DL_DRVR, (log(LL_DBG, "msg_charging: %d unit(s) (%s)", - mp->units, cttab[mp->units_type]))); - - switch(mp->units_type) - { - case CHARGE_AOCD: - cep->charge = mp->units; - - if((cep->unitlengthsrc == ULSRC_DYN) && - (cep->charge != cep->last_charge)) - { - cep->last_charge = cep->charge; - handle_charge(cep); - } - break; - - case CHARGE_AOCE: - cep->charge = mp->units; - break; - - case CHARGE_CALC: - cep->charge = mp->units; -#ifdef USE_CURSES - if(do_fullscreen) - display_ccharge(cep, mp->units); -#endif -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor && accepted) - monitor_evnt_charge(cep, mp->units, 1); -#endif - break; - } -} - -/*---------------------------------------------------------------------------* - * handle incoming IDLE_TIMEOUT_IND message - *---------------------------------------------------------------------------*/ -void -msg_idle_timeout_ind(msg_idle_timeout_ind_t *mp) -{ - cfg_entry_t *cep; - - if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL) - { - log(LL_WRN, "msg_idle_timeout_ind: cdid not found!"); - return; - } - - cep->local_disconnect = DISCON_LOC; - - DBGL(DL_DRVR, (log(LL_DBG, "msg_idle_timeout_ind: idletimeout, kernel sent disconnect!"))); - - check_and_kill(cep); -} - -/*---------------------------------------------------------------------------* - * get a cdid from kernel - *---------------------------------------------------------------------------*/ -int -get_cdid(void) -{ - msg_cdid_req_t mcr; - - mcr.cdid = 0; - - if((ioctl(isdnfd, I4B_CDID_REQ, &mcr)) < 0) - { - log(LL_ERR, "get_cdid: ioctl I4B_CDID_REQ failed: %s", strerror(errno)); - do_exit(1); - } - - return(mcr.cdid); -} - -/*---------------------------------------------------------------------------* - * send message "connect request" to kernel - *---------------------------------------------------------------------------*/ -int -sendm_connect_req(cfg_entry_t *cep) -{ - msg_connect_req_t mcr; - int ret; - - cep->local_disconnect = DISCON_REM; - - cep->unitlength = get_current_rate(cep, 1); - - mcr.cdid = cep->cdid; - - mcr.controller = cep->isdncontrollerused; - mcr.channel = cep->isdnchannelused; - mcr.txdelay = cep->isdntxdelout; - - mcr.bprot = cep->b1protocol; - - mcr.driver = cep->usrdevicename; - mcr.driver_unit = cep->usrdeviceunit; - - mcr.unitlen_time = cep->unitlength; - mcr.idle_time = cep->idle_time_out; - mcr.earlyhup_time = cep->earlyhangup; - - if(cep->unitlengthsrc == ULSRC_DYN) - mcr.unitlen_method = ULEN_METHOD_DYNAMIC; - else - mcr.unitlen_method = ULEN_METHOD_STATIC; - - strcpy(mcr.dst_telno, cep->remote_phone_dialout); - strcpy(mcr.src_telno, cep->local_phone_dialout); - - cep->last_dial_time = time(NULL); - cep->direction = DIR_OUT; - - DBGL(DL_CNST, (log(LL_DBG, "sendm_connect_req: ctrl = %d, chan = %d", cep->isdncontrollerused, cep->isdnchannelused))); - - if((ret = ioctl(isdnfd, I4B_CONNECT_REQ, &mcr)) < 0) - { - log(LL_ERR, "sendm_connect_req: ioctl I4B_CONNECT_REQ failed: %s", strerror(errno)); - do_exit(1); - } - - decr_free_channels(cep->isdncontrollerused); - - log(LL_CHD, "%05d %s dialing out from %s to %s", - cep->cdid, - cep->name, - aliasing ? get_alias(cep->local_phone_dialout) : cep->local_phone_dialout, - aliasing ? get_alias(cep->remote_phone_dialout) : cep->remote_phone_dialout); - - return(ret); -} - -/*---------------------------------------------------------------------------* - * send message "connect response" to kernel - *---------------------------------------------------------------------------*/ -int -sendm_connect_resp(cfg_entry_t *cep, int cdid, int response, int cause) -{ - msg_connect_resp_t mcr; - int ret; - - mcr.cdid = cdid; - - mcr.response = response; - - if(response == SETUP_RESP_REJECT) - { - mcr.cause = cause; - } - else if(response == SETUP_RESP_ACCEPT) - { - cep->direction = DIR_IN; - - mcr.txdelay = cep->isdntxdelin; - - mcr.bprot = cep->b1protocol; - - mcr.driver = cep->usrdevicename; - mcr.driver_unit = cep->usrdeviceunit; - - mcr.max_idle_time = cep->idle_time_in; - } - - if((ret = ioctl(isdnfd, I4B_CONNECT_RESP, &mcr)) < 0) - { - log(LL_ERR, "sendm_connect_resp: ioctl I4B_CONNECT_RESP failed: %s", strerror(errno)); - do_exit(1); - } - - DBGL(DL_DRVR, (log(LL_DBG, "sendm_connect_resp: sent CONNECT_RESP"))); - - return(ret); -} - -/*---------------------------------------------------------------------------* - * send message "disconnect request" to kernel - *---------------------------------------------------------------------------*/ -int -sendm_disconnect_req(cfg_entry_t *cep, int cause) -{ - msg_discon_req_t mcr; - int ret; - - mcr.cdid = cep->cdid; - - mcr.cause = cause; - - cep->local_disconnect = DISCON_LOC; - - if((ret = ioctl(isdnfd, I4B_DISCONNECT_REQ, &mcr)) < 0) - { - log(LL_ERR, "sendm_disconnect_req: ioctl I4B_DISCONNECT_REQ failed: %s", strerror(errno)); - do_exit(1); - } - else - { - DBGL(DL_DRVR, (log(LL_DBG, "sendm_disconnect_req: sent DISCONNECT_REQ"))); - } - return(ret); -} - -/*---------------------------------------------------------------------------* - * send message "alert request" to kernel - *---------------------------------------------------------------------------*/ -int -sendm_alert_req(cfg_entry_t *cep) -{ - msg_alert_req_t mar; - int ret; - - mar.cdid = cep->cdid; - - if((ret = ioctl(isdnfd, I4B_ALERT_REQ, &mar)) < 0) - { - log(LL_ERR, "sendm_alert_req: ioctl I4B_ALERT_REQ failed: %s", strerror(errno)); - do_exit(1); - } - else - { - DBGL(DL_DRVR, (log(LL_DBG, "sendm_alert_req: sent ALERT_REQ"))); - } - return(ret); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/pathnames.h b/usr.sbin/i4b/isdnd/pathnames.h deleted file mode 100644 index 75afec9454634..0000000000000 --- a/usr.sbin/i4b/isdnd/pathnames.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - location of files - * ------------------------------ - * - * $Id: pathnames.h,v 1.5 1998/12/05 18:03:30 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:11:17 1998] - * - *---------------------------------------------------------------------------*/ - -#ifndef _PATHNAMES_H_ -#define _PATHNAMES_H_ - -#define I4BDEVICE "/dev/i4b" - -#define ETCPATH "/etc/isdn" -#define CONFIG_FILE_DEF "/etc/isdn/isdnd.rc" -#define RATES_FILE_DEF "/etc/isdn/isdnd.rates" - -#define LIBDIR "/usr/local/lib/isdn" - -#define LOG_FILE_DEF "/var/log/isdnd.log" -#define ACCT_FILE_DEF "/var/log/isdnd.acct" - -#define PIDFILE "/var/run/isdnd.pid" - -#endif /* _PATHNAMES_H_ */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/pcause.c b/usr.sbin/i4b/isdnd/pcause.c deleted file mode 100644 index c782f2c7181be..0000000000000 --- a/usr.sbin/i4b/isdnd/pcause.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * printing cause values - * --------------------- - * - * $Id: pcause.c,v 1.9 1998/12/05 18:03:31 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:11:31 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -static char *cause_i4b_tab[CAUSE_I4B_MAX+1]; -static char *cause_q850_tab[CAUSE_Q850_MAX]; - -char * -print_i4b_cause(cause_t code) -{ - static char error_message[128]; - - sprintf(error_message, "%d: ", GET_CAUSE_VAL(code)); - - switch(GET_CAUSE_TYPE(code)) - { - case CAUSET_Q850: - strcat(error_message, cause_q850_tab[GET_CAUSE_VAL(code)]); - strcat(error_message, " (Q.850)"); - break; - - case CAUSET_I4B: - if((GET_CAUSE_VAL(code) < CAUSE_I4B_NORMAL) || - (GET_CAUSE_VAL(code) >= CAUSE_I4B_MAX)) - { - SET_CAUSE_VAL(code, CAUSE_I4B_MAX); - } - strcat(error_message, cause_i4b_tab[GET_CAUSE_VAL(code)]); - strcat(error_message, " (I4B)"); - break; - - default: - strcat(error_message, "ERROR: unknown cause type!"); - break; - } - return(error_message); -} - -static char *cause_i4b_tab[CAUSE_I4B_MAX+1] = { - "normal call clearing", - "user busy", - "channel not available", - "incompatible source or destination", - "call rejected", - "destination out of order", - "temporary failure", - "layer 1 error / persistent deactivation", - "ERROR, invalid I4B cause value!" -}; - -static char *cause_q850_tab[CAUSE_Q850_MAX] = { - "Normal D-channel shutdown", - "Unallocated (unassigned) number", - "No route to specified transit network (national use)", - "No route to destination", - "Send special information tone", - "Misdialled trunk prefix (national use)", - "Channel unacceptable", - "Call awarded and being delivered in an established channel", - "Preemption", - "Preemption - circuit reserved for reuse", - -/*10*/ "cause code 10: error, unassigned in Q.850 (03/93)", - "cause code 11: error, unassigned in Q.850 (03/93)", - "cause code 12: error, unassigned in Q.850 (03/93)", - "cause code 13: error, unassigned in Q.850 (03/93)", - "cause code 14: error, unassigned in Q.850 (03/93)", - "cause code 15: error, unassigned in Q.850 (03/93)", - "Normal call clearing", - "User busy", - "No user responding", - "No answer from user (user alerted)", - -/*20*/ "Subscriber absent", - "Call rejected", - "Number changed", - "cause code 23: error, unassigned in Q.850 (03/93)", - "cause code 24: error, unassigned in Q.850 (03/93)", - "cause code 25: error, unassigned in Q.850 (03/93)", - "Non-selected user clearing", - "Destination out of order", - "Invalid number format", - "Facility rejected", - -/*30*/ "Response to STATUS ENQUIRY", - "Normal, unspecified", - "cause code 32: error, unassigned in Q.850 (03/93)", - "cause code 33: error, unassigned in Q.850 (03/93)", - "No circuit / channel available", - "cause code 35: error, unassigned in Q.850 (03/93)", - "cause code 36: error, unassigned in Q.850 (03/93)", - "cause code 37: error, unassigned in Q.850 (03/93)", - "Network out of order", - "Permanent frame mode connection out of service", - -/*40*/ "Permanent frame mode connection operational", - "Temporary failure", - "Switching equipment congestion", - "Access information discarded", - "Requested circuit/channel not available", - "cause code 45: error, unassigned in Q.850 (03/93)", - "Precedence call blocked", - "Resources unavailable, unspecified", - "cause code 48: error, unassigned in Q.850 (03/93)", - "Quality of service unavailable", - -/*50*/ "Requested facility not subscribed", - "cause code 51: error, unassigned in Q.850 (03/93)", - "cause code 52: error, unassigned in Q.850 (03/93)", - "Outgoing calls barred within CUG", - "cause code 54: error, unassigned in Q.850 (03/93)", - "Incoming calls barred within CUG", - "cause code 56: error, unassigned in Q.850 (03/93)", - "Bearer capability not authorized", - "Bearer capability not presently available", - "cause code 59: error, unassigned in Q.850 (03/93)", - -/*60*/ "cause code 60: error, unassigned in Q.850 (03/93)", - "cause code 61: error, unassigned in Q.850 (03/93)", - "Inconsistenciy in designated outg. access info and subscriber class", - "Service or option not available, unspecified", - "cause code 64: error, unassigned in Q.850 (03/93)", - "Bearer capability not implemented", - "Channel type not implemented", - "cause code 67: error, unassigned in Q.850 (03/93)", - "cause code 68: error, unassigned in Q.850 (03/93)", - "Requested facility not implemented", - -/*70*/ "Only restricted digital information bearer capability is available", - "cause code 71: error, unassigned in Q.850 (03/93)", - "cause code 72: error, unassigned in Q.850 (03/93)", - "cause code 73: error, unassigned in Q.850 (03/93)", - "cause code 74: error, unassigned in Q.850 (03/93)", - "cause code 75: error, unassigned in Q.850 (03/93)", - "cause code 76: error, unassigned in Q.850 (03/93)", - "cause code 77: error, unassigned in Q.850 (03/93)", - "cause code 78: error, unassigned in Q.850 (03/93)", - "Service or option not implemented, unspecified", - -/*80*/ "cause code 80: error, unassigned in Q.850 (03/93)", - "Invalid call reference value", - "Identified channel does not exist", - "A suspended call exists, but this call identity does not", - "Call identity in use", - "No call suspended", - "Call having the requested call identity has been cleared", - "User not member of CUG", - "Incompatible destination", - "cause code 89: error, unassigned in Q.850 (03/93)", - -/*90*/ "Non-existent CUG", - "Invalid transit network selection", - "cause code 92: error, unassigned in Q.850 (03/93)", - "cause code 93: error, unassigned in Q.850 (03/93)", - "cause code 94: error, unassigned in Q.850 (03/93)", - "Invalid message, unspecified", - "Mandatory information element is missing", - "Message type non-existent or not implemented", - "Message not compatible with call state or message type non-existent or not implemented", - "Information element/parameter non-existent or not implemented", - -/*100*/ "Invalid information element contents", - "Message not compatible with call state", - "Recovery on timer expiry", - "Parameter non-existent or not implemented, passed on", - "cause code 104: error, unassigned in Q.850 (03/93)", - "cause code 105: error, unassigned in Q.850 (03/93)", - "cause code 106: error, unassigned in Q.850 (03/93)", - "cause code 107: error, unassigned in Q.850 (03/93)", - "cause code 108: error, unassigned in Q.850 (03/93)", - "cause code 109: error, unassigned in Q.850 (03/93)", - -/*110*/ "Message with unrecognized parameter, discarded", - "Protocol error, unspecified", - "cause code 112: error, unassigned in Q.850 (03/93)", - "cause code 113: error, unassigned in Q.850 (03/93)", - "cause code 114: error, unassigned in Q.850 (03/93)", - "cause code 115: error, unassigned in Q.850 (03/93)", - "cause code 116: error, unassigned in Q.850 (03/93)", - "cause code 117: error, unassigned in Q.850 (03/93)", - "cause code 118: error, unassigned in Q.850 (03/93)", - "cause code 119: error, unassigned in Q.850 (03/93)", - -/*120*/ "cause code 120: error, unassigned in Q.850 (03/93)", - "cause code 121: error, unassigned in Q.850 (03/93)", - "cause code 122: error, unassigned in Q.850 (03/93)", - "cause code 123: error, unassigned in Q.850 (03/93)", - "cause code 124: error, unassigned in Q.850 (03/93)", - "cause code 125: error, unassigned in Q.850 (03/93)", - "cause code 126: error, unassigned in Q.850 (03/93)", - "Interworking, unspecified" -}; - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/process.c b/usr.sbin/i4b/isdnd/process.c deleted file mode 100644 index 47c9eda550a1a..0000000000000 --- a/usr.sbin/i4b/isdnd/process.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - process handling routines - * -------------------------------------- - * - * $Id: process.c,v 1.6 1998/12/05 18:03:33 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:11:42 1998] - * - * -hm debugging processhandling - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -/*---------------------------------------------------------------------------* - * check if another instance of us is already running - *---------------------------------------------------------------------------*/ -void -check_pid(void) -{ - FILE *fp; - - /* check if another lock-file already exists */ - - if((fp = fopen(PIDFILE, "r")) != NULL) - { - /* lockfile found, check */ - - int oldpid; - - /* read pid from file */ - - if((fscanf(fp, "%d", &oldpid)) != 1) - { - log(LL_ERR, "ERROR, reading pid from lockfile failed, terminating!"); - exit(1); - } - - /* check if process got from file is still alive */ - - if((kill(oldpid, 0)) != 0) - { - /* process does not exist */ - - /* close file */ - - fclose(fp); - - DBGL(DL_PROC, (log(LL_DBG, "removing old lock-file %s", PIDFILE))); - - /* remove file */ - - unlink(PIDFILE); - } - else - { - /* process is still alive */ - - log(LL_ERR, "ERROR, another daemon is already running, pid = %d, terminating!", oldpid); - exit(1); - } - } -} - -/*---------------------------------------------------------------------------* - * establish and init process lock file - *---------------------------------------------------------------------------*/ -void -write_pid(void) -{ - FILE *fp; - - /* write my pid into lock-file */ - - if((fp = fopen(PIDFILE, "w")) == NULL) - { - log(LL_ERR, "ERROR, can't open lockfile for writing, terminating"); - do_exit(1); - } - - if((fprintf(fp, "%d", (int)getpid())) == EOF) - { - log(LL_ERR, "ERROR, can't write pid to lockfile, terminating"); - do_exit(1); - } - - fsync(fileno(fp)); - - fclose(fp); -} - -/*---------------------------------------------------------------------------* - * become a daemon - *---------------------------------------------------------------------------*/ -void -daemonize(void) -{ - int fd; - - switch (fork()) - { - case -1: /* error */ - log(LL_ERR, "ERROR, daemonize/fork: %s", strerror(errno)); - exit(1); - case 0: /* child */ - break; - default: /* parent */ - exit(0); - } - - /* new session / no control tty */ - - if(setsid() == -1) - { - log(LL_ERR, "ERROR, setsid returns: %s", strerror(errno)); - exit(1); - } - - /* go away from mounted dir */ - - chdir("/"); - - /* move i/o to another device ? */ - - if(do_fullscreen && do_rdev) - { - char *tp; - - if((fd = open(rdev, O_RDWR, 0)) != -1) - { - if(!isatty(fd)) - { - log(LL_ERR, "ERROR, device %s is not a tty!", rdev); - exit(1); - } - if((dup2(fd, STDIN_FILENO)) == -1) - { - log(LL_ERR, "ERROR, dup2 stdin: %s", strerror(errno)); - exit(1); - } - if((dup2(fd, STDOUT_FILENO)) == -1) - { - log(LL_ERR, "ERROR, dup2 stdout: %s", strerror(errno)); - exit(1); - } - if((dup2(fd, STDERR_FILENO)) == -1) - { - log(LL_ERR, "ERROR, dup2 stderr: %s", strerror(errno)); - exit(1); - } - } - else - { - log(LL_ERR, "ERROR, cannot open redirected device: %s", strerror(errno)); - exit(1); - } - - if(fd > 2) - { - if((close(fd)) == -1) - { - log(LL_ERR, "ERROR, close in daemonize: %s", strerror(errno)); - exit(1); - } - } - - /* curses output && fork NEEDS controlling tty */ - - if((ioctl(STDIN_FILENO, TIOCSCTTY, (char *)NULL)) < 0) - { - log(LL_ERR, "ERROR, cannot setup tty as controlling terminal: %s", strerror(errno)); - exit(1); - } - - /* in case there is no environment ... */ - - if(((tp = getenv("TERM")) == NULL) || (*tp == '\0')) - { - if(do_ttytype == 0) - { - log(LL_ERR, "ERROR, no environment variable TERM found and -t not specified!"); - exit(1); - } - - if((setenv("TERM", ttype, 1)) != 0) - { - log(LL_ERR, "ERROR, setenv TERM=%s failed: %s", ttype, strerror(errno)); - exit(1); - } - } - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/rates.c b/usr.sbin/i4b/isdnd/rates.c deleted file mode 100644 index c1b11636a5c78..0000000000000 --- a/usr.sbin/i4b/isdnd/rates.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright (c) 1997 Gary Jennejohn. All rights reserved. - * - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - charging rates description file handling - * ----------------------------------------------------- - * - * $Id: rates.c,v 1.7 1998/12/05 18:03:34 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:11:55 1998] - * - *---------------------------------------------------------------------------*/ - -static char error[256]; - -#ifdef PARSE_DEBUG_MAIN - -#include <stdio.h> - -#define MAIN - -#define ERROR (-1) - -int main() -{ - int ret; - ret = readrates("/etc/isdn/isdnd.rates"); - if(ret == ERROR) - fprintf(stderr, "readrates returns [%d], [%s]\n", ret, error); - else - fprintf(stderr, "readrates returns [%d]\n", ret); - return(ret); -} - -#endif - -#include "isdnd.h" - -static int getrate(cfg_entry_t *cep); - -/*---------------------------------------------------------------------------* - * parse rates file - *---------------------------------------------------------------------------*/ -int -readrates(char *filename) -{ - char buffer[1024]; - register char *bp; - struct rates *rt, *ort; - int rateindx; - int indx; - int line = 0; - FILE *fp; - int first; -#if DEBUG - int i, j; -#endif - - indx = 0; - rt = ort = NULL; - - if((fp = fopen(filename, "r")) == NULL) - { - sprintf(error, "error open %s: %s", filename, sys_errlist[errno]); - rate_error = error; - return(WARNING); - } - - while((fgets(buffer, MAXPATHLEN, fp)) != NULL) - { - line++; - -/* comments */ - if(buffer[0] == '#' || buffer[0] == ' ' || - buffer[0] == '\t' || buffer[0] == '\n') - { - continue; - } - - bp = &buffer[0]; - - /* rate type */ - - if (*bp == 'r' && *(bp+1) == 'a' && isdigit(*(bp+2))) - { - rateindx = *(bp+2) - '0'; - bp += 3; - - /* eat space delimiter */ - - while(isspace(*bp)) - bp++; - } - else - { - sprintf(error, "rates: invalid rate type %c%c%c in line %d", *bp, *(bp+1), *(bp+2), line); - goto rate_error; - } - if (rateindx >= NRATES) - { - sprintf(error, "rates: invalid rate index %d in line %d", rateindx, line); - goto rate_error; - } - - /* day */ - - if(isdigit(*bp) && *bp >= '0' && *bp <= '6') - { - indx = *bp - '0'; - - DBGL(DL_RATES, (log(LL_DBG, "rates: index = %d", indx))); - } - else - { - sprintf(error, "rates: invalid day digit %c in line %d", *bp, line); - goto rate_error; - } - - if(rates[rateindx][indx] == NULL) - { - rt = (struct rates *)malloc(sizeof (struct rates)); - if (rt == NULL) - { - sprintf(error, "rates: cannot malloc space for rate structure"); - goto rate_error; - } - rt->next = NULL; - rates[rateindx][indx] = rt; - } - - bp++; - - /* eat space delimiter */ - - while(isspace(*bp)) - bp++; - - /* now loop to get the rates entries */ - - first = 1; - - while(*bp && isdigit(*bp)) - { - if(first) - { - first = 0; - } - else - { - ort = rt; - - rt = (struct rates *)malloc(sizeof (struct rates)); - if (rt == NULL) - { - sprintf(error, "rates: cannot malloc space2 for rate structure"); - goto rate_error; - } - ort->next = rt; - rt->next = NULL; - } - - /* start hour */ - - if(isdigit(*bp) && isdigit(*(bp+1))) - { - rt->start_hr = atoi(bp); - bp += 2; - } - else - { - sprintf(error, "rates: start_hr error in line %d", line); - goto rate_error; - } - - /* point */ - - if(*bp == '.') - { - bp++; - } - else - { - sprintf(error, "rates: no '.' after start_hr in line %d", line); - goto rate_error; - } - - /* start minute */ - - if(isdigit(*bp) && isdigit(*(bp+1))) - { - rt->start_min = atoi(bp); - bp += 2; - } - else - { - sprintf(error, "rates: start_min error in line %d", line); - goto rate_error; - } - - /* minus */ - - if(*bp == '-') - { - bp++; - } - else - { - sprintf(error, "rates: no '-' after start_min in line %d", line); - goto rate_error; - } - - /* end hour */ - - if(isdigit(*bp) && isdigit(*(bp+1))) - { - rt->end_hr = atoi(bp); - bp += 2; - } - else - { - sprintf(error, "rates: end_hr error in line %d", line); - goto rate_error; - } - - /* point */ - - if(*bp == '.') - { - bp++; - } - else - { - sprintf(error, "rates: no '.' after end_hr in line %d", line); - goto rate_error; - } - - /* end minute */ - - if(isdigit(*bp) && isdigit(*(bp+1))) - { - rt->end_min = atoi(bp); - bp += 2; - } - else - { - sprintf(error, "rates: end_min error in line %d", line); - goto rate_error; - } - - /* colon */ - - if(*bp == ':') - { - bp++; - } - else - { - sprintf(error, "rates: no ':' after end_min in line %d", line); - goto rate_error; - } - - /* time */ - - if(isdigit(*bp)) - { - rt->rate = atoi(bp); - while(!isspace(*bp)) - bp++; - } - else - { - sprintf(error, "rates: first rate digit error in line %d", line); - goto rate_error; - } - - /* eat space delimiter */ - - while(isspace(*bp)) - bp++; - } - } - -#if DEBUG - if(debug_flags & DL_RATES) - { - for (j = 0; j < NRATES; j++) - { - for (i = 0; i < NDAYS; i++) - { - if (rates [j][i] != NULL) - { - rt = rates [j][i]; - for (; rt; rt = rt->next) - { - log(LL_DBG, "rates: index %d day %d = %d.%d-%d.%d:%d", - j, i, rt->start_hr, rt->start_min, - rt->end_hr,rt->end_min,rt->rate); - } - } - else - { - log(LL_DBG, "rates: NO entry for day %d !!\n", i); - } - } - } - } -#endif - fclose(fp); - return(GOOD); - -rate_error: - fclose(fp); - rate_error = error; - return(ERROR); -} - -#ifndef PARSE_DEBUG_MAIN - -/*---------------------------------------------------------------------------* - * get unit length time from configured source - *---------------------------------------------------------------------------*/ -int -get_current_rate(cfg_entry_t *cep, int logit) -{ - int rt; - - switch(cep->unitlengthsrc) - { - case ULSRC_CMDL: /* specified on commandline */ - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (cmdl)", - cep->cdid, cep->name, unit_length); - return(unit_length); - break; - - case ULSRC_CONF: /* get it from config file */ - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (conf)", - cep->cdid, cep->name, cep->unitlength); - return(cep->unitlength); - - case ULSRC_RATE: /* get it dynamic from ratesfile*/ - if(!got_rate) /* got valid rates struct ?? */ - { - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (no ratefile)", - cep->cdid, cep->name, UNITLENGTH_DEFAULT); - return(UNITLENGTH_DEFAULT); - } - if((cep->ratetype >= NRATES) || - (cep->ratetype == INVALID_RATE)) - { - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (rate out of range)", - cep->cdid, cep->name, UNITLENGTH_DEFAULT); - return(UNITLENGTH_DEFAULT); - } - - if((rt = getrate(cep)) != -1) - { - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (rate)", - cep->cdid, cep->name, rt); - return(rt); - } - - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (ratescan fail)", - cep->cdid, cep->name, UNITLENGTH_DEFAULT); - - return(UNITLENGTH_DEFAULT); - break; - - case ULSRC_DYN: /* dynamically calculated from AOC */ - if((rt = getrate(cep)) != -1) - { - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (aocd, rate)", - cep->cdid, cep->name, rt); - return(rt); - } - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (aocd, default)", - cep->cdid, cep->name, UNITLENGTH_DEFAULT); - - return(UNITLENGTH_DEFAULT); - break; - - default: - if(logit) - log(LL_CHD, "%05d %s rate %d sec/unit (unitlen unknown)", - cep->cdid, cep->name, UNITLENGTH_DEFAULT); - - return(UNITLENGTH_DEFAULT); - break; - } -} - -/*---------------------------------------------------------------------------* - * get the currently active rate - *---------------------------------------------------------------------------*/ -static int -getrate(cfg_entry_t *cep) -{ - struct tm *ptr; - time_t now; - register struct rates *hd; - - if((!got_rate) || - (cep->ratetype >= NRATES) || - (cep->ratetype == INVALID_RATE)) - { - return(-1); - } - - time(&now); /* get current time */ - - ptr = localtime(&now); - - /* walk thru the rates for weekday until rate for current time found */ - - for (hd = rates[cep->ratetype][ptr->tm_wday]; hd; hd = hd->next) - { - /* current time within window ? */ - if((hd->start_hr <= ptr->tm_hour) && - (hd->end_hr > ptr->tm_hour)) - { - DBGL(DL_RATES, (log(LL_DBG, "rate=%d sec/unit (day=%d, beg=%d, end=%d, current=%d)", - hd->rate, - ptr->tm_wday, - hd->start_hr, - hd->end_hr, - ptr->tm_hour))); - - return (hd->rate); - } - } - return(-1); -} - -#endif /* PARSE_DEBUG_MAIN */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/rc_config.c b/usr.sbin/i4b/isdnd/rc_config.c deleted file mode 100644 index 884edfa10fe2e..0000000000000 --- a/usr.sbin/i4b/isdnd/rc_config.c +++ /dev/null @@ -1,1140 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - config file processing - * ----------------------------------- - * - * $Id: rc_config.c,v 1.35 1998/12/16 13:39:47 hm Exp $ - * - * last edit-date: [Mon Dec 14 13:41:41 1998] - * - *---------------------------------------------------------------------------*/ - -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#include "isdnd.h" -#include "y.tab.h" - -#include "monitor.h" -#include "vararray.h" - -extern int entrycount; -extern int lineno; -extern char *yytext; - -extern FILE *yyin; -extern int yyparse(); - -static void set_config_defaults(void); -static void check_config(void); -static void print_config(void); - -static int nregexpr = 0; -static int nregprog = 0; - -/*---------------------------------------------------------------------------* - * called from main to read and process config file - *---------------------------------------------------------------------------*/ -void -configure(char *filename, int reread) -{ - extern void reset_scanner(FILE *inputfile); - - set_config_defaults(); - - yyin = fopen(filename, "r"); - - if(reread) - { - reset_scanner(yyin); - } - - if (yyin == NULL) - { - log(LL_ERR, "cannot fopen file [%s]", filename); - exit(1); - } - - yyparse(); - - monitor_fixup_rights(); - - check_config(); /* validation and consistency check */ - - fclose(yyin); - - if(do_print) - { - if(config_error_flag) - { - log(LL_ERR, "there were %d error(s) in the configuration file, terminating!", config_error_flag); - exit(1); - } - print_config(); - do_exit(0); - } -} - -/*---------------------------------------------------------------------------* - * yacc error routine - *---------------------------------------------------------------------------*/ -void -yyerror(const char *msg) -{ - log(LL_ERR, "configuration error: %s at line %d, token \"%s\"", msg, lineno+1, yytext); - config_error_flag++; -} - -/*---------------------------------------------------------------------------* - * fill all config entries with default values - *---------------------------------------------------------------------------*/ -static void -set_config_defaults(void) -{ - cfg_entry_t *cep = &cfg_entry_tab[0]; /* ptr to config entry */ - int i; - - /* system section cleanup */ - - nregprog = nregexpr = 0; - - rt_prio = RTPRIO_NOTUSED; - - /* clean regular expression table */ - - for(i=0; i < MAX_RE; i++) - { - if(rarr[i].re_expr) - free(rarr[i].re_expr); - rarr[i].re_expr = NULL; - - if(rarr[i].re_prog) - free(rarr[i].re_prog); - rarr[i].re_prog = NULL; - - rarr[i].re_flg = 0; - } - - /* entry section cleanup */ - - for(i=0; i < CFG_ENTRY_MAX; i++, cep++) - { - bzero(cep, sizeof(cfg_entry_t)); - - /* ====== filled in at startup configuration, then static */ - - sprintf(cep->name, "ENTRY%d", i); - - cep->isdncontroller = INVALID; - cep->isdnchannel = CHAN_ANY; - - cep->usrdevicename = INVALID; - cep->usrdeviceunit = INVALID; - - cep->remote_numbers_handling = RNH_LAST; - - cep->dialin_reaction = REACT_IGNORE; - - cep->b1protocol = BPROT_NONE; - - cep->unitlength = UNITLENGTH_DEFAULT; - - cep->earlyhangup = EARLYHANGUP_DEFAULT; - - cep->ratetype = INVALID_RATE; - - cep->unitlengthsrc = ULSRC_NONE; - - cep->answerprog = ANSWERPROG_DEF; - - cep->callbackwait = CALLBACKWAIT_MIN; - - cep->calledbackwait = CALLEDBACKWAIT_MIN; - - cep->dialretries = DIALRETRIES_DEF; - - cep->recoverytime = RECOVERYTIME_MIN; - - cep->dialouttype = DIALOUT_NORMAL; - - cep->inout = DIR_INOUT; - - /* ======== filled in after start, then dynamic */ - - cep->cdid = CDID_UNUSED; - - cep->state = ST_IDLE; - - cep->aoc_valid = AOC_INVALID; - } -} - -/*---------------------------------------------------------------------------* - * extract values from config and fill table - *---------------------------------------------------------------------------*/ -void -cfg_setval(int keyword) -{ - int i; - - switch(keyword) - { - case ACCTALL: - acct_all = yylval.booln; - log(LL_DBG, "system: acctall = %d", yylval.booln); - break; - - case ACCTFILE: - strcpy(acctfile, yylval.str); - log(LL_DBG, "system: acctfile = %s", yylval.str); - break; - - case ALERT: - if(yylval.num < MINALERT) - { - yylval.num = MINALERT; - log(LL_DBG, "entry %d: alert < %d, min = %d", entrycount, MINALERT, yylval.num); - } - else if(yylval.num > MAXALERT) - { - yylval.num = MAXALERT; - log(LL_DBG, "entry %d: alert > %d, min = %d", entrycount, MAXALERT, yylval.num); - } - - log(LL_DBG, "entry %d: alert = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].alert = yylval.num; - break; - - case ALIASING: - log(LL_DBG, "system: aliasing = %d", yylval.booln); - aliasing = yylval.booln; - break; - - case ALIASFNAME: - strcpy(aliasfile, yylval.str); - log(LL_DBG, "system: aliasfile = %s", yylval.str); - break; - - case ANSWERPROG: - if((cfg_entry_tab[entrycount].answerprog = malloc(strlen(yylval.str)+1)) == NULL) - { - log(LL_ERR, "entry %d: answerstring, malloc failed!", entrycount); - do_exit(1); - } - strcpy(cfg_entry_tab[entrycount].answerprog, yylval.str); - log(LL_DBG, "entry %d: answerprog = %s", entrycount, yylval.str); - break; - - case B1PROTOCOL: - log(LL_DBG, "entry %d: b1protocol = %s", entrycount, yylval.str); - if(!(strcmp(yylval.str, "raw"))) - cfg_entry_tab[entrycount].b1protocol = BPROT_NONE; - else if(!(strcmp(yylval.str, "hdlc"))) - cfg_entry_tab[entrycount].b1protocol = BPROT_RHDLC; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"b1protocol\" at line %d!", lineno); - config_error_flag++; - } - break; - - case CALLBACKWAIT: - if(yylval.num < CALLBACKWAIT_MIN) - { - yylval.num = CALLBACKWAIT_MIN; - log(LL_DBG, "entry %d: callbackwait < %d, min = %d", entrycount, CALLBACKWAIT_MIN, yylval.num); - } - - log(LL_DBG, "entry %d: callbackwait = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].callbackwait = yylval.num; - break; - - case CALLEDBACKWAIT: - if(yylval.num < CALLEDBACKWAIT_MIN) - { - yylval.num = CALLEDBACKWAIT_MIN; - log(LL_DBG, "entry %d: calledbackwait < %d, min = %d", entrycount, CALLEDBACKWAIT_MIN, yylval.num); - } - - log(LL_DBG, "entry %d: calledbackwait = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].calledbackwait = yylval.num; - break; - - case CONNECTPROG: - if((cfg_entry_tab[entrycount].connectprog = malloc(strlen(yylval.str)+1)) == NULL) - { - log(LL_ERR, "entry %d: connectprog, malloc failed!", entrycount); - do_exit(1); - } - strcpy(cfg_entry_tab[entrycount].connectprog, yylval.str); - log(LL_DBG, "entry %d: connectprog = %s", entrycount, yylval.str); - break; - - case DIALOUTTYPE: - log(LL_DBG, "entry %d: dialouttype = %s", entrycount, yylval.str); - if(!(strcmp(yylval.str, "normal"))) - cfg_entry_tab[entrycount].dialouttype = DIALOUT_NORMAL; - else if(!(strcmp(yylval.str, "calledback"))) - cfg_entry_tab[entrycount].dialouttype = DIALOUT_CALLEDBACK; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"dialout-type\" at line %d!", lineno); - config_error_flag++; - } - break; - - case DIALRETRIES: - log(LL_DBG, "entry %d: dialretries = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].dialretries = yylval.num; - break; - - case DIALRANDINCR: - log(LL_DBG, "entry %d: dialrandincr = %d", entrycount, yylval.booln); - cfg_entry_tab[entrycount].dialrandincr = yylval.booln; - break; - - case DIRECTION: - log(LL_DBG, "entry %d: direction = %s", entrycount, yylval.str); - - if(!(strcmp(yylval.str, "inout"))) - cfg_entry_tab[entrycount].inout = DIR_INOUT; - else if(!(strcmp(yylval.str, "in"))) - cfg_entry_tab[entrycount].inout = DIR_INONLY; - else if(!(strcmp(yylval.str, "out"))) - cfg_entry_tab[entrycount].inout = DIR_OUTONLY; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"direction\" at line %d!", lineno); - config_error_flag++; - } - break; - - case DISCONNECTPROG: - if((cfg_entry_tab[entrycount].disconnectprog = malloc(strlen(yylval.str)+1)) == NULL) - { - log(LL_ERR, "entry %d: disconnectprog, malloc failed!", entrycount); - do_exit(1); - } - strcpy(cfg_entry_tab[entrycount].disconnectprog, yylval.str); - log(LL_DBG, "entry %d: disconnectprog = %s", entrycount, yylval.str); - break; - - case DOWNTRIES: - if(yylval.num > DOWN_TRIES_MAX) - yylval.num = DOWN_TRIES_MAX; - else if(yylval.num < DOWN_TRIES_MIN) - yylval.num = DOWN_TRIES_MIN; - - log(LL_DBG, "entry %d: downtries = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].downtries = yylval.num; - break; - - case DOWNTIME: - if(yylval.num > DOWN_TIME_MAX) - yylval.num = DOWN_TIME_MAX; - else if(yylval.num < DOWN_TIME_MIN) - yylval.num = DOWN_TIME_MIN; - - log(LL_DBG, "entry %d: downtime = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].downtime = yylval.num; - break; - - case EARLYHANGUP: - log(LL_DBG, "entry %d: earlyhangup = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].earlyhangup = yylval.num; - break; - - case IDLETIME_IN: - log(LL_DBG, "entry %d: idle_time_in = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].idle_time_in = yylval.num; - break; - - case IDLETIME_OUT: - log(LL_DBG, "entry %d: idle_time_out = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].idle_time_out = yylval.num; - break; - - case ISDNCONTROLLER: - cfg_entry_tab[entrycount].isdncontroller = yylval.num; - log(LL_DBG, "entry %d: isdncontroller = %d", entrycount, yylval.num); - break; - - case ISDNCHANNEL: - switch(yylval.num) - { - case 0: - case -1: - cfg_entry_tab[entrycount].isdnchannel = CHAN_ANY; - log(LL_DBG, "entry %d: isdnchannel = any", entrycount); - break; - case 1: - cfg_entry_tab[entrycount].isdnchannel = CHAN_B1; - log(LL_DBG, "entry %d: isdnchannel = one", entrycount); - break; - case 2: - cfg_entry_tab[entrycount].isdnchannel = CHAN_B2; - log(LL_DBG, "entry %d: isdnchannel = two", entrycount); - break; - default: - log(LL_DBG, "entry %d: isdnchannel value out of range", entrycount); - config_error_flag++; - break; - } - break; - - case ISDNTIME: - log(LL_DBG, "system: isdntime = %d", yylval.booln); - isdntime = yylval.booln; - break; - - case ISDNTXDELIN: - cfg_entry_tab[entrycount].isdntxdelin = yylval.num; - log(LL_DBG, "entry %d: isdntxdel-incoming = %d", entrycount, yylval.num); - break; - - case ISDNTXDELOUT: - cfg_entry_tab[entrycount].isdntxdelout = yylval.num; - log(LL_DBG, "entry %d: isdntxdel-outgoing = %d", entrycount, yylval.num); - break; - - case LOCAL_PHONE_DIALOUT: - log(LL_DBG, "entry %d: local_phone_dialout = %s", entrycount, yylval.str); - strcpy(cfg_entry_tab[entrycount].local_phone_dialout, yylval.str); - break; - - case LOCAL_PHONE_INCOMING: - log(LL_DBG, "entry %d: local_phone_incoming = %s", entrycount, yylval.str); - strcpy(cfg_entry_tab[entrycount].local_phone_incoming, yylval.str); - break; - - case MONITORPORT: - monitorport = yylval.num; - log(LL_DBG, "system: monitorport = %d", yylval.num); - break; - - case MONITORSW: - if (yylval.booln && inhibit_monitor) { - do_monitor = 0; - log(LL_DBG, "system: monitor-enable overriden by command line flag"); - } else { - do_monitor = yylval.booln; - log(LL_DBG, "system: monitor-enable = %d", yylval.booln); - } - break; - - case NAME: - log(LL_DBG, "entry %d: name = %s", entrycount, yylval.str); - strcpy(cfg_entry_tab[entrycount].name, yylval.str); - break; - - case REACTION: - log(LL_DBG, "entry %d: dialin_reaction = %s", entrycount, yylval.str); - if(!(strcmp(yylval.str, "accept"))) - cfg_entry_tab[entrycount].dialin_reaction = REACT_ACCEPT; - else if(!(strcmp(yylval.str, "reject"))) - cfg_entry_tab[entrycount].dialin_reaction = REACT_REJECT; - else if(!(strcmp(yylval.str, "ignore"))) - cfg_entry_tab[entrycount].dialin_reaction = REACT_IGNORE; - else if(!(strcmp(yylval.str, "answer"))) - cfg_entry_tab[entrycount].dialin_reaction = REACT_ANSWER; - else if(!(strcmp(yylval.str, "callback"))) - cfg_entry_tab[entrycount].dialin_reaction = REACT_CALLBACK; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"dialin_reaction\" at line %d!", lineno); - config_error_flag++; - } - break; - - case REMOTE_PHONE_DIALOUT: - if(cfg_entry_tab[entrycount].remote_numbers_count >= MAXRNUMBERS) - { - log(LL_ERR, "ERROR parsing config file: too many remote numbers at line %d!", lineno); - config_error_flag++; - break; - } - - log(LL_DBG, "entry %d: remote_phone_dialout #%d = %s", - entrycount, cfg_entry_tab[entrycount].remote_numbers_count, yylval.str); - - strcpy(cfg_entry_tab[entrycount].remote_numbers[cfg_entry_tab[entrycount].remote_numbers_count].number, yylval.str); - cfg_entry_tab[entrycount].remote_numbers[cfg_entry_tab[entrycount].remote_numbers_count].flag = 0; - - cfg_entry_tab[entrycount].remote_numbers_count++; - - break; - - case REMOTE_NUMBERS_HANDLING: - log(LL_DBG, "entry %d: remdial_handling = %s", entrycount, yylval.str); - if(!(strcmp(yylval.str, "next"))) - cfg_entry_tab[entrycount].remote_numbers_handling = RNH_NEXT; - else if(!(strcmp(yylval.str, "last"))) - cfg_entry_tab[entrycount].remote_numbers_handling = RNH_LAST; - else if(!(strcmp(yylval.str, "first"))) - cfg_entry_tab[entrycount].remote_numbers_handling = RNH_FIRST; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"remdial_handling\" at line %d!", lineno); - config_error_flag++; - } - break; - - case REMOTE_PHONE_INCOMING: - { - int n; - n = cfg_entry_tab[entrycount].incoming_numbers_count; - if (n >= MAX_INCOMING) - { - log(LL_ERR, "ERROR parsing config file: too many \"remote_phone_incoming\" entries at line %d!", lineno); - config_error_flag++; - break; - } - log(LL_DBG, "entry %d: remote_phone_incoming #%d = %s", entrycount, n, yylval.str); - strcpy(cfg_entry_tab[entrycount].remote_phone_incoming[n].number, yylval.str); - cfg_entry_tab[entrycount].incoming_numbers_count++; - } - break; - - case RATESFILE: - strcpy(ratesfile, yylval.str); - log(LL_DBG, "system: ratesfile = %s", yylval.str); - break; - - case RATETYPE: - log(LL_DBG, "entry %d: ratetype = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].ratetype = yylval.num; - break; - - case RECOVERYTIME: - if(yylval.num < RECOVERYTIME_MIN) - { - yylval.num = RECOVERYTIME_MIN; - log(LL_DBG, "entry %d: recoverytime < %d, min = %d", entrycount, RECOVERYTIME_MIN, yylval.num); - } - - log(LL_DBG, "entry %d: recoverytime = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].recoverytime = yylval.num; - break; - - case REGEXPR: - if(nregexpr >= MAX_RE) - { - log(LL_DBG, "system: regexpr #%d >= MAX_RE", nregexpr); - config_error_flag++; - break; - } - - if((i = regcomp(&(rarr[nregexpr].re), yylval.str, REG_EXTENDED|REG_NOSUB)) != 0) - { - char buf[256]; - regerror(i, &(rarr[nregexpr].re), buf, sizeof(buf)); - log(LL_DBG, "system: regcomp error for %s: [%s]", yylval.str, buf); - config_error_flag++; - break; - } - else - { - if((rarr[nregexpr].re_expr = malloc(strlen(yylval.str)+1)) == NULL) - { - log(LL_DBG, "system: regexpr malloc error error for %s", yylval.str); - config_error_flag++; - break; - } - strcpy(rarr[nregexpr].re_expr, yylval.str); - - log(LL_DBG, "system: regexpr %s stored into slot %d", yylval.str, nregexpr); - - if(rarr[nregexpr].re_prog != NULL) - rarr[nregexpr].re_flg = 1; - - nregexpr++; - - } - break; - - case REGPROG: - if(nregprog >= MAX_RE) - { - log(LL_DBG, "system: regprog #%d >= MAX_RE", nregprog); - config_error_flag++; - break; - } - if((rarr[nregprog].re_prog = malloc(strlen(yylval.str)+1)) == NULL) - { - log(LL_DBG, "system: regprog malloc error error for %s", yylval.str); - config_error_flag++; - break; - } - strcpy(rarr[nregprog].re_prog, yylval.str); - - log(LL_DBG, "system: regprog %s stored into slot %d", yylval.str, nregprog); - - if(rarr[nregprog].re_expr != NULL) - rarr[nregprog].re_flg = 1; - - nregprog++; - break; - - case RTPRIO: -#ifdef USE_RTPRIO - rt_prio = yylval.num; - if(rt_prio < RTP_PRIO_MIN || rt_prio > RTP_PRIO_MAX) - { - config_error_flag++; - log(LL_DBG, "system: error, rtprio (%d) out of range!", yylval.num); - } - else - { - log(LL_DBG, "system: rtprio = %d", yylval.num); - } -#else - rt_prio = RTPRIO_NOTUSED; -#endif - break; - - case UNITLENGTH: - log(LL_DBG, "entry %d: unitlength = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].unitlength = yylval.num; - break; - - case UNITLENGTHSRC: - log(LL_DBG, "entry %d: unitlengthsrc = %s", entrycount, yylval.str); - if(!(strcmp(yylval.str, "none"))) - cfg_entry_tab[entrycount].unitlengthsrc = ULSRC_NONE; - else if(!(strcmp(yylval.str, "cmdl"))) - cfg_entry_tab[entrycount].unitlengthsrc = ULSRC_CMDL; - else if(!(strcmp(yylval.str, "conf"))) - cfg_entry_tab[entrycount].unitlengthsrc = ULSRC_CONF; - else if(!(strcmp(yylval.str, "rate"))) - cfg_entry_tab[entrycount].unitlengthsrc = ULSRC_RATE; - else if(!(strcmp(yylval.str, "aocd"))) - cfg_entry_tab[entrycount].unitlengthsrc = ULSRC_DYN; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"unitlengthsrc\" at line %d!", lineno); - config_error_flag++; - } - break; - - case USRDEVICENAME: - log(LL_DBG, "entry %d: usrdevicename = %s", entrycount, yylval.str); - if(!strcmp(yylval.str, "rbch")) - cfg_entry_tab[entrycount].usrdevicename = BDRV_RBCH; - else if(!strcmp(yylval.str, "tel")) - cfg_entry_tab[entrycount].usrdevicename = BDRV_TEL; - else if(!strcmp(yylval.str, "ipr")) - cfg_entry_tab[entrycount].usrdevicename = BDRV_IPR; - else if(!strcmp(yylval.str, "isp")) - cfg_entry_tab[entrycount].usrdevicename = BDRV_ISPPP; - else - { - log(LL_ERR, "ERROR parsing config file: unknown parameter for keyword \"usrdevicename\" at line %d!", lineno); - config_error_flag++; - } - break; - - case USRDEVICEUNIT: - log(LL_DBG, "entry %d: usrdeviceunit = %d", entrycount, yylval.num); - cfg_entry_tab[entrycount].usrdeviceunit = yylval.num; - break; - - case USEACCTFILE: - useacctfile = yylval.booln; - log(LL_DBG, "system: useacctfile = %d", yylval.booln); - break; - - case USEDOWN: - log(LL_DBG, "entry %d: usedown = %d", entrycount, yylval.booln); - cfg_entry_tab[entrycount].usedown = yylval.booln; - break; - - default: - log(LL_ERR, "ERROR parsing config file: unknown keyword at line %d!", lineno); - config_error_flag++; - break; - } -} - -/*---------------------------------------------------------------------------* - * configuration validation and consistency check - *---------------------------------------------------------------------------*/ -static void -check_config(void) -{ - cfg_entry_t *cep = &cfg_entry_tab[0]; /* ptr to config entry */ - int i; - int error = 0; - - /* regular expression table */ - - for(i=0; i < MAX_RE; i++) - { - if((rarr[i].re_expr != NULL) && (rarr[i].re_prog == NULL)) - { - log(LL_ERR, "check_config: regular expression %d without program!", i); - error++; - } - if((rarr[i].re_prog != NULL) && (rarr[i].re_expr == NULL)) - { - log(LL_ERR, "check_config: regular expression program %d without expression!", i); - error++; - } - } - - /* entry sections */ - - for(i=0; i <= entrycount; i++, cep++) - { - /* isdn controller number */ - - if((cep->isdncontroller < 0) || (cep->isdncontroller > (ncontroller-1))) - { - log(LL_ERR, "check_config: isdncontroller out of range in entry %d!", i); - error++; - } - - /* numbers used for dialout */ - - if((cep->inout != DIR_INONLY) && (cep->dialin_reaction != REACT_ANSWER)) - { - if(cep->remote_numbers_count == 0) - { - log(LL_ERR, "check_config: remote-phone-dialout not set in entry %d!", i); - error++; - } - if(strlen(cep->local_phone_dialout) == 0) - { - log(LL_ERR, "check_config: local-phone-dialout not set in entry %d!", i); - error++; - } - } - - /* numbers used for incoming calls */ - - if(cep->inout != DIR_OUTONLY) - { - if(strlen(cep->local_phone_incoming) == 0) - { - log(LL_ERR, "check_config: local-phone-incoming not set in entry %d!", i); - error++; - } - if(cep->incoming_numbers_count == 0) - { - log(LL_ERR, "check_config: remote-phone-incoming not set in entry %d!", i); - error++; - } - } - - if((cep->dialin_reaction == REACT_ANSWER) && (cep->b1protocol != BPROT_NONE)) - { - log(LL_ERR, "check_config: b1protocol not raw for telephony in entry %d!", i); - error++; - } - } - if(error) - { - log(LL_ERR, "check_config: %d error(s) in configuration file, exit!", error); - do_exit(1); - } -} - -/*---------------------------------------------------------------------------* - * print the configuration - *---------------------------------------------------------------------------*/ -static void -print_config(void) -{ -#define PFILE stdout - - cfg_entry_t *cep = &cfg_entry_tab[0]; /* ptr to config entry */ - int i, j; - extern VARA_DECL(struct monitor_rights) rights; - time_t clock; - char mytime[64]; - - time(&clock); - strcpy(mytime, ctime(&clock)); - mytime[strlen(mytime)-1] = '\0'; - - fprintf(PFILE, "#---------------------------------------------------------------------------\n"); - fprintf(PFILE, "# system section (generated %s)\n", mytime); - fprintf(PFILE, "#---------------------------------------------------------------------------\n"); - fprintf(PFILE, "system\n"); - fprintf(PFILE, "useacctfile = %s\n", useacctfile ? "on\t\t\t\t# update accounting information file" : "off\t\t\t\t# don't update accounting information file"); - fprintf(PFILE, "acctall = %s\n", acct_all ? "on\t\t\t\t# put all events into accounting file" : "off\t\t\t\t# put only charged events into accounting file"); - fprintf(PFILE, "acctfile = %s\t\t# accounting information file\n", acctfile); - fprintf(PFILE, "ratesfile = %s\t\t# charging rates database file\n", ratesfile); - -#ifdef USE_RTPRIO - if(rt_prio == RTPRIO_NOTUSED) - fprintf(PFILE, "# rtprio is unused\n"); - else - fprintf(PFILE, "rtprio = %d\t\t\t\t# isdnd runs at realtime priority\n", rt_prio); -#endif - - /* regular expression table */ - - for(i=0; i < MAX_RE; i++) - { - if(rarr[i].re_expr != NULL) - { - fprintf(PFILE, "regexpr = \"%s\"\t\t# scan logfile for this expression\n", rarr[i].re_expr); - } - if(rarr[i].re_prog != NULL) - { - fprintf(PFILE, "regprog = %s\t\t# program to run when expression is matched\n", rarr[i].re_prog); - } - } - -#ifdef I4B_EXTERNAL_MONITOR - - fprintf(PFILE, "monitor-allowed = %s\n", do_monitor ? "on\t\t\t\t# remote isdnd monitoring allowed" : "off\t\t\t\t# remote isdnd monitoring disabled"); - fprintf(PFILE, "monitor-port = %d\t\t\t\t# TCP/IP port number used for remote monitoring\n", monitorport); - - if(VARA_NUM(rights)) - { - char *s = "error\n"; - char b[512]; - - VARA_FOREACH(rights, i) - { - if(VARA_AT(rights, i).local) - { - fprintf(PFILE, "monitor = \"%s\"\t\t# local socket name for monitoring\n", VARA_AT(rights, i).name); - } - else - { - struct in_addr ia; - ia.s_addr = ntohl(VARA_AT(rights, i).net); - - switch(VARA_AT(rights, i).mask) - { - case 0xffffffff: - s = "32"; - break; - case 0xfffffffe: - s = "31"; - break; - case 0xfffffffc: - s = "30"; - break; - case 0xfffffff8: - s = "29"; - break; - case 0xfffffff0: - s = "28"; - break; - case 0xffffffe0: - s = "27"; - break; - case 0xffffffc0: - s = "26"; - break; - case 0xffffff80: - s = "25"; - break; - case 0xffffff00: - s = "24"; - break; - case 0xfffffe00: - s = "23"; - break; - case 0xfffffc00: - s = "22"; - break; - case 0xfffff800: - s = "21"; - break; - case 0xfffff000: - s = "20"; - break; - case 0xffffe000: - s = "19"; - break; - case 0xffffc000: - s = "18"; - break; - case 0xffff8000: - s = "17"; - break; - case 0xffff0000: - s = "16"; - break; - case 0xfffe0000: - s = "15"; - break; - case 0xfffc0000: - s = "14"; - break; - case 0xfff80000: - s = "13"; - break; - case 0xfff00000: - s = "12"; - break; - case 0xffe00000: - s = "11"; - break; - case 0xffc00000: - s = "10"; - break; - case 0xff800000: - s = "9"; - break; - case 0xff000000: - s = "8"; - break; - case 0xfe000000: - s = "7"; - break; - case 0xfc000000: - s = "6"; - break; - case 0xf8000000: - s = "5"; - break; - case 0xf0000000: - s = "4"; - break; - case 0xe0000000: - s = "3"; - break; - case 0xc0000000: - s = "2"; - break; - case 0x80000000: - s = "1"; - break; - case 0x00000000: - s = "0"; - break; - } - fprintf(PFILE, "monitor = \"%s/%s\"\t\t# host (net/mask) allowed to connect for monitoring\n", inet_ntoa(ia), s); - } - b[0] = '\0'; - - if((VARA_AT(rights, i).rights) & I4B_CA_COMMAND_FULL) - strcat(b, "fullcmd,"); - if((VARA_AT(rights, i).rights) & I4B_CA_COMMAND_RESTRICTED) - strcat(b, "restrictedcmd,"); - if((VARA_AT(rights, i).rights) & I4B_CA_EVNT_CHANSTATE) - strcat(b, "channelstate,"); - if((VARA_AT(rights, i).rights) & I4B_CA_EVNT_CALLIN) - strcat(b, "callin,"); - if((VARA_AT(rights, i).rights) & I4B_CA_EVNT_CALLOUT) - strcat(b, "callout,"); - if((VARA_AT(rights, i).rights) & I4B_CA_EVNT_I4B) - strcat(b, "logevents,"); - - if(b[strlen(b)-1] == ',') - b[strlen(b)-1] = '\0'; - - fprintf(PFILE, "monitor-access = %s\t\t# monitor access rights\n", b); - } - } - -#endif - /* entry sections */ - - for(i=0; i <= entrycount; i++, cep++) - { - fprintf(PFILE, "\n"); - fprintf(PFILE, "#---------------------------------------------------------------------------\n"); - fprintf(PFILE, "# entry section %d\n", i); - fprintf(PFILE, "#---------------------------------------------------------------------------\n"); - fprintf(PFILE, "entry\n"); - - fprintf(PFILE, "name = %s\t\t# name for this entry section\n", cep->name); - - fprintf(PFILE, "isdncontroller = %d\t\t# ISDN card number used for this entry\n", cep->isdncontroller); - fprintf(PFILE, "isdnchannel = "); - switch(cep->isdnchannel) - { - case CHAN_ANY: - fprintf(PFILE, "-1\t\t# any ISDN B-channel may be used\n"); - break; - case CHAN_B1: - fprintf(PFILE, "1\t\t# only ISDN B-channel 1 may be used\n"); - break; - case CHAN_B2: - fprintf(PFILE, "2\t\t# only ISDN B-channel 2 ay be used\n"); - break; - } - - fprintf(PFILE, "usrdevicename = %s\t\t# name of userland ISDN B-channel device\n", bdrivername(cep->usrdevicename)); - fprintf(PFILE, "usrdeviceunit = %d\t\t# unit number of userland ISDN B-channel device\n", cep->usrdeviceunit); - - fprintf(PFILE, "b1protocol = %s\n", cep->b1protocol ? "hdlc\t\t# B-channel layer 1 protocol is HDLC" : "raw\t\t# No B-channel layer 1 protocol used"); - - if(!(cep->usrdevicename == BDRV_TEL)) - { - fprintf(PFILE, "direction = "); - switch(cep->inout) - { - case DIR_INONLY: - fprintf(PFILE, "in\t\t# only incoming connections allowed\n"); - break; - case DIR_OUTONLY: - fprintf(PFILE, "out\t\t# only outgoing connections allowed\n"); - break; - case DIR_INOUT: - fprintf(PFILE, "inout\t\t# incoming and outgoing connections allowed\n"); - break; - } - } - - if(!((cep->usrdevicename == BDRV_TEL) || (cep->inout == DIR_INONLY))) - { - if(cep->remote_numbers_count > 1) - { - for(j=0; j<cep->remote_numbers_count; j++) - fprintf(PFILE, "remote-phone-dialout = %s\t\t# telephone number %d for dialing out to remote\n", cep->remote_numbers[j].number, j+1); - - fprintf(PFILE, "remdial-handling = "); - - switch(cep->remote_numbers_handling) - { - case RNH_NEXT: - fprintf(PFILE, "next\t\t# use next number after last successfull for new dial\n"); - break; - case RNH_LAST: - fprintf(PFILE, "last\t\t# use last successfull number for new dial\n"); - break; - case RNH_FIRST: - fprintf(PFILE, "first\t\t# always start with first number for new dial\n"); - break; - } - } - else - { - fprintf(PFILE, "remote-phone-dialout = %s\t\t# telephone number for dialing out to remote\n", cep->remote_numbers[0].number); - } - - fprintf(PFILE, "local-phone-dialout = %s\t\t# show this number to remote when dialling out\n", cep->local_phone_dialout); - fprintf(PFILE, "dialout-type = %s\n", cep->dialouttype ? "calledback\t\t# i am called back by remote" : "normal\t\t# i am not called back by remote"); - } - - if(!(cep->inout == DIR_OUTONLY)) - { - int n; - - fprintf(PFILE, "local-phone-incoming = %s\t\t# incoming calls must match this (mine) telephone number\n", cep->local_phone_incoming); - for (n = 0; n < cep->incoming_numbers_count; n++) - fprintf(PFILE, "remote-phone-incoming = %s\t\t# this is a valid remote number to call me\n", - cep->remote_phone_incoming[n].number); - - fprintf(PFILE, "dialin-reaction = "); - switch(cep->dialin_reaction) - { - case REACT_ACCEPT: - fprintf(PFILE, "accept\t\t# i accept a call from remote and connect\n"); - break; - case REACT_REJECT: - fprintf(PFILE, "reject\t\t# i reject the call from remote\n"); - break; - case REACT_IGNORE: - fprintf(PFILE, "ignore\t\t# i ignore the call from remote\n"); - break; - case REACT_ANSWER: - fprintf(PFILE, "answer\t\t# i will start telephone answering when remote calls in\n"); - break; - case REACT_CALLBACK: - fprintf(PFILE, "callback\t\t# when remote calls in, i will hangup and call back\n"); - break; - } - } - - if(!((cep->inout == DIR_INONLY) || (cep->usrdevicename == BDRV_TEL))) - fprintf(PFILE, "idletime-outgoing = %d\t\t# outgoing call idle timeout\n", cep->idle_time_out); - - if(!(cep->inout == DIR_OUTONLY)) - fprintf(PFILE, "idletime-incoming = %d\t\t# incoming call idle timeout\n", cep->idle_time_in); - - if(!(cep->usrdevicename == BDRV_TEL)) - { - fprintf(PFILE, "unitlengthsrc = "); - switch(cep->unitlengthsrc) - { - case ULSRC_NONE: - fprintf(PFILE, "none\t\t# no unit length specified, using default\n"); - break; - case ULSRC_CMDL: - fprintf(PFILE, "cmdl\t\t# using unit length specified on commandline\n"); - break; - case ULSRC_CONF: - fprintf(PFILE, "conf\t\t# using unitlength specified by unitlength-keyword\n"); - fprintf(PFILE, "unitlength = %d\t\t# fixed unitlength\n", cep->unitlength); - break; - case ULSRC_RATE: - fprintf(PFILE, "rate\t\t# using unitlength specified in rate database\n"); - fprintf(PFILE, "ratetype = %d\t\t# type of rate from rate database\n", cep->ratetype); - break; - case ULSRC_DYN: - fprintf(PFILE, "aocd\t\t# using dynamically calculated unitlength based on AOCD subscription\n"); - fprintf(PFILE, "ratetype = %d\t\t# type of rate from rate database\n", cep->ratetype); - break; - } - - fprintf(PFILE, "earlyhangup = %d\t\t# early hangup safety time\n", cep->earlyhangup); - - } - - if(cep->usrdevicename == BDRV_TEL) - { - fprintf(PFILE, "answerprog = %s\t\t# program used to answer incoming telephone calls\n", cep->answerprog); - fprintf(PFILE, "alert = %d\t\t# number of seconds to wait before accepting a call\n", cep->alert); - } - - if(!(cep->usrdevicename == BDRV_TEL)) - { - if(cep->dialin_reaction == REACT_CALLBACK) - fprintf(PFILE, "callbackwait = %d\t\t# i am waiting this time before calling back remote\n", cep->callbackwait); - - if(cep->dialouttype == DIALOUT_CALLEDBACK) - fprintf(PFILE, "calledbackwait = %d\t\t# i am waiting this time for a call back from remote\n", cep->calledbackwait); - - if(!(cep->inout == DIR_INONLY)) - { - fprintf(PFILE, "dialretries = %d\t\t# number of dialing retries\n", cep->dialretries); - fprintf(PFILE, "recoverytime = %d\t\t# time to wait between dialling retries\n", cep->recoverytime); - fprintf(PFILE, "dialrandincr = %s\t\t# use random dialing time addon\n", cep->dialrandincr ? "on" : "off"); - - fprintf(PFILE, "usedown = %s\n", cep->usedown ? "on\t\t# ISDN device switched off on excessive dial failures" : "off\t\t# no device switchoff on excessive dial failures"); - if(cep->usedown) - { - fprintf(PFILE, "downtries = %d\t\t# number of dialretries failures before switching off\n", cep->downtries); - fprintf(PFILE, "downtime = %d\t\t# time device is switched off\n", cep->downtime); - } - } - } - } - fprintf(PFILE, "\n"); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/rc_parse.y b/usr.sbin/i4b/isdnd/rc_parse.y deleted file mode 100644 index 6c1cf1440ab67..0000000000000 --- a/usr.sbin/i4b/isdnd/rc_parse.y +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright (c) 1997 Joerg Wunsch. All rights reserved. - * - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - runtime configuration parser - * ----------------------------------------- - * - * $Id: rc_parse.y,v 1.15 1998/12/05 18:03:38 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:12:26 1998] - * - *---------------------------------------------------------------------------*/ - -%{ - -/* #define YYDEBUG 1 */ - -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> - -#include "monitor.h" /* monitor access rights bit definitions */ -#include "isdnd.h" - -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef TRUE -# define TRUE 1 -#endif - -extern void cfg_setval(int keyword); -extern void reset_scanner(FILE *infile); -extern void yyerror(const char *msg); -extern int yylex(); - -extern int lineno; -extern char *yytext; -extern int nentries; - -int saw_system = 0; -int entrycount = -1; - -%} - -%token ACCTALL -%token ACCTFILE -%token ALERT -%token ALIASING -%token ALIASFNAME -%token ANSWERPROG -%token B1PROTOCOL -%token CALLBACKWAIT -%token CALLEDBACKWAIT -%token CONNECTPROG -%token DIALRETRIES -%token DIALRANDINCR -%token DIALOUTTYPE -%token DIRECTION -%token DISCONNECTPROG -%token DOWNTRIES -%token DOWNTIME -%token EARLYHANGUP -%token ENTRY -%token IDLETIME_IN -%token IDLETIME_OUT -%token ISDNCONTROLLER -%token ISDNCHANNEL -%token ISDNTIME -%token ISDNTXDELIN -%token ISDNTXDELOUT -%token LOCAL_PHONE_DIALOUT -%token LOCAL_PHONE_INCOMING -%token MONITORSW -%token MONITORPORT -%token MONITOR -%token MONITORACCESS -%token FULLCMD -%token RESTRICTEDCMD -%token CHANNELSTATE -%token CALLIN -%token CALLOUT -%token LOGEVENTS -%token NAME -%token NO -%token OFF -%token ON -%token RATESFILE -%token RATETYPE -%token REMOTE_NUMBERS_HANDLING -%token REMOTE_PHONE_INCOMING -%token REMOTE_PHONE_DIALOUT -%token REACTION -%token RECOVERYTIME -%token REGEXPR -%token REGPROG -%token RTPRIO -%token SYSTEM -%token UNITLENGTH -%token UNITLENGTHSRC -%token USEACCTFILE -%token USRDEVICENAME -%token USRDEVICEUNIT -%token USEDOWN -%token YES - -%token <str> NUMBERSTR - -%token <str> STRING - -%type <booln> boolean - -%type <num> sysfilekeyword sysnumkeyword sysstrkeyword sysboolkeyword -%type <num> numkeyword strkeyword boolkeyword monrights monright -%type <str> filename - -%union { - int booln; - int num; - char *str; -} - -%% - -config: sections - ; - -sections: possible_nullentries - syssect - entrysects - ; - -possible_nullentries: - /* lambda */ - | possible_nullentries error '\n' - | possible_nullentries nullentry - ; - -nullentry: '\n' - ; - -entrysects: entrysect - | entrysects entrysect - ; - -syssect: SYSTEM sysentries - ; - -sysentries: sysentry - { - saw_system = 1; - monitor_clear_rights(); - } - | sysentries sysentry - ; - -sysentry: sysfileentry - | sysboolentry - | sysnumentry - | sysstrentry - | sysmonitorstart - | sysmonitorrights - | nullentry - | error '\n' - ; - - -sysmonitorstart: - MONITOR '=' STRING '\n' - { - char *err = NULL; - switch (monitor_start_rights($3)) { - case I4BMAR_OK: - break; - case I4BMAR_LENGTH: - err = "local socket name too long: %s"; - break; - case I4BMAR_DUP: - err = "duplicate entry: %s"; - break; - case I4BMAR_CIDR: - err = "invalid CIDR specification: %s"; - break; - case I4BMAR_NOIP: - err = "could not resolve host or net specification: %s"; - break; - } - if (err) { - char msg[1024]; - snprintf(msg, sizeof msg, err, $3); - yyerror(msg); - } - } - ; - -sysmonitorrights: - MONITORACCESS '=' monrights '\n' - { monitor_add_rights($3); } - ; - -monrights: monrights ',' monright { $$ = $1 | $3; } - | monright { $$ = $1; } - ; - -monright: FULLCMD { $$ = I4B_CA_COMMAND_FULL; } - | RESTRICTEDCMD { $$ = I4B_CA_COMMAND_RESTRICTED; } - | CHANNELSTATE { $$ = I4B_CA_EVNT_CHANSTATE; } - | CALLIN { $$ = I4B_CA_EVNT_CALLIN; } - | CALLOUT { $$ = I4B_CA_EVNT_CALLOUT; } - | LOGEVENTS { $$ = I4B_CA_EVNT_I4B; } - ; - -sysfileentry: sysfilekeyword '=' filename '\n' - { - cfg_setval($1); - } - ; - -sysboolentry: sysboolkeyword '=' boolean '\n' - { - yylval.booln = $3; - cfg_setval($1); - } - ; - -sysnumentry: sysnumkeyword '=' NUMBERSTR '\n' - { - yylval.num = atoi($3); - cfg_setval($1); - } - ; - -sysstrentry: sysstrkeyword '=' STRING '\n' - { - cfg_setval($1); - } - | sysstrkeyword '=' NUMBERSTR '\n' - { - cfg_setval($1); - } - ; - -filename: STRING { - if ($1[0] != '/') - { - yyerror("filename doesn't start with a slash"); - YYERROR; - } - $$ = $1; - } - ; - -boolean: NO { $$ = FALSE; } - | OFF { $$ = FALSE; } - | ON { $$ = TRUE; } - | YES { $$ = TRUE; } - ; - -sysfilekeyword: RATESFILE { $$ = RATESFILE; } - | ACCTFILE { $$ = ACCTFILE; } - | ALIASFNAME { $$ = ALIASFNAME; } - ; - -sysboolkeyword: USEACCTFILE { $$ = USEACCTFILE; } - | ALIASING { $$ = ALIASING; } - | ACCTALL { $$ = ACCTALL; } - | ISDNTIME { $$ = ISDNTIME; } - | MONITORSW { $$ = MONITORSW; } - ; - -sysnumkeyword: MONITORPORT { $$ = MONITORPORT; } - | RTPRIO { $$ = RTPRIO; } - ; - -sysstrkeyword: REGEXPR { $$ = REGEXPR; } - | REGPROG { $$ = REGPROG; } - ; - -entrysect: ENTRY - { - entrycount++; - nentries++; - } - entries - ; - -entries: entry - | entries entry - ; - -entry: strentry - | numentry - | boolentry - | nullentry - | error '\n' - ; - -strentry: strkeyword '=' STRING '\n' - { - cfg_setval($1); - } - | strkeyword '=' NUMBERSTR '\n' - { - cfg_setval($1); - } - ; - -boolentry: boolkeyword '=' boolean '\n' - { - yylval.booln = $3; - cfg_setval($1); - } - ; - -numentry: numkeyword '=' NUMBERSTR '\n' - { - yylval.num = atoi($3); - cfg_setval($1); - } - ; - -strkeyword: ANSWERPROG { $$ = ANSWERPROG; } - | B1PROTOCOL { $$ = B1PROTOCOL; } - | CONNECTPROG { $$ = CONNECTPROG; } - | DIALOUTTYPE { $$ = DIALOUTTYPE; } - | DIRECTION { $$ = DIRECTION; } - | DISCONNECTPROG { $$ = DISCONNECTPROG; } - | LOCAL_PHONE_INCOMING { $$ = LOCAL_PHONE_INCOMING; } - | LOCAL_PHONE_DIALOUT { $$ = LOCAL_PHONE_DIALOUT; } - | NAME { $$ = NAME; } - | REACTION { $$ = REACTION; } - | REMOTE_NUMBERS_HANDLING { $$ = REMOTE_NUMBERS_HANDLING; } - | REMOTE_PHONE_INCOMING { $$ = REMOTE_PHONE_INCOMING; } - | REMOTE_PHONE_DIALOUT { $$ = REMOTE_PHONE_DIALOUT; } - | UNITLENGTHSRC { $$ = UNITLENGTHSRC; } - | USRDEVICENAME { $$ = USRDEVICENAME; } - ; - -numkeyword: ALERT { $$ = ALERT; } - | CALLBACKWAIT { $$ = CALLBACKWAIT; } - | CALLEDBACKWAIT { $$ = CALLEDBACKWAIT; } - | DIALRETRIES { $$ = DIALRETRIES; } - | EARLYHANGUP { $$ = EARLYHANGUP; } - | IDLETIME_IN { $$ = IDLETIME_IN; } - | IDLETIME_OUT { $$ = IDLETIME_OUT; } - | ISDNCONTROLLER { $$ = ISDNCONTROLLER; } - | ISDNCHANNEL { $$ = ISDNCHANNEL; } - | ISDNTXDELIN { $$ = ISDNTXDELIN; } - | ISDNTXDELOUT { $$ = ISDNTXDELOUT; } - | RATETYPE { $$ = RATETYPE; } - | RECOVERYTIME { $$ = RECOVERYTIME; } - | UNITLENGTH { $$ = UNITLENGTH; } - | USRDEVICEUNIT { $$ = USRDEVICEUNIT; } - | DOWNTIME { $$ = DOWNTIME; } - | DOWNTRIES { $$ = DOWNTRIES; } - ; - -boolkeyword: DIALRANDINCR { $$ = DIALRANDINCR; } - | USEDOWN { $$ = USEDOWN; } - ; - -%% diff --git a/usr.sbin/i4b/isdnd/rc_scan.l b/usr.sbin/i4b/isdnd/rc_scan.l deleted file mode 100644 index dfca28ce69617..0000000000000 --- a/usr.sbin/i4b/isdnd/rc_scan.l +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) 1997 Joerg Wunsch. All rights reserved. - * - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - runtime configuration lexical analyzer - * --------------------------------------------------- - * - * $Id: rc_scan.l,v 1.19 1998/12/18 17:17:57 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:08:25 1998] - * - *---------------------------------------------------------------------------*/ - -%{ - -#include <err.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <ctype.h> -#include <sysexits.h> - -#include "y.tab.h" - -int lineno; - -%} - -%option noyywrap -%option nounput - -%% - -#.*$ { /* - * Drop comment. NB: this prevents a hash - * sign from appearing inside a quoted string. - */ - } - -["][^"]*["] { - char *str; - if ((str = malloc(yyleng - 1)) == 0) - errx(EX_OSERR, "Out of virtual memory"); - memcpy(str, yytext + 1, yyleng - 2); - str[yyleng - 2] = 0; - yylval.str = str; - return STRING; - } - -(-*[0-9]+)|\* { - char *str; - char *p = yytext; - int i = 0; - if ((str = malloc(128)) == 0) - errx(EX_OSERR, "Out of virtual memory"); - while(*p == '-' || isdigit(*p) || *p == '*') - str[i++] = *p++; - str[i] = '\0'; - yylval.str = str; - return NUMBERSTR; - } - -acctall { return ACCTALL; } -acctfile { return ACCTFILE; } -alert { return ALERT; } -aliasing { return ALIASING; } -aliasfile { return ALIASFNAME; } -answerprog { return ANSWERPROG; } -b1protocol { return B1PROTOCOL; } -callbackwait { return CALLBACKWAIT; } -calledbackwait { return CALLEDBACKWAIT; } -connectprog { return CONNECTPROG; } -dialin-reaction { return REACTION; } -dialout-type { return DIALOUTTYPE; } -dialrandincr { return DIALRANDINCR; } -dialretries { return DIALRETRIES; } -direction { return DIRECTION; } -disconnectprog { return DISCONNECTPROG; } -downtries { return DOWNTRIES; } -downtime { return DOWNTIME; } -earlyhangup { return EARLYHANGUP; } -entry { return ENTRY; } -idletime-incoming { return IDLETIME_IN; } -idletime-outgoing { return IDLETIME_OUT; } -isdncontroller { return ISDNCONTROLLER; } -isdnchannel { return ISDNCHANNEL; } -isdntime { return ISDNTIME; } -isdntxdel-incoming { return ISDNTXDELIN; } -isdntxdel-outgoing { return ISDNTXDELOUT; } -local-phone-dialout { return LOCAL_PHONE_DIALOUT; } -local-phone-incoming { return LOCAL_PHONE_INCOMING; } -monitor-allowed { return MONITORSW; } -monitor-port { return MONITORPORT; } -monitor { return MONITOR; } -monitor-access { return MONITORACCESS; } -fullcmd { return FULLCMD; } -restrictedcmd { return RESTRICTEDCMD; } -channelstate { return CHANNELSTATE; } -callin { return CALLIN; } -callout { return CALLOUT; } -logevents { return LOGEVENTS; } -name { return NAME; } -no { return NO; } -off { return OFF; } -on { return ON; } -ratesfile { return RATESFILE; } -ratetype { return RATETYPE; } -recoverytime { return RECOVERYTIME; } -regexpr { return REGEXPR; } -regprog { return REGPROG; } -remdial-handling { return REMOTE_NUMBERS_HANDLING; } -remote-phone-dialout { return REMOTE_PHONE_DIALOUT; } -remote-phone-incoming { return REMOTE_PHONE_INCOMING; } -rtprio { return RTPRIO; } -system { return SYSTEM; } -unitlength { return UNITLENGTH; } -unitlengthsrc { return UNITLENGTHSRC; } -useacctfile { return USEACCTFILE; } -usrdevicename { return USRDEVICENAME; } -usrdeviceunit { return USRDEVICEUNIT; } -usedown { return USEDOWN; } -yes { return YES; } - -\n { lineno++; return '\n'; } - -[A-Za-z/.][-A-Za-z0-9_/.]* { - char *str; - if ((str = strdup(yytext)) == 0) - err(EX_OSERR, "Out of virtual memory"); - yylval.str = str; - return STRING; - } - -[ \t] { /* drop white space */ } - -. { return yytext[0]; } - -%% - -void -reset_scanner(FILE *infile) -{ - yyrestart(infile); - lineno = 1; -} diff --git a/usr.sbin/i4b/isdnd/support.c b/usr.sbin/i4b/isdnd/support.c deleted file mode 100644 index 77c08410ef409..0000000000000 --- a/usr.sbin/i4b/isdnd/support.c +++ /dev/null @@ -1,831 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - misc support routines - * ---------------------------------- - * - * $Id: support.c,v 1.43 1998/12/18 09:47:09 hm Exp $ - * - * last edit-date: [Mon Dec 14 11:17:22 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -#define SRC (aliasing == 0 ? mp->src_telno : src_tela) -#define DST (aliasing == 0 ? mp->dst_telno : dst_tela) - -/*---------------------------------------------------------------------------* - * find an active entry by driver type and driver unit - *---------------------------------------------------------------------------*/ -cfg_entry_t * -find_active_entry_by_driver(int drivertype, int driverunit) -{ - cfg_entry_t *cep = NULL; - int i; - - for(i=0; i < nentries; i++) - { - cep = &cfg_entry_tab[i]; /* ptr to config entry */ - - if(!((cep->usrdevicename == drivertype) && - (cep->usrdeviceunit == driverunit))) - { - continue; - } - - /* found */ - - if(cep->cdid == CDID_UNUSED) - { - DBGL(DL_MSG, (log(LL_DBG, "find_active_entry_by_driver: entry %d, cdid is CDID_UNUSED!", i))); - return(NULL); - } - else if(cep->cdid == CDID_RESERVED) - { - DBGL(DL_MSG, (log(LL_DBG, "find_active_entry_by_driver: entry %d, cdid is CDID_RESERVED!", i))); - return(NULL); - } - return(cep); - } - return(NULL); -} - -/*---------------------------------------------------------------------------* - * find entry by drivertype and driverunit and setup for dialing out - *---------------------------------------------------------------------------*/ -cfg_entry_t * -find_by_device_for_dialout(int drivertype, int driverunit) -{ - cfg_entry_t *cep = NULL; - int i; - - for(i=0; i < nentries; i++) - { - cep = &cfg_entry_tab[i]; /* ptr to config entry */ - - /* compare driver type and unit */ - - if(!((cep->usrdevicename == drivertype) && - (cep->usrdeviceunit == driverunit))) - { - continue; - } - - /* found, check if already reserved */ - - if(cep->cdid == CDID_RESERVED) - { - DBGL(DL_MSG, (log(LL_DBG, "find_by_device_for_dialout: entry %d, cdid reserved!", i))); - return(NULL); - } - - /* check if this entry is already in use ? */ - - if(cep->cdid != CDID_UNUSED) - { - DBGL(DL_MSG, (log(LL_DBG, "find_by_device_for_dialout: entry %d, cdid in use", i))); - return(NULL); - } - - if((setup_dialout(cep)) == GOOD) - { - /* found an entry to be used for calling out */ - - DBGL(DL_MSG, (log(LL_DBG, "find_by_device_for_dialout: found entry %d!", i))); - return(cep); - } - else - { - DBGL(DL_MSG, (log(LL_DBG, "find_by_device_for_dialout: entry %d, setup_dialout() failed!", i))); - return(NULL); - } - } - - DBGL(DL_MSG, (log(LL_DBG, "find_by_device_for_dialout: no entry found!"))); - return(NULL); -} - -/*---------------------------------------------------------------------------* - * find entry by drivertype and driverunit and setup for dialing out - *---------------------------------------------------------------------------*/ -int -setup_dialout(cfg_entry_t *cep) -{ - /* check controller operational */ - - if((get_controller_state(cep->isdncontroller)) != CTRL_UP) - { - DBGL(DL_MSG, (log(LL_DBG, "setup_dialout: entry %s, controller is down", cep->name))); - return(ERROR); - } - - cep->isdncontrollerused = cep->isdncontroller; - - /* check channel available */ - - switch(cep->isdnchannel) - { - case CHAN_B1: - case CHAN_B2: - if((ret_channel_state(cep->isdncontroller, cep->isdnchannel)) != CHAN_IDLE) - { - DBGL(DL_MSG, (log(LL_DBG, "setup_dialout: entry %s, channel not free", cep->name))); - return(ERROR); - } - cep->isdnchannelused = cep->isdnchannel; - break; - - case CHAN_ANY: - if(((ret_channel_state(cep->isdncontroller, CHAN_B1)) != CHAN_IDLE) && - ((ret_channel_state(cep->isdncontroller, CHAN_B2)) != CHAN_IDLE)) - { - DBGL(DL_MSG, (log(LL_DBG, "setup_dialout: entry %s, no channel free", cep->name))); - return(ERROR); - } - cep->isdnchannelused = CHAN_ANY; - break; - - default: - DBGL(DL_MSG, (log(LL_DBG, "setup_dialout: entry %s, channel undefined", cep->name))); - return(ERROR); - break; - } - - DBGL(DL_MSG, (log(LL_DBG, "setup_dialout: entry %s ok!", cep->name))); - - /* preset disconnect cause */ - - SET_CAUSE_TYPE(cep->disc_cause, CAUSET_I4B); - SET_CAUSE_VAL(cep->disc_cause, CAUSE_I4B_NORMAL); - - return(GOOD); -} - -/*---------------------------------------------------------------------------* - * find entry by drivertype and driverunit - *---------------------------------------------------------------------------*/ -cfg_entry_t * -get_cep_by_driver(int drivertype, int driverunit) -{ - cfg_entry_t *cep = NULL; - int i; - - for(i=0; i < nentries; i++) - { - cep = &cfg_entry_tab[i]; /* ptr to config entry */ - - if(!((cep->usrdevicename == drivertype) && - (cep->usrdeviceunit == driverunit))) - { - continue; - } - - DBGL(DL_MSG, (log(LL_DBG, "get_cep_by_driver: found entry %d!", i))); - return(cep); - } - return(NULL); -} - -/*---------------------------------------------------------------------------* - * find a matching entry for an incoming call - * - * - not found/no match: log output with LL_CHD and return NULL - * - found/match: make entry in free cep, return address - *---------------------------------------------------------------------------*/ -cfg_entry_t * -find_matching_entry_incoming(msg_connect_ind_t *mp) -{ - cfg_entry_t *cep = NULL; - int i; - char *src_tela = "ERROR-src_tela"; - char *dst_tela = "ERROR-dst_tela"; - - for(i=0; i < nentries; i++) - { - int n; - cep = &cfg_entry_tab[i]; /* ptr to config entry */ - - /* check my number */ - - if(strncmp(cep->local_phone_incoming, mp->dst_telno, strlen(cep->local_phone_incoming))) - { - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, myno %s != incomingno %s", i, - cep->local_phone_incoming, mp->dst_telno))); - continue; - } - - /* check all allowed remote number's for this entry */ - - for (n = 0; n < cep->incoming_numbers_count; n++) - { - incoming_number_t *in = &cep->remote_phone_incoming[n]; - if(in->number[0] == '*') - break; - if(strncmp(in->number, mp->src_telno, strlen(in->number))) - { - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, remno %s != incomingfromno %s", i, - in->number, mp->src_telno))); - } - else - break; - } - if (n >= cep->incoming_numbers_count) - continue; - - /* screening indicator XXX */ - - switch(mp->scr_ind) - { - case SCR_NONE: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: %s - no screening indicator", mp->src_telno))); - break; - - case SCR_USR_NOSC: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: %s - screening user provided, not screened", mp->src_telno))); - break; - - case SCR_USR_PASS: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: %s - screening user provided, verified & passed", mp->src_telno))); - break; - - case SCR_USR_FAIL: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: %s - screening user provided, verified & failed", mp->src_telno))); - break; - - case SCR_NET: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: %s - screening network provided", mp->src_telno))); - break; - - default: - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: ERROR %s - invalid screening indicator!", mp->src_telno))); - break; - } - - /* check b protocol */ - - if(cep->b1protocol != mp->bprot) - { - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, bprot %d != incomingprot %d", i, - cep->b1protocol, mp->bprot))); - continue; - } - - /* is this entry currently in use ? */ - - if(cep->cdid != CDID_UNUSED) - { - if(cep->cdid == CDID_RESERVED) - { - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, cdid is reserved", i))); - } - else if (cep->dialin_reaction == REACT_ACCEPT - && cep->dialouttype == DIALOUT_CALLEDBACK) - { - /* - * We might consider doing this even if this is - * not a calledback config entry - BUT: there are - * severe race conditions and timinig problems - * ex. if both sides run I4B with no callback - * delay - both may shutdown the outgoing call - * and never be able to establish a connection. - * In the called-back case this should not happen. - */ - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, incoming call for callback in progress (cdid %05d)", i, cep->cdid))); - - /* save the current call state, we're going to overwrite it with the - * new incoming state below... */ - cep->saved_call.cdid = cep->cdid; - cep->saved_call.controller = cep->isdncontrollerused; - cep->saved_call.channel = cep->isdnchannelused; - } - else - { - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, cdid in use", i))); - continue; /* yes, next */ - } - } - - /* check controller value ok */ - - if(mp->controller > ncontroller) - { - log(LL_CHD, "%05d %s incoming call with invalid controller %d", - mp->header.cdid, cep->name, mp->controller); - return(NULL); - } - - /* check controller marked up */ - - if((get_controller_state(mp->controller)) != CTRL_UP) - { - log(LL_CHD, "%05d %s incoming call, controller %d DOWN!", - mp->header.cdid, cep->name, mp->controller); - return(NULL); - } - - /* check channel he wants */ - - switch(mp->channel) - { - case CHAN_B1: - case CHAN_B2: - if((ret_channel_state(mp->controller, mp->channel)) != CHAN_IDLE) - { - log(LL_CHD, "%05d %s incoming call, channel %s not free!", - mp->header.cdid, cep->name, mp->channel == CHAN_B1 ? "B1" : "B2"); - return(NULL); - } - break; - - case CHAN_ANY: - if(((ret_channel_state(mp->controller, CHAN_B1)) != CHAN_IDLE) && - ((ret_channel_state(mp->controller, CHAN_B2)) != CHAN_IDLE)) - { - log(LL_CHD, "%05d %s incoming call, no channel free!", - mp->header.cdid, cep->name); - return(NULL); - } - break; - - case CHAN_NO: - log(LL_CHD, "%05d %s incoming call, call waiting (no channel available)!", - mp->header.cdid, cep->name); - return(NULL); - break; - - default: - log(LL_CHD, "%05d %s incoming call, ERROR, channel undefined!", - mp->header.cdid, cep->name); - return(NULL); - break; - } - - /* found a matching entry */ - - cep->cdid = mp->header.cdid; - cep->isdncontrollerused = mp->controller; - cep->isdnchannelused = mp->channel; -/*XXX*/ cep->disc_cause = 0; - - /* cp number to real one used */ - - strcpy(cep->real_phone_incoming, mp->src_telno); - - /* copy display string */ - - strcpy(cep->display, mp->display); - - /* entry currently down ? */ - - if(cep->state == ST_DOWN) - { - msg_updown_ind_t mui; - - /* set interface up */ - - DBGL(DL_MSG, (log(LL_DBG, "find_matching_entry_incoming: entry %d, ", i))); - - mui.driver = cep->usrdevicename; - mui.driver_unit = cep->usrdeviceunit; - mui.updown = SOFT_ENA; - - if((ioctl(isdnfd, I4B_UPDOWN_IND, &mui)) < 0) - { - log(LL_ERR, "find_matching_entry_incoming: ioctl I4B_UPDOWN_IND failed: %s", strerror(errno)); - do_exit(1); - } - - cep->down_retry_count = 0; - cep->state = ST_IDLE; - } - return(cep); - } - - if(aliasing) - { - src_tela = get_alias(mp->src_telno); - dst_tela = get_alias(mp->dst_telno); - } - log(LL_CHD, /* A number not listed in /etc/isdn/isdnd.rc */ - ( (!aliasing) ? - "%05d <unknown> incoming call from %s to %s" : - /* Probably a phone call, likely from someone - in phone book /etc/isdn/isdntel.alias, so - avoid looking silly by saying "unknown", - & allow more space to print names. - */ - "%05d Call from %s to %s" - ) , - mp->header.cdid, SRC, DST, mp->dst_telno); - - return(NULL); -} - -/*---------------------------------------------------------------------------* - * return address of ACTIVE config entry by controller and channel - *---------------------------------------------------------------------------*/ -cfg_entry_t * -get_cep_by_cc(int ctrlr, int chan) -{ - int i; - - if((chan != CHAN_B1) && (chan != CHAN_B2)) - return(NULL); - - for(i=0; i < nentries; i++) - { - if((cfg_entry_tab[i].cdid != CDID_UNUSED) && - (cfg_entry_tab[i].cdid != CDID_RESERVED) && - (cfg_entry_tab[i].isdnchannelused == chan) && - (cfg_entry_tab[i].isdncontrollerused == ctrlr) && - ((ret_channel_state(ctrlr, chan)) == CHAN_RUN)) - { - return(&cfg_entry_tab[i]); - } - } - return(NULL); -} - -/*---------------------------------------------------------------------------* - * return address of config entry identified by cdid - *---------------------------------------------------------------------------*/ -cfg_entry_t * -get_cep_by_cdid(int cdid) -{ - int i; - - for(i=0; i < nentries; i++) - { - if(cfg_entry_tab[i].cdid == cdid - || cfg_entry_tab[i].saved_call.cdid == cdid) - return(&cfg_entry_tab[i]); - } - return(NULL); -} - -/*---------------------------------------------------------------------------* - * get name of a controller - *---------------------------------------------------------------------------*/ -const char * -name_of_controller(int ctrl_type, int card_type) -{ - static char *passive_card[] = { - "Teles S0/8", - "Teles S0/16", - "Teles S0/16.3", - "AVM A1 or Fritz!Card", - "Teles S0/16.3 PnP", - "Creatix S0 PnP", - "USRobotics Sportster ISDN TA", - "Dr. Neuhaus NICCY Go@", - "Sedlbauer win speed", - "Dynalink IS64PH", - "ISDN Master or Blaster", - "AVM PCMCIA Fritz!Card", - "ELSA QuickStep 1000pro/ISA", - "ELSA QuickStep 1000pro/PCI", - "Siemens I-Talk", - "ELSA MicroLink ISDN/MC", - "ELSA MicroLink MCall", - "ITK ix1 micro" - }; - static char *daic_card[] = { - "EICON.Diehl S", - "EICON.Diehl SX/SXn", - "EICON.Diehl SCOM", - "EICON.Diehl QUADRO", - }; - - if (ctrl_type == CTRL_PASSIVE) { - int index = card_type - CARD_TYPEP_8; - if (index >= 0 && index < (sizeof passive_card / sizeof passive_card[0])) - return passive_card[index]; - } else if (ctrl_type == CTRL_DAIC) { - int index = card_type - CARD_TYPEA_DAIC_S; - if (index >= 0 && index < (sizeof daic_card / sizeof daic_card[0] )) - return daic_card[index]; - } - - return "unknown card type"; -} - -/*---------------------------------------------------------------------------* - * init controller state array - *---------------------------------------------------------------------------*/ -void -init_controller(void) -{ - int i; - int max = 1; - msg_ctrl_info_req_t mcir; - - for(i=0; i < max; i++) - { - mcir.controller = i; - - if((ioctl(isdnfd, I4B_CTRL_INFO_REQ, &mcir)) < 0) - { - log(LL_ERR, "init_controller: ioctl I4B_CTRL_INFO_REQ failed: %s", strerror(errno)); - do_exit(1); - } - - if((ncontroller = max = mcir.ncontroller) == 0) - { - log(LL_ERR, "init_controller: no ISDN controller found!"); - do_exit(1); - } - - if(mcir.ctrl_type == -1 || mcir.card_type == -1) - { - log(LL_ERR, "init_controller: ctrl/card is invalid!"); - do_exit(1); - } - - /* init controller tab */ - - if((init_controller_state(i, mcir.ctrl_type, mcir.card_type, mcir.tei)) == ERROR) - { - log(LL_ERR, "init_controller: init_controller_state for controller %d failed", i); - do_exit(1); - } - } - log(LL_DMN, "init_controller: found %d ISDN controller(s)", max); -} - -/*---------------------------------------------------------------------------* - * return b channel driver type name string - *---------------------------------------------------------------------------*/ -char * -bdrivername(int drivertype) -{ - static char *bdtab[] = { - "rbch", - "tel", - "ipr", - "isp" - }; - - if(drivertype >= BDRV_RBCH && drivertype <= BDRV_ISPPP) - return(bdtab[drivertype]); - else - return("unknown"); -} - -/*---------------------------------------------------------------------------* - * process AOCD charging messages - *---------------------------------------------------------------------------*/ -void -handle_charge(cfg_entry_t *cep) -{ - time_t now = time(NULL); - - if(cep->aoc_last == 0) /* no last timestamp yet ? */ - { - cep->aoc_last = now; /* add time stamp */ - } - else if(cep->aoc_now == 0) /* no current timestamp yet ? */ - { - cep->aoc_now = now; /* current timestamp */ - } - else - { - cep->aoc_last = cep->aoc_now; - cep->aoc_now = now; - cep->aoc_diff = cep->aoc_now - cep->aoc_last; - cep->aoc_valid = AOC_VALID; - } - -#ifdef USE_CURSES - if(do_fullscreen) - display_charge(cep); -#endif - -#ifdef I4B_EXTERNAL_MONITOR - if(do_monitor && accepted) - monitor_evnt_charge(cep, cep->charge, 0); -#endif - - if(cep->aoc_valid == AOC_VALID) - { - if(cep->aoc_diff != cep->unitlength) - { - DBGL(DL_MSG, (log(LL_DBG, "handle_charge: AOCD unit length updated %d -> %d secs", cep->unitlength, cep->aoc_diff))); - - cep->unitlength = cep->aoc_diff; - - unitlen_chkupd(cep); - } - else - { -#ifdef NOTDEF - DBGL(DL_MSG, (log(LL_DBG, "handle_charge: AOCD unit length still %d secs", cep->unitlength))); -#endif - } - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -void -unitlen_chkupd(cfg_entry_t *cep) -{ - msg_timeout_upd_t tupd; - -/* XXX check if the values are possible, if not, adjust them */ - - tupd.cdid = cep->cdid; - tupd.unitlen_time = cep->unitlength; - tupd.idle_time = cep->idle_time_out; - tupd.earlyhup_time = cep->earlyhangup; - - if((ioctl(isdnfd, I4B_TIMEOUT_UPD, &tupd)) < 0) - { - log(LL_ERR, "ioctl I4B_TIMEOUT_UPD failed: %s", strerror(errno)); - do_exit(1); - } -} - -/*--------------------------------------------------------------------------* - * this is intended to be called by do_exit and closes down all - * active connections before the daemon exits or is reconfigured. - *--------------------------------------------------------------------------*/ -void -close_allactive(void) -{ - int i, j; - cfg_entry_t *cep = NULL; - - j = 0; - - for (i = 0; i < ncontroller; i++) - { - if((get_controller_state(i)) != CTRL_UP) - continue; - - if((ret_channel_state(i, CHAN_B1)) == CHAN_RUN) - { - if((cep = get_cep_by_cc(i, CHAN_B1)) != NULL) - { -#ifdef USE_CURSES - if(do_fullscreen) - display_disconnect(cep); -#endif -#ifdef I4B_EXTERNAL_MONITOR - monitor_evnt_disconnect(cep); -#endif - next_state(cep, EV_DRQ); - j++; - } - } - - if((ret_channel_state(i, CHAN_B2)) == CHAN_RUN) - { - if((cep = get_cep_by_cc(i, CHAN_B2)) != NULL) - { -#ifdef USE_CURSES - if(do_fullscreen) - display_disconnect(cep); -#endif -#ifdef I4B_EXTERNAL_MONITOR - monitor_evnt_disconnect(cep); -#endif - next_state(cep, EV_DRQ); - j++; - } - } - } - - if(j) - { - log(LL_DMN, "close_allactive: waiting for all connections terminated"); - sleep(5); - } -} - -/*--------------------------------------------------------------------------* - * set an interface up - *--------------------------------------------------------------------------*/ -void -if_up(cfg_entry_t *cep) -{ - msg_updown_ind_t mui; - - /* set interface up */ - - DBGL(DL_MSG, (log(LL_DBG, "if_up: taking %s%d up", bdrivername(cep->usrdevicename), cep->usrdeviceunit))); - - mui.driver = cep->usrdevicename; - mui.driver_unit = cep->usrdeviceunit; - mui.updown = SOFT_ENA; - - if((ioctl(isdnfd, I4B_UPDOWN_IND, &mui)) < 0) - { - log(LL_ERR, "if_up: ioctl I4B_UPDOWN_IND failed: %s", strerror(errno)); - do_exit(1); - } - cep->down_retry_count = 0; - -#ifdef USE_CURSES - if(do_fullscreen) - display_updown(cep, 1); -#endif -#ifdef I4B_EXTERNAL_MONITOR - monitor_evnt_updown(cep, 1); -#endif - -} - -/*--------------------------------------------------------------------------* - * set an interface down - *--------------------------------------------------------------------------*/ -void -if_down(cfg_entry_t *cep) -{ - msg_updown_ind_t mui; - - /* set interface up */ - - DBGL(DL_MSG, (log(LL_DBG, "if_down: taking %s%d down", bdrivername(cep->usrdevicename), cep->usrdeviceunit))); - - mui.driver = cep->usrdevicename; - mui.driver_unit = cep->usrdeviceunit; - mui.updown = SOFT_DIS; - - if((ioctl(isdnfd, I4B_UPDOWN_IND, &mui)) < 0) - { - log(LL_ERR, "if_down: ioctl I4B_UPDOWN_IND failed: %s", strerror(errno)); - do_exit(1); - } - cep->went_down_time = time(NULL); - cep->down_retry_count = 0; - -#ifdef USE_CURSES - if(do_fullscreen) - display_updown(cep, 0); -#endif -#ifdef I4B_EXTERNAL_MONITOR - monitor_evnt_updown(cep, 0); -#endif - -} - -/*--------------------------------------------------------------------------* - * send a dial response to (an interface in) the kernel - *--------------------------------------------------------------------------*/ -void -dialresponse(cfg_entry_t *cep, int dstat) -{ - msg_dialout_resp_t mdr; - - static char *stattab[] = { - "normal condition", - "temporary failure", - "permanent failure", - "dialout not allowed" - }; - - if(dstat < DSTAT_NONE || dstat > DSTAT_INONLY) - { - log(LL_ERR, "dialresponse: dstat out of range %d!", dstat); - return; - } - - mdr.driver = cep->usrdevicename; - mdr.driver_unit = cep->usrdeviceunit; - mdr.stat = dstat; - - if((ioctl(isdnfd, I4B_DIALOUT_RESP, &mdr)) < 0) - { - log(LL_ERR, "dialresponse: ioctl I4B_DIALOUT_RESP failed: %s", strerror(errno)); - do_exit(1); - } - - DBGL(DL_DRVR, (log(LL_DBG, "dialresponse: sent [%s]", stattab[dstat]))); -} -/* EOF */ - diff --git a/usr.sbin/i4b/isdnd/timer.c b/usr.sbin/i4b/isdnd/timer.c deleted file mode 100644 index 5534efe702108..0000000000000 --- a/usr.sbin/i4b/isdnd/timer.c +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - timer/timing support routines - * ------------------------------------------ - * - * $Id: timer.c,v 1.16 1998/12/05 18:03:43 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:13:10 1998] - * - *---------------------------------------------------------------------------*/ - -#include "isdnd.h" - -static int hr_callgate(void); -static void handle_reserved(cfg_entry_t *cep, time_t now); -static void handle_active(cfg_entry_t *cep, time_t now); -static void recover_illegal(cfg_entry_t *cep); - -/*---------------------------------------------------------------------------* - * recover from illegal state - *---------------------------------------------------------------------------*/ -static void -recover_illegal(cfg_entry_t *cep) -{ - log(LL_ERR, "recover_illegal: ERROR, entry %s attempting disconnect!", cep->name); - sendm_disconnect_req(cep, (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL); - log(LL_ERR, "recover_illegal: ERROR, entry %s - reset state/cdid!", cep->name); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; -} - -/*---------------------------------------------------------------------------* - * start the timer - *---------------------------------------------------------------------------*/ -void -start_timer(cfg_entry_t *cep, int seconds) -{ - cep->timerval = cep->timerremain = seconds; -} - -/*---------------------------------------------------------------------------* - * stop the timer - *---------------------------------------------------------------------------*/ -void -stop_timer(cfg_entry_t *cep) -{ - cep->timerval = cep->timerremain = 0; -} - -/*---------------------------------------------------------------------------* - * callgate for handle_recovery() - *---------------------------------------------------------------------------*/ -static int -hr_callgate(void) -{ - static int tv_first = 1; - static struct timeval tv_last; - struct timeval tv_now; - - /* there must be 1 sec minimum between calls to this section */ - - if(tv_first) - { - gettimeofday(&tv_last, NULL); - tv_first = 0; - } - - gettimeofday(&tv_now, NULL); - - if((tv_now.tv_sec - tv_last.tv_sec) < 1) - { - - DBGL(DL_TIME, (log(LL_DBG, "time < 1 - last %ld:%ld now %ld:%ld", - tv_last.tv_sec, tv_last.tv_usec, - tv_now.tv_sec, tv_now.tv_usec))); - return(1); - } - else if((tv_now.tv_sec - tv_last.tv_sec) == 1) - { - if(((1000000 - tv_last.tv_usec) + tv_now.tv_usec) < 900000) - { - DBGL(DL_TIME, (log(LL_DBG, "time < 900000us - last %ld:%ld now %ld:%ld", - tv_last.tv_sec, tv_last.tv_usec, - tv_now.tv_sec, tv_now.tv_usec))); - return(1); - } - } - - DBGL(DL_TIME, (log(LL_DBG, "time OK! - last %ld:%ld now %ld:%ld", - tv_last.tv_sec, tv_last.tv_usec, - tv_now.tv_sec, tv_now.tv_usec))); - - gettimeofday(&tv_last, NULL); - - return(0); -} - -/*---------------------------------------------------------------------------* - * timeout, recovery and retry handling - *---------------------------------------------------------------------------*/ -void -handle_recovery(void) -{ - cfg_entry_t *cep = NULL; - int i; - time_t now; - - if(hr_callgate()) /* last call to handle_recovery < 1 sec ? */ - return; /* yes, exit */ - - now = time(NULL); /* get current time */ - - /* walk thru all entries, look for work to do */ - - for(i=0; i < nentries; i++) - { - cep = &cfg_entry_tab[i]; /* ptr to config entry */ - - switch(cep->cdid) - { - case CDID_UNUSED: /* entry unused */ - continue; - break; - - case CDID_RESERVED: /* entry reserved */ - handle_reserved(cep, now); - break; - - default: /* entry in use */ - handle_active(cep, now); - break; - } - } -} - -/*---------------------------------------------------------------------------* - * timeout, recovery and retry handling for active entry - *---------------------------------------------------------------------------*/ -static void -handle_active(cfg_entry_t *cep, time_t now) -{ - switch(cep->state) - { - case ST_ACCEPTED: - if(cep->timerval && (--(cep->timerremain)) <= 0) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_active: entry %s, TIMEOUT !!!", cep->name))); - cep->timerval = cep->timerremain = 0; - next_state(cep, EV_TIMO); - } - break; - - case ST_ALERT: - if(cep->alert_time > 0) - { - cep->alert_time--; - } - else - { - log(LL_CHD, "%05d %s answering: incoming call from %s to %s", - cep->cdid, cep->name, - cep->real_phone_incoming, - cep->local_phone_incoming); - next_state(cep, EV_MCI); - } - break; - - case ST_ILL: - recover_illegal(cep); - break; - - default: - /* check hangup flag: if active, close connection */ - - if(cep->hangup) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_active: entry %s, hangup request!", cep->name))); - cep->hangup = 0; - next_state(cep, EV_DRQ); - } - - /* - * if shorthold mode is rates based, check if - * we entered a time with a new unit length - */ - - if(cep->unitlengthsrc == ULSRC_RATE) - { - int connecttime = (int)difftime(now, cep->connect_time); - - if((connecttime > 1) && - (connecttime % 60)) - { - int newrate = get_current_rate(cep, 0); - - if(newrate != cep->unitlength) - { - DBGL(DL_MSG, (log(LL_DBG, "handle_active: rates unit length updated %d -> %d", cep->unitlength, newrate))); - - cep->unitlength = newrate; - - unitlen_chkupd(cep); - } - } - } - break; - } -} - -/*---------------------------------------------------------------------------* - * timeout, recovery and retry handling for reserved entry - *---------------------------------------------------------------------------*/ -static void -handle_reserved(cfg_entry_t *cep, time_t now) -{ - time_t waittime; - - switch(cep->state) - { - case ST_DIALRTMRCHD: /* wait for dial retry time reached */ - - if(cep->dialrandincr) - waittime = cep->randomtime; - else - waittime = cep->recoverytime; - - - if(now > (cep->last_dial_time + waittime)) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: entry %s, dial retry request!", cep->name))); - cep->state = ST_DIALRETRY; - - if((cep->cdid = get_cdid()) == 0) - { - log(LL_ERR, "handle_reserved: dialretry get_cdid() returned 0!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - - if((setup_dialout(cep)) == GOOD) - { - sendm_connect_req(cep); - } - else - { - log(LL_ERR, "handle_reserved: dialretry setup_dialout returned ERROR!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - } - break; - - - case ST_ACB_WAITDIAL: /* active callback wait for time between disconnect and dial */ - - if(now > (cep->last_release_time + cep->callbackwait)) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: entry %s, callback dial!", cep->name))); - cep->state = ST_ACB_DIAL; - - if((cep->cdid = get_cdid()) == 0) - { - log(LL_ERR, "handle_reserved: callback get_cdid() returned 0!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - - select_first_dialno(cep); - - if((setup_dialout(cep)) == GOOD) - { - sendm_connect_req(cep); - } - else - { - log(LL_ERR, "handle_reserved: callback setup_dialout returned ERROR!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - } - break; - - case ST_ACB_DIALFAIL: /* callback to remote failed */ - - if(cep->dialrandincr) - waittime = cep->randomtime + cep->recoverytime; - else - waittime = cep->recoverytime; - - if(now > (cep->last_release_time + waittime)) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: entry %s, callback dial retry request!", cep->name))); - cep->state = ST_ACB_DIAL; - - if((cep->cdid = get_cdid()) == 0) - { - log(LL_ERR, "handle_reserved: callback dialretry get_cdid() returned 0!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - - if((setup_dialout(cep)) == GOOD) - { - sendm_connect_req(cep); - } - else - { - log(LL_ERR, "handle_reserved: callback dialretry setup_dialout returned ERROR!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - } - break; - - case ST_PCB_WAITCALL: /* wait for remote calling back */ - - if(now > (cep->last_release_time + cep->calledbackwait)) - { - cep->dial_count++; - - if(cep->dial_count < cep->dialretries) - { - /* inside normal retry cycle */ - - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: entry %s, retry calledback dial #%d!", - cep->name, cep->dial_count))); - cep->state = ST_PCB_DIAL; - - if((cep->cdid = get_cdid()) == 0) - { - log(LL_ERR, "handle_reserved: calledback get_cdid() returned 0!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - select_next_dialno(cep); - - if((setup_dialout(cep)) == GOOD) - { - sendm_connect_req(cep); - } - else - { - log(LL_ERR, "handle_reserved: calledback setup_dialout returned ERROR!"); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - return; - } - } - else - { - /* retries exhausted */ - - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: calledback dial retries exhausted"))); - dialresponse(cep, DSTAT_TFAIL); - cep->cdid = CDID_UNUSED; - cep->dial_count = 0; - cep->state = ST_IDLE; - } - } - break; - - case ST_DOWN: /* interface was taken down */ - - if(now > (cep->went_down_time + cep->downtime)) - { - DBGL(DL_RCVRY, (log(LL_DBG, "handle_reserved: taking %s%d up", bdrivername(cep->usrdevicename), cep->usrdeviceunit))); - if_up(cep); - cep->state = ST_IDLE; - cep->cdid = CDID_UNUSED; - } - break; - - case ST_ILL: /* illegal state reached, recover ! */ - - recover_illegal(cep); - break; - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdnd/vararray.h b/usr.sbin/i4b/isdnd/vararray.h deleted file mode 100644 index c71f816ef9ea1..0000000000000 --- a/usr.sbin/i4b/isdnd/vararray.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Martin Husemann <martin@rumolt.teuto.de> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software withough specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * vararray.h: basic collection macros for variable sized (growing) arrays: - * macro version of popular C++ template classes, - * not as elegant in use as the template version, - * but has maximum runtime performance and can give - * pointers to array contents (i.e. for ioctl's). - * Works in C as well as in C++. - * CAVEAT: in C++ only useable for aggregateable objects, - * it does use memcpy instead of copy constructors! - */ - -#ifndef VARARRAY_H -#define VARARRAY_H -/* declare a variable sized array, element type is t */ -#define VARA_DECL(t) struct { int used, allocated; t *data; } - -/* aggregate initializer for a variable array */ -#define VARA_INITIALIZER { 0, 0, NULL } - -/* free all allocated storage */ -#define VARA_FREE(a) { if ((a).data != NULL) free((a).data); \ - (a).allocated = 0; (a).used = 0; } - -/* number of elments currently in array*/ -#define VARA_NUM(a) ((a).used) - -/* number of elements already allocated in array */ -#define VARA_ALLOCATED(a) ((a).allocated) - -/* pointer to array data */ -#define VARA_PTR(a) ((a).data) - -/* empty the array */ -#define VARA_EMPTY(a) { (a).used = 0; } - -#ifdef __cplusplus -#define VARA_NEW(t,c) new t[c] -#define VARA_DELETE(p) delete [] p -#else -#define VARA_NEW(t,c) (t*)malloc(sizeof(t)*(c)) -#define VARA_DELETE(p) free(p) -#endif - -/* add an element (not changing any data). - * a is the array, i the index, - * t the element type and n the initial allocation */ -#define VARA_ADD_AT(a,i,t,n) \ -{ \ - if ((i) >= (a).allocated) { \ - int new_alloc = (a).allocated ? (a).allocated*2 : (n); \ - t *new_data; \ - if (new_alloc <= (i)) new_alloc = (i)+1; \ - new_data = VARA_NEW(t, new_alloc); \ - if ((a).data) { \ - memcpy(new_data, (a).data, (a).used*sizeof(t)); \ - VARA_DELETE((a).data); \ - } \ - (a).data = new_data; \ - (a).allocated = new_alloc; \ - } \ - if ((i) >= (a).used) { \ - if (i > (a).used) \ - memset(&((a).data[(a).used]), 0, \ - sizeof(t)*((i)-(a).used+1)); \ - (a).used = (i)+1; \ - } \ -} - -/* return an l-value at index i */ -#define VARA_AT(a,i) ((a).data[(i)]) - -/* iterate through the array */ -#define VARA_FOREACH(a,i) for ((i) = 0; (i) < (a).used; (i)++) - -/* check for a valid index */ -#define VARA_VALID(a,i) ((i) >= 0 && (i) < (a).used) - -/* remove one entry */ -#define VARA_REMOVEAT(a,i) \ -{ \ - if ((i) < ((a).used -1)) \ - memmove(&((a).data[(i)]), &((a).data[(i)+1]), sizeof((a).data[0])); \ - (a).used--; \ -} - -/* free all storage allocated for the array */ -#define VARA_DESTROY(a) \ -{ \ - if ((a).data) VARA_DELETE((a).data); \ - (a).allocated = 0; \ - (a).used = 0; \ - (a).data = NULL; \ -} - -#endif - diff --git a/usr.sbin/i4b/isdndebug/Makefile b/usr.sbin/i4b/isdndebug/Makefile deleted file mode 100644 index cf5281871439f..0000000000000 --- a/usr.sbin/i4b/isdndebug/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -PROG = isdndebug -SRCS = main.c -MAN8 = isdndebug.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdndebug/isdndebug.8 b/usr.sbin/i4b/isdndebug/isdndebug.8 deleted file mode 100644 index f3903e38b4d31..0000000000000 --- a/usr.sbin/i4b/isdndebug/isdndebug.8 +++ /dev/null @@ -1,102 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdndebug.8,v 1.4 1998/12/05 18:03:47 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:13:34 1998] -.\" -.\" -hm writing manual pages -.\" -hm getting uptodate -.\" -.\" -.Dd July 9, 1998 -.Dt isdndebug 8 -.Sh NAME -.Nm isdndebug -.Nd control debugging handling inside isdn4bsd kernel -.Sh SYNOPSIS -.Nm -.Op Fl e -.Op Fl g -.Op Fl h -.Op Fl l Ar layer -.Op Fl m -.Op Fl r -.Op Fl s Ar value -.Op Fl u Ar unit -.Op Fl z -.Op Fl H -.Sh DESCRIPTION -.Nm isdndebug -is part of the isdn4bsd package and is used to control debugging output -of the isdn4bsd kernel part. Every layer of the isdn4bsd kernel uses a -debugging mask which can be manipulated using this utility. -.Pp -A second usage of -.Nm -is to display and reset the HSCX error counters. -.Pp -The following options are available: -.Bl -tag -width Ds -.It Fl e -Set debugging mask for the selected layer(s) to display errors only. -.It Fl g -Get the debugging mask for the selected layer(s). -.It Fl h -Display the the HSCX error counters. -.It Fl l -Specify the layer for which a command applies. Default is all layers. -.It Fl m -Set debugging mask for the selected layer(s) to display all possible -debugging messages (maximum output). -.It Fl r -Set debugging mask for the selected layer(s) to the compiled in default -(reset). -.It Fl s -Set debugging mask for the selected layer(s) to value. Value can be -specified in any number base supported by -.Xr sscanf 3 . -.It Fl u -Set the unit numbers for the -h and -H flags. -.It Fl z -Set debugging mask for the selected layer(s) to no output at all (zero). -.It Fl H -Reset the HSCX error counters to zero. -.Pp -.Sh FILES -/dev/i4bctl - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -isdndebug -g -.Ed -.Pp -displays the current debugging level for all ISDN layers - -.Sh AUTHOR -The -.Nm -utility and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/isdndebug/main.c b/usr.sbin/i4b/isdndebug/main.c deleted file mode 100644 index 7fdbf7fe1bfe0..0000000000000 --- a/usr.sbin/i4b/isdndebug/main.c +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * main.c - i4b set debug options - * ------------------------------ - * - * $Id: main.c,v 1.13 1998/12/05 18:03:49 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:13:55 1998] - * - *---------------------------------------------------------------------------*/ - -#include <stdio.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <ctype.h> -#include <sys/stat.h> -#include <sys/wait.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/time.h> - -#include <machine/i4b_debug.h> -#include <machine/i4b_ioctl.h> - -char *bin_str(unsigned long val, int length); - -static void usage ( void ); -void printl1(unsigned long val); -void printl2(unsigned long val); -void printl3(unsigned long val); -void printl4(unsigned long val); - -static int isdnfd; - -#define I4BCTLDEVICE "/dev/i4bctl" - -int opt_get = 0; -int opt_layer = -1; -int opt_set = 0; -int opt_setval; -int opt_reset = 0; -int opt_max = 0; -int opt_err = 0; -int opt_zero = 0; -int opt_unit = 0; -int opt_hscx = 0; -int opt_rhscx = 0; - -/*---------------------------------------------------------------------------* - * program entry - *---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int c; - ctl_debug_t cdbg; - int ret; - - while ((c = getopt(argc, argv, "eghl:mrs:u:zH?")) != EOF) - { - switch(c) - { - case 'e': - opt_err = 1; - break; - - case 'g': - opt_get = 1; - break; - - case 'h': - opt_hscx = 1; - break; - - case 'r': - opt_reset = 1; - break; - - case 'm': - opt_max = 1; - break; - - case 'l': - opt_layer = atoi(optarg); - if(opt_layer < 1 || opt_layer > 4) - usage(); - break; - - case 's': - if((sscanf(optarg, "%i", &opt_setval)) != 1) - usage(); - opt_set = 1; - break; - - case 'u': - opt_unit = atoi(optarg); - if(opt_unit < 0 || opt_unit > 9) - usage(); - break; - - case 'z': - opt_zero = 1; - break; - - case 'H': - opt_rhscx = 1; - break; - - case '?': - default: - usage(); - break; - } - } - - if(opt_get == 0 && opt_set == 0 && opt_reset == 0 && opt_max == 0 && - opt_err == 0 && opt_zero == 0 && opt_hscx == 0 && opt_rhscx == 0) - { - usage(); - } - - if((opt_get + opt_set + opt_reset + opt_max + opt_err + opt_zero + - opt_hscx + opt_rhscx) > 1) - { - usage(); - } - - if((isdnfd = open(I4BCTLDEVICE, O_RDWR)) < 0) - { - fprintf(stderr, "i4bctl: cannot open %s: %s\n", I4BCTLDEVICE, strerror(errno)); - exit(1); - } - - if(opt_hscx) - { - hscxstat_t hst; - - hst.unit = opt_unit; - hst.chan = 0; - - if((ret = ioctl(isdnfd, I4B_CTL_GET_HSCXSTAT, &hst)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_GET_HSCXSTAT failed: %s", strerror(errno)); - exit(1); - } - - printf("\nHSCX events: VFR RDO CRC RAB XDU RFO\n"); - - printf("unit %d chan %d: %6d %6d %6d %6d %6d %6d\n", - hst.unit, hst.chan, - hst.vfr, hst.rdo, hst.crc, hst.rab, hst.xdu, hst.rfo); - - hst.unit = opt_unit; - hst.chan = 1; - - if((ret = ioctl(isdnfd, I4B_CTL_GET_HSCXSTAT, &hst)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_GET_HSCXSTAT failed: %s", strerror(errno)); - exit(1); - } - - printf("unit %d chan %d: %6d %6d %6d %6d %6d %6d\n", - hst.unit, hst.chan, - hst.vfr, hst.rdo, hst.crc, hst.rab, hst.xdu, hst.rfo); - - exit(0); - } - - if(opt_rhscx) - { - hscxstat_t hst; - - hst.unit = opt_unit; - hst.chan = 0; - - if((ret = ioctl(isdnfd, I4B_CTL_CLR_HSCXSTAT, &hst)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_CLR_HSCXSTAT failed: %s", strerror(errno)); - exit(1); - } - - printf("HSCX event counters unit %d chan %d reset to zero!\n", - hst.unit, hst.chan); - - hst.unit = opt_unit; - hst.chan = 1; - - if((ret = ioctl(isdnfd, I4B_CTL_CLR_HSCXSTAT, &hst)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_CLR_HSCXSTAT failed: %s", strerror(errno)); - exit(1); - } - - printf("HSCX event counters unit %d chan %d reset to zero!\n", - hst.unit, hst.chan); - - exit(0); - } - - if((ret = ioctl(isdnfd, I4B_CTL_GET_DEBUG, &cdbg)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_GET_DEBUG failed: %s", strerror(errno)); - exit(1); - } - - if(opt_get) - { - switch(opt_layer) - { - case -1: - printl1(cdbg.l1); - printl2(cdbg.l2); - printl3(cdbg.l3); - printl4(cdbg.l4); - break; - - case 1: - printl1(cdbg.l1); - break; - - case 2: - printl2(cdbg.l2); - break; - - case 3: - printl3(cdbg.l3); - break; - - case 4: - printl4(cdbg.l4); - break; - } - printf("\n"); - return(0); - } - else if(opt_set) - { - switch(opt_layer) - { - case -1: - usage(); - break; - - case 1: - cdbg.l1 = opt_setval; - break; - - case 2: - cdbg.l2 = opt_setval; - break; - - case 3: - cdbg.l3 = opt_setval; - break; - - case 4: - cdbg.l4 = opt_setval; - break; - } - } - else if(opt_reset) - { - switch(opt_layer) - { - case -1: - cdbg.l1 = L1_DEBUG_DEFAULT; - cdbg.l2 = L2_DEBUG_DEFAULT; - cdbg.l3 = L3_DEBUG_DEFAULT; - cdbg.l4 = L4_DEBUG_DEFAULT; - break; - - case 1: - cdbg.l1 = L1_DEBUG_DEFAULT; - break; - - case 2: - cdbg.l2 = L2_DEBUG_DEFAULT; - break; - - case 3: - cdbg.l3 = L3_DEBUG_DEFAULT; - break; - - case 4: - cdbg.l4 = L4_DEBUG_DEFAULT; - break; - } - } - else if(opt_max) - { - switch(opt_layer) - { - case -1: - cdbg.l1 = L1_DEBUG_MAX; - cdbg.l2 = L2_DEBUG_MAX; - cdbg.l3 = L3_DEBUG_MAX; - cdbg.l4 = L4_DEBUG_MAX; - break; - - case 1: - cdbg.l1 = L1_DEBUG_MAX; - break; - - case 2: - cdbg.l2 = L2_DEBUG_MAX; - break; - - case 3: - cdbg.l3 = L3_DEBUG_MAX; - break; - - case 4: - cdbg.l4 = L4_DEBUG_MAX; - break; - } - } - else if(opt_err) - { - switch(opt_layer) - { - case -1: - cdbg.l1 = L1_DEBUG_ERR; - cdbg.l2 = L2_DEBUG_ERR; - cdbg.l3 = L3_DEBUG_ERR; - cdbg.l4 = L4_DEBUG_ERR; - break; - - case 1: - cdbg.l1 = L1_DEBUG_ERR; - break; - - case 2: - cdbg.l2 = L2_DEBUG_ERR; - break; - - case 3: - cdbg.l3 = L3_DEBUG_ERR; - break; - - case 4: - cdbg.l4 = L4_DEBUG_ERR; - break; - } - } - else if(opt_zero) - { - switch(opt_layer) - { - case -1: - cdbg.l1 = 0; - cdbg.l2 = 0; - cdbg.l3 = 0; - cdbg.l4 = 0; - break; - - case 1: - cdbg.l1 = 0; - break; - - case 2: - cdbg.l2 = 0; - break; - - case 3: - cdbg.l3 = 0; - break; - - case 4: - cdbg.l4 = 0; - break; - } - } - else - { - exit(1); - } - - if((ret = ioctl(isdnfd, I4B_CTL_SET_DEBUG, &cdbg)) < 0) - { - fprintf(stderr, "ioctl I4B_CTL_SET_DEBUG failed: %s", strerror(errno)); - exit(1); - } - return(0); -} - -/*---------------------------------------------------------------------------* - * return ptr to string of 1's and 0's for value - *---------------------------------------------------------------------------*/ -char * -bin_str(unsigned long val, int length) -{ - static char buffer[80]; - int i = 0; - - if (length > 32) - length = 32; - - val = val << (32 - length); - - while (length--) - { - if (val & 0x80000000) - buffer[i++] = '1'; - else - buffer[i++] = '0'; - if ((length % 4) == 0 && length) - buffer[i++] = '.'; - val = val << 1; - } - return (buffer); -} - -/*---------------------------------------------------------------------------* - * print l1 info - *---------------------------------------------------------------------------*/ -void -printl1(unsigned long val) -{ - printf("\nLayer 1: %s = 0x%lX\n", bin_str(val, 32), val); - printf(" || |||| |||| ||||\n"), - printf(" || |||| |||| |||+- general error messages\n"); - printf(" || |||| |||| ||+-- PH primitives exchanged\n"); - printf(" || |||| |||| |+--- B channel actions\n"); - printf(" || |||| |||| +---- HSCX error messages\n"); - printf(" || |||| |||+------ HSCX IRQ messages\n"); - printf(" || |||| ||+------- ISAC error messages\n"); - printf(" || |||| |+-------- ISAC messages\n"); - printf(" || |||| +--------- ISAC setup messages\n"); - printf(" || |||+----------- FSM general messages\n"); - printf(" || ||+------------ FSM error messages\n"); - printf(" || |+------------- timer general messages\n"); - printf(" || +-------------- timer error messages\n"); - printf(" |+---------------- HSCX data xfer errors msgs\n"); - printf(" +----------------- ISAC CICO messages\n"); - printf(" ++++-++++-++++-++++-++------------------ unassigned\n"); -} - -/*---------------------------------------------------------------------------* - * print l2 info - *---------------------------------------------------------------------------*/ -void -printl2(unsigned long val) -{ - printf("\nLayer 2: %s = 0x%lX\n", bin_str(val, 32), val); - printf(" || |||| |||| ||||\n"), - printf(" || |||| |||| |||+- general error messages\n"); - printf(" || |||| |||| ||+-- DL primitives exchanged\n"); - printf(" || |||| |||| |+--- U frame messages\n"); - printf(" || |||| |||| +---- U frame error messages\n"); - printf(" || |||| |||+------ S frame messages\n"); - printf(" || |||| ||+------- S frame error messages\n"); - printf(" || |||| |+-------- I frame messages\n"); - printf(" || |||| +--------- I frame error messages\n"); - printf(" || |||+----------- FSM general messages\n"); - printf(" || ||+------------ FSM error messages\n"); - printf(" || |+------------- timer general messages\n"); - printf(" || +-------------- timer error messages\n"); - printf(" |+---------------- TEI general messages\n"); - printf(" +----------------- TEI error messages\n"); - printf(" ++++-++++-++++-++++-++------------------ unassigned\n"); -} - -/*---------------------------------------------------------------------------* - * print l3 info - *---------------------------------------------------------------------------*/ -void -printl3(unsigned long val) -{ - printf("\nLayer 3: %s = 0x%lX\n", bin_str(val, 32), val); - printf(" ||| |||| ||||\n"), - printf(" ||| |||| |||+- general error messages\n"); - printf(" ||| |||| ||+-- general messages\n"); - printf(" ||| |||| |+--- FSM messages\n"); - printf(" ||| |||| +---- FSM error messages\n"); - printf(" ||| |||+------ timer messages\n"); - printf(" ||| ||+------- timer error messages\n"); - printf(" ||| |+-------- protocol messages\n"); - printf(" ||| +--------- protocol error messages\n"); - printf(" ||+----------- facility messages\n"); - printf(" |+------------ facility error messages\n"); - printf(" +------------- Q.931 messages exchanged\n"); - printf(" ++++-++++-++++-++++-++++-++------------- unassigned\n"); -} - -/*---------------------------------------------------------------------------* - * print l4 info - *---------------------------------------------------------------------------*/ -void -printl4(unsigned long val) -{ - printf("\nLayer 4: %s = 0x%lX\n", bin_str(val, 32), val); - printf(" || ||||\n"), - printf(" || |||+- general error messages\n"); - printf(" || ||+-- general messages\n"); - printf(" || |+--- B-ch timeout messages\n"); - printf(" || +---- network driver dial state\n"); - printf(" |+------ ipr driver debug messages\n"); - printf(" +------- rbch driver debug messages\n"); - printf(" ++++-++++-++++-++++-++++-++++-++-------- unassigned\n"); -} - -/*---------------------------------------------------------------------------* - * usage display and exit - *---------------------------------------------------------------------------*/ -static void -usage(void) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "isdndebug - i4b set debug level, version %02d.%02d, compiled %s %s\n", VERSION, REL, __DATE__, __TIME__); - fprintf(stderr, "usage: isdndebug -e -h -g -l <layer> -m -r -s <value> -u <unit> -z -H\n"); - fprintf(stderr, " -e set error only debugging output\n"); - fprintf(stderr, " -g get current debugging values\n"); - fprintf(stderr, " -h get HSCX event counters\n"); - fprintf(stderr, " -l layer specify layer (1...4)\n"); - fprintf(stderr, " -m set maximum debugging output\n"); - fprintf(stderr, " -r reset values(s) to compiled in default\n"); - fprintf(stderr, " -s value set new debugging value for layer\n"); - fprintf(stderr, " -u unit unit number for -h and -H commands\n"); - fprintf(stderr, " -z set zero (=no) debugging output\n"); - fprintf(stderr, " -H reset HSCX event counters to zero\n"); - fprintf(stderr, "\n"); - exit(1); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/Makefile b/usr.sbin/i4b/isdndecode/Makefile deleted file mode 100644 index cad9143726a6d..0000000000000 --- a/usr.sbin/i4b/isdndecode/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -PROG = isdndecode -SRCS = main.c layer1.c layer2.c layer3.c \ - layer3_subr.c facility.c pcause.c -MAN8 = isdndecode.8 - -.include <bsd.prog.mk> - diff --git a/usr.sbin/i4b/isdndecode/decode.h b/usr.sbin/i4b/isdndecode/decode.h deleted file mode 100644 index 0eec0ab90dc97..0000000000000 --- a/usr.sbin/i4b/isdndecode/decode.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * decode.h - isdndecode header file - * --------------------------------- - * - * $Id: decode.h,v 1.4 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:10:13 1998] - * - *---------------------------------------------------------------------------*/ - -#include <stdio.h> -#include <stdlib.h> -#include <stdarg.h> -#include <signal.h> -#include <fcntl.h> -#include <ctype.h> -#include <string.h> -#include <time.h> -#include <unistd.h> -#include <sys/uio.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/ioctl.h> -#include <sys/file.h> - -#include <machine/i4b_ioctl.h> -#include <machine/i4b_trace.h> - -#include "pcause.h" - -#define I4BTRC_DEVICE "/dev/i4btrc" /* trace device file */ -#define DECODE_FILE_NAME "isdndecode" /* default output filename */ -#define DECODE_FILE_NAME_BAK ".last" /* backup filename trailer */ -#define BIN_FILE_NAME "isdntracebin" /* default binary filename */ - -#define BSIZE 4096 /* read buffer size */ -#define NCOLS 80 /* screen width */ - -#define RxUDEF 0 /* analyze mode, default unit for receiver side */ -#define TxUDEF 1 /* analyze mode, default unit for transmitter side */ - -void layer1(char *pbuf, unsigned char *buf); -int layer2(char *pbuf, unsigned char *buf, int is_te, int printit); -void layer3(char *pbuf, int n, int off, unsigned char *buf); -int q932_facility(char *pbuf, unsigned char *buf); -void sprintline(int, char *, int, int, int, const char *, ...); -void extension(int, char *, int, unsigned char, unsigned char); - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/facility.c b/usr.sbin/i4b/isdndecode/facility.c deleted file mode 100644 index 5735abb267f6c..0000000000000 --- a/usr.sbin/i4b/isdndecode/facility.c +++ /dev/null @@ -1,906 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * facility.c - decode Q.932 facilities - * ------------------------------------ - * - * $Id: facility.c,v 1.2 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:10:32 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" -#include "facility.h" - -static int do_component(int length, char *pbuf); -static char *uni_str(int code); -static char *opval_str(int val); -static char *bid_str(int val); -static void next_state(char *pbuf, int class, int form, int code, int val); - -static int byte_len; -static unsigned char *byte_buf; -static int state; - -/*---------------------------------------------------------------------------* - * decode Q.931/Q.932 facility info element - *---------------------------------------------------------------------------*/ -int -q932_facility(char *pbuf, unsigned char *buf) -{ - int len; - - sprintf((pbuf+strlen(pbuf)), "[facility (Q.932): "); - - buf++; /* length */ - - len = *buf; - - buf++; /* protocol profile */ - - sprintf((pbuf+strlen(pbuf)), "Protocol="); - - switch(*buf & 0x1f) - { - case FAC_PROTO_ROP: - sprintf((pbuf+strlen(pbuf)), "Remote Operations Protocol\n"); - break; - - case FAC_PROTO_CMIP: - sprintf((pbuf+strlen(pbuf)), "CMIP Protocol (Q.941), UNSUPPORTED!\n"); - return(len+2); - break; - - case FAC_PROTO_ACSE: - sprintf((pbuf+strlen(pbuf)), "ACSE Protocol (X.217/X.227), UNSUPPORTED!\n"); - return(len+2); - break; - - default: - sprintf((pbuf+strlen(pbuf)), "Unknown Protocol (val = 0x%x), UNSUPPORTED!\n", *buf & 0x1f); - return(len+2); - break; - } - - /* next byte */ - - buf++; - len--; - - /* initialize variables for do_component */ - - byte_len = 0; - byte_buf = buf; - state = ST_EXP_COMP_TYP; - - /* decode facility */ - - do_component(len, pbuf); - - sprintf((pbuf+(strlen(pbuf)-1)), "]"); /* XXX replace last newline */ - - return(len+3); -} - -/*---------------------------------------------------------------------------* - * handle a component recursively - *---------------------------------------------------------------------------*/ -static int -do_component(int length, char *pbuf) -{ - int comp_tag_class; /* component tag class */ - int comp_tag_form; /* component form: constructor or primitive */ - int comp_tag_code; /* component code depending on class */ - int comp_length = 0; /* component length */ - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "ENTER - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - -again: - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "AGAIN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - - /*----------------------------------------*/ - /* first component element: component tag */ - /*----------------------------------------*/ - - /* tag class bits */ - - sprintf((pbuf+strlen(pbuf)), "\t0x%02x Tag: ", *byte_buf); - - comp_tag_class = (*byte_buf & 0xc0) >> 6; - - switch(comp_tag_class) - { - case FAC_TAGCLASS_UNI: - sprintf((pbuf+strlen(pbuf)), "Universal"); - break; - case FAC_TAGCLASS_APW: - sprintf((pbuf+strlen(pbuf)), "Applic-wide"); - break; - case FAC_TAGCLASS_COS: - sprintf((pbuf+strlen(pbuf)), "Context-spec"); - break; - case FAC_TAGCLASS_PRU: - sprintf((pbuf+strlen(pbuf)), "Private"); - break; - } - - /* tag form bit */ - - comp_tag_form = (*byte_buf & 0x20) > 5; - - sprintf((pbuf+strlen(pbuf)), ", "); - - if(comp_tag_form == FAC_TAGFORM_CON) - { - sprintf((pbuf+strlen(pbuf)), "Constructor"); - } - else - { - sprintf((pbuf+strlen(pbuf)), "Primitive"); - } - - /* tag code bits */ - - comp_tag_code = *byte_buf & 0x1f; - - sprintf((pbuf+strlen(pbuf)), ", "); - - if(comp_tag_code == 0x1f) - { - comp_tag_code = 0; - - byte_buf++; - byte_len++; - - while(*byte_buf & 0x80) - { - comp_tag_code += (*byte_buf & 0x7f); - byte_buf++; - byte_len++; - } - comp_tag_code += (*byte_buf & 0x7f); - sprintf((pbuf+strlen(pbuf)), "%d (ext)\n", comp_tag_code); - } - else - { - comp_tag_code = (*byte_buf & 0x1f); - - if(comp_tag_class == FAC_TAGCLASS_UNI) - { - sprintf((pbuf+strlen(pbuf)), "%s (%d)\n", uni_str(comp_tag_code), comp_tag_code); - } - else - { - sprintf((pbuf+strlen(pbuf)), "code = %d\n", comp_tag_code); - } - } - - byte_buf++; - byte_len++; - - /*--------------------------------------------*/ - /* second component element: component length */ - /*--------------------------------------------*/ - - sprintf((pbuf+strlen(pbuf)), "\t0x%02x Len: ", *byte_buf); - - comp_length = 0; - - if(*byte_buf & 0x80) - { - int i = *byte_buf & 0x7f; - - byte_len += i; - - for(;i > 0;i++) - { - byte_buf++; - comp_length += (*byte_buf * (i*256)); - } - sprintf((pbuf+strlen(pbuf)), "%d (long form)\n", comp_length); - } - else - { - comp_length = *byte_buf & 0x7f; - sprintf((pbuf+strlen(pbuf)), "%d (short form)\n", comp_length); - } - - next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, -1); - - byte_len++; - byte_buf++; - - if(comp_length) - { - - /*---------------------------------------------*/ - /* third component element: component contents */ - /*---------------------------------------------*/ - - if(comp_tag_form) /* == constructor */ - { - do_component(comp_length, pbuf); - } - else - { - int val = 0; - if(comp_tag_class == FAC_TAGCLASS_UNI) - { - switch(comp_tag_code) - { - case FAC_CODEUNI_INT: - case FAC_CODEUNI_ENUM: - case FAC_CODEUNI_BOOL: - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x ", *byte_buf); - val += (*byte_buf + (i*255)); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - sprintf((pbuf+strlen(pbuf)), "Val: %d\n", val); - } - break; - default: - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x = %d", *byte_buf, *byte_buf); - if(isprint(*byte_buf)) - sprintf((pbuf+strlen(pbuf)), " = '%c'", *byte_buf); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - } - break; - } - } - - else /* comp_tag_class != FAC_TAGCLASS_UNI */ - { - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x", *byte_buf); - val += (*byte_buf + (i*255)); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - sprintf((pbuf+strlen(pbuf)), "\n"); - } - } - next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, val); - } - } - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "PREGOTO - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - if(byte_len < length) - goto again; -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "RETURN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - return(byte_len); -} - -/*---------------------------------------------------------------------------* - * print universal id type - *---------------------------------------------------------------------------*/ -static char *uni_str(int code) -{ - static char *tbl[] = { - "BOOLEAN", - "INTEGER", - "BIT STRING", - "OCTET STRING", - "NULL", - "OBJECT IDENTIFIER", - "OBJECT DESCRIPTOR", - "EXTERNAL", - "REAL", - "ENUMERATED", - "RESERVED11", - "RESERVED12", - "RESERVED13", - "RESERVED14", - "RESERVED15", - "SEQUENCE", - "SET", - "NUMERIC STRING", - "PRINTABLE STRING", - "TELETEX STRING", - "ISO646 STRING", - "IA5 STRING", - "GRAPHIC STRING", - "GENERAL STRING" - }; - - if(code >= 1 && code <= FAC_CODEUNI_GNSTR) - return(tbl[code-1]); - else - return("ERROR, Value out of Range!"); -} - -/*---------------------------------------------------------------------------* - * print operation value - *---------------------------------------------------------------------------*/ -static char *opval_str(int val) -{ - static char buffer[80]; - char *r; - - switch(val) - { - case FAC_OPVAL_UUS: - r = "uUs"; - break; - case FAC_OPVAL_CUG: - r = "cUGCall"; - break; - case FAC_OPVAL_MCID: - r = "mCIDRequest"; - break; - case FAC_OPVAL_BTPY: - r = "beginTPY"; - break; - case FAC_OPVAL_ETPY: - r = "endTPY"; - break; - case FAC_OPVAL_ECT: - r = "eCTRequest"; - break; - case FAC_OPVAL_DIV_ACT: - r = "activationDiversion"; - break; - case FAC_OPVAL_DIV_DEACT: - r = "deactivationDiversion"; - break; - case FAC_OPVAL_DIV_ACTSN: - r = "activationStatusNotificationDiv"; - break; - case FAC_OPVAL_DIV_DEACTSN: - r = "deactivationStatusNotificationDiv"; - break; - case FAC_OPVAL_DIV_INTER: - r = "interrogationDiversion"; - break; - case FAC_OPVAL_DIV_INFO: - r = "diversionInformation"; - break; - case FAC_OPVAL_DIV_CALLDEF: - r = "callDeflection"; - break; - case FAC_OPVAL_DIV_CALLRER: - r = "callRerouting"; - break; - case FAC_OPVAL_DIV_LINF2: - r = "divertingLegInformation2"; - break; - case FAC_OPVAL_DIV_INVS: - r = "invokeStatus"; - break; - case FAC_OPVAL_DIV_INTER1: - r = "interrogationDiversion1"; - break; - case FAC_OPVAL_DIV_LINF1: - r = "divertingLegInformation1"; - break; - case FAC_OPVAL_DIV_LINF3: - r = "divertingLegInformation3"; - break; - case FAC_OPVAL_ER_CRCO: - r = "explicitReservationCreationControl"; - break; - case FAC_OPVAL_ER_MGMT: - r = "explicitReservationManagement"; - break; - case FAC_OPVAL_ER_CANC: - r = "explicitReservationCancel"; - break; - case FAC_OPVAL_MLPP_QUERY: - r = "mLPP lfb Query"; - break; - case FAC_OPVAL_MLPP_CALLR: - r = "mLPP Call Request"; - break; - case FAC_OPVAL_MLPP_CALLP: - r = "mLPP Call Preemption"; - break; - case FAC_OPVAL_AOC_REQ: - r = "chargingRequest"; - break; - case FAC_OPVAL_AOC_S_CUR: - r = "aOCSCurrency"; - break; - case FAC_OPVAL_AOC_S_SPC: - r = "aOCSSpecialArrangement"; - break; - case FAC_OPVAL_AOC_D_CUR: - r = "aOCDCurrency"; - break; - case FAC_OPVAL_AOC_D_UNIT: - r = "aOCDChargingUnit"; - break; - case FAC_OPVAL_AOC_E_CUR: - r = "aOCECurrency"; - break; - case FAC_OPVAL_AOC_E_UNIT: - r = "aOCEChargingUnit"; - break; - case FAC_OPVAL_AOC_IDOFCRG: - r = "identificationOfCharge"; - break; - case FAC_OPVAL_CONF_BEG: - r = "beginConf"; - break; - case FAC_OPVAL_CONF_ADD: - r = "addConf"; - break; - case FAC_OPVAL_CONF_SPLIT: - r = "splitConf"; - break; - case FAC_OPVAL_CONF_DROP: - r = "dropConf"; - break; - case FAC_OPVAL_CONF_ISOLATE: - r = "isolateConf"; - break; - case FAC_OPVAL_CONF_REATT: - r = "reattachConf"; - break; - case FAC_OPVAL_CONF_PDISC: - r = "partyDISC"; - break; - case FAC_OPVAL_CONF_FCONF: - r = "floatConf"; - break; - case FAC_OPVAL_CONF_END: - r = "endConf"; - break; - case FAC_OPVAL_CONF_IDCFE: - r = "indentifyConferee"; - break; - case FAC_OPVAL_REVC_REQ: - r = "requestREV"; - break; - default: - sprintf(buffer, "unknown operation value %d!", val); - r = buffer; - } - return(r); -} - -/*---------------------------------------------------------------------------* - * billing id string - *---------------------------------------------------------------------------*/ -static char *bid_str(int val) -{ - static char buffer[80]; - char *r; - - switch(val) - { - case 0: - r = "normalCharging"; - break; - case 1: - r = "reverseCharging"; - break; - case 2: - r = "creditCardCharging"; - break; - case 3: - r = "callForwardingUnconditional"; - break; - case 4: - r = "callForwardingBusy"; - break; - case 5: - r = "callForwardingNoReply"; - break; - case 6: - r = "callDeflection"; - break; - case 7: - r = "callTransfer"; - break; - default: - sprintf(buffer, "unknown billing-id value %d!", val); - r = buffer; - } - return(r); -} - -/*---------------------------------------------------------------------------* - * invoke component - *---------------------------------------------------------------------------*/ -static void -F_1_1(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_1, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t invokeComponent\n"); - state = ST_EXP_INV_ID; - } -} - -/*---------------------------------------------------------------------------* - * return result - *---------------------------------------------------------------------------*/ -static void -F_1_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_2, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t returnResult\n"); - state = ST_EXP_RR_INV_ID; - } -} -/*---------------------------------------------------------------------------* - * return error - *---------------------------------------------------------------------------*/ -static void -F_1_3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_3, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t returnError\n"); - state = ST_EXP_NIX; - } -} -/*---------------------------------------------------------------------------* - * reject - *---------------------------------------------------------------------------*/ -static void -F_1_4(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_4, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t reject\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * invoke component: invoke id - *---------------------------------------------------------------------------*/ -static void -F_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_2, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val); - state = ST_EXP_OP_VAL; - } -} - -/*---------------------------------------------------------------------------* - * return result: invoke id - *---------------------------------------------------------------------------*/ -static void -F_RR2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR2, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val); - state = ST_EXP_RR_OP_VAL; - } -} - -/*---------------------------------------------------------------------------* - * invoke component: operation value - *---------------------------------------------------------------------------*/ -static void -F_3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_3, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val); - state = ST_EXP_INFO; - } -} - -/*---------------------------------------------------------------------------* - * return result: operation value - *---------------------------------------------------------------------------*/ -static void -F_RR3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR3, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val); - state = ST_EXP_RR_RESULT; - } -} - -/*---------------------------------------------------------------------------* - * return result: RESULT - *---------------------------------------------------------------------------*/ -static void -F_RRR(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RRR, val = %d\n", val); -#endif - state = ST_EXP_NIX; -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t specificChargingUnits\n"); - state = ST_EXP_RUL; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4_1(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_1, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t freeOfCharge\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_2, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t chargeNotAvailable\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_5(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_5, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t recordedUnitsList [1]\n"); - state = ST_EXP_RU; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_6(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_6, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t RecordedUnits\n"); - state = ST_EXP_RNOU; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_7(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_7, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t NumberOfUnits = %d\n", val); - state = ST_EXP_TOCI; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_8(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_8, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t typeOfChargingInfo = %s\n", val == 0 ? "subTotal" : "total"); - state = ST_EXP_DBID; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_9(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_9, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t AOCDBillingId = %s (%d)\n", bid_str(val), val); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * state table - *---------------------------------------------------------------------------*/ -static struct statetab { - int currstate; /* input: current state we are in */ - int form; /* input: current tag form */ - int class; /* input: current tag class */ - int code; /* input: current tag code */ - void (*func)(char *,int); /* output: func to exec */ -} statetab[] = { - -/* current state tag form tag class tag code function */ -/* --------------------- ---------------------- ---------------------- ---------------------- ----------------*/ - -/* invoke */ - - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_1_1 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 2, F_1_2 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 3, F_1_3 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 4, F_1_4 }, - {ST_EXP_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_2 }, - {ST_EXP_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_3 }, - {ST_EXP_INFO, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_4 }, - {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_NULL, F_4_1 }, - {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 1, F_4_2 }, - {ST_EXP_RUL, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_5 }, - {ST_EXP_RU, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_6 }, - {ST_EXP_RNOU, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_7 }, - {ST_EXP_TOCI, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 2, F_8 }, - {ST_EXP_DBID, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 3, F_9 }, - -/* return result */ - - {ST_EXP_RR_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR2 }, - {ST_EXP_RR_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR3 }, - {ST_EXP_RR_RESULT, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SET, F_RRR }, - -/* end */ - - {-1, -1, -1, -1, NULL } -}; - -/*---------------------------------------------------------------------------* - * state decode for do_component - *---------------------------------------------------------------------------*/ -static void -next_state(char *pbuf, int class, int form, int code, int val) -{ - int i; - -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: class=%d, form=%d, code=%d, val=%d\n", class, form, code, val); -#endif - - for(i=0; ; i++) - { - if((statetab[i].currstate > state) || - (statetab[i].currstate == -1)) - { - break; - } - - if((statetab[i].currstate == state) && - (statetab[i].form == form) && - (statetab[i].class == class) && - (statetab[i].code == code)) - { - (*statetab[i].func)(pbuf, val); - break; - } - } -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdndecode/facility.h b/usr.sbin/i4b/isdndecode/facility.h deleted file mode 100644 index 7080c22ccc27c..0000000000000 --- a/usr.sbin/i4b/isdndecode/facility.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * facility.h - Q.932 facility header file - * --------------------------------------- - * - * $Id: facility.h,v 1.2 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:10:48 1998] - * - *---------------------------------------------------------------------------*/ - -/* #define FAC_DEBUG */ -/* #define ST_DEBUG */ - -/* protocols */ -#define FAC_PROTO_ROP 0x11 -#define FAC_PROTO_CMIP 0x12 -#define FAC_PROTO_ACSE 0x13 - -/* tag classes */ -#define FAC_TAGCLASS_UNI 0x00 -#define FAC_TAGCLASS_APW 0x01 -#define FAC_TAGCLASS_COS 0x02 -#define FAC_TAGCLASS_PRU 0x03 - -/* tag forms */ -#define FAC_TAGFORM_PRI 0x00 -#define FAC_TAGFORM_CON 0x01 - -/* class UNIVERSAL values */ -#define FAC_CODEUNI_BOOL 1 -#define FAC_CODEUNI_INT 2 -#define FAC_CODEUNI_BITS 3 -#define FAC_CODEUNI_OCTS 4 -#define FAC_CODEUNI_NULL 5 -#define FAC_CODEUNI_OBJI 6 -#define FAC_CODEUNI_OBJD 7 -#define FAC_CODEUNI_EXT 8 -#define FAC_CODEUNI_REAL 9 -#define FAC_CODEUNI_ENUM 10 -#define FAC_CODEUNI_R11 11 -#define FAC_CODEUNI_R12 12 -#define FAC_CODEUNI_R13 13 -#define FAC_CODEUNI_R14 14 -#define FAC_CODEUNI_R15 15 -#define FAC_CODEUNI_SEQ 16 -#define FAC_CODEUNI_SET 17 -#define FAC_CODEUNI_NSTR 18 -#define FAC_CODEUNI_PSTR 19 -#define FAC_CODEUNI_TSTR 20 -#define FAC_CODEUNI_VSTR 21 -#define FAC_CODEUNI_ISTR 22 -#define FAC_CODEUNI_UTIME 23 -#define FAC_CODEUNI_GTIME 24 -#define FAC_CODEUNI_GSTR 25 -#define FAC_CODEUNI_VISTR 26 -#define FAC_CODEUNI_GNSTR 27 - -/* operation values */ -#define FAC_OPVAL_UUS 1 -#define FAC_OPVAL_CUG 2 -#define FAC_OPVAL_MCID 3 -#define FAC_OPVAL_BTPY 4 -#define FAC_OPVAL_ETPY 5 -#define FAC_OPVAL_ECT 6 - -#define FAC_OPVAL_DIV_ACT 7 -#define FAC_OPVAL_DIV_DEACT 8 -#define FAC_OPVAL_DIV_ACTSN 9 -#define FAC_OPVAL_DIV_DEACTSN 10 -#define FAC_OPVAL_DIV_INTER 11 -#define FAC_OPVAL_DIV_INFO 12 -#define FAC_OPVAL_DIV_CALLDEF 13 -#define FAC_OPVAL_DIV_CALLRER 14 -#define FAC_OPVAL_DIV_LINF2 15 -#define FAC_OPVAL_DIV_INVS 16 -#define FAC_OPVAL_DIV_INTER1 17 -#define FAC_OPVAL_DIV_LINF1 18 -#define FAC_OPVAL_DIV_LINF3 19 - -#define FAC_OPVAL_ER_CRCO 20 -#define FAC_OPVAL_ER_MGMT 21 -#define FAC_OPVAL_ER_CANC 22 - -#define FAC_OPVAL_MLPP_QUERY 24 -#define FAC_OPVAL_MLPP_CALLR 25 -#define FAC_OPVAL_MLPP_CALLP 26 - -#define FAC_OPVAL_AOC_REQ 30 -#define FAC_OPVAL_AOC_S_CUR 31 -#define FAC_OPVAL_AOC_S_SPC 32 -#define FAC_OPVAL_AOC_D_CUR 33 -#define FAC_OPVAL_AOC_D_UNIT 34 -#define FAC_OPVAL_AOC_E_CUR 35 -#define FAC_OPVAL_AOC_E_UNIT 36 -#define FAC_OPVAL_AOC_IDOFCRG 37 - -#define FAC_OPVAL_CONF_BEG 40 -#define FAC_OPVAL_CONF_ADD 41 -#define FAC_OPVAL_CONF_SPLIT 42 -#define FAC_OPVAL_CONF_DROP 43 -#define FAC_OPVAL_CONF_ISOLATE 44 -#define FAC_OPVAL_CONF_REATT 45 -#define FAC_OPVAL_CONF_PDISC 46 -#define FAC_OPVAL_CONF_FCONF 47 -#define FAC_OPVAL_CONF_END 48 -#define FAC_OPVAL_CONF_IDCFE 49 - -#define FAC_OPVAL_REVC_REQ 60 - -enum states { - ST_EXP_COMP_TYP, - ST_EXP_INV_ID, - ST_EXP_OP_VAL, - ST_EXP_INFO, - ST_EXP_RUL, - ST_EXP_RU, - ST_EXP_RNOU, - ST_EXP_TOCI, - ST_EXP_DBID, - - ST_EXP_RR_INV_ID, - ST_EXP_RR_OP_VAL, - ST_EXP_RR_RESULT, - - ST_EXP_NIX -}; - -/* EOF */ - diff --git a/usr.sbin/i4b/isdndecode/isdndecode.8 b/usr.sbin/i4b/isdndecode/isdndecode.8 deleted file mode 100644 index 85946862b0c47..0000000000000 --- a/usr.sbin/i4b/isdndecode/isdndecode.8 +++ /dev/null @@ -1,190 +0,0 @@ -.\" -.\" Copyright (c) 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdndecode.8,v 1.3 1998/12/18 17:09:38 hm Exp $ -.\" -.\" last edit-date: [Fri Dec 18 18:11:31 1998] -.\" -.\" -hm writing manual page -.\" -.Dd September 17, 1998 -.Dt isdndecode 8 -.Sh NAME -.Nm isdndecode -.Nd isdn4bsd ISDN protocol decode utility -.Sh SYNOPSIS -.Nm isdndecode -.Op Fl a -.Op Fl b -.Op Fl d -.Op Fl f Ar filename -.Op Fl h -.Op Fl i -.Op Fl l -.Op Fl o -.Op Fl p Ar filename -.Op Fl u Ar number -.Op Fl B -.Op Fl P -.Op Fl R Ar unit -.Op Fl T Ar unit -.Sh DESCRIPTION -.Nm isdndecode -is part of the isdn4bsd package and is used to provide the user with a -detailed mnemonic display of the layers 1, 2 and 3 protocol activities on -the D channel and hex dump of the B channel(s) activities. -.Pp -Together with two passive supported cards and an easy to build cable it can -also be used to monitor the complete traffic on a S0 bus providing S0 bus -analyzer features. -.Pp -The -.Nm -utility is only available for passive supported cards. -.Pp -The following options can be used: -.Bl -tag -width Ds - -.It Fl a -Run -.Nm -in analyzer mode by using two passive cards and a custom cable which can -be build as described in the file -.Em cable.txt -in the isdn4bsd source distribution. One card acts as a receiver for the -transmitting direction on the S0 bus while the other card acts as a receiver -for the receiving direction on the S0 bus. Complete traffic monitoring is -possible using this setup. - -.It Fl b -switch B channel tracing on (default off). - -.It Fl d -switch D channel tracing off (default on). - -.It Fl f -Use -.Ar filename -as the name of a file into which to write tracing output (default filename is -isdndecode<n> where n is the number of the unit to decode). - -.It Fl h -switch display of header off (default on). - -.It Fl i -print layer 1 (I.430) INFO signals to monitor layer 1 activity (default off). - -.It Fl l -switch displaying of Layer 2 (Q.921) frames off (default on). - -.It Fl o -switch off writing decode output to a file (default on). - -.It Fl p -Use -.Ar filename -as the name of a file used for the -B and -P options (default filename -is isdntracebin<n> where n is the number of the unit to decode). - -.It Fl u -Use -.Ar number -as the unit number of the controller card to decode (default 0). - -.It Fl B -Write undecoded binary decode data to a file for later or remote -analyzing (default off). - -.It Fl P -Read undecoded binary decode data from file instead from device (default off). - -.It Fl R -Use -.Ar unit -as the receiving interface unit number in analyze mode. - -.It Fl T -Use -.Ar unit -as the transmitting interface unit number in analyze mode. - -.Pp -When the USR1 signal is sent to a -.Nm -process, the currently used logfiles are reopened, so that logfile -rotation becomes possible. -.Pp -The decode output should be obvious. It is very handy to have the following -standard texts available when tracing ISDN protocols: -.Pp -.Bl -tag -width Ds -compact -offset indent -.It Ar I.430 -ISDN BRI layer 1 protocol description. -.It Ar Q.921 -ISDN D-channel layer 2 protocol description. -.It Ar Q.931 -ISDN D-channel layer 3 protocol description. -.El -.Pp - -.Sh FILES -.Bl -tag -width daddeldi -compact -.It Pa /dev/i4btrc<n> -The devicefile(s) used to get the decode messages for ISDN card unit <n> -out of the kernel. -.El - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -isdndecode -f /var/tmp/isdn.decode -.Ed -.Pp -will start D channel tracing on passive controller 0 with all except B -channel tracing enabled and logs everything into the output file -/tmp/isdn.decode. - -.Sh SEE ALSO -.Xr isdnd 8 - -.Sh BUGS -Still one left. - -.Sh STANDARDS -ITU Recommendations I.430, Q.920, Q.921, Q.930, Q.931 -.Pp -ITU Recommendation Q.932 (03/93), Q.950 (03/93) -.Pp -ETSI Recommendation ETS 300 179 (10/92), ETS 300 180 (10/92) -.Pp -ETSI Recommendation ETS 300 181 (04/93), ETS 300 182 (04/93) -.Pp -ITU Recommendation X.208, X.209 - -.Sh AUTHOR -The -.Nm -utility and this manual page was written by Hellmuth Michaelis, -he can be reached at hm@kts.org. - diff --git a/usr.sbin/i4b/isdndecode/layer1.c b/usr.sbin/i4b/isdndecode/layer1.c deleted file mode 100644 index 8dee4b70ba6b7..0000000000000 --- a/usr.sbin/i4b/isdndecode/layer1.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * layer1.c - isdndecode, decode and print layer 1 information - * ----------------------------------------------------------- - * - * $Id: layer1.c,v 1.2 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:11:55 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" - -/*---------------------------------------------------------------------------* - * decode layer 1 information - *---------------------------------------------------------------------------*/ -void -layer1(char *buffer, unsigned char *buf) -{ - switch(*buf) - { - case INFO0: - strcpy(buffer,"L1 INFO0 (No Signal)\n"); - break; - - case INFO1_8: - strcpy(buffer,"L1 INFO1 (Activation Request, Priority = 8)\n"); - break; - - case INFO1_10: - strcpy(buffer,"L1 INFO1 (Activation Request, Priority = 10)\n"); - break; - - case INFO2: - strcpy(buffer,"L1 INFO2 (Pending Activation)\n"); - break; - - case INFO3: - strcpy(buffer,"L1 INFO3 (Synchronized)\n"); - break; - - case INFO4_8: - strcpy(buffer,"L1 INFO4 (Activated, Priority = 8/9)\n"); - break; - - case INFO4_10: - strcpy(buffer,"L1 INFO4 (Activated, Priority = 10/11)\n"); - break; - - default: - sprintf(buffer,"L1 ERROR, invalid INFO value 0x%x!\n", *buf); - break; - } -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/layer2.c b/usr.sbin/i4b/isdndecode/layer2.c deleted file mode 100644 index b7997dd7a965a..0000000000000 --- a/usr.sbin/i4b/isdndecode/layer2.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * layer2.c - decode and print layer 2 (Q.921) information - * ------------------------------------------------------- - * - * $Id: layer2.c,v 1.3 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:12:09 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" - -/*---------------------------------------------------------------------------* - * decode poll bit - *---------------------------------------------------------------------------*/ -static void -poll(int layer, char *buffer, int cnt, unsigned char value, unsigned char mask) -{ - sprintline(layer, buffer, cnt, value, mask, "P/F, Poll = %s", (value & mask) ? "Immediate Response Required" : "No Immediate Response Required"); -} - -/*---------------------------------------------------------------------------* - * decode final bit - *---------------------------------------------------------------------------*/ -static void -final(int layer, char *buffer, int cnt, unsigned char value, unsigned char mask) -{ - sprintline(layer, buffer, cnt, value, mask, "P/F, Final = %s", (value & mask) ? "Result of Poll" : "No Result of Poll"); -} - -/*---------------------------------------------------------------------------* - * decode protocol specified in Q.921 - *---------------------------------------------------------------------------*/ -int -layer2(char *pbuf, unsigned char *buf, int dir, int printit) -{ - int sap, tei, cmd; - int cnt = 0; - char locbuf[32000]; - char *lbufp = &locbuf[0]; - char buffer[80]; - - *lbufp = '\0'; - *pbuf = '\0'; - - /* address high */ - - sap = (buf[0] >> 2) & 0x3f; - - if(sap == 0) - strcpy(buffer, "Call Control"); - else if((sap >= 1) && (sap <= 15)) - strcpy(buffer, "Reserved"); - else if(sap == 16) - strcpy(buffer, "X.25"); - else if((sap >= 17) && (sap <= 31)) - strcpy(buffer, "Reserved"); - else if(sap == 63) - strcpy(buffer, "Layer 2 Management"); - else - strcpy(buffer, "Not available for Q.921"); - sprintline(2, lbufp+strlen(lbufp), cnt, buf[0], 0xfc, "SAPI = %d (%s)", sap, buffer); - - if(dir == FROM_TE) - cmd = !(buf[0] & 0x02); - else - cmd = buf[0] & 0x02; - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[0], 0x02, "C/R = %s", cmd ? "Command" : "Response"); - extension(2, lbufp+strlen(lbufp), cnt, buf[0], 0x01); - cnt++; - - /* address low */ - - tei = buf[1] >> 1; - - if((tei >= 0) && (tei <= 63)) - strcpy(buffer, "Non-automatic TEI"); - else if((tei >= 64) && (tei <= 126)) - strcpy(buffer, "Automatic TEI"); - if(tei == 127) - strcpy(buffer, "Group TEI"); - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[1], 0xfe, "TEI = %d (%s)", tei, buffer); - extension(2, lbufp+strlen(lbufp), cnt, buf[1], 0x01); - cnt++; - - /* control 1 */ - - if((buf[2] & 0x03) == 0x03) - { - /* U-frame */ - - if((buf[2] & 0xef) == 0x6f) - { - /* SABME */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: SABME (Set Asynchonous Balanced Mode)"); - poll(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - else if((buf[2] & 0xef) == 0x0f) - { - /* DM */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: DM (Disconnected Mode)"); - final(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - else if((buf[2] & 0xef) == 0x03) - { - /* UI */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: UI (Unnumbered Information)"); - poll(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - - if(sap == 63 && (buf[3] == 0x0f)) /* TEI management */ - { - sprintline(2, lbufp+strlen(lbufp), cnt, buf[3], 0xff, "MEI (Management Entity Identifier)"); - cnt++; - sprintline(2, lbufp+strlen(lbufp), cnt, buf[4], 0xff, "Ri = 0x%04x (Reference number high)", (buf[4] << 8) | buf[5]); - cnt++; - sprintline(2, lbufp+strlen(lbufp), cnt, buf[5], 0xff, "Ri (Reference Number low)"); - cnt++; - - switch(buf[6]) - { - case 0x01: - strcpy(buffer, "Identity Request"); - break; - case 0x02: - strcpy(buffer, "Identity Assigned"); - break; - case 0x03: - strcpy(buffer, "Identity denied"); - break; - case 0x04: - strcpy(buffer, "Identity Check Request"); - break; - case 0x05: - strcpy(buffer, "Identity Check Response"); - break; - case 0x06: - strcpy(buffer, "Identity Remove"); - break; - case 0x07: - strcpy(buffer, "Identity Verify"); - break; - default: - strcpy(buffer, "undefined"); - break; - } - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[6], 0xff, "TEI %s (Message Type %d)", buffer, buf[6]); - cnt++; - - switch(buf[6]) - { - case 0x01: - strcpy(buffer, "Any TEI value acceptable"); - break; - case 0x02: - strcpy(buffer, ""); - break; - case 0x03: - strcpy(buffer, "No TEI Value available"); - break; - case 0x04: - strcpy(buffer, "Check all TEI values"); - break; - case 0x05: - strcpy(buffer, ""); - break; - case 0x06: - strcpy(buffer, "Request for removal of all TEI values"); - break; - case 0x07: - strcpy(buffer, ""); - break; - default: - strcpy(buffer, ""); - break; - } - if(((buf[7] >> 1) & 0x7f) == 127) - sprintline(2, lbufp+strlen(lbufp), cnt, buf[7], 0xfe, "Ai = %d (Action Indicator = %s)", (buf[7] >> 1) & 0x7f, buffer); - else - sprintline(2, lbufp+strlen(lbufp), cnt, buf[7], 0xfe, "Ai = %d (Action Indicator)", (buf[7] >> 1) & 0x7f); - extension(2, lbufp+strlen(lbufp), cnt, buf[7], 0x01); - cnt++; - } - } - else if((buf[2] & 0xef) == 0x43) - { - /* DISC */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: DISC (Disconnect)"); - poll(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - else if((buf[2] & 0xef) == 0x63) - { - /* UA */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: UA (Unnumbered Acknowledge)"); - final(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - else if((buf[2] & 0xef) == 0x87) - { - /* FRMR */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: FRMR (Frame Reject)"); - final(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - else if((buf[2] & 0xef) == 0x9f) - { - /* XID */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xef, "U-Frame: XID (Exchange Identification)"); - if(cmd) - poll(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - else - final(2, lbufp+strlen(lbufp), cnt, buf[2], 0x10); - cnt++; - } - - } - else if((buf[2] & 0x03) == 0x01) - { - /* S-frame */ - - if(buf[2] == 0x01) - strcpy(buffer, "RR (Receiver Ready)"); - else if(buf[2] == 0x05) - strcpy(buffer, "RNR (Receiver Not Ready)"); - else if(buf[2] == 0x09) - strcpy(buffer, "REJ (Reject)"); - else - strcpy(buffer, "Unknown"); - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xff, "S-Frame: %s", buffer); - cnt++; - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[3], 0xfe, "N(R) = %d (receive sequence number)", (buf[3] >> 1) & 0x7f); - if(cmd) - poll(2, lbufp+strlen(lbufp), cnt, buf[3], 0x01); - else - final(2, lbufp+strlen(lbufp), cnt, buf[3], 0x01); - cnt++; - - } - else if((buf[2] & 0x01) == 0x00) - { - /* I-frame */ - - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0xfe, "N(S) = %d (send sequence number)", (buf[2] >> 1) & 0x7f); - sprintline(2, lbufp+strlen(lbufp), cnt, buf[2], 0x01, "I-Frame: Information transfer"); - cnt++; - - sprintf(buffer, "N(R) = %d", (buf[3] >> 1) & 0x7f); - sprintline(2, lbufp+strlen(lbufp), cnt, buf[3], 0xfe, "N(R) = %d (receive sequence number)", (buf[3] >> 1) & 0x7f); - poll(2, lbufp+strlen(lbufp), cnt, buf[3], 0x01); - cnt++; - - } - - sprintf((pbuf+strlen(pbuf)),"%s", &locbuf[0]); - return (cnt); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/layer3.c b/usr.sbin/i4b/isdndecode/layer3.c deleted file mode 100644 index 6376a139da58f..0000000000000 --- a/usr.sbin/i4b/isdndecode/layer3.c +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * layer3.c - decode and print layer 3 (Q.931) information - * ------------------------------------------------------- - * - * $Id: layer3.c,v 1.5 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:12:21 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" - -char *mttab[] = { - -/* 0x00 */ /* call establishment group */ - - "ESCAPE", - "ALERTING", - "CALL PROCEEDING", - "PROGRESS", - "undefined (0x04)", - "SETUP", - "undefined (0x06)", - "CONNECT", - "undefined (0x08)", - "undefined (0x09)", - "undefined (0x0a)", - "undefined (0x0b)", - "undefined (0x0c)", - "SETUP ACKNOWLEDGE", - "undefined (0x0e)", - "CONNECT ACKNOWLEDGE", - -/* 0x10 */ - "undefined (0x10)", - "undefined (0x11)", - "undefined (0x12)", - "undefined (0x13)", - "undefined (0x14)", - "undefined (0x15)", - "undefined (0x16)", - "undefined (0x17)", - "undefined (0x18)", - "undefined (0x19)", - "undefined (0x1a)", - "undefined (0x1b)", - "undefined (0x1c)", - "undefined (0x1d)", - "undefined (0x1e)", - "undefined (0x1f)", - -/* 0x20 */ - - "USER INFORMATION", /* call information phase */ - "SUSPEND REJECT", - "RESUME REJECT", - "undefined (0x23)", - "HOLD", - "SUSPEND", - "RESUME", - "undefined (0x27)", - "HOLD ACKNOWLEDGE", - "undefined (0x29)", - "undefined (0x2a)", - "undefined (0x2b)", - "undefined (0x2c)", - "SUSPEND ACKNOWLEDGE", - "RESUME ACKNOWLEDGE", - "undefined (0x2f)", - -/* 0x30 */ - - "HOLD REJECT", - "RETRIEVE", - "undefined (0x32)", - "RETRIEVE ACKNOWLEDGE", - "undefined (0x34)", - "undefined (0x35)", - "undefined (0x36)", - "RETRIEVE REJECT", - "undefined (0x38)", - "undefined (0x39)", - "undefined (0x3a)", - "undefined (0x3b)", - "undefined (0x3c)", - "undefined (0x3d)", - "undefined (0x3e)", - "undefined (0x3f)", - -/* 0x40 */ - - "DETACH", /* call clearing */ - "undefined (0x41)", - "undefined (0x42)", - "undefined (0x43)", - "undefined (0x44)", - "DISCONNECT", - "RESTART", - "undefined (0x47)", - "DETACH ACKNOWLEDGE", - "undefined (0x49)", - "undefined (0x4a)", - "undefined (0x4b)", - "undefined (0x4c)", - "RELEASE", - "RESTART ACKNOWLEDGE", - "undefined (0x4f)", - -/* 0x50 */ - - "undefined (0x50)", - "undefined (0x51)", - "undefined (0x52)", - "undefined (0x53)", - "undefined (0x54)", - "undefined (0x55)", - "undefined (0x56)", - "undefined (0x57)", - "undefined (0x58)", - "undefined (0x59)", - "RELEASE COMPLETE", - "undefined (0x5b)", - "undefined (0x5c)", - "undefined (0x5d)", - "undefined (0x5e)", - "undefined (0x5f)", - -/* 0x60 */ - - "SEGMENT", /* misc messages */ - "undefined (0x61)", - "FACILITY", - "undefined (0x63)", - "REGISTER", - "undefined (0x65)", - "undefined (0x66)", - "undefined (0x67)", - "CANCEL ACKNOWLEDGE", - "undefined (0x69)", - "FACILITY ACKNOWLEDGE", - "undefined (0x6b)", - "REGISTER ACKNOWLEDGE", - "undefined (0x6d)", - "NOTIFY", - "undefined (0x6f)", - -/* 0x70 */ - - "CANCEL REJECT", - "undefined (0x71)", - "FACILITY REJECT", - "undefined (0x73)", - "REGISTER REJECT", - "STATUS ENQIRY", - "undefined (0x76)", - "undefined (0x77)", - "undefined (0x78)", - "CONGESTION CONTROL", - "undefined (0x7a)", - "INFORMATION", - "undefined (0x7c)", - "STATUS", - "undefined (0x7e)", - "undefined (0x7f)", -}; - -#define MTTAB_MAX 0x7f - -extern int f_null(char *pbuf, unsigned char *buf, int off); -extern int f_bc(char *pbuf, unsigned char *buf, int off); -extern int f_cause(char *pbuf, unsigned char *buf, int off); -extern int f_cstat(char *pbuf, unsigned char *buf, int off); -extern int f_chid(char *pbuf, unsigned char *buf, int off); -extern int f_fac(char *pbuf, unsigned char *buf, int off); -extern int f_progi(char *pbuf, unsigned char *buf, int off); -extern int f_displ(char *pbuf, unsigned char *buf, int off); -extern int f_date(char *pbuf, unsigned char *buf, int off); -extern int f_cnu(char *pbuf, unsigned char *buf, int off); -extern int f_cgpn(char *pbuf, unsigned char *buf, int off); -extern int f_cdpn(char *pbuf, unsigned char *buf, int off); -extern int f_hlc(char *pbuf, unsigned char *buf, int off); - -struct ie { - unsigned char code; /* information element identifier code */ - char *name; /* ie name */ - int (*func) (char *pbuf, unsigned char *buf, int off); /* decode function */ -} ietab[] = { - { 0x00, "segmented message", f_null }, - { 0x04, "bearer capability", f_bc }, - { 0x08, "cause", f_cause }, - { 0x0c, "connected address", f_null }, - { 0x0d, "extended facility", f_null }, - { 0x10, "call identity", f_null }, - { 0x14, "call state", f_cstat }, - { 0x18, "channel id", f_chid }, - { 0x19, "data link connection id", f_null }, - { 0x1c, "facility", f_fac }, - { 0x1e, "progress indicator", f_progi }, - { 0x20, "network specific facilities", f_null }, - { 0x24, "terminal capabilities", f_null }, - { 0x27, "notification indicator", f_null }, - { 0x28, "display", f_displ }, - { 0x29, "date/time", f_date }, - { 0x2c, "keypad", f_null }, - { 0x30, "keypad echo", f_null }, - { 0x32, "information request", f_null }, - { 0x34, "signal", f_null }, - { 0x36, "switchhook", f_null }, - { 0x38, "feature activation", f_null }, - { 0x39, "feature indication", f_null }, - { 0x3a, "service profile id", f_null }, - { 0x3b, "endpoint identifier", f_null }, - { 0x40, "information rate", f_null }, - { 0x41, "precedence level", f_null }, - { 0x42, "end-to-end transit delay", f_null }, - { 0x43, "transit delay detection", f_null }, - { 0x44, "packet layer binary parms", f_null }, - { 0x45, "packet layer window size", f_null }, - { 0x46, "packet size", f_null }, - { 0x47, "closed user group", f_null }, - { 0x48, "link layer core parameters", f_null }, - { 0x49, "link layer protocol parms", f_null }, - { 0x4a, "reverse charging information", f_null }, - { 0x4c, "connected number", f_cnu }, - { 0x4d, "connected subaddress", f_null }, - { 0x50, "X.213 priority", f_null }, - { 0x51, "report type", f_null }, - { 0x53, "link integrity verification", f_null }, - { 0x57, "PVC status", f_null }, - { 0x6c, "calling party number", f_cnu }, - { 0x6d, "calling party subaddress", f_null }, - { 0x70, "called party number", f_cnu }, - { 0x71, "called party subaddress", f_null }, - { 0x74, "redirecting number", f_null }, - { 0x78, "transit network selection", f_null }, - { 0x79, "restart indicator", f_null }, - { 0x7c, "low layer compatibility", f_null }, - { 0x7d, "high layer compatibility", f_hlc }, - { 0x7e, "user-user", f_null }, - { 0x7f, "escape for extension", f_null }, - { 0xff, "unknown information element", f_null } -}; - -/*---------------------------------------------------------------------------* - * decode Q.931 protocol - *---------------------------------------------------------------------------*/ -void -layer3(char *pbuf, int n, int off, unsigned char *buf) -{ - char buffer[256]; - int codeset = 0; - int codelock = 0; - int oldcodeset = 0; - - int pd; - int len; - int j; - int i; - - if(n <= 0) - return; - - *pbuf = '\0'; - - i = 0; - - /* protocol discriminator */ - - pd = buf[i]; - - if(pd >= 0x00 && pd <= 0x07) - sprintf(buffer, "User-User IE (0x%02x)",pd); - else if(pd == 0x08) - sprintf(buffer, "Q.931/I.451"); - else if(pd >= 0x10 && pd <= 0x3f) - sprintf(buffer, "Other Layer 3 or X.25 (0x%02x)",pd); - else if(pd >= 0x40 && pd <= 0x4f) - sprintf(buffer, "National Use (0x%02x)",pd); - else if(pd >= 0x50 && pd <= 0xfe) - sprintf(buffer, "Other Layer 3 or X.25 (0x%02x)",pd); - else - sprintf(buffer, "Reserved (0x%02x)",pd); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, pd, 0xff, "Protocol discriminator = %s", buffer); - i++; - - /* call reference */ - - len = buf[i] & 0x0f; - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xf0, "Call Reference"); - - switch(len) - { - case 0: - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Length of Call Reference = 0 (Dummy CR)"); - break; - case 1: - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Length of Call Reference = 1"); - i++; - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x80, "Call Reference sent %s origination side", (buf[i] & 0x80) ? "to" : "from"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Call Reference = %d = 0x%02x", (buf[i] & 0x7f), (buf[i] & 0x7f)); - break; - case 2: - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Length of Call Reference = 2"); - i++; - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x80, "Call Reference sent %s origination side", (buf[i] & 0x80) ? "to" : "from"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Call reference = %d = %02x", (buf[i] & 0x7f)); - i++; - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Call reference = %d = %02x", (buf[i])); - break; - } - i++; - - /* message type */ - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x80, "Message type extension = %d", buf[i] & 0x80 ? 1 : 0); - - if(buf[i] <= MTTAB_MAX) - strcpy(buffer, mttab[buf[i]]); - else - sprintf(buffer, "unknown (0x%02x)", buf[i]); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Message type = %s", buffer); - i++; - - /* information elements */ - - for (; i < n;) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x80, "%s Information element", buf[i] & 0x80 ? "Single octet" : "Variable length"); - - if(buf[i] & 0x80) - { - /* single octett info element type 1 */ - - if((buf[i] & 0x70) == 0x00) - { - strcpy(buffer, "Reserved"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x70, "Reserved"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Reserved, content of IE"); - } - else if((buf[i] & 0x70) == 0x10) - { - strcpy(buffer, "Shift"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x70, "Shift"); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x08, "%s shift", buf[i] & 0x08 ? "Non-locking" : "Locking"); - - switch(buf[i] & 0x07) - { - case 0: - strcpy(buffer, "Not applicable"); - break; - case 1: - case 2: - case 3: - sprintf(buffer, "Reserved (%d)", buf[i] & 0x07); - break; - case 4: - strcpy(buffer, "Codeset 4 (ISO/IEC)"); - break; - case 5: - strcpy(buffer, "Codeset 5 (National use)"); - break; - case 6: - strcpy(buffer, "Codeset 6 (Local network specific)"); - break; - case 7: - strcpy(buffer, "Codeset 7 (User specific)"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x07, "%s", buffer); - break; - } - else if((buf[i] & 0x70) == 0x30) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x70, "Congestion Level"); - switch(buf[i] & 0x0f) - { - case 0x00: - strcpy(buffer, "receiver ready"); - break; - case 0x0f: - strcpy(buffer, "receiver not ready"); - break; - default: - sprintf(buffer, "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Congestion Level = ", buffer); - break; - } - else if((buf[i] & 0x70) == 0x50) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x70, "Repeat Indicator"); - switch(buf[i] & 0x0f) - { - case 0x02: - strcpy(buffer, "Prioritized list for selecting one possibility"); - break; - default: - sprintf(buffer, "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Repeat indication = ", buffer); - break; - } - - /* single octett info element type 2 */ - - else if((buf[i] & 0x7f) == 0x20) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "More data"); - } - else if((buf[i] & 0x7f) == 0x21) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Sending complete"); - } - else - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "UNKNOWN single octet IE = 0x%02x", buf[i]); - } - i++; /* next */ - } - else - { - if(codeset == 0) - { - struct ie *iep = &ietab[0]; - - for(;;) - { - if((iep->code == buf[i]) || - (iep->code == 0xff)) - break; - iep++; - } - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "IE = %s", iep->name); - sprintline(3, pbuf+strlen(pbuf), off+i+1, buf[i+1], 0xff, "IE Length = %d", buf[i+1]); - - if(iep->func == f_null) - { - } - else - { - i += (iep->func)(pbuf, &buf[i], off+i); - goto next; - } - } - else - { - sprintf((pbuf+strlen(pbuf)), "UNKNOWN CODESET=%d, IE=0x%02x", codeset, buf[i]); - } - - i++; /* index -> length */ - - len = buf[i]; - - sprintf((pbuf+strlen(pbuf)), "LEN=0x%02x, DATA=", len); - - i++; /* index -> 1st param */ - - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"0x%02x ", buf[j+i]); - } - - sprintf((pbuf+strlen(pbuf)),"]"); - - i += len; - -next: - - if(!codelock && (codeset != oldcodeset)) - codeset = oldcodeset; - } - } -/* sprintf((pbuf+strlen(pbuf)),"\n"); */ -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdndecode/layer3_subr.c b/usr.sbin/i4b/isdndecode/layer3_subr.c deleted file mode 100644 index e1480b6c63492..0000000000000 --- a/usr.sbin/i4b/isdndecode/layer3_subr.c +++ /dev/null @@ -1,1045 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * layer3_subr.c - subroutines for IE decoding - * ------------------------------------------- - * - * $Id: layer3_subr.c,v 1.4 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:12:37 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" - -/*---------------------------------------------------------------------------* - * dummy function - *---------------------------------------------------------------------------*/ -int -f_null(char *pbuf, unsigned char *buf, int off) -{ - return(0); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_cstat(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int len = 0; - char buffer[256]; - - i++; - len = buf[i]; - i++; - sprintf((pbuf+strlen(pbuf)), "Std="); - switch((buf[i] & 0x60) >> 5) - { - case 0: - strcpy(buffer, "CCITT"); - break; - case 1: - strcpy(buffer, "ISO/IEC"); - break; - case 2: - strcpy(buffer, "National"); - break; - case 3: - strcpy(buffer, "Special"); - break; - } - sprintf((pbuf+strlen(pbuf)), ", State="); - - switch((buf[i] & 0x3f)) - { - case 0: - strcpy(buffer, "Null"); - break; - case 1: - strcpy(buffer, "Call initiated"); - break; - case 2: - strcpy(buffer, "Overlap sending"); - break; - case 3: - strcpy(buffer, "Outgoing call proceeding"); - break; - case 4: - strcpy(buffer, "Call delivered"); - break; - case 6: - strcpy(buffer, "Call present"); - break; - case 7: - strcpy(buffer, "Call received"); - break; - case 8: - strcpy(buffer, "Connect request"); - break; - case 9: - strcpy(buffer, "Incoming call proceeding"); - break; - case 10: - strcpy(buffer, "Active"); - break; - case 11: - strcpy(buffer, "Disconnect request"); - break; - case 12: - strcpy(buffer, "Disconnect indication"); - break; - case 15: - strcpy(buffer, "Suspend request"); - break; - case 17: - strcpy(buffer, "Resume request"); - break; - case 19: - strcpy(buffer, "Release request"); - break; - case 22: - strcpy(buffer, "Call abort"); - break; - case 25: - strcpy(buffer, "Overlap receiving"); - break; - case 0x3d: - strcpy(buffer, "Restart request"); - break; - case 0x3e: - strcpy(buffer, "Restart"); - break; - default: - strcpy(buffer, "ERROR: undefined/reserved"); - break; - } - sprintf((pbuf+strlen(pbuf)), "]"); - i++; - return(i); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_chid(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int len = 0; - char buffer[256]; - - i++; - len = buf[i]; - i++; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x40, "Interface Id present = %s", buf[i] & 0x40 ? "Yes" : "No"); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x20, "Interface Type = %s", buf[i] & 0x20 ? "Other (PRI)" : "BRI"); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x10, "Spare"); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x08, "Channel = %s", buf[i] & 0x08 ? "exclusive" : "preferred"); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x04, "Channel is%s the D-Channel", buf[i] & 0x04 ? "" : " not"); - - switch(buf[i] & 0x03) - { - case 0: - strcpy(buffer, "no channel"); - break; - case 1: - strcpy(buffer, "B-1"); - break; - case 2: - strcpy(buffer, "B-2"); - break; - case 3: - strcpy(buffer, "any channel"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x03, "Channel = %s", buffer); - - i++; - return(i); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_fac(char *pbuf, unsigned char *buf, int off) -{ - return(q932_facility(pbuf, buf)); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_progi(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int len = 0; - char buffer[256]; - - i++; - len = buf[i]; - i++; - sprintf((pbuf+strlen(pbuf)), "Std="); - switch((buf[i] & 0x60) >> 5) - { - case 0: - strcpy(buffer, "CCITT"); - break; - case 1: - strcpy(buffer, "ISO/IEC"); - break; - case 2: - strcpy(buffer, "National"); - break; - case 3: - strcpy(buffer, "Local"); - break; - } - sprintf((pbuf+strlen(pbuf)), ", Loc="); - - switch((buf[i] & 0x0f)) - { - case 0: - strcpy(buffer, "User"); - break; - case 1: - strcpy(buffer, "Private network serving local user"); - break; - case 2: - strcpy(buffer, "Public network serving local user"); - break; - case 3: - strcpy(buffer, "Transit network"); - break; - case 4: - strcpy(buffer, "Public network serving remote user"); - break; - case 5: - strcpy(buffer, "Private network serving remote user"); - break; - case 6: - strcpy(buffer, "Network beyond interworking point"); - break; - default: - strcpy(buffer, "ERROR: undefined/reserved"); - break; - } - - i++; - - sprintf((pbuf+strlen(pbuf)), "\n Description"); - - switch((buf[i] & 0x7f)) - { - case 1: - strcpy(buffer, "Call is not end-to-end ISDN"); - break; - case 2: - strcpy(buffer, "Destination address is non-ISDN"); - break; - case 3: - strcpy(buffer, "Origination address is non-ISDN"); - break; - case 4: - strcpy(buffer, "Call has returned to the ISDN"); - break; - case 5: - strcpy(buffer, "Interworking occured, Service change"); - break; - case 8: - strcpy(buffer, "In-band info or appropriate pattern now available"); - break; - default: - strcpy(buffer, "ERROR: undefined/reserved"); - break; - } - sprintf((pbuf+strlen(pbuf)), "]"); - i++; - - return(i); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_displ(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int j = 0; - int len = 0; - - i++; - len = buf[i]; - i++; - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"%c", buf[j+i]); - } - sprintf((pbuf+strlen(pbuf)),"]"); - i += j; - - return(i); -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -int -f_date(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int j = 0; - int len = 0; - - i++; - len = buf[i]; - i++; - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Year = %02d", buf[i]); - i++; - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Month = %02d", buf[i]); - i++; - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Day = %02d", buf[i]); - i++; - - j=3; - if(j < len) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Hour = %02d", buf[i]); - i++; - j++; - } - if(j < len) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Minute = %02d", buf[i]); - i++; - j++; - } - if(j < len) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0xff, "Second = %02d", buf[i]); - i++; - j++; - } - i += len; - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the cause - *---------------------------------------------------------------------------*/ -int -f_cause(char *pbuf, unsigned char *buf, int off) -{ - int j; - int len; - int i = 0; - int ls; - char buffer[256]; - - i++; /* index -> length */ - - len = buf[i]; - - i++; /* coding/location */ - len--; - - ls = buf[i]; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((ls & 0x60) >> 5) - { - case 0: - strcpy(buffer, "CCITT"); - break; - case 1: - strcpy(buffer, "ISO/IEC"); - break; - case 2: - strcpy(buffer, "National"); - break; - case 3: - strcpy(buffer, "Local"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Coding Standard = %s", buffer); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x10, "Spare"); - - switch(ls & 0x0f) - { - case 0x00: - strcpy(buffer, "user"); - break; - case 0x01: - strcpy(buffer, "private network serving local user"); - break; - case 0x02: - strcpy(buffer, "public network serving local user"); - break; - case 0x03: - strcpy(buffer, "transit network"); - break; - case 0x04: - strcpy(buffer, "public network serving remote user"); - break; - case 0x05: - strcpy(buffer, "private network serving remote user"); - break; - case 0x07: - strcpy(buffer, "international network"); - break; - case 0x0a: - strcpy(buffer, "network beyond interworking point"); - break; - default: - sprintf(buffer, "reserved (0x%02x)", ls & 0x0f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Location = %s", buffer); - - i++; - len--; - - if(!(ls & 0x80)) - { - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch(buf[i] & 0x7f) - { - case 0: - strcpy(buffer, "Q.931"); - break; - case 3: - strcpy(buffer, "X.21"); - break; - case 4: - strcpy(buffer, "X.25"); - break; - case 5: - strcpy(buffer, "Q.1031/Q.1051"); - break; - default: - strcpy(buffer, "Reserved"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Recommendation = %s", buffer); - i++; - len--; - } - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Cause = %s", print_cause_q850(buf[i] & 0x7f)); - - i++; - len--; - - for(j = 0; j < len; j++) - sprintline(3, (pbuf+strlen(pbuf)), off+i+j, buf[i+j], 0xff, "Diagnostics = %02d %s", buf[i+j]); - - i += (len+1); - - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the bearer capability - *---------------------------------------------------------------------------*/ -int -f_bc(char *pbuf, unsigned char *buf, int off) -{ - int len; - int i = 0; - int mr = 0; - char buffer[256]; - - i++; /* index -> length */ - - len = buf[i]; - i++; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - strcpy(buffer, "CCITT"); - break; - case 1: - strcpy(buffer, "ISO/IEC"); - break; - case 2: - strcpy(buffer, "National"); - break; - case 3: - strcpy(buffer, "NSI Std"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Coding standard = %s", buffer); - - switch(buf[i] & 0x1f) - { - case 0x00: - strcpy(buffer, "speech"); - break; - case 0x08: - strcpy(buffer, "unrestricted digital information"); - break; - case 0x09: - strcpy(buffer, "restricted digital information"); - break; - case 0x10: - strcpy(buffer, "3.1 kHz audio"); - break; - case 0x11: - strcpy(buffer, "unrestricted digital information with tones"); - break; - case 0x18: - strcpy(buffer, "video"); - break; - default: - sprintf(buffer, "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x1f, "Capability = %s", buffer); - - i++; - len--; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - strcpy(buffer, "circuit"); - break; - case 2: - strcpy(buffer, "packet"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", ((buf[i] & 0x60) >> 5)); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Mode = %s", buffer); - - switch(buf[i] & 0x1f) - { - case 0x00: - strcpy(buffer, "packet mode"); - break; - case 0x10: - strcpy(buffer, "64 kbit/s"); - break; - case 0x11: - strcpy(buffer, "2 x 64 kbit/s"); - break; - case 0x13: - strcpy(buffer, "384 kbit/s"); - break; - case 0x15: - strcpy(buffer, "1536 kbit/s"); - break; - case 0x17: - strcpy(buffer, "1920 kbit/s"); - break; - case 0x18: - strcpy(buffer, "Multirate"); - mr = 1; - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x1f, "Rate = %s", buffer); - - i++; - len--; - - if(!len) - goto exit; - - if(mr) - { - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Rate multiplier = %d", buf[i] & 0x7f); - i++; - len--; - } - - if(!len) - goto exit; - - sprintf((pbuf+strlen(pbuf)), "\n layer1="); - - switch(buf[i] & 0x1f) - { - case 0x01: - sprintf((pbuf+strlen(pbuf)), "V.110"); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "G.711 u-law"); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "G.711 A-law"); - break; - case 0x04: - sprintf((pbuf+strlen(pbuf)), "G.721"); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "H.221/H.242"); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "Non-Std"); - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "V.120"); - break; - case 0x09: - sprintf((pbuf+strlen(pbuf)), "X.31"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - i++; - len--; - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n user rate=0x%02x ", buf[i] & 0x1f); - - if(buf[i] & 0x40) - sprintf((pbuf+strlen(pbuf)), "(async,"); - else - sprintf((pbuf+strlen(pbuf)), "(sync,"); - - if(buf[i] & 0x20) - sprintf((pbuf+strlen(pbuf)), "in-band neg. possible)"); - else - sprintf((pbuf+strlen(pbuf)), "in-band neg not possible)"); - - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n clk/flow=0x%02x", buf[i] & 0x1f); - - sprintf((pbuf+strlen(pbuf)), "\n intermediate rate="); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "not used"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "8 kbit/s"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "16 kbit/s"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "32 kbit/s"); - break; - } - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n hdr/mfrm/etc.=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n stop/data/parity=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n modemtype=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - switch(buf[i] & 0x7f) - { - case 0x42: - sprintf((pbuf+strlen(pbuf)), "\n layer2=Q.921/I.441"); - break; - case 0x46: - sprintf((pbuf+strlen(pbuf)), "\n layer2=X.25 link"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "\n layer2=0x%02x",(buf[i] & 0x7f)); - break; - } - i++; - len--; - - if(!len) - goto exit; - - switch(buf[i] & 0x7f) - { - case 0x62: - sprintf((pbuf+strlen(pbuf)), "\n layer3=Q.921/I.441"); - break; - case 0x66: - sprintf((pbuf+strlen(pbuf)), "\n layer3=X.25 packet"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "\n layer3=0x%02x",(buf[i] & 0x7f)); - break; - } - i++; - len--; - -exit: - - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the ISDN (telephone) number - *---------------------------------------------------------------------------*/ -int -f_cnu(char *pbuf, unsigned char *buf, int off) -{ - int j; - int len; - int i = 0; - int tp; - int ind = 0; - char buffer[256]; - - i++; /* index -> length */ - len = buf[i]; - - i++; /* index -> type/plan */ - tp = buf[i]; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((tp & 0x70) >> 4) - { - case 0: - strcpy(buffer, "Unknown"); - break; - case 1: - strcpy(buffer, "International number"); - break; - case 2: - strcpy(buffer, "National number"); - break; - case 3: - strcpy(buffer, "Network specific number"); - break; - case 4: - strcpy(buffer, "Subscriber number"); - break; - case 6: - strcpy(buffer, "Abbreviated number"); - break; - default: - sprintf(buffer, "Reserved (%d), ", ((tp & 0x70) >> 4)); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Type = %s", buffer); - - switch(tp & 0x0f) - { - case 0: - strcpy(buffer, "Unknown"); - break; - case 1: - strcpy(buffer, "ISDN (E.164)"); - break; - case 3: - strcpy(buffer, "Data (X.121)"); - break; - case 4: - strcpy(buffer, "Telex (F.69)"); - break; - case 8: - strcpy(buffer, "National"); - break; - case 9: - strcpy(buffer, "Private"); - break; - default: - sprintf(buffer, "Reserved (%d)", (tp & 0x0f)); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x0f, "Plan = %s", buffer); - - i++; - len--; - - if(!(tp & 0x80)) - { - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - strcpy(buffer, "allowed"); - break; - case 1: - strcpy(buffer, "restricted"); - break; - case 2: - strcpy(buffer, "number not available"); - break; - case 3: - strcpy(buffer, "reserved"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Presentation = %s", buffer); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x1c, "Spare"); - - switch(ind & 0x03) - { - case 0: - strcpy(buffer, "user provided, not screened"); - break; - case 1: - strcpy(buffer, "user provided, verified & passed"); - break; - case 2: - strcpy(buffer, "user provided, verified & failed"); - break; - case 3: - strcpy(buffer, "network provided"); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x03, "Screening = %s", buffer); - i++; - len--; - } - - for(j = 0; j < len; j++) - { - sprintline(3, (pbuf+strlen(pbuf)), off+i+j, buf[i+j], 0xff, "Number digit = %c", buf[i+j]); - } - - i += j; - - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print HL comatibility - *---------------------------------------------------------------------------*/ -int -f_hlc(char *pbuf, unsigned char *buf, int off) -{ - int i = 0; - int len = 0; - char buffer[256]; - - i++; - len = buf[i]; - - i++; - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch((buf[i] >> 5) & 0x03) - { - case 0: strcpy(buffer, "CCITT"); - break; - case 1: strcpy(buffer, "ISO/IEC"); - break; - case 2: strcpy(buffer, "National"); - break; - case 3: strcpy(buffer, "Network"); - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x60, "Coding standard = %s", buffer); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x1c, "Interpretation = %s", ((buf[i] >> 2) & 0x07) == 0x04 ? "first" : "reserved"); - - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x03, "Presentation = %s", ((buf[i]) & 0x03) == 0x01 ? "High layer protocol profile" : "reserved"); - - i++; - len--; - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch(buf[i] & 0x7f) - { - case 0x01: - strcpy(buffer, "Telephony"); - break; - case 0x04: - strcpy(buffer, "Fax Group 2/3 (F.182)"); - break; - case 0x21: - strcpy(buffer, "Fax Group 4 I (F.184)"); - break; - case 0x24: - strcpy(buffer, "Teletex (F.230) or Fax Group 4 II/III (F.184)"); - break; - case 0x28: - strcpy(buffer, "Teletex (F.220)"); - break; - case 0x31: - strcpy(buffer, "Teletex (F.200)"); - break; - case 0x32: - strcpy(buffer, "Videotex (F.300/T.102)"); - break; - case 0x33: - strcpy(buffer, "Videotex (F.300/T.101)"); - break; - case 0x35: - strcpy(buffer, "Telex (F.60)"); - break; - case 0x38: - strcpy(buffer, "MHS (X.400)"); - break; - case 0x41: - strcpy(buffer, "OSI (X.200)"); - break; - case 0x5e: - strcpy(buffer, "Maintenance"); - break; - case 0x5f: - strcpy(buffer, "Management"); - break; - case 0x60: - strcpy(buffer, "Audio visual (F.721)"); - break; - default: - sprintf(buffer, "Reserved (0x%02x)", buf[i] & 0x7f); - break; - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Characteristics = %s", buffer); - i++; - len--; - - if(buf[i-1] & 0x80) - { - return(i); - } - - extension(3, pbuf+strlen(pbuf), off+i, buf[i], 0x80); - - switch(buf[i] & 0x7f) - { - case 0x01: - strcpy(buffer, "Telephony"); - break; - case 0x04: - strcpy(buffer, "Fax Group 2/3 (F.182)"); - break; - case 0x21: - strcpy(buffer, "Fax Group 4 I (F.184)"); - break; - case 0x24: - strcpy(buffer, "Teletex (F.230) or Fax Group 4 II/III (F.184)"); - break; - case 0x28: - strcpy(buffer, "Teletex (F.220)"); - break; - case 0x31: - strcpy(buffer, "Teletex (F.200)"); - break; - case 0x32: - strcpy(buffer, "Videotex (F.300/T.102)"); - break; - case 0x33: - strcpy(buffer, "Videotex (F.300/T.101)"); - break; - case 0x35: - strcpy(buffer, "Telex (F.60)"); - break; - case 0x38: - strcpy(buffer, "MHS (X.400)"); - break; - case 0x41: - strcpy(buffer, "OSI (X.200)"); - break; - case 0x5e: - strcpy(buffer, "Maintenance"); - break; - case 0x5f: - strcpy(buffer, "Management"); - break; - case 0x60: - strcpy(buffer, "Audio visual (F.721)"); - break; - default: - sprintf(buffer, "Reserved (0x%02x)", buf[i] & 0x7f); - break; - - } - sprintline(3, (pbuf+strlen(pbuf)), off+i, buf[i], 0x7f, "Ext. characteristics = %s", buffer); - i++; - return(i); -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdndecode/main.c b/usr.sbin/i4b/isdndecode/main.c deleted file mode 100644 index a73d708d0bded..0000000000000 --- a/usr.sbin/i4b/isdndecode/main.c +++ /dev/null @@ -1,774 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * main.c - isdndecode main program file - * ------------------------------------- - * - * $Id: main.c,v 1.6 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:12:52 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" - -unsigned char buf[BSIZE]; -FILE *Fout = NULL; -FILE *BP = NULL; -int outflag = 1; -int header = 1; -int print_q921 = 1; -int unit = 0; -int dchan = 0; -int bchan = 0; -int traceon = 0; -int analyze = 0; -int Rx = RxUDEF; -int Tx = TxUDEF; -int f; -int Bopt = 0; -int Popt = 0; -int bpopt = 0; -int info = 0; - -static char outfilename[1024]; -static char BPfilename[1024]; - -static void dumpbuf( int n, unsigned char *buf, i4b_trace_hdr_t *hdr); -static int switch_driver( int value, int rx, int tx ); -static void usage( void ); -static void exit_hdl( void ); -static void reopenfiles( int ); - -/*---------------------------------------------------------------------------* - * main - *---------------------------------------------------------------------------*/ -int -main(int argc, char *argv[]) -{ - extern int optind; - extern int opterr; - extern char *optarg; - char devicename[80]; - char headerbuf[256]; - - int n; - int c; - char *b; - - int enable_trace = TRACE_D_RX | TRACE_D_TX; - char *outfile = DECODE_FILE_NAME; - char *binfile = BIN_FILE_NAME; - int outfileset = 0; - time_t tm; - - i4b_trace_hdr_t *ithp = NULL; - int l; - - b = &buf[sizeof(i4b_trace_hdr_t)]; - - while( (c = getopt(argc, argv, "abdf:hiln:op:u:BPR:T:?")) != EOF) - { - switch(c) - { - case 'a': - analyze = 1; - break; - - case 'b': - enable_trace |= (TRACE_B_RX | TRACE_B_TX); - break; - - case 'd': - enable_trace &= (~(TRACE_D_TX | TRACE_D_RX)); - break; - - case 'o': - outflag = 0; - break; - - case 'f': - outfile = optarg; - outfileset = 1; - break; - - case 'h': - header = 0; - break; - - case 'i': - enable_trace |= TRACE_I; - info = 1; - break; - - case 'l': - print_q921 = 0; - break; - - case 'p': - binfile = optarg; - bpopt = 1; - break; - - case 'u': - unit = atoi(optarg); - if(unit < 0 || unit >= MAX_CONTROLLERS) - usage(); - break; - - case 'B': - Bopt = 1; - break; - - case 'P': - Popt = 1; - break; - - case 'R': - Rx = atoi(optarg); - if(Rx < 0 || Rx >= MAX_CONTROLLERS) - usage(); - break; - - case 'T': - Tx = atoi(optarg); - if(Tx < 0 || Tx >= MAX_CONTROLLERS) - usage(); - break; - - case '?': - default: - usage(); - break; - } - } - - if(enable_trace == 0) - usage(); - - if(Bopt && Popt) - usage(); - - atexit(exit_hdl); - - if(Bopt) - { - if(bpopt) - sprintf(BPfilename, "%s", binfile); - else - sprintf(BPfilename, "%s%d", BIN_FILE_NAME, unit); - - if((BP = fopen(BPfilename, "r")) != NULL) - { - char buffer[1024]; - fclose(BP); - sprintf(buffer, "%s%s", BPfilename, DECODE_FILE_NAME_BAK); - rename(BPfilename, buffer); - } - if((BP = fopen(BPfilename, "w")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(BP, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting file [%s] to unbuffered", BPfilename); - perror(buffer); - exit(1); - } - } - - if(Popt) - { - if(bpopt) - sprintf(BPfilename, "%s", binfile); - else - sprintf(BPfilename, "%s%d", BIN_FILE_NAME, unit); - - if((BP = fopen(BPfilename, "r")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - else - { - sprintf(devicename, "%s%d", I4BTRC_DEVICE, unit); - - if((f = open(devicename, O_RDWR)) < 0) - { - char buffer[80]; - - sprintf(buffer, "Error opening trace device [%s]", devicename); - perror(buffer); - exit(1); - } - } - - if(outflag) - { - if(outfileset == 0) - sprintf(outfilename, "%s%d", DECODE_FILE_NAME, unit); - else - strcpy(outfilename, outfile); - - - if((Fout = fopen(outfilename, "r")) != NULL) - { - char buffer[1024]; - fclose(Fout); - sprintf(buffer, "%s%s", outfilename, DECODE_FILE_NAME_BAK); - rename(outfilename, buffer); - } - - if((Fout = fopen(outfilename, "w")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", outfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(Fout, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting file [%s] to unbuffered", outfile); - perror(buffer); - exit(1); - } - } - - if((setvbuf(stdout, (char *)NULL, _IOLBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting stdout to line-buffered"); - perror(buffer); - exit(1); - } - - if(!Popt) - { - if((switch_driver(enable_trace, Rx, Tx)) == -1) - exit(1); - else - traceon = 1; - } - - signal(SIGHUP, SIG_IGN); /* ignore hangup signal */ - signal(SIGUSR1, reopenfiles); /* rotate logfile(s) */ - - time(&tm); - - if(analyze) - { - sprintf(headerbuf, "\n==== isdnanalyze controller rx #%d - tx #%d ==== started %s", - Rx, Tx, ctime(&tm)); - } - else - { - sprintf(headerbuf, "\n=========== isdntrace controller #%d =========== started %s", - unit, ctime(&tm)); - } - - printf("%s", headerbuf); - - if(outflag) - fprintf(Fout, "%s", headerbuf); - - for (;;) - { - if(Popt == 0) - { - n = read(f, buf, BSIZE); - - if(Bopt) - { - if((fwrite(buf, 1, n, BP)) != n) - { - char buffer[80]; - sprintf(buffer, "Error writing file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - - n -= sizeof(i4b_trace_hdr_t); - } - else - { - if((fread(buf, 1, sizeof(i4b_trace_hdr_t), BP)) != sizeof(i4b_trace_hdr_t)) - { - if(feof(BP)) - { - printf("\nEnd of playback input file reached.\n"); - exit(0); - } - else - { - char buffer[80]; - sprintf(buffer, "Error reading hdr from file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - - ithp = (i4b_trace_hdr_t *)buf; - l = ithp->length - sizeof(i4b_trace_hdr_t); - - if((n = fread(buf+sizeof(i4b_trace_hdr_t), 1, l , BP)) != l) - { - char buffer[80]; - sprintf(buffer, "Error reading data from file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - } - - if(n > 0) - { - dumpbuf(n, b, (i4b_trace_hdr_t *)buf); - } - } -} - -/*---------------------------------------------------------------------------* - * format header into static buffer, return buffer address - *---------------------------------------------------------------------------*/ -char * -fmt_hdr(i4b_trace_hdr_t *hdr, int frm_len) -{ - struct tm *s; - static char hbuf[256]; - int i = 0; - - s = localtime(&(hdr->time.tv_sec)); - - if(hdr->type == TRC_CH_I) /* Layer 1 INFO's */ - { - sprintf(hbuf,"\n-- %s - unit:%d ---------------- time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%06u ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec); - } - else - { - if(hdr->trunc > 0) - { - sprintf(hbuf,"\n-- %s - unit:%d - frame:%6.6u - time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%06u - length:%d (%d) ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - hdr->count, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec, - frm_len, - hdr->trunc); - } - else - { - sprintf(hbuf,"\n-- %s - unit:%d - frame:%6.6u - time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%06u - length:%d ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - hdr->count, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec, - frm_len); - } - } - - for(i=strlen(hbuf); i <= NCOLS;) - hbuf[i++] = '-'; - - hbuf[i++] = '\n'; - hbuf[i] = '\0'; - - return(hbuf); -} - -/*---------------------------------------------------------------------------* - * decode protocol and output to file(s) - *---------------------------------------------------------------------------*/ -static void -dumpbuf(int n, unsigned char *buf, i4b_trace_hdr_t *hdr) -{ - static char l1buf[128]; - static unsigned char l2buf[32000]; - static unsigned char l3buf[32000]; - int cnt; - int nsave = n; - char *pbuf; - int i, j; - - l1buf[0] = '\0'; - l2buf[0] = '\0'; - l3buf[0] = '\0'; - - switch(hdr->type) - { - case TRC_CH_I: /* Layer 1 INFO's */ - layer1(l1buf, buf); - break; - - case TRC_CH_D: /* D-channel data */ - cnt = layer2(l2buf, buf, hdr->dir, print_q921); - - n -= cnt; - buf += cnt; - - if(n) - layer3(l3buf, n, cnt, buf); - break; - - default: /* B-channel data */ - - pbuf = &l2buf[0]; - - for (i = 0; i < n; i += 16) - { - sprintf((pbuf+strlen(pbuf)),"B%d:%.3x ", hdr->type, i); - - for (j = 0; j < 16; j++) - if (i + j < n) - sprintf((pbuf+strlen(pbuf)),"%02x ", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf))," "); - - sprintf((pbuf+strlen(pbuf))," "); - - for (j = 0; j < 16 && i + j < n; j++) - if (isprint(buf[i + j])) - sprintf((pbuf+strlen(pbuf)),"%c", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf)),"."); - - sprintf((pbuf+strlen(pbuf)),"\n"); - } - break; - } - - if(header && ((l1buf[0] != '\0' || l2buf[0] != '\0') || (l3buf[0] != 0))) - { - char *p; - p = fmt_hdr(hdr, nsave); - printf("%s", p); - if(outflag) - fprintf(Fout, "%s", p); - } - - if(l1buf[0] != '\0') - { - printf("%s", l1buf); - if(outflag) - fprintf(Fout, "%s", l1buf); - } - - if(l2buf[0] != '\0') - { - printf("%s", l2buf); - if(outflag) - fprintf(Fout, "%s", l2buf); - } - - if(l3buf[0] != '\0') - { - printf("%s", l3buf); - if(outflag) - fprintf(Fout, "%s", l3buf); - } -} - -/*---------------------------------------------------------------------------* - * exit handler function to be called at program exit - *---------------------------------------------------------------------------*/ -void -exit_hdl() -{ - if(traceon) - switch_driver(TRACE_OFF, Rx, Tx); -} - -/*---------------------------------------------------------------------------* - * switch driver debugging output on/off - *---------------------------------------------------------------------------*/ -static int -switch_driver(int value, int rx, int tx) -{ - char buffer[80]; - int v = value; - - if(analyze == 0) - { - if(ioctl(f, I4B_TRC_SET, &v) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_SET, val = %d", v); - perror(buffer); - return(-1); - } - } - else - { - if(value == TRACE_OFF) - { - if(ioctl(f, I4B_TRC_RESETA, &v) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_RESETA - "); - perror(buffer); - return(-1); - } - } - else - { - i4b_trace_setupa_t tsa; - - tsa.rxunit = rx; - tsa.rxflags = value; - tsa.txunit = tx; - tsa.txflags = value; - - if(ioctl(f, I4B_TRC_SETA, &tsa) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_SETA, val = %d", v); - perror(buffer); - return(-1); - } - } - } - return(0); -} - -/*---------------------------------------------------------------------------* - * reopen files to support rotating logfile(s) on SIGUSR1 - * - * based on an idea from Ripley (ripley@nostromo.in-berlin.de) - * - * close file and reopen it for append. this will be a nop - * if the previously opened file hasn't moved but will open - * a new one otherwise, thus enabling a rotation... - * - *---------------------------------------------------------------------------*/ -static void -reopenfiles(int dummy) -{ - if(outflag) - { - fclose(Fout); - - if((Fout = fopen(outfilename, "a")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error re-opening file [%s]", outfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(Fout, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error re-setting file [%s] to unbuffered", outfilename); - perror(buffer); - exit(1); - } - } - - if(Bopt) - { - - fclose(BP); - - if((BP = fopen(BPfilename, "a")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error re-opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(BP, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error re-setting file [%s] to unbuffered", BPfilename); - perror(buffer); - exit(1); - } - } -} - -/*---------------------------------------------------------------------------* - * decode extension bit - *---------------------------------------------------------------------------*/ -void -extension(int layer, char *buffer, int cnt, unsigned char value, unsigned char mask) -{ - sprintline(layer, buffer, cnt, value, mask, "Extension Bit = %c (%s)", - (value & mask) ? '1' : '0', - (value & mask) ? "no extension, final octet" : "with extension, octet follows"); -} - -/*---------------------------------------------------------------------------* - * print bits as 0/1 available for mask - *---------------------------------------------------------------------------*/ -static char * -print_bits(unsigned char val, unsigned char mask) -{ - static char buffer[10]; - int i = 0; - int length = 8; - - while(length--) - { - if(mask & 0x80) - { - if(val & 0x80) - buffer[i++] = '1'; - else - buffer[i++] = '0'; - } - else - { - buffer[i++] = '-'; - } - val = val << 1; - mask = mask << 1; - } - buffer[i] = '\0'; - return(buffer); -} - -/*---------------------------------------------------------------------------* - * print one decoded output line - *---------------------------------------------------------------------------*/ -void -sprintline(int layer, char *buffer, int oct_count, int oct_val, - int oct_mask, const char *fmt, ...) -{ - char lbuffer[256]; - static int lastcount = -1; - char *ptr; - va_list ap; - - va_start(ap, fmt); - - if(oct_count != lastcount) - { - lastcount = oct_count; - - sprintf(lbuffer, "L%d %2d %02X %s ", - layer, - oct_count, - oct_val, - print_bits(oct_val, oct_mask)); - } - else - { - sprintf(lbuffer, " %s ", - print_bits(oct_val, oct_mask)); - } - - vsprintf(lbuffer+strlen(lbuffer), fmt, ap); - - va_end(ap); - - sprintf(lbuffer+strlen(lbuffer), "\n"); - - if((ptr = rindex(lbuffer, '(')) != NULL) - { - char *s = lbuffer; - char *b = buffer; - int len = strlen(lbuffer); - int i; - - for(s = lbuffer; s < ptr; *b++ = *s++) - ; - for(i = 0;(i+len) <= NCOLS; *b++ = ' ', i++) - ; - for(; *s; *b++ = *s++) - ; - *b = '\0'; - } - else - { - strcpy(buffer, lbuffer); - } -} - -/*---------------------------------------------------------------------------* - * usage intructions - *---------------------------------------------------------------------------*/ -void -usage(void) -{ - fprintf(stderr,"\n"); - fprintf(stderr,"isdndecode - isdn4bsd package ISDN decoder for passive cards (%02d.%02d)\n", VERSION, REL); - fprintf(stderr,"usage: isdntrace -a -b -d -f <file> -h -i -l -n <val> -o -p <file> -r -u <unit>\n"); - fprintf(stderr," -B -P -R <unit> -T <unit>\n"); - fprintf(stderr," -a analyzer mode ................................... (default off)\n"); - fprintf(stderr," -b switch B channel trace on ....................... (default off)\n"); - fprintf(stderr," -d switch D channel trace off ....................... (default on)\n"); - fprintf(stderr," -f <file> write output to file filename ............ (default %s0)\n", DECODE_FILE_NAME); - fprintf(stderr," -h don't print header for each message ............. (default off)\n"); - fprintf(stderr," -i print I.430 (layer 1) INFO signals .............. (default off)\n"); - fprintf(stderr," -l don't decode low layer Q.921 messages ........... (default off)\n"); - fprintf(stderr," -o don't write output to a file .................... (default off)\n"); - fprintf(stderr," -p <file> specify filename for -B and -P ........ (default %s0)\n", BIN_FILE_NAME); - fprintf(stderr," -u <unit> specify controller unit number ............... (default unit 0)\n"); - fprintf(stderr," -B write binary trace data to file filename ........ (default off)\n"); - fprintf(stderr," -P playback from binary trace data file ............ (default off)\n"); - fprintf(stderr," -R <unit> analyze Rx controller unit number (for -a) ... (default unit %d)\n", RxUDEF); - fprintf(stderr," -T <unit> analyze Tx controller unit number (for -a) ... (default unit %d)\n", TxUDEF); - fprintf(stderr,"\n"); - exit(1); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/pcause.c b/usr.sbin/i4b/isdndecode/pcause.c deleted file mode 100644 index 9c5535e21e12e..0000000000000 --- a/usr.sbin/i4b/isdndecode/pcause.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * pcause.c - printing cause values - * -------------------------------- - * - * $Id: pcause.c,v 1.3 1998/12/23 10:03:55 hm Exp $ - * - * last edit-date: [Wed Dec 23 10:59:54 1998] - * - *---------------------------------------------------------------------------*/ - -#include "decode.h" -#include "pcause.h" - -char * -print_cause_q850(unsigned char code) -{ - static char error_message[120]; - char *e; - - switch(code) - { - case CAUSE_Q850_SHUTDN: - e = "normal D-channel shutdown"; - break; - - case CAUSE_Q850_NUNALLC: - e = "Unallocated (unassigned) number"; - break; - - case CAUSE_Q850_NRTTN: - e = "No route to specified transit network"; - break; - - case CAUSE_Q850_NRTDST: - e = "No route to destination"; - break; - - case CAUSE_Q850_SSINFTN: - e = "Send special information tone"; - break; - - case CAUSE_Q850_MDIALTP: - e = "Misdialled trunk prefix"; - break; - - case CAUSE_Q850_CHUNACC: - e = "Channel unacceptable"; - break; - - case CAUSE_Q850_CALLAWD: - e = "Call awarded and being delivered in an established channel"; - break; - - case CAUSE_Q850_PREEMPT: - e = "Preemption"; - break; - - case CAUSE_Q850_PREECRR: - e = "Preemption - circuit reserved for reuse"; - break; - - case CAUSE_Q850_NCCLR: - e = "Normal call clearing"; - break; - - case CAUSE_Q850_USRBSY: - e = "User busy"; - break; - - case CAUSE_Q850_NOUSRRSP: - e = "No user responding"; - break; - - case CAUSE_Q850_NOANSWR: - e = "No answer from user (user alerted)"; - break; - - case CAUSE_Q850_SUBSABS: - e = "Subscriber absent"; - break; - - case CAUSE_Q850_CALLREJ: - e = "Call rejected"; - break; - - case CAUSE_Q850_NUCHNG: - e = "Number changed"; - break; - - case CAUSE_Q850_NONSELUC: - e = "Non-selected user clearing"; - break; - - case CAUSE_Q850_DSTOOORDR: - e = "Destination out of order"; - break; - - case CAUSE_Q850_INVNUFMT: - e = "Invalid number format"; - break; - - case CAUSE_Q850_FACREJ: - e = "Facility rejected"; - break; - - case CAUSE_Q850_STENQRSP: - e = "Response to STATUS ENQUIRY"; - break; - - case CAUSE_Q850_NORMUNSP: - e = "Normal, unspecified"; - break; - - case CAUSE_Q850_NOCAVAIL: - e = "No circuit / channel available"; - break; - - case CAUSE_Q850_NETOOORDR: - e = "Network out of order"; - break; - - case CAUSE_Q850_PFMCDOOSERV: - e = "Permanent frame mode connection out of service"; - break; - - case CAUSE_Q850_PFMCOPER: - e = "Permanent frame mode connection operational"; - break; - - case CAUSE_Q850_TMPFAIL: - e = "Temporary failure"; - break; - - case CAUSE_Q850_SWEQCONG: - e = "Switching equipment congestion"; - break; - - case CAUSE_Q850_ACCINFDIS: - e = "Access information discarded"; - break; - - case CAUSE_Q850_REQCNOTAV: - e = "Requested circuit/channel not available"; - break; - - case CAUSE_Q850_PRECALBLK: - e = "Precedence call blocked"; - break; - - case CAUSE_Q850_RESUNAVAIL: - e = "Resources unavailable, unspecified"; - break; - - case CAUSE_Q850_QOSUNAVAIL: - e = "Quality of service unavailable"; - break; - - case CAUSE_Q850_REQSERVNS: - e = "Requested facility not subscribed"; - break; - - case CAUSE_Q850_OCBARRCUG: - e = "Outgoing calls barred within CUG"; - break; - - case CAUSE_Q850_ICBARRCUG: - e = "Incoming calls barred within CUG"; - break; - - case CAUSE_Q850_BCAPNAUTH: - e = "Bearer capability not authorized"; - break; - - case CAUSE_Q850_BCAPNAVAIL: - e = "Bearer capability not presently available"; - break; - - case CAUSE_Q850_INCSTOACISC: - e = "Inconsistenciy in designated outg. access info and subscriber class"; - break; - - case CAUSE_Q850_SOONOTAVAIL: - e = "Service or option not available, unspecified"; - break; - - case CAUSE_Q850_BCAPNOTIMPL: - e = "Bearer capability not implemented"; - break; - - case CAUSE_Q850_CHTYPNIMPL: - e = "Channel type not implemented"; - break; - - case CAUSE_Q850_REQFACNIMPL: - e = "Requested facility not implemented"; - break; - - case CAUSE_Q850_ORDINBCAVL: - e = "Only restricted digital information bearer capability is available"; - break; - - case CAUSE_Q850_SOONOTIMPL: - e = "Service or option not implemented, unspecified"; - break; - - case CAUSE_Q850_INVCLRFVAL: - e = "Invalid call reference value"; - break; - - case CAUSE_Q850_IDCHDNOEX: - e = "Identified channel does not exist"; - break; - - case CAUSE_Q850_SUSCAEXIN: - e = "A suspended call exists, but this call identity does not"; - break; - - case CAUSE_Q850_CLIDINUSE: - e = "Call identity in use"; - break; - - case CAUSE_Q850_NOCLSUSP: - e = "No call suspended"; - break; - - case CAUSE_Q850_CLIDCLRD: - e = "Call having the requested call identity has been cleared"; - break; - - case CAUSE_Q850_UNOTMEMCUG: - e = "User not member of CUG"; - break; - - case CAUSE_Q850_INCDEST: - e = "Incompatible destination"; - break; - - case CAUSE_Q850_NONEXCUG: - e = "Non-existent CUG"; - break; - - case CAUSE_Q850_INVNTWSEL: - e = "Invalid transit network selection"; - break; - - case CAUSE_Q850_INVMSG: - e = "Invalid message, unspecified"; - break; - - case CAUSE_Q850_MIEMISS: - e = "Mandatory information element is missing"; - break; - - case CAUSE_Q850_MSGTNI: - e = "Message type non-existent or not implemented"; - break; - - case CAUSE_Q850_MSGNCMPT: - e = "Msg incompatible with call state/message type non-existent/not implemented"; - break; - - case CAUSE_Q850_IENENI: - e = "Information element/parameter non-existent or not implemented"; - break; - - case CAUSE_Q850_INVIEC: - e = "Invalid information element contents"; - break; - - case CAUSE_Q850_MSGNCWCS: - e = "Message not compatible with call state"; - break; - - case CAUSE_Q850_RECOTIMEXP: - e = "Recovery on timer expiry"; - break; - - case CAUSE_Q850_PARMNENIPO: - e = "Parameter non-existent or not implemented, passed on"; - break; - - case CAUSE_Q850_MSGUNRDPRM: - e = "Message with unrecognized parameter, discarded"; - break; - - case CAUSE_Q850_PROTERR: - e = "Protocol error, unspecified"; - break; - - case CAUSE_Q850_INTWRKU: - e = "Interworking, unspecified"; - break; - - default: - e = "ERROR, unknown cause value!"; - break; - } - - sprintf(error_message, "%d: %s (Q.850)", code, e); - return(error_message); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdndecode/pcause.h b/usr.sbin/i4b/isdndecode/pcause.h deleted file mode 100644 index 6b6627bf358b1..0000000000000 --- a/usr.sbin/i4b/isdndecode/pcause.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * pcause.h - Q.850 causes definitions - * ----------------------------------- - * - * $Id: pcause.h,v 1.2 1998/12/18 17:09:38 hm Exp $ - * - * last edit-date: [Fri Dec 18 18:13:23 1998] - * - *---------------------------------------------------------------------------*/ - -char *print_cause_q850(unsigned char code); - -/* Q.850 causes */ - -#define CAUSE_Q850_SHUTDN 0x00 /* normal D-channel shutdown */ -#define CAUSE_Q850_NUNALLC 0x01 /* Unallocated (unassigned) number */ -#define CAUSE_Q850_NRTTN 0x02 /* No route to specified transit network */ -#define CAUSE_Q850_NRTDST 0x03 /* No route to destination */ -#define CAUSE_Q850_SSINFTN 0x04 /* Send special information tone */ -#define CAUSE_Q850_MDIALTP 0x05 /* Misdialled trunk prefix */ -#define CAUSE_Q850_CHUNACC 0x06 /* Channel unacceptable */ -#define CAUSE_Q850_CALLAWD 0x07 /* Call awarded and being delivered in an established channel */ -#define CAUSE_Q850_PREEMPT 0x08 /* Preemption */ -#define CAUSE_Q850_PREECRR 0x09 /* Preemption - circuit reserved for reuse */ -#define CAUSE_Q850_NCCLR 0x10 /* Normal call clearing */ -#define CAUSE_Q850_USRBSY 0x11 /* User busy */ -#define CAUSE_Q850_NOUSRRSP 0x12 /* No user responding */ -#define CAUSE_Q850_NOANSWR 0x13 /* No answer from user (user alerted) */ -#define CAUSE_Q850_SUBSABS 0x14 /* Subscriber absent */ -#define CAUSE_Q850_CALLREJ 0x15 /* Call rejected */ -#define CAUSE_Q850_NUCHNG 0x16 /* Number changed */ -#define CAUSE_Q850_NONSELUC 0x1A /* Non-selected user clearing */ -#define CAUSE_Q850_DSTOOORDR 0x1B /* Destination out of order */ -#define CAUSE_Q850_INVNUFMT 0x1C /* Invalid number format */ -#define CAUSE_Q850_FACREJ 0x1D /* Facility rejected */ -#define CAUSE_Q850_STENQRSP 0x1E /* Response to STATUS ENQUIRY */ -#define CAUSE_Q850_NORMUNSP 0x1F /* Normal, unspecified */ -#define CAUSE_Q850_NOCAVAIL 0x22 /* No circuit / channel available */ -#define CAUSE_Q850_NETOOORDR 0x26 /* Network out of order */ -#define CAUSE_Q850_PFMCDOOSERV 0x27 /* Permanent frame mode connection out of service */ -#define CAUSE_Q850_PFMCOPER 0x28 /* Permanent frame mode connection operational */ -#define CAUSE_Q850_TMPFAIL 0x29 /* Temporary failure */ -#define CAUSE_Q850_SWEQCONG 0x2A /* Switching equipment congestion */ -#define CAUSE_Q850_ACCINFDIS 0x2B /* Access information discarded */ -#define CAUSE_Q850_REQCNOTAV 0x2C /* Requested circuit/channel not available */ -#define CAUSE_Q850_PRECALBLK 0x2E /* Precedence call blocked */ -#define CAUSE_Q850_RESUNAVAIL 0x2F /* Resources unavailable, unspecified */ -#define CAUSE_Q850_QOSUNAVAIL 0x31 /* Quality of service unavailable */ -#define CAUSE_Q850_REQSERVNS 0x32 /* Requested facility not subscribed */ -#define CAUSE_Q850_OCBARRCUG 0x35 /* Outgoing calls barred within CUG */ -#define CAUSE_Q850_ICBARRCUG 0x36 /* Incoming calls barred within CUG */ -#define CAUSE_Q850_BCAPNAUTH 0x39 /* Bearer capability not authorized */ -#define CAUSE_Q850_BCAPNAVAIL 0x3A /* Bearer capability not presently available */ -#define CAUSE_Q850_INCSTOACISC 0x3E /* Inconsistenciy in designated outgoing access information and subscriber class */ -#define CAUSE_Q850_SOONOTAVAIL 0x3F /* Service or option not available, unspecified */ -#define CAUSE_Q850_BCAPNOTIMPL 0x41 /* Bearer capability not implemented */ -#define CAUSE_Q850_CHTYPNIMPL 0x42 /* Channel type not implemented */ -#define CAUSE_Q850_REQFACNIMPL 0x45 /* Requested facility not implemented */ -#define CAUSE_Q850_ORDINBCAVL 0x46 /* Only restricted digital information bearer capability is available */ -#define CAUSE_Q850_SOONOTIMPL 0x4F /* Service or option not implemented, unspecified */ -#define CAUSE_Q850_INVCLRFVAL 0x51 /* Invalid call reference value */ -#define CAUSE_Q850_IDCHDNOEX 0x52 /* Identified channel does not exist */ -#define CAUSE_Q850_SUSCAEXIN 0x53 /* A suspended call exists, but this call identity does not */ -#define CAUSE_Q850_CLIDINUSE 0x54 /* Call identity in use */ -#define CAUSE_Q850_NOCLSUSP 0x55 /* No call suspended */ -#define CAUSE_Q850_CLIDCLRD 0x56 /* Call having the requested call identity has been cleared */ -#define CAUSE_Q850_UNOTMEMCUG 0x57 /* User not member of CUG */ -#define CAUSE_Q850_INCDEST 0x58 /* Incompatible destination */ -#define CAUSE_Q850_NONEXCUG 0x5A /* Non-existent CUG */ -#define CAUSE_Q850_INVNTWSEL 0x5B /* Invalid transit network selection */ -#define CAUSE_Q850_INVMSG 0x5F /* Invalid message, unspecified */ -#define CAUSE_Q850_MIEMISS 0x60 /* Mandatory information element is missing */ -#define CAUSE_Q850_MSGTNI 0x61 /* Message type non-existent or not implemented */ -#define CAUSE_Q850_MSGNCMPT 0x62 /* Message not compatible with call state or message type non-existent or not implemented */ -#define CAUSE_Q850_IENENI 0x63 /* Information element/parameter non-existent or not implemented */ -#define CAUSE_Q850_INVIEC 0x64 /* Invalid information element contents */ -#define CAUSE_Q850_MSGNCWCS 0x65 /* Message not compatible with call state */ -#define CAUSE_Q850_RECOTIMEXP 0x66 /* Recovery on timer expiry */ -#define CAUSE_Q850_PARMNENIPO 0x67 /* Parameter non-existent or not implemented, passed on */ -#define CAUSE_Q850_MSGUNRDPRM 0x6E /* Message with unrecognized parameter, discarded */ -#define CAUSE_Q850_PROTERR 0x6F /* Protocol error, unspecified */ -#define CAUSE_Q850_INTWRKU 0x7F /* Interworking, unspecified */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdnmonitor/Makefile b/usr.sbin/i4b/isdnmonitor/Makefile deleted file mode 100644 index 9d3811b7a74c4..0000000000000 --- a/usr.sbin/i4b/isdnmonitor/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -PROG = isdnmonitor -SRCS = main.c -MAN8 = isdnmonitor.8 - -# compile debug support -COPTS += -DDEBUG - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdnmonitor/isdnmonitor.8 b/usr.sbin/i4b/isdnmonitor/isdnmonitor.8 deleted file mode 100644 index 9bcb7836fafeb..0000000000000 --- a/usr.sbin/i4b/isdnmonitor/isdnmonitor.8 +++ /dev/null @@ -1,40 +0,0 @@ -.\" Copyright (c) 1998 Martin Husemann <martin@rumolt.teuto.de> -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. The name of the author may not be used to endorse or promote products -.\" derived from this software withough specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $Id: isdnmonitor.8,v 1.2 1998/08/10 13:55:29 hm Exp $ -.\" -.\" last edit-date: [Fri Jan 30 22:49:48 1998] -.\" -.\" -mh writing manual pages -.\" -.\" -.Dd April 18, 1998 -.Dt isdnmonitor 8 -.Sh NAME -.Nm isdnmonitor -.Nd raw sample and test client for isdnd network monitoring -.Sh DESCRIPTION -The -.Nm -is not intended for real world use. It will be replaced -by something with a better user interface as soon as the monitoring -subsystem is functional. diff --git a/usr.sbin/i4b/isdnmonitor/main.c b/usr.sbin/i4b/isdnmonitor/main.c deleted file mode 100644 index 73ae8fe01f86a..0000000000000 --- a/usr.sbin/i4b/isdnmonitor/main.c +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Copyright (c) 1998 Martin Husemann. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - network monitor client - * ----------------------------------- - * - * $Id: main.c,v 1.9 1998/10/27 10:54:23 hm Exp $ - * - * last edit-date: [Tue Oct 27 11:53:12 1998] - * - * -mh created - * -hm checking in - * -hm porting to HPUX - * -mh all events the fullscreen mode displays now as monitor event - * - *---------------------------------------------------------------------------*/ - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <signal.h> -#include <time.h> -#include <errno.h> -#include <unistd.h> -#include <netdb.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <sys/un.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#include <machine/i4b_ioctl.h> - -#ifdef __hpux -#define AF_LOCAL AF_UNIX -#endif - -#ifdef DEBUG -#include <ctype.h> -#endif - -#include "monitor.h" - -/* - * Local function prototypes - */ -static int connect_local(const char *sockpath); -static int connect_remote(const char *host, int portno); -static void usage(); -static void mloop(); -static void handle_input(); -static void print_menu(); -static void print_logevent(time_t tstamp, int prio, const char * what, const char * msg); -static void print_charge(time_t tstamp, int channel, int units, int estimated); -static void print_connect(time_t tstamp, int dir, int channel, const char * cfgname, const char * devname, const char * remphone, const char * locphone); -static void print_disconnect(time_t tstamp, int channel); -static void print_updown(time_t tstamp, int channel, int isup); -static void handle_event(BYTE *msg, int len); -#ifdef DEBUG -static void dump_event(BYTE *msg, int len); -#endif - -/* - * Global variables - */ -static int dumpall = 0; -static int monsock = -1; -static int state = 0; -static int sub_state = 0; -static int sub_state_count = 0; - -static int major = 0; -static int minor = 0; -static int nctrl = 0; -static u_int32_t rights = 0; - -/* - * Parse command line, startup monitor client - */ -int main(int argc, char **argv) -{ - char * sockpath = NULL; - char * hostname = NULL; - int portno = DEF_MONPORT; - int i; - - while ((i = getopt(argc, argv, "dh:p:l:")) != EOF) - { - switch (i) - { - case 'd': - dumpall = 1; - break; - case 'h': - hostname = optarg; - break; - case 'l': - sockpath = optarg; - break; - case 'p': - if ((sscanf(optarg, "%i", &portno)) != 1) - usage(); - break; - default: - usage(); - break; - } - } - - if (hostname && sockpath) - { - fprintf(stderr, "Error: can not use local socket path on remote machine\n" - "conflicting options -h and -l!\n"); - return 1; - } - - if (sockpath) - { - monsock = connect_local(sockpath); - } - else if (hostname) - { - monsock = connect_remote(hostname, portno); - } - else - { - usage(); - } - - if (monsock == -1) - { - fprintf(stderr, "Could not connect to i4b isdn daemon.\n"); - return 1; - } - - signal(SIGPIPE, SIG_IGN); - mloop(); - - close(monsock); - - return 0; -} - -/* - * Display usage and exit - */ -static void usage() -{ - fprintf(stderr, "usage:\n" - " isdnmonitor [-d] -h (host) -p (port)\n" - "or\n" - " isdnmonitor [-d] -l (path)\n" - "where (host) is the hostname and (port) the port number of\n" - "the isdnd to be monitored and (path) is the pathname of the\n" - "local domain socket used to communicate with a daemon on the\n" - "local machine.\n" - "Options are:\n" - " -d dump all incoming packets as hexdump\n" - ); - exit(0); -} - -/* - * Connect via tcp/ip. - * Return socket if successfull, -1 on error. - */ -static int connect_remote(const char *host, int portno) -{ - struct sockaddr_in sa; - struct hostent *h; - int remotesockfd; - - h = gethostbyname(host); - - if (!h) - { - fprintf(stderr, "could not resolve hostname '%s'\n", host); - exit(1); - } - - remotesockfd = socket(AF_INET, SOCK_STREAM, 0); - - if (remotesockfd == -1) - { - fprintf(stderr, "could not create remote monitor socket: %s\n", strerror(errno)); - exit(1); - } - - memset(&sa, 0, sizeof sa); - -#ifdef BSD4_4 - sa.sin_len = sizeof sa; -#endif - sa.sin_family = AF_INET; - sa.sin_port = htons(portno); - - memcpy(&sa.sin_addr.s_addr, h->h_addr_list[0], sizeof sa.sin_addr.s_addr); - - if (connect(remotesockfd, (struct sockaddr *)&sa, sizeof sa) == -1) - { - fprintf(stderr, "could not connect remote monitor: %s\n", strerror(errno)); - exit(1); - } - - return remotesockfd; -} - -/* - * Connect local. - * Return socket on success, -1 on failure. - */ -static int connect_local(const char *sockpath) -{ - int s; - struct sockaddr_un sa; - - /* check path length */ - if (strlen(sockpath) >= sizeof sa.sun_path) - { - fprintf(stderr, "pathname to long for local socket: %s\n", - sockpath); - exit(1); - } - - /* create and setup socket */ - s = socket(AF_LOCAL, SOCK_STREAM, 0); - - if (s == -1) - { - fprintf(stderr, "could not create local monitor socket:%s\n", strerror(errno)); - exit(1); - } - - memset(&sa, 0, sizeof sa); - -#ifndef __hpux - sa.sun_len = sizeof sa; -#endif - - sa.sun_family = AF_LOCAL; - strcpy(sa.sun_path, sockpath); - - if (connect(s, (struct sockaddr *)&sa, sizeof sa)) - { - fprintf(stderr, "could not connect local monitor socket [%s]: %s\n", sockpath, strerror(errno)); - } - - return s; -} - -/* - * main event loop - */ -static void mloop() -{ - for (;;) - { - fd_set rd, wr, ex; - - FD_ZERO(&rd); - FD_ZERO(&wr); - FD_ZERO(&ex); - FD_SET(fileno(stdin), &rd); - FD_SET(monsock, &rd); - - select(monsock+1, &rd, &wr, &ex, NULL); - - if (FD_ISSET(fileno(stdin), &rd)) - { - handle_input(); - } - - if (FD_ISSET(monsock, &rd)) - { - BYTE buf[1024]; - u_long u; - int bytes, ret; - - /* Network transfer may deliver two or more packets concatenated. - * Peek at the header and read only one event at a time... */ - - ioctl(monsock, FIONREAD, &u); - - if (u < I4B_MON_EVNT_HDR) - continue; /* not enough data there yet */ - - bytes = recv(monsock, buf, I4B_MON_EVNT_HDR, MSG_PEEK); - - if (bytes < I4B_MON_EVNT_HDR) - continue; /* errh? something must be wrong... */ - - bytes = I4B_GET_2B(buf, I4B_MON_EVNT_LEN); - - if (bytes >= sizeof buf) - break; - - /* now we know the size, it fits, so lets read it! */ - - ret = read(monsock, buf, bytes); - - if (ret == 0) - { - printf("remote isdnd has closed our connection\n"); - break; - } - else if (ret < 0) - { - printf("error reading from isdnd: %s", strerror(errno)); - break; - } -#ifdef DEBUG - if (dumpall) - dump_event(buf, ret); -#endif - handle_event(buf, ret); - } - } -} - -#ifdef DEBUG -/* - * Dump a complete event packet. - */ -static void dump_event(BYTE *msg, int len) -{ - int i; - - printf("event dump:"); - - for (i = 0; i < len; i++) - { - if (i % 8 == 0) - printf("\n%02x: ", i); - printf("%02x %c ", msg[i], isprint(msg[i]) ? msg[i] : '.'); - } - printf("\n"); -} -#endif - -static void print_logevent(time_t tstamp, int prio, const char * what, const char * msg) -{ - char buf[256]; - strftime(buf, sizeof buf, I4B_TIME_FORMAT, localtime(&tstamp)); - printf("log: %s prio %d what=%s msg=%s\n", - buf, prio, what, msg); -} - -static void print_charge(time_t tstamp, int channel, int units, int estimated) -{ - char buf[256]; - strftime(buf, sizeof buf, I4B_TIME_FORMAT, localtime(&tstamp)); - printf("%s: channel %d, charge = %d%s\n", - buf, channel, units, estimated ? " (estimated)" : ""); -} - -/* - * Print a connect event. - * A real monitor would allocate state info for "channel" on this - * event. - */ -static void print_connect( - time_t tstamp, /* server time of event */ - int outgoing, /* 0 = incoming, 1 = outgoing */ - int channel, /* channel no, used to identify this connection until disconnect */ - const char * cfgname, /* name of config entry/connection */ - const char * devname, /* device used (e.g. isp0) */ - const char * remphone, /* phone no of remote side */ - const char * locphone) /* local phone no */ -{ - char buf[256]; - strftime(buf, sizeof buf, I4B_TIME_FORMAT, localtime(&tstamp)); - - if (outgoing) - printf("%s: calling out to '%s' [from msn: '%s']", - buf, remphone, locphone); - else - printf("%s: incoming call from '%s' [to msn: '%s']", - buf, remphone, locphone); - printf(", channel %d, config '%s' on device '%s'\n", - channel, cfgname, devname); -} - -/* - * Print a disconnect event. - * A real monitor could free the "per connection" state - * for this channel now - */ -static void print_disconnect(time_t tstamp, int channel) -{ - char buf[256]; - strftime(buf, sizeof buf, I4B_TIME_FORMAT, localtime(&tstamp)); - printf("%s: channel %d disconnected\n", - buf, channel); -} - -/* - * Print an up- or down event - */ -static void print_updown(time_t tstamp, int channel, int isup) -{ - char buf[256]; - strftime(buf, sizeof buf, I4B_TIME_FORMAT, localtime(&tstamp)); - printf("%s: channel %d is %s\n", - buf, channel, isup ? "up" : "down"); -} - -/* - * Dispatch one message received from the daemon. - */ -static void handle_event(BYTE *msg, int len) -{ - BYTE cmd[I4B_MON_ICLIENT_SIZE]; - int local; - u_int32_t net; - u_int32_t mask; - u_int32_t who; - - switch (state) - { - case 0: /* initial data */ - - major = I4B_GET_2B(msg, I4B_MON_IDATA_VERSMAJOR); - minor = I4B_GET_2B(msg, I4B_MON_IDATA_VERSMINOR); - nctrl = I4B_GET_2B(msg, I4B_MON_IDATA_NUMCTRL); - rights = I4B_GET_4B(msg, I4B_MON_IDATA_CLACCESS); - - printf("remote protocol version is %02d.%02d, %d controller(s) found, our rights = %x\n", - major, minor, nctrl, rights); - - if (nctrl > 0) - { - state = 1; - sub_state = 0; - } - else - { - state = 2; - - /* show menu for the first time */ - print_menu(); - } - - /* set maximum event mask */ - I4B_PREP_CMD(cmd, I4B_MON_CCMD_SETMASK); - I4B_PUT_2B(cmd, I4B_MON_ICLIENT_VERMAJOR, MPROT_VERSION); - I4B_PUT_2B(cmd, I4B_MON_ICLIENT_VERMINOR, MPROT_REL); - I4B_PUT_4B(cmd, I4B_MON_ICLIENT_EVENTS, ~0U); - - write(monsock, cmd, sizeof cmd); - - break; - - case 1: /* initial controller list */ - printf("controller %d: %s\n", sub_state++, msg+I4B_MON_ICTRL_NAME); - - if (sub_state >= nctrl) - { - state = 2; /* end of list reached */ - sub_state = 0; - - /* show menu for the first time */ - print_menu(); - } - break; - - case 2: /* any event */ - - switch (I4B_GET_2B(msg, I4B_MON_EVNT)) - { - case I4B_MON_DRINI_CODE: - state = 3; /* list of rights entries will follow */ - sub_state = 0; - sub_state_count = I4B_GET_2B(msg, I4B_MON_DRINI_COUNT); - printf("monitor rights:\n"); - break; - - case I4B_MON_DCINI_CODE: - state = 4; - sub_state = 0; - sub_state_count = I4B_GET_2B(msg, I4B_MON_DCINI_COUNT); - printf("monitor connections:\n"); - break; - - case I4B_MON_LOGEVNT_CODE: - print_logevent(I4B_GET_4B(msg, I4B_MON_LOGEVNT_TSTAMP), - I4B_GET_4B(msg, I4B_MON_LOGEVNT_PRIO), - msg+I4B_MON_LOGEVNT_WHAT, - msg+I4B_MON_LOGEVNT_MSG); - break; - - case I4B_MON_CHRG_CODE: - print_charge(I4B_GET_4B(msg, I4B_MON_CHRG_TSTAMP), - I4B_GET_4B(msg, I4B_MON_CHRG_CHANNEL), - I4B_GET_4B(msg, I4B_MON_CHRG_UNITS), - I4B_GET_4B(msg, I4B_MON_CHRG_ESTIMATED)); - break; - - case I4B_MON_CONNECT_CODE: - print_connect( - I4B_GET_4B(msg, I4B_MON_CONNECT_TSTAMP), - I4B_GET_4B(msg, I4B_MON_CONNECT_DIR), - I4B_GET_4B(msg, I4B_MON_CONNECT_CHANNEL), - msg+I4B_MON_CONNECT_CFGNAME, - msg+I4B_MON_CONNECT_DEVNAME, - msg+I4B_MON_CONNECT_REMPHONE, - msg+I4B_MON_CONNECT_LOCPHONE); - break; - - case I4B_MON_DISCONNECT_CODE: - print_disconnect( - I4B_GET_4B(msg, I4B_MON_DISCONNECT_TSTAMP), - I4B_GET_4B(msg, I4B_MON_DISCONNECT_CHANNEL)); - break; - - case I4B_MON_UPDOWN_CODE: - print_updown( - I4B_GET_4B(msg, I4B_MON_UPDOWN_TSTAMP), - I4B_GET_4B(msg, I4B_MON_UPDOWN_CHANNEL), - I4B_GET_4B(msg, I4B_MON_UPDOWN_ISUP)); - break; - - default: - printf("unknown event code: %d\n", I4B_GET_2B(msg, I4B_MON_EVNT)); - } - break; - - case 3: /* one record in a list of monitor rights */ - rights = I4B_GET_4B(msg, I4B_MON_DR_RIGHTS); - net = I4B_GET_4B(msg, I4B_MON_DR_NET); - mask = I4B_GET_4B(msg, I4B_MON_DR_MASK); - local = I4B_GET_1B(msg, I4B_MON_DR_LOCAL); - - if (local) - { - printf("\tlocal: rights = %x\n", rights); - } - else - { - printf("\tfrom: %d.%d.%d.%d, mask %d.%d.%d.%d, rights = %x\n", - (net >> 24) & 0x00ff, (net >> 16) & 0x00ff, (net >> 8) & 0x00ff, net & 0x00ff, - (mask >> 24) & 0x00ff, (mask >> 16) & 0x00ff, (mask >> 8) & 0x00ff, mask & 0x00ff, - rights); - } - - sub_state++; - - if (sub_state >= sub_state_count) - { - state = 2; - print_menu(); - } - break; - - case 4: - who = I4B_GET_4B(msg, I4B_MON_DC_WHO); - rights = I4B_GET_4B(msg, I4B_MON_DC_RIGHTS); - - printf("\tfrom: %d.%d.%d.%d, rights = %x\n", - (who >> 24) & 0x00ff, (who >> 16) & 0x00ff, (who >> 8) & 0x00ff, who & 0x00ff, - rights); - - sub_state++; - - if (sub_state >= sub_state_count) - { - state = 2; - print_menu(); - } - break; - - default: - printf("unknown event from remote: local state = %d, evnt = %x, len = %d\n", - state, I4B_GET_2B(msg, I4B_MON_EVNT), len); - } -} - -/* - * Process input from user - */ -static void handle_input() -{ - char buf[1024]; - int channel; - - fgets(buf, sizeof buf, stdin); - - switch (atoi(buf)) - { - case 1: - { - BYTE cmd[I4B_MON_DUMPRIGHTS_SIZE]; - I4B_PREP_CMD(cmd, I4B_MON_DUMPRIGHTS_CODE); - write(monsock, cmd, I4B_MON_DUMPRIGHTS_SIZE); - } - break; - - case 2: - { - BYTE cmd[I4B_MON_DUMPMCONS_SIZE]; - I4B_PREP_CMD(cmd, I4B_MON_DUMPMCONS_CODE); - write(monsock, cmd, I4B_MON_DUMPMCONS_SIZE); - } - break; - - case 3: - { - BYTE cmd[I4B_MON_CFGREREAD_SIZE]; - I4B_PREP_CMD(cmd, I4B_MON_CFGREREAD_CODE); - write(monsock, cmd, I4B_MON_CFGREREAD_SIZE); - } - break; - - case 4: - { - BYTE cmd[I4B_MON_HANGUP_SIZE]; - I4B_PREP_CMD(cmd, I4B_MON_HANGUP_CODE); - printf("Which channel do you wish to hangup? "); - fgets(buf, sizeof buf, stdin); - channel = atoi(buf); - I4B_PUT_4B(cmd, I4B_MON_HANGUP_CHANNEL, channel); - write(monsock, cmd, I4B_MON_HANGUP_SIZE); - } - break; - - case 9: - close(monsock); - exit(0); - break; - - default: - print_menu(); - break; - } -} - -/* - * Display menu - */ -static void print_menu() -{ - printf("Menu: <1> display rights, <2> display monitor connections,\n"); - printf(" <3> reread config file, <4> hangup \n"); - printf(" <9> quit isdnmonitor\n"); -} diff --git a/usr.sbin/i4b/isdnmonitor/monitor.h b/usr.sbin/i4b/isdnmonitor/monitor.h deleted file mode 100644 index 0025449eb2bda..0000000000000 --- a/usr.sbin/i4b/isdnmonitor/monitor.h +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 1998 Martin Husemann. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - network monitor protocl definition - * ----------------------------------------------- - * - * $Id: monitor.h,v 1.4 1998/08/10 13:55:32 hm Exp $ - * - * last edit-date: [Mon Aug 3 06:52:06 1998] - * - * -mh created - * -hm checking in - * -hm ported to HPUX 10.10 - * - *---------------------------------------------------------------------------*/ - -#ifndef MONITOR_H -#define MONITOR_H - -#define DEF_MONPORT 451 /* default monitor TCP port */ - -#ifdef __hpux -#define u_int8_t ubit8 -#define u_int32_t ubit32 -#endif -#ifdef _WIN32 -#define u_int8_t BYTE -#define u_in32_t DWORD -#endif - -/* - * The monitor client connects to the isdnd daemon process via a tcp/ip - * connection from a remote machine or via a local (unix domain) socket. - * The daemon accepts multiple connections and verifies access rights. - * On connection establishment the daemon sends initial data telling - * the client the current configuration: number and type of available - * controllers, current connections, channel and interface states - * and the clients access privileges. The client sends an event mask - * telling the daemon which events it is interested in. If the client - * has appropriate rights he may send commands to the daemon. - * - * All multi-byte values are in network byte order! - */ - -/* All data packets transfered are declared as arrays of BYTE */ -#define BYTE u_int8_t - -/* max stringlength used in this protocol */ -#define I4B_MAX_MON_STRING 256 - -/* max command size from client to server */ -#define I4B_MAX_MON_CLIENT_CMD 16 - -/* Version of the monitor protocol described here */ -#define MPROT_VERSION 0 /* major version no */ -#define MPROT_REL 1 /* release no */ -/* - * We intend to keep different versions of monitor client and isdnd - * interoperable as long as possible. We do not, however, even try - * to do this during early alpha or beta release phases. If you run - * developement versions at this stage, make sure all your clients - * and servers run the same version! - */ - -/* - * Client access rights - */ -#define I4B_CA_COMMAND_FULL 1 /* may send any command */ -#define I4B_CA_COMMAND_RESTRICTED 2 /* may send 'harmless' commands */ -#define I4B_CA_EVNT_CHANSTATE 16 /* may watch b-channel states */ -#define I4B_CA_EVNT_CALLIN 32 /* may watch incoming calls */ -#define I4B_CA_EVNT_CALLOUT 64 /* may watch outgoing calls */ -#define I4B_CA_EVNT_I4B 128 /* may watch isdnd actions */ - -/* - * General layout of a command packet. All commands have this common - * prefix. It is prepared by the macro I4B_PREP_CMD (s.b.) - */ -#define I4B_MON_CMD 0 /* 2 byte: command code */ -#define I4B_MON_CMD_LEN 2 /* 2 byte: packet length */ -#define I4B_MON_CMD_HDR 4 /* size of header */ - -/* - * Currently events look the same as commands. We do not make - * any guarantee this will remain the same, so a different set - * of macros is used when describing events. Events are prepared - * by I4B_PREP_EVNT (s.b.) - */ -#define I4B_MON_EVNT 0 /* 2 byte: event code */ -#define I4B_MON_EVNT_LEN 2 /* 2 byte: packet length */ -#define I4B_MON_EVNT_HDR 4 /* size of header */ - -/* Initial data send by daemon after connection is established */ -#define I4B_MON_IDATA_SIZE I4B_MON_EVNT_HDR+10 -#define I4B_MON_IDATA_CODE 0 /* event code */ -#define I4B_MON_IDATA_VERSMAJOR I4B_MON_EVNT_HDR+0 /* 2 byte: isdnd major version */ -#define I4B_MON_IDATA_VERSMINOR I4B_MON_EVNT_HDR+2 /* 2 byte: isdnd minor version */ -#define I4B_MON_IDATA_NUMCTRL I4B_MON_EVNT_HDR+4 /* 2 byte: number of controllers */ -#define I4B_MON_IDATA_CLACCESS I4B_MON_EVNT_HDR+6 /* 4 byte: client rights */ - -/* followed by this for every controller */ -#define I4B_MON_ICTRL_SIZE I4B_MON_EVNT_HDR+I4B_MAX_MON_STRING+8 -#define I4B_MON_ICTRL_CODE 1 /* event code */ -#define I4B_MON_ICTRL_NAME I4B_MON_EVNT_HDR+0 /* string: name of controller */ -#define I4B_MON_ICTRL_BUSID I4B_MON_EVNT_HDR+I4B_MAX_MON_STRING+0 /* 2 byte: isdn bus id (reservered) */ -#define I4B_MON_ICTRL_FLAGS I4B_MON_EVNT_HDR+I4B_MAX_MON_STRING+2 /* 4 byte: controller flags (not yet defined) */ -#define I4B_MON_ICTRL_NCHAN I4B_MON_EVNT_HDR+I4B_MAX_MON_STRING+6 /* 2 byte: number of b channels on this controller */ - -/* The client sets it's protocol version and event mask (usualy once after - * connection establishement) */ -#define I4B_MON_CCMD_SETMASK 0x7e /* command code */ -#define I4B_MON_ICLIENT_SIZE I4B_MON_CMD_HDR+8 -#define I4B_MON_ICLIENT_VERMAJOR I4B_MON_CMD_HDR+0 /* 2 byte: protocol major version (always 0 for now) */ -#define I4B_MON_ICLIENT_VERMINOR I4B_MON_CMD_HDR+2 /* 2 byte: protocol minor version (always 0 for now) */ -#define I4B_MON_ICLIENT_EVENTS I4B_MON_CMD_HDR+4 /* 4 byte: client event mask */ - -/* The client requests a list of monitor rights */ -#define I4B_MON_DUMPRIGHTS_CODE 1 -#define I4B_MON_DUMPRIGHTS_SIZE I4B_MON_CMD_HDR /* no parameters */ - -/* in response to a I4B_MON_DUMPRIGHTS_CODE command, the daemon sends - * this event: */ -#define I4B_MON_DRINI_CODE 2 /* event code */ -#define I4B_MON_DRINI_SIZE I4B_MON_EVNT_HDR+2 /* size of packet */ -#define I4B_MON_DRINI_COUNT I4B_MON_EVNT_HDR+0 /* 2 byte: number of records */ - -/* followed by this for each record anounced above */ -#define I4B_MON_DR_CODE 3 -#define I4B_MON_DR_SIZE I4B_MON_EVNT_HDR+13 -#define I4B_MON_DR_RIGHTS I4B_MON_EVNT_HDR+0 /* 4 byte: rights mask */ -#define I4B_MON_DR_NET I4B_MON_EVNT_HDR+4 /* 4 byte: network address */ -#define I4B_MON_DR_MASK I4B_MON_EVNT_HDR+8 /* 4 byte: network mask */ -#define I4B_MON_DR_LOCAL I4B_MON_EVNT_HDR+12 /* 1 byte: non-zero if local socket */ - -/* The client requests a list of monitor connections */ -#define I4B_MON_DUMPMCONS_CODE 2 -#define I4B_MON_DUMPMCONS_SIZE I4B_MON_CMD_HDR /* no parameters */ - -/* in response to a I4B_MON_DUMPMCONS_CODE command, the daemon sends - * this event: */ -#define I4B_MON_DCINI_CODE 4 /* event code */ -#define I4B_MON_DCINI_SIZE I4B_MON_EVNT_HDR+2 /* size of packet */ -#define I4B_MON_DCINI_COUNT I4B_MON_EVNT_HDR+0 /* 2 byte: number of records */ - -/* followed by this for each record anounced above */ -#define I4B_MON_DC_CODE 5 -#define I4B_MON_DC_SIZE I4B_MON_EVNT_HDR+8 -#define I4B_MON_DC_RIGHTS I4B_MON_EVNT_HDR+0 /* 4 byte: rights mask */ -#define I4B_MON_DC_WHO I4B_MON_EVNT_HDR+4 /* 4 byte: network address */ - -/* The client requests a config file rescan */ -#define I4B_MON_CFGREREAD_CODE 3 -#define I4B_MON_CFGREREAD_SIZE I4B_MON_CMD_HDR /* no parameters */ - -/* The client requests to hangup a connection */ -#define I4B_MON_HANGUP_CODE 4 -#define I4B_MON_HANGUP_SIZE I4B_MON_CMD_HDR+4 -#define I4B_MON_HANGUP_CHANNEL I4B_MON_CMD_HDR+0 /* channel to drop */ - -/* The daemon sends a logfile event */ -#define I4B_MON_LOGEVNT_CODE 6 -#define I4B_MON_LOGEVNT_SIZE I4B_MON_EVNT_HDR+8+2*I4B_MAX_MON_STRING -#define I4B_MON_LOGEVNT_TSTAMP I4B_MON_EVNT_HDR+0 /* 4 byte: timestamp */ -#define I4B_MON_LOGEVNT_PRIO I4B_MON_EVNT_HDR+4 /* 4 byte: syslog priority */ -#define I4B_MON_LOGEVNT_WHAT I4B_MON_EVNT_HDR+8 /* followed by 2 strings: 'what' and 'message' */ -#define I4B_MON_LOGEVNT_MSG I4B_MON_EVNT_HDR+8+I4B_MAX_MON_STRING - -/* The daemon sends a charge event */ -#define I4B_MON_CHRG_CODE 7 -#define I4B_MON_CHRG_SIZE I4B_MON_EVNT_HDR+16 -#define I4B_MON_CHRG_TSTAMP I4B_MON_EVNT_HDR+0 /* 4 byte: timestamp */ -#define I4B_MON_CHRG_CHANNEL I4B_MON_EVNT_HDR+4 /* 4 byte: channel charged */ -#define I4B_MON_CHRG_UNITS I4B_MON_EVNT_HDR+8 /* 4 byte: new charge value */ -#define I4B_MON_CHRG_ESTIMATED I4B_MON_EVNT_HDR+12 /* 4 byte: 0 = charge by network, 1 = calculated estimate */ - -/* The daemon sends a connect event */ -#define I4B_MON_CONNECT_CODE 8 -#define I4B_MON_CONNECT_SIZE I4B_MON_EVNT_HDR+12+4*I4B_MAX_MON_STRING -#define I4B_MON_CONNECT_TSTAMP I4B_MON_EVNT_HDR+0 /* 4 byte: time stamp */ -#define I4B_MON_CONNECT_DIR I4B_MON_EVNT_HDR+4 /* 4 byte: direction (0 = incoming, 1 = outgoing) */ -#define I4B_MON_CONNECT_CHANNEL I4B_MON_EVNT_HDR+8 /* 4 byte: channel connected */ -#define I4B_MON_CONNECT_CFGNAME I4B_MON_EVNT_HDR+12 /* name of config entry */ -#define I4B_MON_CONNECT_DEVNAME I4B_MON_EVNT_HDR+12+I4B_MAX_MON_STRING /* name of device used for connection */ -#define I4B_MON_CONNECT_REMPHONE I4B_MON_EVNT_HDR+12+2*I4B_MAX_MON_STRING /* remote phone no. */ -#define I4B_MON_CONNECT_LOCPHONE I4B_MON_EVNT_HDR+12+3*I4B_MAX_MON_STRING /* local phone no. */ - -/* The daemon sends a disconnect event */ -#define I4B_MON_DISCONNECT_CODE 9 -#define I4B_MON_DISCONNECT_SIZE I4B_MON_EVNT_HDR+8 -#define I4B_MON_DISCONNECT_TSTAMP I4B_MON_EVNT_HDR+0 /* 4 byte: time stamp */ -#define I4B_MON_DISCONNECT_CHANNEL I4B_MON_EVNT_HDR+4 /* 4 byte: channel disconnected */ - -/* The daemon sends an up/down event */ -#define I4B_MON_UPDOWN_CODE 10 -#define I4B_MON_UPDOWN_SIZE I4B_MON_EVNT_HDR+12 -#define I4B_MON_UPDOWN_TSTAMP I4B_MON_EVNT_HDR+0 /* 4 byte: time stamp */ -#define I4B_MON_UPDOWN_CHANNEL I4B_MON_EVNT_HDR+4 /* 4 byte: channel disconnected */ -#define I4B_MON_UPDOWN_ISUP I4B_MON_EVNT_HDR+8 /* 4 byte: interface is up */ - -/* macros for setup/decoding of protocol packets */ - -/* clear a record */ -#define I4B_CLEAR(r) memset(&(r), 0, sizeof(r)); - -/* prepare a record as event or command */ -#define I4B_PREP_EVNT(r, e) { \ - I4B_CLEAR(r); \ - I4B_PUT_2B(r, I4B_MON_EVNT, e); \ - I4B_PUT_2B(r, I4B_MON_EVNT_LEN, sizeof(r)); \ -} -#define I4B_PREP_CMD(r, c) { \ - I4B_CLEAR(r); \ - I4B_PUT_2B(r, I4B_MON_CMD, c); \ - I4B_PUT_2B(r, I4B_MON_CMD_LEN, sizeof(r)); \ -} - -/* put 1, 2 or 4 bytes in network byte order into a record at offset off */ -#define I4B_PUT_1B(r, off, val) { ((BYTE*)(r))[off] = (val) & 0x00ff; } -#define I4B_PUT_2B(r, off, val) { I4B_PUT_1B(r, off, val >> 8); I4B_PUT_1B(r, off+1, val); } -#define I4B_PUT_4B(r, off, val) { I4B_PUT_1B(r, off, val >> 24); I4B_PUT_1B(r, off+1, val >> 16); I4B_PUT_1B(r, off+2, val >> 8); I4B_PUT_1B(r, off+3, val); } - -/* get 1, 2 or 4 bytes in network byte order from a record at offset off */ -#define I4B_GET_1B(r, off) (((BYTE*)(r))[off]) -#define I4B_GET_2B(r, off) ((((BYTE*)(r))[off]) << 8) | (((BYTE*)(r))[off+1]) -#define I4B_GET_4B(r, off) ((((BYTE*)(r))[off]) << 24) | ((((BYTE*)(r))[off+1]) << 16) | ((((BYTE*)(r))[off+2]) << 8) | (((BYTE*)(r))[off+3]) - -/* put a string into recor r at offset off, make sure it's not to long - * and proper terminate it */ -#define I4B_PUT_STR(r, off, str) { \ - strncpy(r+off, str, I4B_MAX_MON_STRING); \ - r[off+I4B_MAX_MON_STRING-1] = (BYTE)0; } - -#endif /* MONITOR_H */ - diff --git a/usr.sbin/i4b/isdntel/Makefile b/usr.sbin/i4b/isdntel/Makefile deleted file mode 100644 index 7528571737155..0000000000000 --- a/usr.sbin/i4b/isdntel/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $Id$ - -PROG = isdntel -SRCS = main.c display.c files.c alias.c -DPADD = ${LIBNCURSES} ${LIBMYTINFO} -LDADD = -lncurses -lmytinfo -MAN8 = isdntel.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdntel/alias.c b/usr.sbin/i4b/isdntel/alias.c deleted file mode 100644 index fa02ea962cd4a..0000000000000 --- a/usr.sbin/i4b/isdntel/alias.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntel - isdn4bsd telephone answering machine support - * ====================================================== - * - * $Id: alias.c,v 1.5 1998/12/05 18:03:51 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:15:02 1998] - * - *----------------------------------------------------------------------------*/ - -#include "defs.h" -#include "alias.h" - -static struct alias *firsta = NULL; - -#define MAXBUFSZ 256 - -/*---------------------------------------------------------------------------* - * read in and init aliases - *---------------------------------------------------------------------------*/ -void -init_alias(char *filename) -{ - FILE *fp; - char buffer[MAXBUFSZ + 1]; - char number[MAXBUFSZ + 1]; - char name[MAXBUFSZ + 1]; - char *s, *d; - struct alias *newa = NULL; - struct alias *lasta = NULL; - - if((fp = fopen(filename, "r")) == NULL) - fatal("cannot open aliasfile %s!", filename); - - while((fgets(buffer, MAXBUFSZ, fp)) != NULL) - { - if(buffer[0] == '#' || buffer[0] == ' ' || - buffer[0] == '\t' || buffer[0] == '\n') - { - continue; - } - - s = buffer; - d = number; - - while(*s && (isdigit(*s))) - *d++ = *s++; - - *d = '\0'; - - while(*s && (isspace(*s))) - s++; - - d = name; - - while(*s && (isprint(*s))) - *d++ = *s++; - - *d = '\0'; - - if((strlen(number) > 1) && (strlen(name) > 1)) - { - if((newa = (struct alias *) malloc(sizeof(struct alias))) == NULL) - fatal("malloc failed for struct alias"); - if((newa->number = (char *) malloc(strlen(number)+1)) == NULL) - fatal("malloc failed for number alias"); - if((newa->name = (char *) malloc(strlen(name)+1)) == NULL) - fatal("malloc failed for name alias"); - strcpy(newa->name, name); - strcpy(newa->number, number); - newa->next = NULL; - - if(firsta == NULL) - { - firsta = newa; - } - else - { - lasta->next = newa; - } - lasta = newa; - } - } - fclose(fp); -} - -/*---------------------------------------------------------------------------* - * read in and init aliases - *---------------------------------------------------------------------------*/ -char * -get_alias(char *number) -{ - struct alias *ca = NULL; - - if(firsta == NULL) - return(NULL); - - ca = firsta; - - for(;;) - { - if(strlen(number) == strlen(ca->number)) - { - if(!(strcmp(number, ca->number))) - return(ca->name); - } - if(ca->next == NULL) - break; - ca = ca->next; - } - return(NULL); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntel/alias.h b/usr.sbin/i4b/isdntel/alias.h deleted file mode 100644 index 98b91daf8feb4..0000000000000 --- a/usr.sbin/i4b/isdntel/alias.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdn4bsd common alias file handling header - * ========================================== - * - * $Id: alias.h,v 1.3 1998/12/05 18:03:52 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:15:13 1998] - * - *----------------------------------------------------------------------------*/ - -#ifndef _ALIAS_H_ -#define _ALIAS_H_ - -#define ALIASFILE "/etc/isdn/isdntel.alias" - -struct alias { - char *number; /* telephone number string */ - char *name; /* name string */ - struct alias *next; /* ptr to next alias */ -}; - -#endif /* _ALIAS_H_ */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdntel/defs.h b/usr.sbin/i4b/isdntel/defs.h deleted file mode 100644 index e9233c370355f..0000000000000 --- a/usr.sbin/i4b/isdntel/defs.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntel - isdn4bsd telephone answering support - * ============================================== - * - * $Id: defs.h,v 1.6 1998/12/05 18:03:53 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:15:26 1998] - * - *----------------------------------------------------------------------------*/ - -#include <ncurses.h> -#include <stdio.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> -#include <unistd.h> -#include <fcntl.h> -#include <ctype.h> -#include <sys/time.h> -#if defined(__FreeBSD__) && __FreeBSD__ >= 3 -#include <dirent.h> -#else -#include <sys/dir.h> -#endif -#include <sys/param.h> - -#define VERSION "1" /* version number */ -#define REL "11" /* release number */ - -#define GOOD 0 -#define ERROR (-1) -#define WARNING (-2) - -#define SPOOLDIR "/var/isdn" -#define PLAYCMD "cat %s | alaw2ulaw >/dev/audio" - -/* reread timeout in seconds */ - -#define REREADTIMEOUT 60 - -/* window dimensions */ - -#define START_O 3 /* main window start */ - -#define DAT_POS 0 -#define TIM_POS (DAT_POS+10) -#define DST_POS (TIM_POS+8) -#define SRC_POS (DST_POS+17) -#define ALI_POS (SRC_POS+17) -#define SEC_POS (ALI_POS+21) -#define LAST_POS (SEC_POS+5) - -/* fullscreen mode menu window */ - -#define WMITEMS 5 /* no of items */ -#define WMENU_LEN 18 /* window width */ -#define WMENU_HGT (WMITEMS+4) /* window height */ -#define WMENU_TITLE "Command" -#define WMENU_POSLN 8 /* window position: lines */ -#define WMENU_POSCO 20 /* window position: columns */ - -#define CR 0x0d -#define LF 0x0a -#define TAB 0x09 -#define CNTRL_D 0x04 -#define CNTRL_L 0x0c - -struct onefile { - char *fname; /* filename */ - char *date; - char *time; - char *srcnumber; - char *dstnumber; - char *seconds; - char *alias; - int len; - struct onefile *next; /* ptr to next entry */ - struct onefile *prev; /* prt to previous entry */ -}; - -#ifdef MAIN - -int curses_ready = 0; /* flag, curses display is initialized */ - -struct onefile *cur_file = NULL;/* the CURRENT filename */ -struct onefile *first = NULL; /* init dir-list head-ptr */ -struct onefile *last = NULL; /* init dir-list tail-ptr */ - -WINDOW *main_w; /* curses main window pointer */ - -int nofiles = 0; -int cur_pos = 0; - -char *spooldir = SPOOLDIR; -char *playstring = PLAYCMD; - -#else - -extern int curses_ready; - -extern struct onefile *cur_file; -extern struct onefile *first; -extern struct onefile *last; - -extern WINDOW *main_w; - -extern int nofiles; -extern int cur_pos; - -extern char *spooldir; -extern char *playstring; - -#endif - -extern void init_alias( char *filename ); -extern void init_files( int inipos ); -extern void init_screen ( void ); -extern void do_menu ( void ); -extern int fill_list( void ); -extern char *get_alias( char *number ); -extern int main ( int argc, char **argv ); -extern void do_quit ( int exitval ); -extern void fatal ( char *fmt, ... ); -extern void error ( char *fmt, ... ); -extern void play ( struct onefile * ); -extern void delete ( struct onefile * ); -extern void reread( void ); - -/* EOF */ diff --git a/usr.sbin/i4b/isdntel/display.c b/usr.sbin/i4b/isdntel/display.c deleted file mode 100644 index 1cc0034f01cf0..0000000000000 --- a/usr.sbin/i4b/isdntel/display.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntel - isdn4bsd telephone answering machine support - * ====================================================== - * - * $Id: display.c,v 1.4 1998/12/05 18:03:55 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:15:40 1998] - * - *----------------------------------------------------------------------------*/ - -#include "defs.h" - -static char *helpstr = "Enter Control-D to exit program or RETURN for command window"; - -/*---------------------------------------------------------------------------* - * init curses fullscreen display - *---------------------------------------------------------------------------*/ -void -init_screen(void) -{ - char buffer[512]; - - initscr(); /* curses init */ - - if((COLS < 80) || (LINES < 24)) - fatal(0, "ERROR, minimal screensize must be 80x24, is %dx%d, terminating!", COLS, LINES); - - - if((main_w = newwin(LINES-START_O-2, COLS, START_O, 0)) == NULL) - fatal("ERROR, curses init main window, terminating!"); - - raw(); /* raw input */ - noecho(); /* do not echo input */ - keypad(stdscr, TRUE); /* use special keys */ - keypad(main_w, TRUE); /* use special keys */ - scrollok(main_w, TRUE); - - sprintf(buffer, " isdntel %s.%s ", VERSION, REL); - - move(0, 0); - standout(); - hline(ACS_HLINE, 5); - move(0, 5); - addstr(buffer); - move(0, 5 + strlen(buffer)); - hline(ACS_HLINE, 256); - standend(); - - move(1, 0); - addstr("Date Time Called Party Calling Party Alias Length"); - /* 31.12.96 16:45:12 1234567890123456 1234567890123456 12345678901234567890 123456 */ - - move(2, 0); - hline(ACS_HLINE, 256); - - move(LINES-2, 0); - hline(ACS_HLINE, 256); - - mvaddstr(LINES-1, (COLS / 2) - (strlen(helpstr) / 2), helpstr); - - refresh(); - - wrefresh(main_w); - - curses_ready = 1; -} - -/*---------------------------------------------------------------------------* - * curses menu for fullscreen command mode - *---------------------------------------------------------------------------*/ -void -do_menu(void) -{ - static char *menu[WMITEMS] = - { - "Play File", -#define PLAY 0 - "Delete File", -#define DELETE 1 - "Re-Read Spool", -#define REREAD 2 - "Refresh Screen", -#define REFRESH 3 - "Exit Program", -#define EXIT 4 - }; - - WINDOW *menu_w; - int c; - int mpos; - - /* create a new window in the lower screen area */ - - if((menu_w = newwin(WMENU_HGT, WMENU_LEN, WMENU_POSLN, WMENU_POSCO )) == NULL) - return; - - keypad(menu_w, TRUE); /* use special keys */ - - /* draw border around the window */ - - box(menu_w, 0, 0); - - /* add a title */ - - wstandout(menu_w); - mvwaddstr(menu_w, 0, (WMENU_LEN / 2) - (strlen(WMENU_TITLE) / 2), WMENU_TITLE); - wstandend(menu_w); - - /* fill the window with the menu options */ - - for(mpos=0; mpos <= (WMITEMS-1); mpos++) - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - - /* highlight the first menu option */ - - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - - /* input loop */ - - for(;;) - { - wrefresh(menu_w); - - c = wgetch(menu_w); - - switch(c) - { - case TAB: - case KEY_DOWN: /* down-move cursor */ - case ' ': - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - mpos++; - if(mpos >= WMITEMS) - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - break; - - case KEY_UP: /* up-move cursor */ - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - if(mpos) - mpos--; - else - mpos = WMITEMS-1; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - break; - - case 'R': - case 'r': - wrefresh(curscr); - goto mexit; - - case 'E': - case 'e': - case 'Q': - case 'q': - case 'X': - case 'x': - do_quit(0); - goto mexit; - break; - - case 'P': - case 'p': - play(cur_file); - goto mexit; - break; - - case 'D': - case 'd': - delete(cur_file); - goto mexit; - break; - - case CR: - case LF: /* exec highlighted option */ -#ifdef KEY_ENTER - case KEY_ENTER: -#endif - switch(mpos) - { - case PLAY: - play(cur_file); - goto mexit; - break; - case DELETE: - delete(cur_file); - goto mexit; - break; - case REREAD: - reread(); - goto mexit; - break; - case REFRESH: - wrefresh(curscr); - break; - case EXIT: - do_quit(0); - break; - } - goto mexit; - break; - - default: - goto mexit; - break; - } - } - -mexit: - /* delete the menu window */ - - delwin(menu_w); - - /* re-display the original lower window contents */ - - touchwin(main_w); - wrefresh(main_w); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntel/files.c b/usr.sbin/i4b/isdntel/files.c deleted file mode 100644 index ea153f5ee0064..0000000000000 --- a/usr.sbin/i4b/isdntel/files.c +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntel - isdn4bsd telephone answering machine support - * ====================================================== - * - * $Id: files.c,v 1.6 1998/12/05 18:03:56 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:15:57 1998] - * - *----------------------------------------------------------------------------*/ - -#include "defs.h" - -/*---------------------------------------------------------------------------* - * create a doubly linked list in sorted order, return pointer to new - * first element of list - *---------------------------------------------------------------------------*/ -struct onefile *store - (register struct onefile *new, /* new entry to store into list */ - register struct onefile *top) /* current first entry in list */ -{ - register struct onefile *old, *p; - - if (last == NULL) /* enter very first element ? */ - { - new->next = NULL; - new->prev = NULL; - last = new; /* init last */ - return (new); /* return new first */ - } - p = top; /* p = old first element */ - old = NULL; - while (p) - { - if ((strcmp(p->fname, new->fname)) < 0) /* current less new ? */ - { - old = p; - p = p->next; - } - else - { /* current >= new */ - - if (p->prev) - { - p->prev->next = new; - new->next = p; - new->prev = p->prev; - p->prev = new; - return (top); - } - new->next = p; - new->prev = NULL; - p->prev = new; - return (new); - } - } - old->next = new; - new->next = NULL; - new->prev = old; - last = new; - return (first); -} - -/*---------------------------------------------------------------------------* - * read current directory and build up a doubly linked sorted list - *---------------------------------------------------------------------------*/ -int -fill_list(void) -{ -#if defined(__FreeBSD__) && __FreeBSD__ >= 3 - register struct dirent *dp; -#else - register struct direct *dp; -#endif - register struct onefile *new_entry; - register DIR *dirp; - int flcnt = 0; - char tmp[80]; - char *s, *d; - - if ((dirp = opendir(spooldir)) == NULL) - fatal("cannot open spooldirectory %s!\n", spooldir); - - for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) - { - if(!isdigit(*(dp->d_name))) - continue; - - if ((new_entry = (struct onefile *) malloc(sizeof(struct onefile))) == NULL) - { - fatal("files.c, fill_list(): structure onefile malloc failed"); - } - - /* alloc filename memory and copy name into it */ - - if ((new_entry->fname = (char *) malloc(strlen(dp->d_name) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc filename string memory failed"); - } - - strcpy(new_entry->fname, dp->d_name); - - /* fill in remaining fields from filename */ - - tmp[0] = dp->d_name[4]; /* day msb */ - tmp[1] = dp->d_name[5]; /* day lsb */ - tmp[2] = '.'; - tmp[3] = dp->d_name[2]; /* month msb */ - tmp[4] = dp->d_name[3]; /* month lsb */ - tmp[5] = '.'; - tmp[6] = dp->d_name[0]; /* year msb */ - tmp[7] = dp->d_name[1]; /* year lsb */ - tmp[8] = '\0'; - - if((new_entry->date = (char *) malloc(strlen(tmp) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc date string memory failed"); - } - - strcpy(new_entry->date, tmp); - - tmp[0] = dp->d_name[6]; /* hour msb */ - tmp[1] = dp->d_name[7]; /* hour lsb */ - tmp[2] = ':'; - tmp[3] = dp->d_name[8]; /* minute msb */ - tmp[4] = dp->d_name[9]; /* minute lsb */ - tmp[5] = ':'; - tmp[6] = dp->d_name[10]; /* second msb */ - tmp[7] = dp->d_name[11]; /* second lsb */ - tmp[8] = '\0'; - - if((new_entry->time = (char *) malloc(strlen(tmp) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc time string memory failed"); - } - - strcpy(new_entry->time, tmp); - - /* destination number */ - - s = &dp->d_name[13]; - d = &tmp[0]; - - while(*s && (*s != '-')) - *d++ = *s++; - - *d = '\0'; - - if((new_entry->dstnumber = (char *) malloc(strlen(tmp) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc dstnumber string memory failed"); - } - - strcpy(new_entry->dstnumber, tmp); - - /* source number */ - - s++; - d = &tmp[0]; - - while(*s && (*s != '-')) - *d++ = *s++; - - *d = '\0'; - - if((new_entry->srcnumber = (char *) malloc(strlen(tmp) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc srcnumber string memory failed"); - } - - strcpy(new_entry->srcnumber, tmp); - - /* length in seconds */ - - s++; - d = &tmp[0]; - - while(*s && (*s != '-')) - *d++ = *s++; - - *d = '\0'; - - if((new_entry->seconds = (char *) malloc(strlen(tmp) + 1)) == NULL) - { - fatal("files.c, fill_list(): malloc seconds string memory failed"); - } - - strcpy(new_entry->seconds, tmp); - - /* search for alias and add if found */ - - new_entry->alias = get_alias(new_entry->srcnumber); - - /* sort entry into linked list */ - - first = store(new_entry, first); - - flcnt++; /* increment file count */ - } - closedir(dirp); /* close current dir */ - return(flcnt); /* ok return */ -} - -/*---------------------------------------------------------------------------* - * free the current malloc'ed list - *---------------------------------------------------------------------------*/ -void -free_list(void) -{ - register struct onefile *dir; - register struct onefile *tmp; - - dir = first; /* start of linked list */ - - while (dir) /* free all */ - { - tmp = dir->next; /* save ptr to next entry */ - free(dir->fname); /* free filename space */ - free(dir->date); - free(dir->time); - free(dir->srcnumber); - free(dir->dstnumber); - free(dir->seconds); - free(dir); /* free struct space */ - dir = tmp; /* ptr = ptr to next entry */ - } - first = NULL; /* first ptr = NULL */ - last = NULL; /* last ptr = NULL */ -} - -/*---------------------------------------------------------------------------* - * delete a file - *---------------------------------------------------------------------------*/ -void -delete(struct onefile *this) -{ - char buffer[MAXPATHLEN+1]; - - if(this == NULL) - return; - - sprintf(buffer, "%s", this->fname); - - unlink(buffer); - - free_list(); - - wclear(main_w); - - init_files(cur_pos); -} - -/*---------------------------------------------------------------------------* - * reread the spool directory - *---------------------------------------------------------------------------*/ -void -reread(void) -{ - free_list(); - - wclear(main_w); - - init_files(cur_pos); -} - -/*---------------------------------------------------------------------------* - * play a file - *---------------------------------------------------------------------------*/ -void -play(struct onefile *this) -{ - char buffer[MAXPATHLEN+1]; - - if(this == NULL) - return; - - sprintf(buffer, playstring, this->fname); - - system(buffer); -} - -/*---------------------------------- EOF -------------------------------------*/ diff --git a/usr.sbin/i4b/isdntel/isdntel.8 b/usr.sbin/i4b/isdntel/isdntel.8 deleted file mode 100644 index d87c848a8bc06..0000000000000 --- a/usr.sbin/i4b/isdntel/isdntel.8 +++ /dev/null @@ -1,94 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" last edit-date: [Sat Dec 5 18:16:19 1998] -.\" -.\" $Id: isdntel.8,v 1.6 1998/12/05 18:03:58 hm Exp $ -.\" -.Dd July 11, 1998 -.Dt isdntel 8 -.Sh NAME -.Nm isdntel -.Nd isdn4bsd telephone answering management utility -.Sh SYNOPSIS -.Nm isdntel -.Op Fl a Ar aliasfile -.Op Fl d Ar spooldir -.Op Fl p Ar playcommand -.Op Fl t Ar timeout -.Sh DESCRIPTION -.Nm -is used to provide an "answering machine" functionality for incoming -telephone voice messages. -.Pp -The following options are supported: -.Bl -tag -width Ds -.It Fl a -Use -.Ar aliasfile -as the pathname for an aliasfile containing aliases for phone numbers. The -default path is -.Em /etc/isdn/isdntel.alias . -The format of an alias entry is the number string followed by one or more -spaces or tabs. The rest of the line is taken as the alias string. Comments -are introduced by a leading blank, tab or "#" character. -.It Fl d -Use -.Ar spooldir -as the directory where the incoming voice messages are stored by the -"answ" script called by -.Xr isdnd 8 . -This defaults to the directory -.Em /var/isdn . -The format of a voice message filename is: -.Pp -.Dl YYMMDDhhmmss-dest_number-source_number-length_in_secs -.It Fl p -Use -.Ar playcommand -as the command string to execute for playing a voice message to some audio -output facility. The characters -.Em %s -are replaced by the currently selected filename. The default string is -.Em cat %s | alaw2ulaw >/dev/audio -.It Fl t -The value for -.Ar timeout -specifies the time in seconds the program rereads the spool directory -when there is no keyboard activity. -.El -.Pp -The screen output should be obvious. If in doubt, consult the source. -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnd.rc 5 -.Xr i4btel 4 - -.Sh BUGS -Still two or more left. - -.Sh AUTHOR -The -.Nm -utility and this manual page were written by Hellmuth Michaelis (hm@kts.org) diff --git a/usr.sbin/i4b/isdntel/main.c b/usr.sbin/i4b/isdntel/main.c deleted file mode 100644 index fd6a3b2ccf563..0000000000000 --- a/usr.sbin/i4b/isdntel/main.c +++ /dev/null @@ -1,395 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntel - isdn4bsd telephone answering machine support - * ====================================================== - * - * $Id: main.c,v 1.6 1998/12/05 18:03:59 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:16:33 1998] - * - *----------------------------------------------------------------------------*/ - -#define MAIN -#include "defs.h" -#include "alias.h" - -static void usage( void ); - -static int top_dis = 0; -static int bot_dis = 0; -static int cur_pos_scr = 0; - -static void makecurrent(int cur_pos, struct onefile *cur_file, int cold); - -/*---------------------------------------------------------------------------* - * program entry - *---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int i; - int kchar; - - char *spooldir = SPOOLDIR; - char *playstring = PLAYCMD; - char *aliasfile = ALIASFILE; - int rrtimeout = REREADTIMEOUT; - - extern char *optarg; - - while ((i = getopt(argc, argv, "a:d:p:t:?")) != EOF) - { - switch (i) - { - case 'a': - aliasfile = optarg; - break; - - case 'd': - spooldir = optarg; - break; - - case 'p': - playstring = optarg; - break; - - case 't': - if(isdigit(*optarg)) - { - rrtimeout = strtoul(optarg, NULL, 10); - } - else - { - usage(); - } - break; - - case '?': - default: - usage(); - break; - } - } - - if(rrtimeout < 10) - rrtimeout = 10; - - if((chdir(spooldir)) != 0) - fatal("cannot change directory to spooldir %s!", spooldir); - - init_alias(aliasfile); - - init_screen(); - - init_files(0); - - /* go into loop */ - - for (;;) - { - fd_set set; - struct timeval timeout; - - FD_ZERO(&set); - FD_SET(STDIN_FILENO, &set); - timeout.tv_sec = rrtimeout; - timeout.tv_usec = 0; - - /* if no char is available within timeout, reread spool */ - - if((select(STDIN_FILENO + 1, &set, NULL, NULL, &timeout)) <= 0) - { - reread(); - continue; - } - - kchar = wgetch(main_w); /* get char */ - - switch (kchar) - { - case CR: - case LF: -#ifdef KEY_ENTER - case KEY_ENTER: -#endif - do_menu(); - break; - - case KEY_UP: /* up-move cursor */ - if(cur_file && cur_file->prev) - { - cur_file = cur_file->prev; - cur_pos--; - } - break; - - - case TAB: - case KEY_DOWN: /* down-move cursor */ - if(cur_file && cur_file->next) - { - cur_file = cur_file->next; - cur_pos++; - } - break; - - case KEY_HOME: /* move cursor to first dir */ - break; - - case KEY_LL: /* move cursor to last file */ - break; - - case CNTRL_D: - do_quit(0); - break; - - case CNTRL_L: /* refresh */ - touchwin(curscr); - wrefresh(curscr); - break; - - } - makecurrent(cur_pos, cur_file, 0); - } - - do_quit(0); - - return(0); -} - -/*---------------------------------------------------------------------------* - * handle horizontal selection bar movement - *---------------------------------------------------------------------------*/ -static void -makecurrent(int cur_pos, struct onefile *cur_file, int cold) -{ - static int lastpos; - static struct onefile *lastfile; - char buffer[256]; - - /* un-higlight current horizontal bar */ - - if(!cold && lastfile && cur_file) - { - sprintf(buffer, "%s %s %-16s %-16s %-20s %-6s%*s", - lastfile->date, lastfile->time, - lastfile->dstnumber, lastfile->srcnumber, - lastfile->alias == NULL ? "-/-" : lastfile->alias, - lastfile->seconds, - COLS - LAST_POS - 2, ""); - - wattroff(main_w, A_REVERSE); - mvwprintw(main_w, lastpos, 0, "%s", buffer); - wattroff(main_w, A_REVERSE); - } - - if(cur_file == NULL) - { - lastpos = cur_pos_scr; - lastfile = cur_file; - return; - } - - /* have to scroll up or down ? */ - - if(cur_pos >= bot_dis) - { - /* scroll up */ - - wscrl(main_w, 1); - - bot_dis++; - top_dis++; - cur_pos_scr = LINES-START_O-3; - } - else if(cur_pos < top_dis) - { - /* scroll down */ - - wscrl(main_w, -1); - - bot_dis--; - top_dis--; - cur_pos_scr = 0; - } - else - { - cur_pos_scr = cur_pos - top_dis; - } - - sprintf(buffer, "%s %s %-16s %-16s %-20s %-6s%*s", - cur_file->date, cur_file->time, - cur_file->dstnumber, cur_file->srcnumber, - cur_file->alias == NULL ? "-/-" : cur_file->alias, - cur_file->seconds, - COLS - LAST_POS - 2, ""); - - wattron(main_w, A_REVERSE); - mvwprintw(main_w, cur_pos_scr, 0, "%s", buffer); - wattroff(main_w, A_REVERSE); - - lastpos = cur_pos_scr; - lastfile = cur_file; - - wrefresh(main_w); -} - -/*---------------------------------------------------------------------------* - * exit program - *---------------------------------------------------------------------------*/ -void -do_quit(int exitval) -{ - move(LINES-1, 0); - clrtoeol(); - refresh(); - endwin(); - exit(exitval); -} - -/*---------------------------------------------------------------------------* - * usage display and exit - *---------------------------------------------------------------------------*/ -static void -usage(void) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "isdntel - isdn telephone answering management support utility (version %s.%s)\n", VERSION, REL); - fprintf(stderr, " usage: isdntel -a <filename> -d <directory> -p <command> -t <timeout>\n"); - fprintf(stderr, " -a <filename> use filename as alias file\n"); - fprintf(stderr, " -d <directory> use directory as spool directory\n"); - fprintf(stderr, " -p <command> specify commandline for play command\n"); - fprintf(stderr, " -t <timeout> spool directory reread timeout in seconds\n"); - fprintf(stderr, "\n"); - exit(1); -} - -/*---------------------------------------------------------------------------* - * fatal error exit - *---------------------------------------------------------------------------*/ -void -fatal(char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - - if(curses_ready) - { - move(LINES-1, 0); - clrtoeol(); - refresh(); - endwin(); - } - - fprintf(stderr, "\nFatal error: "); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n\n"); - - va_end(ap); - - exit(1); -} - -/*---------------------------------------------------------------------------* - * error printing - *---------------------------------------------------------------------------*/ -void -error(char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - - if(curses_ready) - { - wprintw(main_w, "ERROR: "); - vwprintw(main_w, fmt, ap); - wprintw(main_w, "\n"); - wrefresh(main_w); - } - else - { - fprintf(stderr, "ERROR: "); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - } - - va_end(ap); -} - -/*---------------------------------------------------------------------------* - * read files and fill display - *---------------------------------------------------------------------------*/ -void -init_files(int inipos) -{ - int i; - - nofiles = fill_list(); - - top_dis = 0; - bot_dis = 0; - - cur_file = first; - - cur_pos = 0; - cur_pos_scr = 0; - - if(nofiles == 0) - return; - - for(i=0; (i < nofiles) && (i < (LINES-START_O-2)); i++) - { - mvwprintw(main_w, i, 0, "%s %s", cur_file->date, cur_file->time); - mvwprintw(main_w, i, DST_POS, "%s", cur_file->dstnumber); - mvwprintw(main_w, i, SRC_POS, "%s", cur_file->srcnumber); - mvwprintw(main_w, i, ALI_POS,"%s", cur_file->alias == NULL ? "-/-" : cur_file->alias); - mvwprintw(main_w, i, SEC_POS,"%s", cur_file->seconds); - - bot_dis++; - - if((cur_file = cur_file->next) == NULL) - break; - } - - cur_file = first; - - if(inipos) - { - for(i=0; i < inipos; i++) - { - if(cur_file->next != NULL) - cur_file = cur_file->next; - else - break; - } - } - makecurrent(cur_pos, cur_file, 1); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntelctl/Makefile b/usr.sbin/i4b/isdntelctl/Makefile deleted file mode 100644 index b38f2063671c3..0000000000000 --- a/usr.sbin/i4b/isdntelctl/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -PROG = isdntelctl -SRCS = main.c -MAN8 = isdntelctl.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdntelctl/isdntelctl.8 b/usr.sbin/i4b/isdntelctl/isdntelctl.8 deleted file mode 100644 index 2bd45d270b5c4..0000000000000 --- a/usr.sbin/i4b/isdntelctl/isdntelctl.8 +++ /dev/null @@ -1,78 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdntelctl.8,v 1.4 1998/12/14 10:31:55 hm Exp $ -.\" -.\" last edit-date: [Mon Dec 14 11:34:51 1998] -.\" -.Dd December 14, 1998 -.Dt isdntelctl 8 -.Sh NAME -.Nm isdntelctl -.Nd control isdn4bsd telephone sound format conversion -.Sh SYNOPSIS -.Nm -.Op Fl c -.Op Fl g -.Op Fl u Ar unit -.Op Fl A -.Op Fl U -.Sh DESCRIPTION -.Nm isdntelctl -is part of the isdn4bsd package and is used to configure the sound format -conversion facilities of the /dev/i4btel interfaces. -.Pp -The following options are available: -.Bl -tag -width Ds -.It Fl c -Clear the telephone input queue. -.It Fl g -Get the sound format currently in use. -.It Fl u -Set the /dev/i4btel unit number. The default value is zero to access -device /dev/i4btel0. -.It Fl A -Set sound format to A-Law. -.It Fl U -Set sound format to u-Law. -.Pp -.Sh FILES -/dev/i4btel<n> - -.Sh STANDARDS -A-Law and u-Law are specified in ITU Recommendation G.711. - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -isdntelctl -g -.Ed -.Pp -displays the currently used sound format for device /dev/i4btel0. - -.Sh AUTHOR -The -.Nm -utility and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/isdntelctl/main.c b/usr.sbin/i4b/isdntelctl/main.c deleted file mode 100644 index 4309b2497cea7..0000000000000 --- a/usr.sbin/i4b/isdntelctl/main.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * isdntelctl - i4b set telephone interface options - * ------------------------------------------------ - * - * $Id: main.c,v 1.4 1998/12/14 10:31:57 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:17:17 1998] - * - *---------------------------------------------------------------------------*/ - -#include <stdio.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <ctype.h> -#include <sys/stat.h> -#include <sys/wait.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/time.h> - -#include <machine/i4b_tel_ioctl.h> - -static void usage ( void ); - -#define I4BTELDEVICE "/dev/i4btel" - -int opt_get = 0; -int opt_unit = 0; -int opt_U = 0; -int opt_A = 0; -int opt_C = 0; - -/*---------------------------------------------------------------------------* - * program entry - *---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int c; - int ret; - int telfd; - char namebuffer[128]; - - while ((c = getopt(argc, argv, "cgu:AU?")) != EOF) - { - switch(c) - { - case 'c': - opt_C = 1; - break; - - case 'g': - opt_get = 1; - break; - - case 'u': - opt_unit = atoi(optarg); - if(opt_unit < 0 || opt_unit > 9) - usage(); - break; - - case 'A': - opt_A = 1; - break; - - case 'U': - opt_U = 1; - break; - - case '?': - default: - usage(); - break; - } - } - - if(opt_get == 0 && opt_U == 0 && opt_A && opt_C == 0) - { - opt_get = 1; - } - - if((opt_get + opt_U + opt_A + opt_C) > 1) - { - usage(); - } - - sprintf(namebuffer,"%s%d", I4BTELDEVICE, opt_unit); - - if((telfd = open(namebuffer, O_RDWR)) < 0) - { - fprintf(stderr, "isdntelctl: cannot open %s: %s\n", namebuffer, strerror(errno)); - exit(1); - } - - if(opt_get) - { - int format; - - if((ret = ioctl(telfd, I4B_TEL_GETAUDIOFMT, &format)) < 0) - { - fprintf(stderr, "ioctl I4B_TEL_GETAUDIOFMT failed: %s", strerror(errno)); - exit(1); - } - - if(format == CVT_NONE) - { - printf("device %s uses A-Law sound format\n", namebuffer); - } - else if(format == CVT_ALAW2ULAW) - { - printf("device %s uses u-Law sound format\n", namebuffer); - } - else - { - printf("ERROR, device %s uses unknown format %d!\n", namebuffer, format); - } - exit(0); - } - - if(opt_A) - { - int format = CVT_NONE; - - if((ret = ioctl(telfd, I4B_TEL_SETAUDIOFMT, &format)) < 0) - { - fprintf(stderr, "ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno)); - exit(1); - } - exit(0); - } - - if(opt_U) - { - int format = CVT_ALAW2ULAW; - - if((ret = ioctl(telfd, I4B_TEL_SETAUDIOFMT, &format)) < 0) - { - fprintf(stderr, "ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno)); - exit(1); - } - exit(0); - } - if(opt_C) - { - int dummy; - if((ret = ioctl(telfd, I4B_TEL_EMPTYINPUTQUEUE, &dummy)) < 0) - { - fprintf(stderr, "ioctl I4B_TEL_EMPTYINPUTQUEUE failed: %s", strerror(errno)); - exit(1); - } - exit(0); - } - return(0); -} - -/*---------------------------------------------------------------------------* - * usage display and exit - *---------------------------------------------------------------------------*/ -static void -usage(void) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "isdntelctl - i4b telephone i/f control, compiled %s %s\n",__DATE__, __TIME__); - fprintf(stderr, "usage: isdndebug -e -h -g -l <layer> -m -r -s <value> -u <unit> -z -H\n"); - fprintf(stderr, " -g get current settings\n"); - fprintf(stderr, " -u unit specify unit number\n"); - fprintf(stderr, " -A set interface to A-Law coding\n"); - fprintf(stderr, " -U set interface to u-Law coding\n"); - fprintf(stderr, " -c clear input queue\n"); - fprintf(stderr, "\n"); - exit(1); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntest/Makefile b/usr.sbin/i4b/isdntest/Makefile deleted file mode 100644 index c1240ccb8e7e4..0000000000000 --- a/usr.sbin/i4b/isdntest/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -PROG = isdntest -SRCS = main.c -MAN8 = isdntest.8 - -install: - @echo isdntest is not installed automatically - -.include <bsd.prog.mk> diff --git a/usr.sbin/i4b/isdntest/isdntest.8 b/usr.sbin/i4b/isdntest/isdntest.8 deleted file mode 100644 index 7e03523172472..0000000000000 --- a/usr.sbin/i4b/isdntest/isdntest.8 +++ /dev/null @@ -1,103 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdntest.8,v 1.6 1998/12/16 13:39:47 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:17:35 1998] -.\" -.Dd July 9, 1998 -.Dt isdntest 8 -.Sh NAME -.Nm isdntest -.Nd isdn4bsd debugging and verification tool -.Sh SYNOPSIS -.Nm -.Op Fl c Ar unit -.Op Fl h -.Op Fl i Ar number -.Op Fl o Ar number -.Op Fl w -.Sh DESCRIPTION -.Nm isdntest -is part of the isdn4bsd package and may be used as a stimulation tool -for debugging the isdn4bsd kernel functionality. -.Pp -NOTE: -.Nm Isdntest -must be run -.Em instead -of the -.Xr isdnd 8 -daemon and can not be used while the daemon runs. -.Pp -The following options are available: -.Bl -tag -width Ds -.It Fl c -Use controller unit number for test. -.It Fl h -Use HDLC as the B channel layer 1 protocol instead of no protocol. -.It Fl i -Use number to verify the incoming number. -.It Fl o -Use number as the outgoing number to dial. -.It Fl w -Wait for keyboard input for terminating the call. -.El -.Pp -The -.Nm -utility is currently of not much use for end users, it is primarily a debugging -tool for development and is part of the release in the hope, that someone -enhances it as a real self test and setup-verification tool! -.Pp -.Nm Isdntest -does almost no error checking and error recovery, so unexpected -hangs or crashes may occur. - -.Sh EXAMPLES -For the following example, it is assumed that a machine with isdn4bsd -installed is connected to an S0 bus and that one of the valid MSN's (MSN = Multiple Subscriber Number -= telephone number) on this bus is -.Em 42 . -The -.Xr isdnd 8 -.Em must -not currently running on that machine! Executing: -.Bd -literal -offset indent -isdntest -i 42 -o 42 -.Ed -.Pp -will setup an outgoing call from that machine to itself, connect to itself -and disconnect after 5 seconds. -.Nm Isdntest -has to be finished by the user by entering Control-C. -.Pp -.Sh FILES -/dev/i4b - -.Sh AUTHOR -The -.Nm -utility and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/isdntest/main.c b/usr.sbin/i4b/isdntest/main.c deleted file mode 100644 index 8e75be274ceb0..0000000000000 --- a/usr.sbin/i4b/isdntest/main.c +++ /dev/null @@ -1,738 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * main.c - i4b selftest utility - * ----------------------------- - * - * $Id: main.c,v 1.9 1998/12/05 18:04:06 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:18:17 1998] - * - *---------------------------------------------------------------------------*/ - -#include <stdio.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <ctype.h> -#include <sys/stat.h> -#include <sys/wait.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/time.h> - -#include <machine/i4b_ioctl.h> -#include <machine/i4b_cause.h> - -static void kbdrdhdl ( void ); -static void isdnrdhdl (int isdnfd ); - -void handle_connect_ind(unsigned char *ptr); -void handle_disconnect(unsigned char *ptr); -void handle_connect_active_ind(unsigned char *ptr); - -int connect_response(int isdnfd, unsigned int cdid, int response); -int disconnect_request(int isdnfd, unsigned int cdid); -unsigned int get_cdid(int isdnfd); -int connect_request(int isdnfd, unsigned int cdid); -int do_test(void); -static void cleanup(void); -static void usage(void); -void setup_wrfix(int len, unsigned char *buf); -int check_rd(int len, unsigned char *wbuf, unsigned char *rdbuf); - -static int isdnfd; -char outgoingnumber[32]; -char incomingnumber[32]; -int debug_level = 0; - -#define I4BDEVICE "/dev/i4b" -#define DATADEV0 "/dev/i4brbch0" -#define DATAUNIT0 0 -#define DATADEV1 "/dev/i4brbch1" -#define DATAUNIT1 1 - -unsigned int out_cdid = CDID_UNUSED; -unsigned int in_cdid = CDID_UNUSED; - -int waitchar = 0; -int usehdlc = 0; -int controller = 0; -int dotest = 0; - -/*---------------------------------------------------------------------------* - * program entry - *---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int i; - int c; - fd_set set; - int ret; - char *ptr; - - incomingnumber[0] = '\0'; - outgoingnumber[0] = '\0'; - - while ((c = getopt(argc, argv, "c:d:hi:o:t:w?")) != EOF) - { - switch(c) - { - case 'c': - if(isdigit(*optarg)) - { - controller = strtoul(optarg, NULL, 10); - } - else - { - fprintf(stderr, "Error: option -c requires a numeric argument!\n"); - usage(); - } - break; - - case 'd': - if(isdigit(*optarg)) - { - debug_level = strtoul(optarg, NULL, 10); - } - else - { - fprintf(stderr, "Error: option -d requires a numeric argument!\n"); - usage(); - } - break; - - case 'o': - i = 0; - ptr = optarg; - - while(*ptr) - { - if(isdigit(*ptr)) - { - outgoingnumber[i++] = *ptr++; - } - else - { - fprintf(stderr, "Error: option -o requires a numeric argument!\n"); - usage(); - } - } - outgoingnumber[i] = '\0'; - break; - - case 'i': - i = 0; - ptr = optarg; - - while(*ptr) - { - if(isdigit(*ptr)) - { - incomingnumber[i++] = *ptr++; - } - else - { - fprintf(stderr, "Error: option -i requires a numeric argument!\n"); - usage(); - } - } - incomingnumber[i] = '\0'; - break; - - case 'w': - waitchar = 1; - break; - - case 'h': - usehdlc = 1; - break; - - case 't': - if(isdigit(*optarg)) - { - dotest = strtoul(optarg, NULL, 10); - } - else - { - fprintf(stderr, "Error: option -t requires a numeric argument!\n"); - usage(); - } - break; - - case '?': - default: - usage(); - break; - } - } - - if((strlen(incomingnumber) == 0) || (strlen(outgoingnumber) == 0)) - usage(); - - fprintf(stderr, "isdntest: accepting calls from telephone number [%s] \n", incomingnumber); - fprintf(stderr, "isdntest: calling out telephone number [%s] \n", outgoingnumber); - - if((atexit(cleanup)) != 0) - { - fprintf(stderr, "isdntest: atexit error: %s\n", strerror(errno)); - exit(1); - } - - /* open isdn device */ - - if((isdnfd = open(I4BDEVICE, O_RDWR)) < 0) - { - fprintf(stderr, "\nisdntest: cannot open %s: %s\n", I4BDEVICE, strerror(errno)); - fprintf(stderr, " isdnd is probably running, to use isdntest,\n"); - fprintf(stderr, " terminate isdnd and then run isdntest again!\n"); - exit(1); - } - - if((out_cdid = get_cdid(isdnfd)) == 0) - { - fprintf(stderr, "isdntest: error getting cdid: %s\n", strerror(errno)); - exit(1); - } - - if((connect_request(isdnfd, out_cdid)) == -1) - { - fprintf(stderr, "isdntest: error, outgoing call failed!\n"); - exit(1); - } - - for(;;) - { - FD_ZERO(&set); - - FD_SET(0, &set); - - FD_SET(isdnfd, &set); - - ret = select(isdnfd + 1, &set, NULL, NULL, NULL); - - if(ret > 0) - { - if(FD_ISSET(isdnfd, &set)) - isdnrdhdl(isdnfd); - - if(FD_ISSET(0, &set)) - kbdrdhdl(); - } - else - { - fprintf(stderr, "isdntest: select error: %s\n", strerror(errno)); - } - } -} - -/*---------------------------------------------------------------------------* - * data from keyboard available - *---------------------------------------------------------------------------*/ -static void -kbdrdhdl(void) -{ - cleanup(); - exit(2); -} - -/*---------------------------------------------------------------------------* - * data from /dev/isdn available, read and process them - *---------------------------------------------------------------------------*/ -static void -isdnrdhdl(int isdnfd) -{ - static unsigned char buf[1024]; - int len; - - if((len = read(isdnfd, buf, 1024 - 1)) > 0) - { - switch (buf[0]) - { - case MSG_CONNECT_IND: - handle_connect_ind(&buf[0]); - break; - - case MSG_CONNECT_ACTIVE_IND: - handle_connect_active_ind(&buf[0]); - break; - - case MSG_DISCONNECT_IND: - handle_disconnect(&buf[0]); - break; - - default: - if(debug_level) - fprintf(stderr, "isdntest: unknown message 0x%x = %c\n", buf[0], buf[0]); - break; - } - } - else - { - fprintf(stderr, "isdntest: read error, errno = %d, length = %d", errno, len); - } -} - -/*---------------------------------------------------------------------------* - * usage display and exit - *---------------------------------------------------------------------------*/ -static void -usage(void) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "isdntest - i4b selftest, compiled %s %s\n",__DATE__, __TIME__); - fprintf(stderr, "usage: isdntest -c <ctrl> -h -i <telno> -o <telno>\n"); - fprintf(stderr, " -c <ctrl> specify controller to use\n"); - fprintf(stderr, " -h use HDLC as Bchannel protocol\n"); - fprintf(stderr, " -i <telno> incoming telephone number\n"); - fprintf(stderr, " -o <telno> outgoing telephone number\n"); - fprintf(stderr, " -w wait for keyboard entry to disconnect\n"); - fprintf(stderr, " -t num send test pattern num times\n"); - fprintf(stderr, "\n"); - exit(1); -} - -/*---------------------------------------------------------------------------* - * initiate an outgoing connection - *---------------------------------------------------------------------------*/ -int -connect_request(int isdnfd, unsigned int cdid) -{ - msg_connect_req_t mcr; - int ret; - - bzero(&mcr, sizeof(msg_connect_req_t)); - - mcr.controller = controller; - mcr.channel = CHAN_ANY; /* any channel */ - mcr.cdid = cdid; /* cdid from get_cdid() */ - - if(usehdlc) - mcr.bprot = BPROT_RHDLC;/* b channel protocol */ - else - mcr.bprot = BPROT_NONE; /* b channel protocol */ - - mcr.driver = BDRV_RBCH; /* raw b channel driver */ - mcr.driver_unit = DATAUNIT0; /* raw b channel driver unit */ - - strcpy(mcr.dst_telno, outgoingnumber); - strcpy(mcr.src_telno, incomingnumber); - - if((ret = ioctl(isdnfd, I4B_CONNECT_REQ, &mcr)) < 0) - { - fprintf(stderr, "ioctl I4B_CONNECT_REQ failed: %s", strerror(errno)); - return(-1); - } - fprintf(stderr, "isdntest: calling out to telephone number [%s] \n", outgoingnumber); - return(0); -} - -/*---------------------------------------------------------------------------* - * handle setup indicator - *---------------------------------------------------------------------------*/ -void -handle_connect_ind(unsigned char *ptr) -{ - msg_connect_ind_t *msi = (msg_connect_ind_t *)ptr; - - fprintf(stderr, "isdntest: incoming SETUP: from %s to %s\n", - msi->src_telno, - msi->dst_telno); - - fprintf(stderr, " channel %d, controller %d, bprot %d, cdid %d\n", - msi->channel, - msi->controller, - msi->bprot, - msi->header.cdid); - - in_cdid = msi->header.cdid; - - if(strcmp(msi->dst_telno, outgoingnumber)) - { - msg_connect_resp_t msr; - int ret; - - fprintf(stderr, "isdntest: ignoring incoming SETUP: my number [%s] != outgoing [%s]\n", - msi->dst_telno, outgoingnumber); - - msr.cdid = in_cdid; - msr.response = SETUP_RESP_DNTCRE; - - if((ret = ioctl(isdnfd, I4B_CONNECT_RESP, &msr)) < 0) - { - fprintf(stderr, "ioctl I4B_CONNECT_RESP ignore failed: %s", strerror(errno)); - exit(1); - } - - } - else - { - msg_connect_resp_t msr; - int ret; - - fprintf(stderr, "isdntest: accepting call, sending CONNECT_RESPONSE .....\n"); - - msr.cdid = in_cdid; - msr.response = SETUP_RESP_ACCEPT; - - if(usehdlc) - msr.bprot = BPROT_RHDLC; - else - msr.bprot = BPROT_NONE; - - msr.driver = BDRV_RBCH; - msr.driver_unit = DATAUNIT1; - - if((ret = ioctl(isdnfd, I4B_CONNECT_RESP, &msr)) < 0) - { - fprintf(stderr, "ioctl I4B_CONNECT_RESP accept failed: %s", strerror(errno)); - exit(1); - } - } -} - -#define SLEEPTIME 5 - -/*---------------------------------------------------------------------------* - * handle connection active - *---------------------------------------------------------------------------*/ -void -handle_connect_active_ind(unsigned char *ptr) -{ - msg_connect_active_ind_t *msi = (msg_connect_active_ind_t *)ptr; - int i; - - fprintf(stderr, "isdntest: connection active, cdid %d\n", msi->header.cdid); - - if(out_cdid == msi->header.cdid) - { - if(waitchar) - { - fprintf(stderr, "isdntest: press any key to disconnect ...%c%c%c\n", 0x07, 0x07, 0x07); - getchar(); - } - else - { - if(dotest) - { - do_test(); - } - else - { - fprintf(stderr, "isdntest: %d secs delay until disconnect:", SLEEPTIME); - - for(i=0; i < SLEEPTIME;i++) - { - fprintf(stderr, " ."); - sleep(1); - } - fprintf(stderr, "\n"); - } - cleanup(); - } - } -} - -/*---------------------------------------------------------------------------* - * handle disconnect indication - *---------------------------------------------------------------------------*/ -void -handle_disconnect(unsigned char *ptr) -{ - msg_disconnect_ind_t *mdi = (msg_disconnect_ind_t *)ptr; - - if(mdi->header.cdid == out_cdid) - { - fprintf(stderr, "isdntest: incoming disconnect indication, cdid %d (out_cdid), cause %d\n", - mdi->header.cdid, mdi->cause); - - out_cdid = CDID_UNUSED; - } - else if(mdi->header.cdid == in_cdid) - { - fprintf(stderr, "isdntest: incoming disconnect indication, cdid %d (in_cdid), cause %d\n", - mdi->header.cdid, mdi->cause); - in_cdid = CDID_UNUSED; - } - else - { - fprintf(stderr, "isdntest: incoming disconnect indication, cdid %d (???), cause %d\n", - mdi->header.cdid, mdi->cause); - } -} - -/*---------------------------------------------------------------------------* - * hang up - *---------------------------------------------------------------------------*/ -int -disconnect_request(int isdnfd, unsigned int cdid) -{ - msg_discon_req_t mdr; - int ret; - - mdr.cdid = cdid; - mdr.cause = (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL; - - if((ret = ioctl(isdnfd, I4B_DISCONNECT_REQ, &mdr)) < 0) - { - fprintf(stderr, "ioctl I4B_DISCONNECT_REQ failed: %s", strerror(errno)); - return(-1); - } - fprintf(stderr, "isdntest: sending disconnect request\n"); - return(0); -} - -/*---------------------------------------------------------------------------* - * get cdid from kernel - *---------------------------------------------------------------------------*/ -unsigned int -get_cdid(int isdnfd) -{ - msg_cdid_req_t mcr; - int ret; - - mcr.cdid = 0; - - if((ret = ioctl(isdnfd, I4B_CDID_REQ, &mcr)) < 0) - { - fprintf(stderr, "ioctl I4B_CDID_REQ failed: %s", strerror(errno)); - return(0); - } - fprintf(stderr, "isdntest: got cdid %d from kernel\n", mcr.cdid); - return(mcr.cdid); -} - -/*---------------------------------------------------------------------------* - * make shure all cdid's are inactive before leaving - *---------------------------------------------------------------------------*/ -void cleanup(void) -{ - int len; - char buf[1024]; - - if(out_cdid != CDID_UNUSED) - { - fprintf(stderr, "isdntest: cleanup, send disconnect req for out_cdid %d, in_cdid %d\n", out_cdid, in_cdid); - disconnect_request(isdnfd, out_cdid); - } - - while((out_cdid != CDID_UNUSED) || (in_cdid != CDID_UNUSED)) - { - fprintf(stderr, "isdntest: cleanup, out_cdid %d, in_cdid %d\n", out_cdid, in_cdid); - - if((len = read(isdnfd, buf, 1024 - 1)) > 0) - { - switch (buf[0]) - { - case MSG_CONNECT_IND: - handle_connect_ind(&buf[0]); - break; - - case MSG_CONNECT_ACTIVE_IND: - handle_connect_active_ind(&buf[0]); - break; - - case MSG_DISCONNECT_IND: - handle_disconnect(&buf[0]); - break; - - default: - fprintf(stderr, "isdntest: unknown message 0x%x = %c\n", buf[0], buf[0]); - break; - } - } - else - { - fprintf(stderr, "isdntest: read error, errno = %d, length = %d", errno, len); - } - } - fprintf(stderr, "isdntest: exit cleanup, out_cdid %d, in_cdid %d\n", out_cdid, in_cdid); -} - -/*---------------------------------------------------------------------------* - * test the b-channels - *---------------------------------------------------------------------------*/ -int do_test(void) -{ - -#define FPH 0x3c -#define FPL 0x66 - - int fd0, fd1; - unsigned char wrbuf[2048]; - unsigned char rdbuf[2048]; - int sz; - fd_set set; - struct timeval timeout; - int ret; - int frame; - int errcnt; - int frm_len; - int bytecnt = 0; - time_t start_time; - time_t cur_time; - time_t run_time; - - if((fd0 = open(DATADEV0, O_RDWR)) == -1) - { - fprintf(stderr, "open of %s failed: %s", DATADEV0, strerror(errno)); - return(-1); - } - - if((fd1 = open(DATADEV1, O_RDWR)) == -1) - { - fprintf(stderr, "open of %s failed: %s", DATADEV1, strerror(errno)); - return(-1); - } - - printf("\n"); - frame = 0; - errcnt = 0; - - frm_len = 2; - - start_time = time(NULL); - - printf(" frame size errors totalbytes bps elapsedtime\n"); - - for(;dotest > 0; dotest--) - { - setup_wrfix(frm_len, &wrbuf[0]); - - frame++; - - bytecnt += frm_len; - - printf("%6d %4d", frame, frm_len); - fflush(stdout); - - if((sz = write(fd0, wrbuf, frm_len)) != frm_len) - { - fprintf(stderr, "write (%d of %d bytes) to %s failed: %s\n", sz, frm_len, DATADEV0, strerror(errno)); - } - - timeout.tv_sec = 2; - timeout.tv_usec = 0; - - FD_ZERO(&set); - - FD_SET(0, &set); - FD_SET(fd1, &set); - - ret = select(fd1+1, &set, NULL, NULL, &timeout); - - if(ret > 0) - { - if(FD_ISSET(fd1, &set)) - { - if((sz = read(fd1, rdbuf, 2048)) != frm_len) - { - fprintf(stderr, "read (%d bytes) from %s failed: %s\n", sz, DATADEV1, strerror(errno)); - } - - cur_time = time(NULL); - run_time = difftime(cur_time, start_time); - - if(run_time == 0) - run_time = 1; - - printf(" %6d %10d %4d %2.2d:%2.2d:%2.2d \r", - errcnt, bytecnt, - (int)((int)bytecnt/(int)run_time), - (int)run_time/3600, (int)run_time/60, (int)run_time%60); - fflush(stdout); - - errcnt += check_rd(frm_len, &wrbuf[0], &rdbuf[0]); - -#ifdef NOTDEF - for(i=0; i<sz; i++) - { - printf("0x%02x ", (unsigned char)rdbuf[i]); - } - printf("\n"); -#endif - } - - if(FD_ISSET(0, &set)) - { - return(0); - printf("\n\n"); - } - } - else - { - fprintf(stderr, "isdntest, do_test: select error: %s\n", strerror(errno)); - } - - frm_len = frm_len*2; - if(frm_len > 2048) - frm_len = 2; - - } - printf("\n\n"); - return(0); -} - -void -setup_wrfix(int len, unsigned char *buf) -{ - register int i; - - for(i=0; i<len;) - { - *buf = FPH; - buf++; - *buf = FPL; - buf++; - i+=2; - } -} - -int -check_rd(int len, unsigned char *wbuf, unsigned char *rbuf) -{ - register int i; - int ret = 0; - - for(i=0; i<len; i++) - { - if(*wbuf != *rbuf) - { - fprintf(stderr, "\nERROR, byte %d, written 0x%02x, read 0x%02x\n", i, *wbuf, *rbuf); - ret++; - } - wbuf++; - rbuf++; - } - return(ret); -} - - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/1tr6.c b/usr.sbin/i4b/isdntrace/1tr6.c deleted file mode 100644 index 1c8c1846cd39f..0000000000000 --- a/usr.sbin/i4b/isdntrace/1tr6.c +++ /dev/null @@ -1,754 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * 1tr6.c - print 1TR6 protocol traces - * ----------------------------------- - * - * $Id: 1tr6.c,v 1.4 1998/12/05 18:04:08 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:18:38 1998] - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" - -static int p_1tr6address(char *pbuf, unsigned char buf[]); -static int p_1tr6cause(char *pbuf, unsigned char buf[]); - -/*---------------------------------------------------------------------------* - * decode the (german) national specific 1TR6 protocol - *---------------------------------------------------------------------------*/ -void -decode_1tr6(char *pbuf, int n, int off, unsigned char *buf, int raw) -{ - int codeset = 0; - int oldcodeset = 0; - int codelock = 0; - - int pd; - int len; - int j; - int i; - - if(n <= 0) - return; - - *pbuf = '\0'; - - if(raw) - { - for (i = 0; i < n; i += 16) - { - sprintf((pbuf+strlen(pbuf)),"Dump:%.3d ", i+off); - for (j = 0; j < 16; j++) - if (i + j < n) - sprintf((pbuf+strlen(pbuf)),"%02x ", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf))," "); - sprintf((pbuf+strlen(pbuf))," "); - for (j = 0; j < 16 && i + j < n; j++) - if (isprint(buf[i + j])) - sprintf((pbuf+strlen(pbuf)),"%c", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf)),"."); - sprintf((pbuf+strlen(pbuf)),"\n"); - } - } - - sprintf((pbuf+strlen(pbuf)), "1TR6: "); - - /* protocol discriminator */ - - i = 0; - - pd = buf[i]; - - switch(pd) - { - case 0x40: - sprintf((pbuf+strlen(pbuf)), "pd=N0, "); - break; - case 0x41: - sprintf((pbuf+strlen(pbuf)), "pd=N1, "); - break; - default: - sprintf((pbuf+strlen(pbuf)), "pd=UNDEF (0x%02x), ",pd); - break; - } - - /* call reference */ - - i++; - - len = buf[i] & 0x0f; - - switch(len) - { - case 1: - sprintf((pbuf+strlen(pbuf)), "cr=0x%02x %s, ", (buf[i+1] & 0x7f), (buf[i+1] & 0x80) ? "(from destination)" : "(from origination)"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "cr: LEN=%d %s 0x%02x 0x%02x, ", len, (buf[i+1] & 0x80) ? "org" : "dst", (buf[i+1] & 0x7f), (buf[i+2] & 0x7f)); - break; - } - - i += (len+1); - - /* message type */ - - sprintf((pbuf+strlen(pbuf)), "message="); - - if(pd == 0x40) /* protocol discriminator N0 */ - { - switch(buf[i]) - { - case 0x61: - sprintf((pbuf+strlen(pbuf)), "REGISTER INDICATION: "); - break; - case 0x62: - sprintf((pbuf+strlen(pbuf)), "CANCEL INDICATION: "); - break; - case 0x63: - sprintf((pbuf+strlen(pbuf)), "FACILITY STATUS: "); - break; - case 0x64: - sprintf((pbuf+strlen(pbuf)), "STATUS ACKNOWLEDGE: "); - break; - case 0x65: - sprintf((pbuf+strlen(pbuf)), "STATUS REJECT: "); - break; - case 0x66: - sprintf((pbuf+strlen(pbuf)), "FACILITY INFORMATION: "); - break; - case 0x67: - sprintf((pbuf+strlen(pbuf)), "INFORMATION ACKNOWLEDGE: "); - break; - case 0x68: - sprintf((pbuf+strlen(pbuf)), "INFORMATION REJECT: "); - break; - case 0x75: - sprintf((pbuf+strlen(pbuf)), "CLOSE: "); - break; - case 0x77: - sprintf((pbuf+strlen(pbuf)), "CLOSE ACKNOWLEDGE: "); - break; - default: - sprintf((pbuf+strlen(pbuf)), "ERROR: PD=0x40 MSG=0x%02x, ", buf[i]); - break; - } - } - else if(pd == 0x41) - { - switch(buf[i]) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "ESCAPE: "); - break; - case 0x01: - sprintf((pbuf+strlen(pbuf)), "ALERT: "); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "CALL SENT: "); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "CONNECT: "); - break; - case 0x0f: - sprintf((pbuf+strlen(pbuf)), "CONNECT ACKNOWLEDGE: "); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "SETUP: "); - break; - case 0x0d: - sprintf((pbuf+strlen(pbuf)), "SETUP ACKNOWLEDGE: "); - break; - - case 0x26: - sprintf((pbuf+strlen(pbuf)), "RESUME: "); - break; - case 0x2e: - sprintf((pbuf+strlen(pbuf)), "RESUME ACKNOWLEDGE: "); - break; - case 0x22: - sprintf((pbuf+strlen(pbuf)), "RESUME REJECT: "); - break; - case 0x25: - sprintf((pbuf+strlen(pbuf)), "SUSPEND: "); - break; - case 0x2d: - sprintf((pbuf+strlen(pbuf)), "SUSPEND ACKNOWLEDGE: "); - break; - case 0x21: - sprintf((pbuf+strlen(pbuf)), "SUSPEND REJECT: "); - break; - case 0x20: - sprintf((pbuf+strlen(pbuf)), "USER INFORMATION: "); - break; - - case 0x40: - sprintf((pbuf+strlen(pbuf)), "DETACH"); - break; - case 0x45: - sprintf((pbuf+strlen(pbuf)), "DISCONNECT: "); - break; - case 0x4d: - sprintf((pbuf+strlen(pbuf)), "RELEASE: "); - break; - case 0x5a: - sprintf((pbuf+strlen(pbuf)), "RELEASE ACKNOWLEDGE"); - break; - - case 0x6e: - sprintf((pbuf+strlen(pbuf)), "CANCEL ACKNOWLEDGE: "); - break; - case 0x67: - sprintf((pbuf+strlen(pbuf)), "CANCEL REJECT: "); - break; - case 0x69: - sprintf((pbuf+strlen(pbuf)), "CONGESTION CONTROL: "); - break; - case 0x60: - sprintf((pbuf+strlen(pbuf)), "FACILITY: "); - break; - case 0x68: - sprintf((pbuf+strlen(pbuf)), "FACILITY ACKNOWLEDGE: "); - break; - case 0x66: - sprintf((pbuf+strlen(pbuf)), "FACILITY CANCEL: "); - break; - case 0x64: - sprintf((pbuf+strlen(pbuf)), "FACILITY REGISTER: "); - break; - case 0x65: - sprintf((pbuf+strlen(pbuf)), "FACILITY REJECT: "); - break; - case 0x6d: - sprintf((pbuf+strlen(pbuf)), "INFORMATION: "); - break; - case 0x6c: - sprintf((pbuf+strlen(pbuf)), "REGISTER ACKNOWLEDGE: "); - break; - case 0x6f: - sprintf((pbuf+strlen(pbuf)), "REGISTER REJECT: "); - break; - case 0x63: - sprintf((pbuf+strlen(pbuf)), "STATUS: "); - break; - - default: - sprintf((pbuf+strlen(pbuf)), "ERROR: PD=0x41 MSG=0x%02x, ", buf[i]); - break; - } - } - else - { - sprintf((pbuf+strlen(pbuf)), "ERROR: PD=0x%02x MSG=0x%02x, ", pd, buf[i]); - } - - /* other information elements */ - - i++; - - for (; i < n;) - { - sprintf((pbuf+strlen(pbuf)), "\n "); - - if(buf[i] & 0x80) - { - /* single octett info element */ - - switch(buf[i] & 0x70) - { - case 0x00: /* reserved */ - sprintf((pbuf+strlen(pbuf)), "[reserved single octett info]"); - break; - - case 0x10: /* shift */ - oldcodeset = codeset; - codeset = buf[i] & 0x07; - if(buf[i] & 0x08) - codelock = 0; - else - codelock = 1; - sprintf((pbuf+strlen(pbuf)), "[shift: codeset=%d lock=%d]", codeset, codelock); - break; - - case 0x20: /* more data */ - sprintf((pbuf+strlen(pbuf)), "[more data]"); - break; - - case 0x30: /* congestion level */ - sprintf((pbuf+strlen(pbuf)), "[congestion level = %d]", buf[i] & 0x0f); - break; - - default: - sprintf((pbuf+strlen(pbuf)), "[UNDEF SINGLE OCTET ELEMENT 0x%02x]", buf[i]); - break; - } - - i++; /* next */ - - } - else - { - /* variable length info element */ - - if(codeset == 0) - { - switch(buf[i]) - { - case 0x08: - sprintf((pbuf+strlen(pbuf)), "[cause: "); - i += p_1tr6cause(pbuf, &buf[i]); - goto next; - break; - - case 0x0c: - sprintf((pbuf+strlen(pbuf)), "[connected address: "); - i += p_1tr6address(pbuf, &buf[i]); - goto next; - break; - - case 0x10: - sprintf((pbuf+strlen(pbuf)), "[call identity: "); - break; - case 0x18: - sprintf((pbuf+strlen(pbuf)), "[channel id: channel="); - i += 2; - switch(buf[i] & 0x03) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "no channel"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "B-1"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "B-2"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "any channel"); - break; - } - if(buf[i] & 0x08) - sprintf((pbuf+strlen(pbuf)), " (exclusive)]"); - else - sprintf((pbuf+strlen(pbuf)), " (preferred)]"); - i++; - goto next; - break; - case 0x20: - sprintf((pbuf+strlen(pbuf)), "[network specific facilities: "); - i++; - len = buf[i]; - i+=2; - switch(buf[i]) - { - case 1: - sprintf((pbuf+strlen(pbuf)), "Sperre"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "AWS 1"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "AWS 2"); - break; - case 0xe: - sprintf((pbuf+strlen(pbuf)), "Konferenz"); - break; - case 0xf: - sprintf((pbuf+strlen(pbuf)), "B-Kan uebern."); - break; - case 0x10: - sprintf((pbuf+strlen(pbuf)), "aktvrg. ghlt. Vbdg."); - break; - case 0x11: - sprintf((pbuf+strlen(pbuf)), "3er Konf"); - break; - case 0x12: - sprintf((pbuf+strlen(pbuf)), "1seitg D/G Wechsel"); - break; - case 0x13: - sprintf((pbuf+strlen(pbuf)), "2seitig D/G Wechsel"); - break; - case 0x14: - sprintf((pbuf+strlen(pbuf)), "Rufnr. identifiz."); - break; - case 0x15: - sprintf((pbuf+strlen(pbuf)), "GBG"); - break; - case 0x17: - sprintf((pbuf+strlen(pbuf)), "ueberg. Ruf"); - break; - case 0x1a: - sprintf((pbuf+strlen(pbuf)), "um/weitergel. Ruf"); - break; - case 0x1b: - sprintf((pbuf+strlen(pbuf)), "unterdr. A-Rufnr."); - break; - case 0x1e: - sprintf((pbuf+strlen(pbuf)), "Verbdg. deaktivieren"); - break; - case 0x1d: - sprintf((pbuf+strlen(pbuf)), "Verbdg. aktivieren"); - break; - case 0x1f: - sprintf((pbuf+strlen(pbuf)), "SPV"); - break; - case 0x23: - sprintf((pbuf+strlen(pbuf)), "Rueckw. 2seitg. DW"); - break; - case 0x24: - sprintf((pbuf+strlen(pbuf)), "Anrufumltg. priv. Netz"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "undefined"); - break; - } - i++; - sprintf((pbuf+strlen(pbuf)), ", serv=%d", buf[i]); - i++; - sprintf((pbuf+strlen(pbuf)), ", ainfo=%d", buf[i]); - i++; - len-=4; - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf))," 0x%02x", buf[j+i]); - } - sprintf((pbuf+strlen(pbuf)),"]"); - i += j; - goto next; - break; - case 0x28: - sprintf((pbuf+strlen(pbuf)), "[display: "); - break; - case 0x2c: - sprintf((pbuf+strlen(pbuf)), "[keypad: "); - break; - case 0x6c: - sprintf((pbuf+strlen(pbuf)), "[origination address: "); - i += p_1tr6address(pbuf, &buf[i]); - goto next; - break; - case 0x70: - sprintf((pbuf+strlen(pbuf)), "[destination address: "); - i += p_1tr6address(pbuf, &buf[i]); - goto next; - break; - case 0x7e: - sprintf((pbuf+strlen(pbuf)), "[user-user information: "); - break; - case 0x7f: - sprintf((pbuf+strlen(pbuf)), "[reserved: "); - break; - default: - sprintf((pbuf+strlen(pbuf)), "[UNKNOWN INFO-ELEMENT-ID"); - break; - } - } - else if(codeset == 6) - { - switch(buf[i]) - { - case 0x01: - sprintf((pbuf+strlen(pbuf)), "[service ind: serv="); - i+= 2; - switch(buf[i]) - { - case 0x01: - sprintf((pbuf+strlen(pbuf)), "phone"); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "a/b"); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "X.21"); - break; - case 0x04: - sprintf((pbuf+strlen(pbuf)), "fax g4"); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "btx"); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "64k data"); - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "X.25"); - break; - case 0x09: - sprintf((pbuf+strlen(pbuf)), "teletex"); - break; - case 0x0a: - sprintf((pbuf+strlen(pbuf)), "mixed"); - break; - case 0x0d: - sprintf((pbuf+strlen(pbuf)), "temex"); - break; - case 0x0e: - sprintf((pbuf+strlen(pbuf)), "picturephone"); - break; - case 0x0f: - sprintf((pbuf+strlen(pbuf)), "btx (new)"); - break; - case 0x10: - sprintf((pbuf+strlen(pbuf)), "videophone"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "undefined"); - break; - } - i++; - sprintf((pbuf+strlen(pbuf)), ", ainfo=0x%02x]", buf[i]); - i++; - goto next; - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "[charging information: "); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "[date: "); - i++; - len = buf[i]; - i++; - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"%c", buf[j+i]); - } - sprintf((pbuf+strlen(pbuf)),"]"); - i += j; - goto next; - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "[facility select: "); - break; - case 0x06: - sprintf((pbuf+strlen(pbuf)), "[status of facilities: "); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "[status of called party: "); - i+=2; - switch(buf[i]) - { - case 1: - sprintf((pbuf+strlen(pbuf)), "no information]"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "is being called]"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "undefined (0x%02x)]", buf[i]); - break; - } - i++; - goto next; - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "[additional tx attributes: "); - i++; - len = buf[i]; - i++; - for(j = 0; j < len; j++) - { - switch(buf[j+i] &0x70) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "no satellite link"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "one satellite link"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "two satellite links"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "three satellite links"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "undefined value"); - break; - } - if(buf[j+i] & 0x80) - sprintf((pbuf+strlen(pbuf)),"(flag=req)]"); - else - sprintf((pbuf+strlen(pbuf)),"(flag=ind)]"); - } - i += j; - goto next; - break; - default: - sprintf((pbuf+strlen(pbuf)), "[UNKNOWN INFO-ELEMENT-ID"); - break; - } - } - else - { - sprintf((pbuf+strlen(pbuf)), "[ILLEGAL CODESET = 0x%02x", codeset); - } - - i++; /* index -> length */ - - len = buf[i]; - - i++; /* index -> 1st param */ - - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf))," 0x%02x", buf[j+i]); - } - - sprintf((pbuf+strlen(pbuf)),"]"); - - i += len; - -next: - - if(!codelock && (codeset != oldcodeset)) - codeset = oldcodeset; - } - } - sprintf((pbuf+strlen(pbuf)),"\n"); -} - -/*---------------------------------------------------------------------------* - * decode and print the cause - *---------------------------------------------------------------------------*/ -static int -p_1tr6cause(char *pbuf, unsigned char buf[]) -{ - int j; - int len; - int i = 0; - - i++; /* index -> length */ - - len = buf[i]; - - switch(len) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "%s", print_cause_1tr6(0)); - break; - case 1: - i++; - sprintf((pbuf+strlen(pbuf)), "%s", print_cause_1tr6(buf[i] & 0x7f)); - break; - case 2: - i++; - sprintf((pbuf+strlen(pbuf)), "%s, location: ", print_cause_1tr6(buf[i] & 0x7f)); - i++; - switch(buf[i] & 0x0f) - { - case 0x04: - sprintf((pbuf+strlen(pbuf)), "public network"); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "private network"); - break; - case 0x0f: - sprintf((pbuf+strlen(pbuf)), "no information"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - break; - default: - i++; /* index -> length */ - len = buf[i]; - i++; /* index -> 1st param */ - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf))," 0x%02x", buf[j+i]); - } - break; - } - i++; - sprintf((pbuf+strlen(pbuf)),"]"); - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the ISDN (telephone) number - *---------------------------------------------------------------------------*/ -static int -p_1tr6address(char *pbuf, unsigned char buf[]) -{ - int j; - int len; - int i = 0; - int tp; - - i++; /* index -> length */ - len = buf[i]; - i++; /* index -> 1st param */ - tp = buf[i]; - - i++; - len--; - - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"%c", buf[j+i]); - } - - switch((tp & 0x70) >> 4) - { - case 0: - sprintf((pbuf+strlen(pbuf)), " (type=unknown, "); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), " (type=international, "); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), " (type=national, "); - break; - default: - sprintf((pbuf+strlen(pbuf)), " (type=%d, ", ((tp & 0x70) >> 4)); - break; - } - - switch(tp & 0x0f) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "plan=unknown)"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "plan=ISDN)"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "plan=%d)", (tp & 0x0f)); - break; - } - - sprintf((pbuf+strlen(pbuf)),"]"); - - i += j; - - return(i); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/Makefile b/usr.sbin/i4b/isdntrace/Makefile deleted file mode 100644 index 150c18d880227..0000000000000 --- a/usr.sbin/i4b/isdntrace/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -PROG = isdntrace -SRCS = q921.c q931.c q931_util.c q932_fac.c 1tr6.c trace.c \ - pcause_1tr6.c pcause_q850.c -#CFLAGS += -Wall -g -MAN8 = isdntrace.8 - -.include <bsd.prog.mk> - diff --git a/usr.sbin/i4b/isdntrace/cable.txt b/usr.sbin/i4b/isdntrace/cable.txt deleted file mode 100644 index 890d8d4d71043..0000000000000 --- a/usr.sbin/i4b/isdntrace/cable.txt +++ /dev/null @@ -1,60 +0,0 @@ - *--------------------------------------------------------------------------- - * - * Custom cable to trace an ISDN S0 bus with two passive (!) ISDN boards - * --------------------------------------------------------------------- - * - * $Id: cable.txt,v 1.2 1998/01/22 20:39:49 hm Exp $ - * - * last edit-date: [Thu Jan 22 19:57:50 1998] - * - * -hm documentation of analyze mode - * - *---------------------------------------------------------------------------*/ - -The cable consists of a RJ-45 plug with both tx and rx connected and -two jacks; the tx cables from the plug are wired to one jack and the -rx cables from the plug are wired to the other jack. - -The computer must be equipped with two (!) supported passive cards and -the cable from one card is plugged into one of the jacks while the cable -to from the other card is plugged into the other jack. - -Now one card monitors the tx part of the S0 bus and the other card -monitors the rx part. - -Which card functions as the rx side and which as the tx side can be -specified as options to the isdntrace utility (-R and -T) which has -to be run in analyzer mode (-a) to support this configuration. - - - 1 - 2 - 3 - +--------------4 receiving-side board - S0-bus +--|--------------5 in computer (jack for - to analyze | | 6 cable to passive controller) - 8 | | 7 - 7 | | 8 - transmit - 6------------|--|--+ - receive - 5------------+ | | - receive + 4---------------+ | - transmit + 3------------+ | - 2 | | 1 - 1 | | 2 - plug into | | 3 - S0 bus +-----|-----------4 transmitting-side board - +-----------5 in computer (jack for - 6 cable to passive controller) - 7 - 8 - - - - RJ-45 plug RJ-45 jack - view from the front view from the front - cable goes out to the rear - - /--------- / ---------- - | 87654321 | | 12345678 | - |__ __|/ |/_ /_| - |____|/ |/___| diff --git a/usr.sbin/i4b/isdntrace/isdntrace.8 b/usr.sbin/i4b/isdntrace/isdntrace.8 deleted file mode 100644 index 62c5d07eef595..0000000000000 --- a/usr.sbin/i4b/isdntrace/isdntrace.8 +++ /dev/null @@ -1,205 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isdntrace.8,v 1.9 1998/12/05 18:04:10 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:18:59 1998] -.\" -.Dd October 19, 1998 -.Dt isdntrace 8 -.Sh NAME -.Nm isdntrace -.Nd isdn4bsd ISDN protocol trace utility -.Sh SYNOPSIS -.Nm isdntrace -.Op Fl a -.Op Fl b -.Op Fl d -.Op Fl f Ar filename -.Op Fl h -.Op Fl i -.Op Fl l -.Op Fl n Ar number -.Op Fl o -.Op Fl p Ar filename -.Op Fl r -.Op Fl u Ar number -.Op Fl B -.Op Fl F -.Op Fl P -.Op Fl R Ar unit -.Op Fl T Ar unit -.Sh DESCRIPTION -.Nm isdntrace -is part of the isdn4bsd package and is used to provide the user with a -mnemonic display of the layers 1, 2 and 3 protocol activities on -the D channel and hex dump of the B channel(s) activities. -.Pp -Together with two passive supported cards and an easy to build cable it can -also be used to monitor the complete traffic on a S0 bus providing S0 bus -analyzer features. -.Pp -The -.Nm -utility is only available for passive supported cards. -.Pp -The following options can be used: -.Bl -tag -width Ds -.It Fl a -Run -.Nm -in analyzer mode by using two passive cards and a custom cable which can -be build as described in the file -.Em cable.txt -in the isdn4bsd source distribution. One card acts as a receiver for the -transmitting direction on the S0 bus while the other card acts as a receiver -for the receiving direction on the S0 bus. Complete traffic monitoring is -possible using this setup. -.It Fl b -switch B channel tracing on (default off). -.It Fl d -switch D channel tracing off (default on). -.It Fl f -Use -.Ar filename -as the name of a file into which to write tracing output (default filename is -isdntrace<n> where n is the number of the unit to trace). -.It Fl h -switch display of header off (default on). -.It Fl i -print layer 1 (I.430) INFO signals to monitor layer 1 activity (default off). -.It Fl l -switch displaying of Layer 2 (Q.921) frames off (default on). -.It Fl n -This option takes a numeric argument specifying the minimum -frame size in octetts a frame must have to be displayed. (default 0) -.It Fl o -switch off writing trace output to a file (default on). -.It Fl p -Use -.Ar filename -as the name of a file used for the -B and -P options (default filename -is isdntracebin<n> where n is the number of the unit to trace). -.It Fl r -Switch off printing a raw hexadecimal dump of the packets preceding -the decoded protocol information (default on). -.It Fl u -Use -.Ar number -as the unit number of the controller card to trace (default 0). -.It Fl B -Write undecoded binary trace data to a file for later or remote -analyzing (default off). -.It Fl F -This option can only be used when option -P (playback from binary data file) -is used. The -F option causes playback not to stop at end of file but rather -to wait for additional data to be available from the input file. -.Pp -This option is useful when trace data is accumulated in binary format (to -save disk space) but a monitoring functionality is desired. -(default off). -.It Fl P -Read undecoded binary trace data from file instead from device (default off). -.It Fl R -Use -.Ar unit -as the receiving interface unit number in analyze mode. -.It Fl T -Use -.Ar unit -as the transmitting interface unit number in analyze mode. -.El -.Pp -When the USR1 signal is sent to a -.Nm -process, the currently used logfiles are reopened, so that logfile -rotation becomes possible. -.Pp -The trace output should be obvious. It is very handy to have the following -standard texts available when tracing ISDN protocols: -.Pp -.Bl -tag -width Ds -compact -offset indent -.It Ar I.430 -ISDN BRI layer 1 protocol description. -.It Ar Q.921 -ISDN D-channel layer 2 protocol description. -.It Ar Q.931 -ISDN D-channel layer 3 protocol description. -.It Ar 1TR6 -German-specific ISDN layer 3 protocol description. (NOTICE: decoding -of the 1TR6 protocol is included but not supported since i dont have -any longer access to a 1TR6 based ISDN installation.) -.El -.Pp - -.Nm Isdntrace -automatically detects the layer 3 protocol being used by looking at the -Protocol Discriminator (see: Q.931/1993 pp. 53). -.Pp - - -.Sh FILES -.Bl -tag -width daddeldi -compact -.It Pa /dev/i4btrc<n> -The devicefile(s) used to get the trace messages for ISDN card unit <n> -out of the kernel. -.El - -.Sh EXAMPLES -The command: -.Bd -literal -offset indent -isdntrace -f /var/tmp/isdn.trace -.Ed -.Pp -will start D channel tracing on passive controller 0 with all except B -channel tracing enabled and logs everything into the output file -/tmp/isdn.trace. - -.Sh SEE ALSO -.Xr isdnd 8 - -.Sh BUGS -Still some or more left. - -.Sh STANDARDS -ITU Recommendations I.430, Q.920, Q.921, Q.930, Q.931 -.Pp -FTZ Richtlinie 1TR3, Band III -.Pp -ITU Recommendation Q.932 (03/93), Q.950 (03/93) -.Pp -ETSI Recommendation ETS 300 179 (10/92), ETS 300 180 (10/92) -.Pp -ETSI Recommendation ETS 300 181 (04/93), ETS 300 182 (04/93) -.Pp -ITU Recommendation X.208, X.209 - -.Sh AUTHOR -The -.Nm -utility was written by Gary Jennejohn and Hellmuth Michaelis. -.Pp -This manual page was written by Hellmuth Michaelis, he can be reached -at hm@kts.org. - diff --git a/usr.sbin/i4b/isdntrace/pcause_1tr6.c b/usr.sbin/i4b/isdntrace/pcause_1tr6.c deleted file mode 100644 index 42f244d3f24b8..0000000000000 --- a/usr.sbin/i4b/isdntrace/pcause_1tr6.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * printing cause values - * --------------------- - * - * $Id: pcause_1tr6.c,v 1.4 1998/12/23 10:03:55 hm Exp $ - * - * last edit-date: [Wed Dec 23 10:57:11 1998] - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" -#include "pcause_1tr6.h" - -char * -print_cause_1tr6(unsigned char code) -{ - static char error_message[120]; - char *e; - - switch(code) - { - case CAUSE_1TR6_SHUTDN: - e = "normal D-channel shutdown"; - break; - - case CAUSE_1TR6_ICRV: - e = "invalid call reference value"; - break; - - case CAUSE_1TR6_BSNI: - e = "bearer service not implemented"; - break; - - case CAUSE_1TR6_CIDNE: - e = "call identity does not exist"; - break; - - case CAUSE_1TR6_CIIU: - e = "call identity in use"; - break; - - case CAUSE_1TR6_NCA: - e = "no channel available"; - break; - - case CAUSE_1TR6_RFNI: - e = "requested facility not implemented"; - break; - - case CAUSE_1TR6_RFNS: - e = "requested facility not subscribed"; - break; - - case CAUSE_1TR6_OCB: - e = "outgoing calls barred"; - break; - - case CAUSE_1TR6_UAB: - e = "user access busy"; - break; - - case CAUSE_1TR6_NECUG: - e = "non existent CUG"; - break; - - case CAUSE_1TR6_NECUG1: - e = "non existent CUG"; - break; - - case CAUSE_1TR6_SPV: - e = "kommunikationsbeziehung als SPV nicht erlaubt"; - break; - - case CAUSE_1TR6_DNO: - e = "destination not obtainable"; - break; - - case CAUSE_1TR6_NC: - e = "number changed"; - break; - - case CAUSE_1TR6_OOO: - e = "out of order"; - break; - - case CAUSE_1TR6_NUR: - e = "no user responding"; - break; - - case CAUSE_1TR6_UB: - e = "user busy"; - break; - - case CAUSE_1TR6_ICB: - e = "incoming calls barred"; - break; - - case CAUSE_1TR6_CR: - e = "call rejected"; - break; - - case CAUSE_1TR6_NCO: - e = "network congestion"; - break; - - case CAUSE_1TR6_RUI: - e = "remote user initiated"; - break; - - case CAUSE_1TR6_LPE: - e = "local procedure error"; - break; - - case CAUSE_1TR6_RPE: - e = "remote procedure error"; - break; - - case CAUSE_1TR6_RUS: - e = "remote user suspended"; - break; - - case CAUSE_1TR6_RUR: - e = "remote user resumed"; - break; - - case CAUSE_1TR6_UIDL: - e = "user info discharded locally"; - break; - - default: - e = "UNKNOWN error occured"; - break; - } - - sprintf(error_message, "0x%02x: %s", code & 0x7f, e); - return(error_message); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/pcause_1tr6.h b/usr.sbin/i4b/isdntrace/pcause_1tr6.h deleted file mode 100644 index f327cc721c873..0000000000000 --- a/usr.sbin/i4b/isdntrace/pcause_1tr6.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * pcause1tr6.h - 1TR6 causes definitions - * -------------------------------------- - * - * $Id: pcause_1tr6.h,v 1.3 1998/12/05 18:04:13 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:19:39 1998] - * - *---------------------------------------------------------------------------*/ - -char *print_cause_1tr6(unsigned char code); - -/* 1TR6 protocol causes */ - -#define CAUSE_1TR6_SHUTDN 0x00 /* normal D-channel shutdown */ -#define CAUSE_1TR6_ICRV 0x01 /* invalid call reference value */ -#define CAUSE_1TR6_BSNI 0x03 /* bearer service not implemented */ -#define CAUSE_1TR6_CIDNE 0x07 /* call identity does not exist */ -#define CAUSE_1TR6_CIIU 0x08 /* call identity in use */ -#define CAUSE_1TR6_NCA 0x0A /* no channel available */ -#define CAUSE_1TR6_RFNI 0x10 /* requested facility not implemented */ -#define CAUSE_1TR6_RFNS 0x11 /* requested facility not subscribed */ -#define CAUSE_1TR6_OCB 0x20 /* outgoing calls barred */ -#define CAUSE_1TR6_UAB 0x21 /* user access busy */ -#define CAUSE_1TR6_NECUG 0x22 /* non existent CUG */ -#define CAUSE_1TR6_NECUG1 0x23 /* non existent CUG */ -#define CAUSE_1TR6_SPV 0x25 /* kommunikationsbeziehung als SPV nicht erlaubt */ -#define CAUSE_1TR6_DNO 0x35 /* destination not obtainable */ -#define CAUSE_1TR6_NC 0x38 /* number changed */ -#define CAUSE_1TR6_OOO 0x39 /* out of order */ -#define CAUSE_1TR6_NUR 0x3A /* no user responding */ -#define CAUSE_1TR6_UB 0x3B /* user busy */ -#define CAUSE_1TR6_ICB 0x3D /* incoming calls barred */ -#define CAUSE_1TR6_CR 0x3E /* call rejected */ -#define CAUSE_1TR6_NCO 0x59 /* network congestion */ -#define CAUSE_1TR6_RUI 0x5A /* remote user initiated */ -#define CAUSE_1TR6_LPE 0x70 /* local procedure error */ -#define CAUSE_1TR6_RPE 0x71 /* remote procedure error */ -#define CAUSE_1TR6_RUS 0x72 /* remote user suspended */ -#define CAUSE_1TR6_RUR 0x73 /* remote user resumed */ -#define CAUSE_1TR6_UIDL 0x7F /* user info discharded locally */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/pcause_q850.c b/usr.sbin/i4b/isdntrace/pcause_q850.c deleted file mode 100644 index 1c98388a4ef96..0000000000000 --- a/usr.sbin/i4b/isdntrace/pcause_q850.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * printing cause values - * --------------------- - * - * $Id: pcause_q850.c,v 1.4 1998/12/23 10:03:55 hm Exp $ - * - * last edit-date: [Wed Dec 23 10:57:36 1998] - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" -#include "pcause_q850.h" - -char * -print_cause_q850(unsigned char code) -{ - static char error_message[120]; - char *e; - - switch(code) - { - case CAUSE_Q850_SHUTDN: - e = "normal D-channel shutdown"; - break; - - case CAUSE_Q850_NUNALLC: - e = "Unallocated (unassigned) number"; - break; - - case CAUSE_Q850_NRTTN: - e = "No route to specified transit network"; - break; - - case CAUSE_Q850_NRTDST: - e = "No route to destination"; - break; - - case CAUSE_Q850_SSINFTN: - e = "Send special information tone"; - break; - - case CAUSE_Q850_MDIALTP: - e = "Misdialled trunk prefix"; - break; - - case CAUSE_Q850_CHUNACC: - e = "Channel unacceptable"; - break; - - case CAUSE_Q850_CALLAWD: - e = "Call awarded and being delivered in an established channel"; - break; - - case CAUSE_Q850_PREEMPT: - e = "Preemption"; - break; - - case CAUSE_Q850_PREECRR: - e = "Preemption - circuit reserved for reuse"; - break; - - case CAUSE_Q850_NCCLR: - e = "Normal call clearing"; - break; - - case CAUSE_Q850_USRBSY: - e = "User busy"; - break; - - case CAUSE_Q850_NOUSRRSP: - e = "No user responding"; - break; - - case CAUSE_Q850_NOANSWR: - e = "No answer from user (user alerted)"; - break; - - case CAUSE_Q850_SUBSABS: - e = "Subscriber absent"; - break; - - case CAUSE_Q850_CALLREJ: - e = "Call rejected"; - break; - - case CAUSE_Q850_NUCHNG: - e = "Number changed"; - break; - - case CAUSE_Q850_NONSELUC: - e = "Non-selected user clearing"; - break; - - case CAUSE_Q850_DSTOOORDR: - e = "Destination out of order"; - break; - - case CAUSE_Q850_INVNUFMT: - e = "Invalid number format"; - break; - - case CAUSE_Q850_FACREJ: - e = "Facility rejected"; - break; - - case CAUSE_Q850_STENQRSP: - e = "Response to STATUS ENQUIRY"; - break; - - case CAUSE_Q850_NORMUNSP: - e = "Normal, unspecified"; - break; - - case CAUSE_Q850_NOCAVAIL: - e = "No circuit / channel available"; - break; - - case CAUSE_Q850_NETOOORDR: - e = "Network out of order"; - break; - - case CAUSE_Q850_PFMCDOOSERV: - e = "Permanent frame mode connection out of service"; - break; - - case CAUSE_Q850_PFMCOPER: - e = "Permanent frame mode connection operational"; - break; - - case CAUSE_Q850_TMPFAIL: - e = "Temporary failure"; - break; - - case CAUSE_Q850_SWEQCONG: - e = "Switching equipment congestion"; - break; - - case CAUSE_Q850_ACCINFDIS: - e = "Access information discarded"; - break; - - case CAUSE_Q850_REQCNOTAV: - e = "Requested circuit/channel not available"; - break; - - case CAUSE_Q850_PRECALBLK: - e = "Precedence call blocked"; - break; - - case CAUSE_Q850_RESUNAVAIL: - e = "Resources unavailable, unspecified"; - break; - - case CAUSE_Q850_QOSUNAVAIL: - e = "Quality of service unavailable"; - break; - - case CAUSE_Q850_REQSERVNS: - e = "Requested facility not subscribed"; - break; - - case CAUSE_Q850_OCBARRCUG: - e = "Outgoing calls barred within CUG"; - break; - - case CAUSE_Q850_ICBARRCUG: - e = "Incoming calls barred within CUG"; - break; - - case CAUSE_Q850_BCAPNAUTH: - e = "Bearer capability not authorized"; - break; - - case CAUSE_Q850_BCAPNAVAIL: - e = "Bearer capability not presently available"; - break; - - case CAUSE_Q850_INCSTOACISC: - e = "Inconsistenciy in designated outg. access info and subscriber class"; - break; - - case CAUSE_Q850_SOONOTAVAIL: - e = "Service or option not available, unspecified"; - break; - - case CAUSE_Q850_BCAPNOTIMPL: - e = "Bearer capability not implemented"; - break; - - case CAUSE_Q850_CHTYPNIMPL: - e = "Channel type not implemented"; - break; - - case CAUSE_Q850_REQFACNIMPL: - e = "Requested facility not implemented"; - break; - - case CAUSE_Q850_ORDINBCAVL: - e = "Only restricted digital information bearer capability is available"; - break; - - case CAUSE_Q850_SOONOTIMPL: - e = "Service or option not implemented, unspecified"; - break; - - case CAUSE_Q850_INVCLRFVAL: - e = "Invalid call reference value"; - break; - - case CAUSE_Q850_IDCHDNOEX: - e = "Identified channel does not exist"; - break; - - case CAUSE_Q850_SUSCAEXIN: - e = "A suspended call exists, but this call identity does not"; - break; - - case CAUSE_Q850_CLIDINUSE: - e = "Call identity in use"; - break; - - case CAUSE_Q850_NOCLSUSP: - e = "No call suspended"; - break; - - case CAUSE_Q850_CLIDCLRD: - e = "Call having the requested call identity has been cleared"; - break; - - case CAUSE_Q850_UNOTMEMCUG: - e = "User not member of CUG"; - break; - - case CAUSE_Q850_INCDEST: - e = "Incompatible destination"; - break; - - case CAUSE_Q850_NONEXCUG: - e = "Non-existent CUG"; - break; - - case CAUSE_Q850_INVNTWSEL: - e = "Invalid transit network selection"; - break; - - case CAUSE_Q850_INVMSG: - e = "Invalid message, unspecified"; - break; - - case CAUSE_Q850_MIEMISS: - e = "Mandatory information element is missing"; - break; - - case CAUSE_Q850_MSGTNI: - e = "Message type non-existent or not implemented"; - break; - - case CAUSE_Q850_MSGNCMPT: - e = "Msg incompatible with call state/message type non-existent/not implemented"; - break; - - case CAUSE_Q850_IENENI: - e = "Information element/parameter non-existent or not implemented"; - break; - - case CAUSE_Q850_INVIEC: - e = "Invalid information element contents"; - break; - - case CAUSE_Q850_MSGNCWCS: - e = "Message not compatible with call state"; - break; - - case CAUSE_Q850_RECOTIMEXP: - e = "Recovery on timer expiry"; - break; - - case CAUSE_Q850_PARMNENIPO: - e = "Parameter non-existent or not implemented, passed on"; - break; - - case CAUSE_Q850_MSGUNRDPRM: - e = "Message with unrecognized parameter, discarded"; - break; - - case CAUSE_Q850_PROTERR: - e = "Protocol error, unspecified"; - break; - - case CAUSE_Q850_INTWRKU: - e = "Interworking, unspecified"; - break; - - default: - e = "ERROR, unknown cause value!"; - break; - } - - sprintf(error_message, "%d: %s (Q.850)", code, e); - return(error_message); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/pcause_q850.h b/usr.sbin/i4b/isdntrace/pcause_q850.h deleted file mode 100644 index a6b947fefa25e..0000000000000 --- a/usr.sbin/i4b/isdntrace/pcause_q850.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * pcauseq850.h - Q.850 causes definitions - * --------------------------------------- - * - * $Id: pcause_q850.h,v 1.3 1998/12/05 18:04:18 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:20:05 1998] - * - *---------------------------------------------------------------------------*/ - -char *print_cause_q850(unsigned char code); - -/* Q.850 causes */ - -#define CAUSE_Q850_SHUTDN 0x00 /* normal D-channel shutdown */ -#define CAUSE_Q850_NUNALLC 0x01 /* Unallocated (unassigned) number */ -#define CAUSE_Q850_NRTTN 0x02 /* No route to specified transit network */ -#define CAUSE_Q850_NRTDST 0x03 /* No route to destination */ -#define CAUSE_Q850_SSINFTN 0x04 /* Send special information tone */ -#define CAUSE_Q850_MDIALTP 0x05 /* Misdialled trunk prefix */ -#define CAUSE_Q850_CHUNACC 0x06 /* Channel unacceptable */ -#define CAUSE_Q850_CALLAWD 0x07 /* Call awarded and being delivered in an established channel */ -#define CAUSE_Q850_PREEMPT 0x08 /* Preemption */ -#define CAUSE_Q850_PREECRR 0x09 /* Preemption - circuit reserved for reuse */ -#define CAUSE_Q850_NCCLR 0x10 /* Normal call clearing */ -#define CAUSE_Q850_USRBSY 0x11 /* User busy */ -#define CAUSE_Q850_NOUSRRSP 0x12 /* No user responding */ -#define CAUSE_Q850_NOANSWR 0x13 /* No answer from user (user alerted) */ -#define CAUSE_Q850_SUBSABS 0x14 /* Subscriber absent */ -#define CAUSE_Q850_CALLREJ 0x15 /* Call rejected */ -#define CAUSE_Q850_NUCHNG 0x16 /* Number changed */ -#define CAUSE_Q850_NONSELUC 0x1A /* Non-selected user clearing */ -#define CAUSE_Q850_DSTOOORDR 0x1B /* Destination out of order */ -#define CAUSE_Q850_INVNUFMT 0x1C /* Invalid number format */ -#define CAUSE_Q850_FACREJ 0x1D /* Facility rejected */ -#define CAUSE_Q850_STENQRSP 0x1E /* Response to STATUS ENQUIRY */ -#define CAUSE_Q850_NORMUNSP 0x1F /* Normal, unspecified */ -#define CAUSE_Q850_NOCAVAIL 0x22 /* No circuit / channel available */ -#define CAUSE_Q850_NETOOORDR 0x26 /* Network out of order */ -#define CAUSE_Q850_PFMCDOOSERV 0x27 /* Permanent frame mode connection out of service */ -#define CAUSE_Q850_PFMCOPER 0x28 /* Permanent frame mode connection operational */ -#define CAUSE_Q850_TMPFAIL 0x29 /* Temporary failure */ -#define CAUSE_Q850_SWEQCONG 0x2A /* Switching equipment congestion */ -#define CAUSE_Q850_ACCINFDIS 0x2B /* Access information discarded */ -#define CAUSE_Q850_REQCNOTAV 0x2C /* Requested circuit/channel not available */ -#define CAUSE_Q850_PRECALBLK 0x2E /* Precedence call blocked */ -#define CAUSE_Q850_RESUNAVAIL 0x2F /* Resources unavailable, unspecified */ -#define CAUSE_Q850_QOSUNAVAIL 0x31 /* Quality of service unavailable */ -#define CAUSE_Q850_REQSERVNS 0x32 /* Requested facility not subscribed */ -#define CAUSE_Q850_OCBARRCUG 0x35 /* Outgoing calls barred within CUG */ -#define CAUSE_Q850_ICBARRCUG 0x36 /* Incoming calls barred within CUG */ -#define CAUSE_Q850_BCAPNAUTH 0x39 /* Bearer capability not authorized */ -#define CAUSE_Q850_BCAPNAVAIL 0x3A /* Bearer capability not presently available */ -#define CAUSE_Q850_INCSTOACISC 0x3E /* Inconsistenciy in designated outgoing access information and subscriber class */ -#define CAUSE_Q850_SOONOTAVAIL 0x3F /* Service or option not available, unspecified */ -#define CAUSE_Q850_BCAPNOTIMPL 0x41 /* Bearer capability not implemented */ -#define CAUSE_Q850_CHTYPNIMPL 0x42 /* Channel type not implemented */ -#define CAUSE_Q850_REQFACNIMPL 0x45 /* Requested facility not implemented */ -#define CAUSE_Q850_ORDINBCAVL 0x46 /* Only restricted digital information bearer capability is available */ -#define CAUSE_Q850_SOONOTIMPL 0x4F /* Service or option not implemented, unspecified */ -#define CAUSE_Q850_INVCLRFVAL 0x51 /* Invalid call reference value */ -#define CAUSE_Q850_IDCHDNOEX 0x52 /* Identified channel does not exist */ -#define CAUSE_Q850_SUSCAEXIN 0x53 /* A suspended call exists, but this call identity does not */ -#define CAUSE_Q850_CLIDINUSE 0x54 /* Call identity in use */ -#define CAUSE_Q850_NOCLSUSP 0x55 /* No call suspended */ -#define CAUSE_Q850_CLIDCLRD 0x56 /* Call having the requested call identity has been cleared */ -#define CAUSE_Q850_UNOTMEMCUG 0x57 /* User not member of CUG */ -#define CAUSE_Q850_INCDEST 0x58 /* Incompatible destination */ -#define CAUSE_Q850_NONEXCUG 0x5A /* Non-existent CUG */ -#define CAUSE_Q850_INVNTWSEL 0x5B /* Invalid transit network selection */ -#define CAUSE_Q850_INVMSG 0x5F /* Invalid message, unspecified */ -#define CAUSE_Q850_MIEMISS 0x60 /* Mandatory information element is missing */ -#define CAUSE_Q850_MSGTNI 0x61 /* Message type non-existent or not implemented */ -#define CAUSE_Q850_MSGNCMPT 0x62 /* Message not compatible with call state or message type non-existent or not implemented */ -#define CAUSE_Q850_IENENI 0x63 /* Information element/parameter non-existent or not implemented */ -#define CAUSE_Q850_INVIEC 0x64 /* Invalid information element contents */ -#define CAUSE_Q850_MSGNCWCS 0x65 /* Message not compatible with call state */ -#define CAUSE_Q850_RECOTIMEXP 0x66 /* Recovery on timer expiry */ -#define CAUSE_Q850_PARMNENIPO 0x67 /* Parameter non-existent or not implemented, passed on */ -#define CAUSE_Q850_MSGUNRDPRM 0x6E /* Message with unrecognized parameter, discarded */ -#define CAUSE_Q850_PROTERR 0x6F /* Protocol error, unspecified */ -#define CAUSE_Q850_INTWRKU 0x7F /* Interworking, unspecified */ - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/q921.c b/usr.sbin/i4b/isdntrace/q921.c deleted file mode 100644 index df007a49dacab..0000000000000 --- a/usr.sbin/i4b/isdntrace/q921.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (c) 1996 Gary Jennejohn. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *---------------------------------------------------------------------------* - * - * q.921.c - print Q.921 traces - * ---------------------------- - * - * $Id: q921.c,v 1.2 1998/04/16 15:27:02 hm Exp $ - * - * last edit-date: [Thu Apr 16 15:38:34 1998] - * - * -hm splitting - * -hm printing to buffer - * -hm slightly reformatted TEI management proc output - * -hm minor fixes - * -hm fixing response/command - * -hm fixing count off by one - * -hm dump only Q.921 part of frame - * -hm cleanup - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" - -/*---------------------------------------------------------------------------* - * decode LAPD (Q.921) protocol - *---------------------------------------------------------------------------*/ -int -decode_lapd(char *pbuf, int n, unsigned char *buf, int dir, int raw, int printit) -{ - int sap, tei, cmd, p_f; - int cnt = 0; - int i; - char locbuf[32000]; - char *lbufp = &locbuf[0]; - - *lbufp = '\0'; - *pbuf = '\0'; - - sap = (buf[0] >> 2) & 0x3f; - cnt++; - - tei = buf[1] >> 1; - cnt++; - - if(dir == FROM_TE) - cmd = !(buf[0] & 2); - else - cmd = buf[0] & 2; - - switch (sap) - { - /* SAPI control procedures */ - case 0: - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "Q921: SAP=%d (Call Control), %c, TEI=%d, ", sap, cmd?'C':'R', tei); - - if((buf[2] & 0x01) == 0) - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "I-Frame: "); - - p_f = buf [3] & 1; - - if(printit) - sprintf((lbufp+strlen(lbufp)), "N(S) %d N(R) %d P %d ", buf [2] >> 1, buf [3] >> 1, p_f); - - cnt += 2; - } - else if((buf[2] & 0x03) == 0x01) - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "S-Frame: "); - - p_f = buf [3] & 1; - cmd = buf [2] & 0x0c; - - if(printit) - { - if (cmd == 0) - sprintf((lbufp+strlen(lbufp)), "RR N(R) %d PF %d ", buf [3] >> 1, p_f); - if (cmd == 4) - sprintf((lbufp+strlen(lbufp)), "RNR N(R) %d PF %d ", buf [3] >> 1, p_f); - if (cmd == 8) - sprintf((lbufp+strlen(lbufp)), "REJ N(R) %d PF %d ", buf [3] >> 1, p_f); - } - cnt += 2; - } - else if((buf[2] & 0x03) == 0x03) - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "U-Frame: "); - - p_f = (buf [2] & 0x10) >> 4; - cmd = buf [2] & 0xec; - - if(printit) - { - if (cmd == 0x6c) - sprintf((lbufp+strlen(lbufp)), "SABME PF %d ", p_f); - if (cmd == 0x0c) - sprintf((lbufp+strlen(lbufp)), "DM PF %d ", p_f); - if (cmd == 0) - sprintf((lbufp+strlen(lbufp)), "UI PF %d ", p_f); - if (cmd == 0x40) - sprintf((lbufp+strlen(lbufp)), "DISC PF %d ", p_f); - if (cmd == 0x60) - sprintf((lbufp+strlen(lbufp)), "UA PF %d ", p_f); - if (cmd == 0x84) - sprintf((lbufp+strlen(lbufp)), "FRMR PF %d ", p_f); - if (cmd == 0xac) - sprintf((lbufp+strlen(lbufp)), "XID PF %d ", p_f); - /* information field ??? */ - } - cnt++; - } - break; - } - - /* D channel X.25 */ - - case 16: - if(printit) - sprintf((lbufp+strlen(lbufp)), "Q921: SAP=%d (X.25), %c, TEI=%d, ", sap, cmd?'C':'R', tei); - cnt = n; - goto dump; - - /* Loopback test */ - - case 32: - if(printit) - sprintf((lbufp+strlen(lbufp)), "Q921: SAP=%d (Loopbacktest), %c, TEI=%d, ", sap, cmd?'C':'R', tei); - cnt = n; - goto dump; - - /* SAPI layer 2 management functions */ - - case 63: - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "Q921: SAP=%d (TEI-Management), %c, TEI=%d, ", sap, cmd?'C':'R', tei); - - if (tei != 127) - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "ILLEGAL TEI\n"); - cnt = n; - goto dump; - } - - if (buf [2] != 3 && buf [3] != 0xf) - { - if(printit) - sprintf((lbufp+strlen(lbufp)), "invalid format!\n"); - cnt = n; - goto dump; - } - cnt+= 2; /* UI + MEI */ - - if(printit) - sprintf((lbufp+strlen(lbufp)), "Ri=0x%04hx, ", *(short *)&buf[4]); - cnt += 2; /* Ri */ - - switch (buf[6]) - { - case 1: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdRequest, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 2: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdAssign, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 3: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdDenied, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 4: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdCheckReq, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 5: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdCheckResp, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 6: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdRemove, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - case 7: - if(printit) - sprintf((lbufp+strlen(lbufp)), "IdVerify, Ai=%d", (buf [7] >> 1)); - cnt += 2; - break; - default: - if(printit) - sprintf((lbufp+strlen(lbufp)), "Unknown Msg Type\n"); - cnt = n; - goto dump; - } - break; - } - - /* Illegal SAPI */ - - default: - if(printit) - sprintf((lbufp+strlen(lbufp)), "Q921: ERROR, SAP=%d (Illegal SAPI), %c, TEI=%d\n", sap, cmd?'C':'R', tei); - cnt = n; - goto dump; - } - -dump: - if(printit) - sprintf((lbufp+strlen(lbufp)), "\n"); - - if(raw && printit) - { - int j; - for (i = 0; i < cnt; i += 16) - { - sprintf((pbuf+strlen(pbuf)),"Dump:%.3d ", i); - for (j = 0; j < 16; j++) - if (i + j < cnt) - sprintf((pbuf+strlen(pbuf)),"%02x ", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf))," "); - sprintf((pbuf+strlen(pbuf))," "); - for (j = 0; j < 16 && i + j < cnt; j++) - if (isprint(buf[i + j])) - sprintf((pbuf+strlen(pbuf)),"%c", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf)),"."); - sprintf((pbuf+strlen(pbuf)),"\n"); - } - } - - sprintf((pbuf+strlen(pbuf)),"%s", &locbuf[0]); - - return (cnt); -} - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/q931.c b/usr.sbin/i4b/isdntrace/q931.c deleted file mode 100644 index 3cc2a3848a4fa..0000000000000 --- a/usr.sbin/i4b/isdntrace/q931.c +++ /dev/null @@ -1,783 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * q931.c - print Q.931 traces - * --------------------------- - * - * $Id: q931.c,v 1.4 1998/12/05 18:04:19 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:20:31 1998] - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" - -/*---------------------------------------------------------------------------* - * decode Q.931 protocol - *---------------------------------------------------------------------------*/ -void -decode_q931(char *pbuf, int n, int off, unsigned char *buf, int raw) -{ - int codeset = 0; - int codelock = 0; - int oldcodeset = 0; - - int pd; - int len; - int j; - int i; - - if(n <= 0) - return; - - *pbuf = '\0'; - - if(raw) - { - - for (i = 0; i < n; i += 16) - { - sprintf((pbuf+strlen(pbuf)),"Dump:%.3d ", i+off); - for (j = 0; j < 16; j++) - if (i + j < n) - sprintf((pbuf+strlen(pbuf)),"%02x ", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf))," "); - sprintf((pbuf+strlen(pbuf))," "); - for (j = 0; j < 16 && i + j < n; j++) - if (isprint(buf[i + j])) - sprintf((pbuf+strlen(pbuf)),"%c", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf)),"."); - sprintf((pbuf+strlen(pbuf)),"\n"); - } - } - - i = 0; - - sprintf((pbuf+strlen(pbuf)), "Q931: "); - - /* protocol discriminator */ - - pd = buf[i]; - - if(pd >= 0x00 && pd <= 0x07) - sprintf((pbuf+strlen(pbuf)), "pd=User-User (0x%02x), ",pd); - else if(pd == 0x08) - sprintf((pbuf+strlen(pbuf)), "pd=Q.931/I.451, "); - else if(pd >= 0x10 && pd <= 0x3f) - sprintf((pbuf+strlen(pbuf)), "pd=Other Layer 3 or X.25 (0x%02x), ",pd); - else if(pd >= 0x40 && pd <= 0x4f) - sprintf((pbuf+strlen(pbuf)), "pd=National Use (0x%02x), ",pd); - else if(pd >= 0x50 && pd <= 0xfe) - sprintf((pbuf+strlen(pbuf)), "pd=Other Layer 3 or X.25 (0x%02x), ",pd); - else - sprintf((pbuf+strlen(pbuf)), "pd=Reserved (0x%02x), ",pd); - - /* call reference */ - - i++; - - len = buf[i] & 0x0f; - - switch(len) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "cr=Dummy, "); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "cr=0x%02x %s, ", (buf[i+1] & 0x7f), (buf[i+1] & 0x80) ? "(from destination)" : "(from origination)"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "cr=0x%02x 0x%02x %s, ", (buf[i+1] & 0x7f), (buf[i+2] & 0x7f), (buf[i+1] & 0x80) ? "(org)" : "(dst)"); - break; - } - - i += (len+1); - - /* message type */ - - sprintf((pbuf+strlen(pbuf)), "message="); - - switch(buf[i]) - { - /* escape to nationally specific message type */ - - case 0x00: - sprintf((pbuf+strlen(pbuf)), "ESCAPE: "); - break; - - /* call establishment */ - - case 0x01: - sprintf((pbuf+strlen(pbuf)), "ALERTING: "); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "CALL PROCEEDING: "); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "PROGRESS: "); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "SETUP: "); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "CONNECT: "); - break; - case 0x0d: - sprintf((pbuf+strlen(pbuf)), "SETUP ACKNOWLEDGE: "); - break; - case 0x0f: - sprintf((pbuf+strlen(pbuf)), "CONNECT ACKNOWLEDGE: "); - break; - - /* call information phase */ - - case 0x20: - sprintf((pbuf+strlen(pbuf)), "USER INFORMATION: "); - break; - case 0x21: - sprintf((pbuf+strlen(pbuf)), "SUSPEND REJECT: "); - break; - case 0x22: - sprintf((pbuf+strlen(pbuf)), "RESUME REJECT: "); - break; - case 0x24: - sprintf((pbuf+strlen(pbuf)), "HOLD (Q.932): "); - break; - case 0x25: - sprintf((pbuf+strlen(pbuf)), "SUSPEND: "); - break; - case 0x26: - sprintf((pbuf+strlen(pbuf)), "RESUME: "); - break; - case 0x28: - sprintf((pbuf+strlen(pbuf)), "HOLD ACKNOWLEDGE (Q.932): "); - break; - case 0x2d: - sprintf((pbuf+strlen(pbuf)), "SUSPEND ACKNOWLEDGE: "); - break; - case 0x2e: - sprintf((pbuf+strlen(pbuf)), "RESUME ACKNOWLEDGE: "); - break; - case 0x30: - sprintf((pbuf+strlen(pbuf)), "HOLD REJECT (Q.932): "); - break; - case 0x31: - sprintf((pbuf+strlen(pbuf)), "RETRIEVE (Q.932): "); - break; - case 0x32: - sprintf((pbuf+strlen(pbuf)), "RETRIEVE ACKNOWLEDGE (Q.932): "); - break; - case 0x37: - sprintf((pbuf+strlen(pbuf)), "RETRIEVE REJECT (Q.932): "); - break; - - /* call clearing */ - - case 0x40: - sprintf((pbuf+strlen(pbuf)), "DETACH: "); - break; - case 0x45: - sprintf((pbuf+strlen(pbuf)), "DISCONNECT: "); - break; - case 0x46: - sprintf((pbuf+strlen(pbuf)), "RESTART: "); - break; - case 0x48: - sprintf((pbuf+strlen(pbuf)), "DETACH ACKNOWLEDGE: "); - break; - case 0x4d: - sprintf((pbuf+strlen(pbuf)), "RELEASE: "); - break; - case 0x4e: - sprintf((pbuf+strlen(pbuf)), "RESTART ACKNOWLEDGE: "); - break; - case 0x5a: - sprintf((pbuf+strlen(pbuf)), "RELEASE COMPLETE: "); - break; - - /* misc messages */ - - case 0x60: - sprintf((pbuf+strlen(pbuf)), "SEGMENT: "); - break; - case 0x62: - sprintf((pbuf+strlen(pbuf)), "FACILITY (Q.932): "); - break; - case 0x64: - sprintf((pbuf+strlen(pbuf)), "REGISTER (Q.932): "); - break; - case 0x68: - sprintf((pbuf+strlen(pbuf)), "CANCEL ACKNOWLEDGE: "); - break; - case 0x6a: - sprintf((pbuf+strlen(pbuf)), "FACILITY ACKNOWLEDGE: "); - break; - case 0x6c: - sprintf((pbuf+strlen(pbuf)), "REGISTER ACKNOWLEDGE: "); - break; - case 0x6e: - sprintf((pbuf+strlen(pbuf)), "NOTIFY: "); - break; - case 0x70: - sprintf((pbuf+strlen(pbuf)), "CANCEL REJECT: "); - break; - case 0x72: - sprintf((pbuf+strlen(pbuf)), "FACILITY REJECT: "); - break; - case 0x74: - sprintf((pbuf+strlen(pbuf)), "REGISTER REJECT: "); - break; - case 0x75: - sprintf((pbuf+strlen(pbuf)), "STATUS ENQIRY: "); - break; - case 0x79: - sprintf((pbuf+strlen(pbuf)), "CONGESTION CONTROL: "); - break; - case 0x7b: - sprintf((pbuf+strlen(pbuf)), "INFORMATION: "); - break; - case 0x7d: - sprintf((pbuf+strlen(pbuf)), "STATUS: "); - break; - default: - sprintf((pbuf+strlen(pbuf)), "UNDEFINED, TYPE=0x%02x, ", buf[i]); - break; - } - - /* other information elements */ - - i++; - - for (; i < n;) - { - sprintf((pbuf+strlen(pbuf)), "\n "); - - if(buf[i] & 0x80) - { - /* single octett info element */ - - switch(buf[i] & 0x70) - { - case 0x00: /* reserved */ - sprintf((pbuf+strlen(pbuf)), "[reserved single octett info]"); - break; - - case 0x10: /* shift */ - oldcodeset = codeset; - codeset = buf[i] & 0x07; - if(buf[i] & 0x08) - codelock = 0; - else - codelock = 1; - sprintf((pbuf+strlen(pbuf)), "[shift: codeset=%d lock=%d]", codeset, codelock); - break; - - case 0x20: /* more data */ - if(buf[i] & 0x01) - sprintf((pbuf+strlen(pbuf)), "[sending complete]"); - else - sprintf((pbuf+strlen(pbuf)), "[more data]"); - break; - - case 0x30: /* congestion level */ - sprintf((pbuf+strlen(pbuf)), "[congestion level="); - switch(buf[i] & 0x0f) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "rx-ready]"); - break; - case 0x0f: - sprintf((pbuf+strlen(pbuf)), "rx-not-ready]"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)]", buf[i] & 0x0f); - break; - } - break; - - case 0x50: /* repeat ind */ - sprintf((pbuf+strlen(pbuf)), "[repeat indicator]"); - break; - - default: - sprintf((pbuf+strlen(pbuf)), "[UNKNOWN SINGLE OCTET ELEMENT 0x%02x]", buf[i]); - break; - } - - i++; /* next */ - - } - else - { - /* variable length info element */ - - if(codeset == 0) - { - switch(buf[i]) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "[segmented message: "); - break; - case 0x04: - sprintf((pbuf+strlen(pbuf)), "[bearer capability: "); - i += p_q931bc(pbuf, &buf[i]); - goto next; - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "[cause: "); - i += p_q931cause(pbuf, &buf[i]); - goto next; - break; - case 0x0c: - sprintf((pbuf+strlen(pbuf)), "[connected address (old): "); - break; - case 0x0d: - sprintf((pbuf+strlen(pbuf)), "[extended facility (Q.932: )"); - break; - case 0x10: - sprintf((pbuf+strlen(pbuf)), "[call identity: "); - break; - case 0x14: - sprintf((pbuf+strlen(pbuf)), "[call state: "); - i++; - len = buf[i]; - i++; - sprintf((pbuf+strlen(pbuf)), "Std="); - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "CCITT"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "ISO/IEC"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "National"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Special"); - break; - } - sprintf((pbuf+strlen(pbuf)), ", State="); - - switch((buf[i] & 0x3f)) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "Null"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "Call initiated"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "Overlap sending"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Outgoing call proceeding"); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), "Call delivered"); - break; - case 6: - sprintf((pbuf+strlen(pbuf)), "Call present"); - break; - case 7: - sprintf((pbuf+strlen(pbuf)), "Call received"); - break; - case 8: - sprintf((pbuf+strlen(pbuf)), "Connect request"); - break; - case 9: - sprintf((pbuf+strlen(pbuf)), "Incoming call proceeding"); - break; - case 10: - sprintf((pbuf+strlen(pbuf)), "Active"); - break; - case 11: - sprintf((pbuf+strlen(pbuf)), "Disconnect request"); - break; - case 12: - sprintf((pbuf+strlen(pbuf)), "Disconnect indication"); - break; - case 15: - sprintf((pbuf+strlen(pbuf)), "Suspend request"); - break; - case 17: - sprintf((pbuf+strlen(pbuf)), "Resume request"); - break; - case 19: - sprintf((pbuf+strlen(pbuf)), "Release request"); - break; - case 22: - sprintf((pbuf+strlen(pbuf)), "Call abort"); - break; - case 25: - sprintf((pbuf+strlen(pbuf)), "Overlap receiving"); - break; - case 0x3d: - sprintf((pbuf+strlen(pbuf)), "Restart request"); - break; - case 0x3e: - sprintf((pbuf+strlen(pbuf)), "Restart"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "ERROR: undefined/reserved"); - break; - } - sprintf((pbuf+strlen(pbuf)), "]"); - i++; - goto next; - break; - case 0x18: - sprintf((pbuf+strlen(pbuf)), "[channel id: channel="); - i++; - len = buf[i]; - i++; - switch(buf[i] & 0x03) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "no channel"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "B-1"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "B-2"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "any channel"); - break; - } - if(buf[i] & 0x08) - sprintf((pbuf+strlen(pbuf)), " (exclusive)]"); - else - sprintf((pbuf+strlen(pbuf)), " (preferred)]"); - i++; - goto next; - break; - case 0x19: - sprintf((pbuf+strlen(pbuf)), "[data link connection id (Q.933): "); - break; - case 0x1c: - i += q932_facility(pbuf, &buf[i]); - goto next; - break; - case 0x1e: - sprintf((pbuf+strlen(pbuf)), "[progress ind: "); - i++; - len = buf[i]; - i++; - sprintf((pbuf+strlen(pbuf)), "Std="); - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "CCITT"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "ISO/IEC"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "National"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Local"); - break; - } - sprintf((pbuf+strlen(pbuf)), ", Loc="); - - switch((buf[i] & 0x0f)) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "User"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "Private network serving local user"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "Public network serving local user"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Transit network"); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), "Public network serving remote user"); - break; - case 5: - sprintf((pbuf+strlen(pbuf)), "Private network serving remote user"); - break; - case 6: - sprintf((pbuf+strlen(pbuf)), "Network beyond interworking point"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "ERROR: undefined/reserved"); - break; - } - - i++; - - sprintf((pbuf+strlen(pbuf)), "\n Description: "); - - switch((buf[i] & 0x7f)) - { - case 1: - sprintf((pbuf+strlen(pbuf)), "Call is not end-to-end ISDN"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "Destination address is non-ISDN"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Origination address is non-ISDN"); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), "Call has returned to the ISDN"); - break; - case 5: - sprintf((pbuf+strlen(pbuf)), "Interworking occured, Service change"); - break; - case 8: - sprintf((pbuf+strlen(pbuf)), "In-band info or appropriate pattern now available"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "ERROR: undefined/reserved"); - break; - } - sprintf((pbuf+strlen(pbuf)), "]"); - i++; - goto next; - break; - case 0x20: - sprintf((pbuf+strlen(pbuf)), "[network specific facilities: "); - break; - case 0x24: - sprintf((pbuf+strlen(pbuf)), "[terminal capabilities: "); - break; - case 0x27: - sprintf((pbuf+strlen(pbuf)), "[notification ind: "); - break; - case 0x28: - sprintf((pbuf+strlen(pbuf)), "[display: "); - i++; - len = buf[i]; - i++; - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"%c", buf[j+i]); - } - sprintf((pbuf+strlen(pbuf)),"]"); - i += j; - goto next; - break; - case 0x29: - sprintf((pbuf+strlen(pbuf)), "[date/time: "); - i++; - len = buf[i]; - i++; - j = 0; - sprintf((pbuf+strlen(pbuf)),"%.2d.%.2d.%.2d", - buf[i+2], buf[i+1], buf[i]); - j+=3; - if(j < len) - { - sprintf((pbuf+strlen(pbuf))," %.2d", buf[i+3]); - j++; - } - if(j < len) - { - sprintf((pbuf+strlen(pbuf)),":%.2d", buf[i+4]); - j++; - } - if(j < len) - { - sprintf((pbuf+strlen(pbuf)),":%.2d", buf[i+5]); - j++; - } - sprintf((pbuf+strlen(pbuf)),"]"); - i += len; - goto next; - break; - case 0x2c: - sprintf((pbuf+strlen(pbuf)), "[keypad: "); - break; - case 0x30: - sprintf((pbuf+strlen(pbuf)), "[keypad echo: "); - break; - case 0x32: - sprintf((pbuf+strlen(pbuf)), "[information req (Q.932): "); - break; - case 0x34: - sprintf((pbuf+strlen(pbuf)), "[signal: "); - break; - case 0x36: - sprintf((pbuf+strlen(pbuf)), "[switchhook: "); - break; - case 0x38: - sprintf((pbuf+strlen(pbuf)), "[feature activation (Q.932): "); - break; - case 0x39: - sprintf((pbuf+strlen(pbuf)), "[feature ind (Q.932): "); - break; - case 0x3a: - sprintf((pbuf+strlen(pbuf)), "[service profile id (Q.932): "); - break; - case 0x3b: - sprintf((pbuf+strlen(pbuf)), "[endpoint id (Q.932): "); - break; - case 0x40: - sprintf((pbuf+strlen(pbuf)), "[information rate: "); - break; - case 0x41: - sprintf((pbuf+strlen(pbuf)), "[precedence level (Q.955): "); - break; - case 0x42: - sprintf((pbuf+strlen(pbuf)), "[end-to-end transit delay: "); - break; - case 0x43: - sprintf((pbuf+strlen(pbuf)), "[transit delay detection and indication: "); - break; - case 0x44: - sprintf((pbuf+strlen(pbuf)), "[packet layer binary parameters: "); - break; - case 0x45: - sprintf((pbuf+strlen(pbuf)), "[packet layer window size: "); - break; - case 0x46: - sprintf((pbuf+strlen(pbuf)), "[packet size: "); - break; - case 0x47: - sprintf((pbuf+strlen(pbuf)), "[closed user group: "); - break; - case 0x48: - sprintf((pbuf+strlen(pbuf)), "[link layer core parameters (Q.933): "); - break; - case 0x49: - sprintf((pbuf+strlen(pbuf)), "[link layer protocol parameters (Q.933): "); - break; - case 0x4a: - sprintf((pbuf+strlen(pbuf)), "[reverse charging information: "); - break; - case 0x4c: - sprintf((pbuf+strlen(pbuf)), "[connected number (Q.951): "); - i += p_q931address(pbuf, &buf[i]); - goto next; - break; - - break; - case 0x4d: - sprintf((pbuf+strlen(pbuf)), "[connected subaddress (Q.951): "); - break; - case 0x50: - sprintf((pbuf+strlen(pbuf)), "[X.213 priority (Q.933): "); - break; - case 0x51: - sprintf((pbuf+strlen(pbuf)), "[report type (Q.933): "); - break; - case 0x53: - sprintf((pbuf+strlen(pbuf)), "[link integrity verification (Q.933): "); - break; - case 0x57: - sprintf((pbuf+strlen(pbuf)), "[PVC status (Q.933): "); - break; - case 0x6c: - sprintf((pbuf+strlen(pbuf)), "[calling party number: "); - i += p_q931address(pbuf, &buf[i]); - goto next; - break; - case 0x6d: - sprintf((pbuf+strlen(pbuf)), "[calling party subaddress: "); - break; - case 0x70: - sprintf((pbuf+strlen(pbuf)), "[called party number: "); - i += p_q931address(pbuf, &buf[i]); - goto next; - break; - case 0x71: - sprintf((pbuf+strlen(pbuf)), "[called party subaddress: "); - break; - case 0x74: - sprintf((pbuf+strlen(pbuf)), "[redirecting number: "); - break; - case 0x76: - sprintf((pbuf+strlen(pbuf)), "[redirection number: "); - break; - case 0x78: - sprintf((pbuf+strlen(pbuf)), "[transit network selection: "); - break; - case 0x79: - sprintf((pbuf+strlen(pbuf)), "[restart indicator: "); - break; - case 0x7c: - sprintf((pbuf+strlen(pbuf)), "[low layer compatibility: "); - break; - case 0x7d: - sprintf((pbuf+strlen(pbuf)), "[high layer compatibility:"); - i += p_q931high_compat(pbuf, &buf[i]); - goto next; - break; - case 0x7e: - sprintf((pbuf+strlen(pbuf)), "[user-user: "); - break; - case 0x7f: - sprintf((pbuf+strlen(pbuf)), "[escape for extension: "); - break; - default: - sprintf((pbuf+strlen(pbuf)), "[UNKNOWN INFO-ELEMENT-ID=0x%02x: ", buf[i]); - break; - } - } - else - { - sprintf((pbuf+strlen(pbuf)), "[UNKNOWN CODESET=%d, IE=0x%02x: ", codeset, buf[i]); - } - - i++; /* index -> length */ - - len = buf[i]; - - sprintf((pbuf+strlen(pbuf)), "LEN=0x%02x, DATA=", len); - - i++; /* index -> 1st param */ - - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"0x%02x ", buf[j+i]); - } - - sprintf((pbuf+strlen(pbuf)),"]"); - - i += len; - -next: - - if(!codelock && (codeset != oldcodeset)) - codeset = oldcodeset; - } - } - sprintf((pbuf+strlen(pbuf)),"\n"); -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdntrace/q931_util.c b/usr.sbin/i4b/isdntrace/q931_util.c deleted file mode 100644 index 1b2ab09faef57..0000000000000 --- a/usr.sbin/i4b/isdntrace/q931_util.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * q931_util.c - utility functions to print Q.931 traces - * ----------------------------------------------------- - * - * $Id: q931_util.c,v 1.4 1998/12/05 18:04:21 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:20:43 1998] - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" - -/*---------------------------------------------------------------------------* - * decode and print the cause - *---------------------------------------------------------------------------*/ -int -p_q931cause(char *pbuf, unsigned char *buf) -{ - int j; - int len; - int i = 0; - int ls; - int r = 0; - int rflag = 0; - - i++; /* index -> length */ - - len = buf[i]; - - i++; /* coding/location */ - len--; - - ls = buf[i]; - - i++; - len--; - - if(!(buf[i-1] & 0x80)) - { - r = buf[i]; - rflag = 1; - i++; - len--; - } - - sprintf((pbuf+strlen(pbuf)), "%s ", print_cause_q850(buf[i] & 0x7f)); - - sprintf((pbuf+strlen(pbuf)), "\n (location="); - - switch(ls & 0x0f) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "user"); - break; - case 0x01: - sprintf((pbuf+strlen(pbuf)), "private network serving local user"); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "public network serving local user"); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "transit network"); - break; - case 0x04: - sprintf((pbuf+strlen(pbuf)), "public network serving remote user"); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "private network serving remote user"); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "international network"); - break; - case 0x0a: - sprintf((pbuf+strlen(pbuf)), "network beyond interworking point"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", ls & 0x0f); - break; - } - - sprintf((pbuf+strlen(pbuf)), ", std="); - - switch((ls & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "CCITT"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "ISO/IEC"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "National"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "Local"); - break; - } - - if(rflag) - { - sprintf((pbuf+strlen(pbuf)), ", rec="); - - switch(r & 0x7f) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "Q.931"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "X.21"); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), "X.25"); - break; - case 5: - sprintf((pbuf+strlen(pbuf)), "Q.1031/Q.1051"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "Reserved"); - break; - } - } - - sprintf((pbuf+strlen(pbuf)),")"); - - i++; - len--; - - for(j = 0; j < len; j++) - sprintf((pbuf+strlen(pbuf))," 0x%02x", buf[j+i]); - - sprintf((pbuf+strlen(pbuf)),"]"); - - i += (len+1); - - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the bearer capability - *---------------------------------------------------------------------------*/ -int -p_q931bc(char *pbuf, unsigned char *buf) -{ - int len; - int i = 0; - int mr = 0; - - i++; /* index -> length */ - - len = buf[i]; - - i++; - - sprintf((pbuf+strlen(pbuf)), "\n cap="); - - switch(buf[i] & 0x1f) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "speech"); - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "unrestricted digital information"); - break; - case 0x09: - sprintf((pbuf+strlen(pbuf)), "restricted digital information"); - break; - case 0x10: - sprintf((pbuf+strlen(pbuf)), "3.1 kHz audio"); - break; - case 0x11: - sprintf((pbuf+strlen(pbuf)), "unrestricted digital information with tones"); - break; - case 0x18: - sprintf((pbuf+strlen(pbuf)), "video"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - - sprintf((pbuf+strlen(pbuf)), "\n std="); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "CCITT"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "ISO/IEC"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "National"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "NSI Std"); - break; - } - - i++; - len--; - - sprintf((pbuf+strlen(pbuf)), "\n rate="); - - switch(buf[i] & 0x1f) - { - case 0x00: - sprintf((pbuf+strlen(pbuf)), "packet mode"); - break; - case 0x10: - sprintf((pbuf+strlen(pbuf)), "64 kbit/s"); - break; - case 0x11: - sprintf((pbuf+strlen(pbuf)), "2 x 64 kbit/s"); - break; - case 0x13: - sprintf((pbuf+strlen(pbuf)), "384 kbit/s"); - break; - case 0x15: - sprintf((pbuf+strlen(pbuf)), "1536 kbit/s"); - break; - case 0x17: - sprintf((pbuf+strlen(pbuf)), "1920 kbit/s"); - break; - case 0x18: - sprintf((pbuf+strlen(pbuf)), "Multirate"); - mr = 1; - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - - sprintf((pbuf+strlen(pbuf)), "\n mode="); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "circuit"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "packet"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", ((buf[i] & 0x60) >> 5)); - break; - } - - i++; - len--; - - if(!len) - goto exit; - - if(mr) - { - sprintf((pbuf+strlen(pbuf)), "\n rate multiplier=%d", buf[i] & 0x7f); - i++; - len--; - } - - if(!len) - goto exit; - - sprintf((pbuf+strlen(pbuf)), "\n layer1="); - - switch(buf[i] & 0x1f) - { - case 0x01: - sprintf((pbuf+strlen(pbuf)), "V.110"); - break; - case 0x02: - sprintf((pbuf+strlen(pbuf)), "G.711 u-law"); - break; - case 0x03: - sprintf((pbuf+strlen(pbuf)), "G.711 A-law"); - break; - case 0x04: - sprintf((pbuf+strlen(pbuf)), "G.721"); - break; - case 0x05: - sprintf((pbuf+strlen(pbuf)), "H.221/H.242"); - break; - case 0x07: - sprintf((pbuf+strlen(pbuf)), "Non-Std"); - break; - case 0x08: - sprintf((pbuf+strlen(pbuf)), "V.120"); - break; - case 0x09: - sprintf((pbuf+strlen(pbuf)), "X.31"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "reserved (0x%02x)", buf[i] & 0x0f); - break; - } - i++; - len--; - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n user rate=0x%02x ", buf[i] & 0x1f); - - if(buf[i] & 0x40) - sprintf((pbuf+strlen(pbuf)), "(async,"); - else - sprintf((pbuf+strlen(pbuf)), "(sync,"); - - if(buf[i] & 0x20) - sprintf((pbuf+strlen(pbuf)), "in-band neg. possible)"); - else - sprintf((pbuf+strlen(pbuf)), "in-band neg not possible)"); - - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n clk/flow=0x%02x", buf[i] & 0x1f); - - sprintf((pbuf+strlen(pbuf)), "\n intermediate rate="); - - switch((buf[i] & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "not used"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "8 kbit/s"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "16 kbit/s"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "32 kbit/s"); - break; - } - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n hdr/mfrm/etc.=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n stop/data/parity=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - if(!(buf[i-1] & 0x80)) - { - sprintf((pbuf+strlen(pbuf)), "\n modemtype=0x%02x", buf[i]); - i++; - len--; - } - - if(!len) - goto exit; - - switch(buf[i] & 0x7f) - { - case 0x42: - sprintf((pbuf+strlen(pbuf)), "\n layer2=Q.921/I.441"); - break; - case 0x46: - sprintf((pbuf+strlen(pbuf)), "\n layer2=X.25 link"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "\n layer2=0x%02x",(buf[i] & 0x7f)); - break; - } - i++; - len--; - - if(!len) - goto exit; - - switch(buf[i] & 0x7f) - { - case 0x62: - sprintf((pbuf+strlen(pbuf)), "\n layer3=Q.921/I.441"); - break; - case 0x66: - sprintf((pbuf+strlen(pbuf)), "\n layer3=X.25 packet"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "\n layer3=0x%02x",(buf[i] & 0x7f)); - break; - } - i++; - len--; - -exit: - sprintf((pbuf+strlen(pbuf)), "]"); - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print the ISDN (telephone) number - *---------------------------------------------------------------------------*/ -int -p_q931address(char *pbuf, unsigned char *buf) -{ - int j; - int len; - int i = 0; - int tp; - int ind = 0; - int indflag = 0; - - i++; /* index -> length */ - len = buf[i]; - - i++; /* index -> type/plan */ - tp = buf[i]; - - i++; - len--; - - if(!(tp & 0x80)) - { - ind = buf[i]; - indflag = 1; - i++; - len--; - } - - for(j = 0; j < len; j++) - { - sprintf((pbuf+strlen(pbuf)),"%c", buf[j+i]); - } - - switch((tp & 0x70) >> 4) - { - case 0: - sprintf((pbuf+strlen(pbuf)), " (type=unknown, "); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), " (type=international, "); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), " (type=national, "); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), " (type=network specific, "); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), " (type=subscriber, "); - break; - case 6: - sprintf((pbuf+strlen(pbuf)), " (type=abbreviated, "); - break; - default: - sprintf((pbuf+strlen(pbuf)), " (type=reserved (%d), ", ((tp & 0x70) >> 4)); - break; - } - - switch(tp & 0x0f) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "plan=unknown"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "plan=ISDN"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "plan=Data"); - break; - case 4: - sprintf((pbuf+strlen(pbuf)), "plan=Telex"); - break; - case 8: - sprintf((pbuf+strlen(pbuf)), "plan=National"); - break; - case 9: - sprintf((pbuf+strlen(pbuf)), "plan=private"); - break; - default: - sprintf((pbuf+strlen(pbuf)), "plan=reserved (%d)", (tp & 0x0f)); - break; - } - - if(indflag) - { - sprintf((pbuf+strlen(pbuf)), ",\n "); - switch((ind & 0x60) >> 5) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "presentation allowed, "); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "presentation restricted, "); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "number not available, "); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "reserved, "); - break; - } - - switch(ind & 0x03) - { - case 0: - sprintf((pbuf+strlen(pbuf)), "screening user provided: not screened"); - break; - case 1: - sprintf((pbuf+strlen(pbuf)), "screening user provided: verified & passed"); - break; - case 2: - sprintf((pbuf+strlen(pbuf)), "screening user provided: verified & failed"); - break; - case 3: - sprintf((pbuf+strlen(pbuf)), "screening network provided"); - break; - } - } - - sprintf((pbuf+strlen(pbuf)),")]"); - - i += j; - - return(i); -} - -/*---------------------------------------------------------------------------* - * decode and print HL comatibility - *---------------------------------------------------------------------------*/ -int -p_q931high_compat(char *pbuf, unsigned char *buf) -{ - int len = buf[1]; - - sprintf(pbuf+strlen(pbuf), " standard="); - - switch ((buf[2] >> 5) & 0x03) - { - case 0: sprintf(pbuf+strlen(pbuf), "CCITT"); - break; - case 1: sprintf(pbuf+strlen(pbuf), "unknown international standard"); - break; - case 2: sprintf(pbuf+strlen(pbuf), "unknown national standard"); - break; - case 3: sprintf(pbuf+strlen(pbuf), "local network standard"); - } - - len--; - - sprintf(pbuf+strlen(pbuf), ", characteristics="); - - switch (buf[3] & 0x7f) - { - case 0x01: - sprintf(pbuf+strlen(pbuf), "Telephony"); - break; - case 0x04: - sprintf(pbuf+strlen(pbuf), "Fax Group 2/3"); - break; - case 0x21: - sprintf(pbuf+strlen(pbuf), "Fax Group 4 Class I (F.184)"); - break; - case 0x24: - sprintf(pbuf+strlen(pbuf), "Teletex basic/mixed (F.230) or Fax Group 4 Class II/III (F.184)"); - break; - case 0x28: - sprintf(pbuf+strlen(pbuf), "Teletex basic/processable (F.220)"); - break; - case 0x31: - sprintf(pbuf+strlen(pbuf), "Teletex basic mode (F.200)"); - break; - case 0x32: - sprintf(pbuf+strlen(pbuf), "Videotex (F.300 and T.101)"); - break; - case 0x35: - sprintf(pbuf+strlen(pbuf), "Telex (F.60)"); - break; - case 0x38: - sprintf(pbuf+strlen(pbuf), "MHS (X.400 series)"); - break; - case 0x41: - sprintf(pbuf+strlen(pbuf), "OSI application (X.200 series)"); - break; - case 0x5e: - sprintf(pbuf+strlen(pbuf), "Maintenance"); - break; - case 0x5f: - sprintf(pbuf+strlen(pbuf), "Management"); - break; - case 0x7f: - sprintf(pbuf+strlen(pbuf), "reserved"); - break; - default: - sprintf(pbuf+strlen(pbuf), "UNKNOWN (0x%02x)", buf[3]); - break; - } - - len--; - - if (!len) - { - sprintf(pbuf+strlen(pbuf), "]"); - return 4; - } - - sprintf(pbuf+strlen(pbuf), " of "); - - switch (buf[4] & 0x7f) - { - case 0x01: - sprintf(pbuf+strlen(pbuf), "Telephony"); - break; - case 0x04: - sprintf(pbuf+strlen(pbuf), "Fax Group 2/3"); - break; - case 0x21: - sprintf(pbuf+strlen(pbuf), "Fax Group 4 Class I (F.184)"); - break; - case 0x24: - sprintf(pbuf+strlen(pbuf), "Teletex basic/mixed (F.230) or Fax Group 4 Class II/III (F.184)"); - break; - case 0x28: - sprintf(pbuf+strlen(pbuf), "Teletex basic/processable (F.220)"); - break; - case 0x31: - sprintf(pbuf+strlen(pbuf), "Teletex basic mode (F.200)"); - break; - case 0x32: - sprintf(pbuf+strlen(pbuf), "Videotex (F.300 and T.101)"); - break; - case 0x35: - sprintf(pbuf+strlen(pbuf), "Telex (F.60)"); - break; - case 0x38: - sprintf(pbuf+strlen(pbuf), "MHS (X.400 series)"); - break; - case 0x41: - sprintf(pbuf+strlen(pbuf), "OSI application (X.200 series)"); - break; - case 0x7f: - sprintf(pbuf+strlen(pbuf), "reserved"); - break; - default: - sprintf(pbuf+strlen(pbuf), "UNKNOWN (0x%02x)", buf[3]); - break; - } - sprintf(pbuf+strlen(pbuf), "]"); - return 5; -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdntrace/q932_fac.c b/usr.sbin/i4b/isdntrace/q932_fac.c deleted file mode 100644 index ba3f59d84a38d..0000000000000 --- a/usr.sbin/i4b/isdntrace/q932_fac.c +++ /dev/null @@ -1,926 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * q932_fac.c - decode Q.932 facilities - * ------------------------------------ - * - * $Id: q932_fac.c,v 1.4 1998/12/05 18:04:22 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:20:58 1998] - * - *--------------------------------------------------------------------------- - * - * - Q.932 (03/93) Generic Procedures for the Control of - * ISDN Supplementaty Services - * - Q.950 (03/93) Supplementary Services Protocols, Structure and - * General Principles - * - ETS 300 179 (10/92) Advice Of Charge: charging information during - * the call (AOC-D) supplementary service Service description - * - ETS 300 180 (10/92) Advice Of Charge: charging information at the - * end of call (AOC-E) supplementary service Service description - * - ETS 300 181 (04/93) Advice Of Charge (AOC) supplementary service - * Functional capabilities and information flows - * - ETS 300 182 (04/93) Advice Of Charge (AOC) supplementary service - * Digital Subscriber Signalling System No. one (DSS1) protocol - * - X.208 Specification of Abstract Syntax Notation One (ASN.1) - * - X.209 Specification of Basic Encoding Rules for - * Abstract Syntax Notation One (ASN.1) - * - "ASN.1 Abstract Syntax Notation One", Walter Gora, DATACOM-Verlag - * 1992, 3rd Edition (ISBN 3-89238-062-7) (german !) - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" -#include "q932_fac.h" - -static int do_component(int length, char *pbuf); -static char *uni_str(int code); -static char *opval_str(int val); -static char *bid_str(int val); -static void next_state(char *pbuf, int class, int form, int code, int val); - -static int byte_len; -static unsigned char *byte_buf; -static int state; - -/*---------------------------------------------------------------------------* - * decode Q.931/Q.932 facility info element - *---------------------------------------------------------------------------*/ -int -q932_facility(char *pbuf, unsigned char *buf) -{ - int len; - - sprintf((pbuf+strlen(pbuf)), "[facility (Q.932): "); - - buf++; /* length */ - - len = *buf; - - buf++; /* protocol profile */ - - sprintf((pbuf+strlen(pbuf)), "Protocol="); - - switch(*buf & 0x1f) - { - case FAC_PROTO_ROP: - sprintf((pbuf+strlen(pbuf)), "Remote Operations Protocol\n"); - break; - - case FAC_PROTO_CMIP: - sprintf((pbuf+strlen(pbuf)), "CMIP Protocol (Q.941), UNSUPPORTED!\n"); - return(len+2); - break; - - case FAC_PROTO_ACSE: - sprintf((pbuf+strlen(pbuf)), "ACSE Protocol (X.217/X.227), UNSUPPORTED!\n"); - return(len+2); - break; - - default: - sprintf((pbuf+strlen(pbuf)), "Unknown Protocol (val = 0x%x), UNSUPPORTED!\n", *buf & 0x1f); - return(len+2); - break; - } - - /* next byte */ - - buf++; - len--; - - /* initialize variables for do_component */ - - byte_len = 0; - byte_buf = buf; - state = ST_EXP_COMP_TYP; - - /* decode facility */ - - do_component(len, pbuf); - - sprintf((pbuf+(strlen(pbuf)-1)), "]"); /* XXX replace last newline */ - - return(len+3); -} - -/*---------------------------------------------------------------------------* - * handle a component recursively - *---------------------------------------------------------------------------*/ -static int -do_component(int length, char *pbuf) -{ - int comp_tag_class; /* component tag class */ - int comp_tag_form; /* component form: constructor or primitive */ - int comp_tag_code; /* component code depending on class */ - int comp_length = 0; /* component length */ - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "ENTER - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - -again: - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "AGAIN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - - /*----------------------------------------*/ - /* first component element: component tag */ - /*----------------------------------------*/ - - /* tag class bits */ - - sprintf((pbuf+strlen(pbuf)), "\t0x%02x Tag: ", *byte_buf); - - comp_tag_class = (*byte_buf & 0xc0) >> 6; - - switch(comp_tag_class) - { - case FAC_TAGCLASS_UNI: - sprintf((pbuf+strlen(pbuf)), "Universal"); - break; - case FAC_TAGCLASS_APW: - sprintf((pbuf+strlen(pbuf)), "Applic-wide"); - break; - case FAC_TAGCLASS_COS: - sprintf((pbuf+strlen(pbuf)), "Context-spec"); - break; - case FAC_TAGCLASS_PRU: - sprintf((pbuf+strlen(pbuf)), "Private"); - break; - } - - /* tag form bit */ - - comp_tag_form = (*byte_buf & 0x20) > 5; - - sprintf((pbuf+strlen(pbuf)), ", "); - - if(comp_tag_form == FAC_TAGFORM_CON) - { - sprintf((pbuf+strlen(pbuf)), "Constructor"); - } - else - { - sprintf((pbuf+strlen(pbuf)), "Primitive"); - } - - /* tag code bits */ - - comp_tag_code = *byte_buf & 0x1f; - - sprintf((pbuf+strlen(pbuf)), ", "); - - if(comp_tag_code == 0x1f) - { - comp_tag_code = 0; - - byte_buf++; - byte_len++; - - while(*byte_buf & 0x80) - { - comp_tag_code += (*byte_buf & 0x7f); - byte_buf++; - byte_len++; - } - comp_tag_code += (*byte_buf & 0x7f); - sprintf((pbuf+strlen(pbuf)), "%d (ext)\n", comp_tag_code); - } - else - { - comp_tag_code = (*byte_buf & 0x1f); - - if(comp_tag_class == FAC_TAGCLASS_UNI) - { - sprintf((pbuf+strlen(pbuf)), "%s (%d)\n", uni_str(comp_tag_code), comp_tag_code); - } - else - { - sprintf((pbuf+strlen(pbuf)), "code = %d\n", comp_tag_code); - } - } - - byte_buf++; - byte_len++; - - /*--------------------------------------------*/ - /* second component element: component length */ - /*--------------------------------------------*/ - - sprintf((pbuf+strlen(pbuf)), "\t0x%02x Len: ", *byte_buf); - - comp_length = 0; - - if(*byte_buf & 0x80) - { - int i = *byte_buf & 0x7f; - - byte_len += i; - - for(;i > 0;i++) - { - byte_buf++; - comp_length += (*byte_buf * (i*256)); - } - sprintf((pbuf+strlen(pbuf)), "%d (long form)\n", comp_length); - } - else - { - comp_length = *byte_buf & 0x7f; - sprintf((pbuf+strlen(pbuf)), "%d (short form)\n", comp_length); - } - - next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, -1); - - byte_len++; - byte_buf++; - - if(comp_length) - { - - /*---------------------------------------------*/ - /* third component element: component contents */ - /*---------------------------------------------*/ - - if(comp_tag_form) /* == constructor */ - { - do_component(comp_length, pbuf); - } - else - { - int val = 0; - if(comp_tag_class == FAC_TAGCLASS_UNI) - { - switch(comp_tag_code) - { - case FAC_CODEUNI_INT: - case FAC_CODEUNI_ENUM: - case FAC_CODEUNI_BOOL: - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x ", *byte_buf); - val += (*byte_buf + (i*255)); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - sprintf((pbuf+strlen(pbuf)), "Val: %d\n", val); - } - break; - default: - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x = %d", *byte_buf, *byte_buf); - if(isprint(*byte_buf)) - sprintf((pbuf+strlen(pbuf)), " = '%c'", *byte_buf); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - } - break; - } - } - - else /* comp_tag_class != FAC_TAGCLASS_UNI */ - { - if(comp_length) - { - int i; - - sprintf((pbuf+strlen(pbuf)), "\t"); - - for(i = comp_length-1; i >= 0; i--) - { - sprintf((pbuf+strlen(pbuf)), "0x%02x", *byte_buf); - val += (*byte_buf + (i*255)); - byte_buf++; - byte_len++; - if(i) - sprintf((pbuf+strlen(pbuf)), "\n\t"); - } - sprintf((pbuf+strlen(pbuf)), "\n"); - } - } - next_state(pbuf, comp_tag_class, comp_tag_form, comp_tag_code, val); - } - } - -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "PREGOTO - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - if(byte_len < length) - goto again; -#ifdef FAC_DEBUG - sprintf((pbuf+strlen(pbuf)), "RETURN - comp_length = %d, byte_len = %d, length =%d\n", comp_length, byte_len, length); -#endif - return(byte_len); -} - -/*---------------------------------------------------------------------------* - * print universal id type - *---------------------------------------------------------------------------*/ -static char *uni_str(int code) -{ - static char *tbl[] = { - "BOOLEAN", - "INTEGER", - "BIT STRING", - "OCTET STRING", - "NULL", - "OBJECT IDENTIFIER", - "OBJECT DESCRIPTOR", - "EXTERNAL", - "REAL", - "ENUMERATED", - "RESERVED11", - "RESERVED12", - "RESERVED13", - "RESERVED14", - "RESERVED15", - "SEQUENCE", - "SET", - "NUMERIC STRING", - "PRINTABLE STRING", - "TELETEX STRING", - "ISO646 STRING", - "IA5 STRING", - "GRAPHIC STRING", - "GENERAL STRING" - }; - - if(code >= 1 && code <= FAC_CODEUNI_GNSTR) - return(tbl[code-1]); - else - return("ERROR, Value out of Range!"); -} - -/*---------------------------------------------------------------------------* - * print operation value - *---------------------------------------------------------------------------*/ -static char *opval_str(int val) -{ - static char buffer[80]; - char *r; - - switch(val) - { - case FAC_OPVAL_UUS: - r = "uUs"; - break; - case FAC_OPVAL_CUG: - r = "cUGCall"; - break; - case FAC_OPVAL_MCID: - r = "mCIDRequest"; - break; - case FAC_OPVAL_BTPY: - r = "beginTPY"; - break; - case FAC_OPVAL_ETPY: - r = "endTPY"; - break; - case FAC_OPVAL_ECT: - r = "eCTRequest"; - break; - case FAC_OPVAL_DIV_ACT: - r = "activationDiversion"; - break; - case FAC_OPVAL_DIV_DEACT: - r = "deactivationDiversion"; - break; - case FAC_OPVAL_DIV_ACTSN: - r = "activationStatusNotificationDiv"; - break; - case FAC_OPVAL_DIV_DEACTSN: - r = "deactivationStatusNotificationDiv"; - break; - case FAC_OPVAL_DIV_INTER: - r = "interrogationDiversion"; - break; - case FAC_OPVAL_DIV_INFO: - r = "diversionInformation"; - break; - case FAC_OPVAL_DIV_CALLDEF: - r = "callDeflection"; - break; - case FAC_OPVAL_DIV_CALLRER: - r = "callRerouting"; - break; - case FAC_OPVAL_DIV_LINF2: - r = "divertingLegInformation2"; - break; - case FAC_OPVAL_DIV_INVS: - r = "invokeStatus"; - break; - case FAC_OPVAL_DIV_INTER1: - r = "interrogationDiversion1"; - break; - case FAC_OPVAL_DIV_LINF1: - r = "divertingLegInformation1"; - break; - case FAC_OPVAL_DIV_LINF3: - r = "divertingLegInformation3"; - break; - case FAC_OPVAL_ER_CRCO: - r = "explicitReservationCreationControl"; - break; - case FAC_OPVAL_ER_MGMT: - r = "explicitReservationManagement"; - break; - case FAC_OPVAL_ER_CANC: - r = "explicitReservationCancel"; - break; - case FAC_OPVAL_MLPP_QUERY: - r = "mLPP lfb Query"; - break; - case FAC_OPVAL_MLPP_CALLR: - r = "mLPP Call Request"; - break; - case FAC_OPVAL_MLPP_CALLP: - r = "mLPP Call Preemption"; - break; - case FAC_OPVAL_AOC_REQ: - r = "chargingRequest"; - break; - case FAC_OPVAL_AOC_S_CUR: - r = "aOCSCurrency"; - break; - case FAC_OPVAL_AOC_S_SPC: - r = "aOCSSpecialArrangement"; - break; - case FAC_OPVAL_AOC_D_CUR: - r = "aOCDCurrency"; - break; - case FAC_OPVAL_AOC_D_UNIT: - r = "aOCDChargingUnit"; - break; - case FAC_OPVAL_AOC_E_CUR: - r = "aOCECurrency"; - break; - case FAC_OPVAL_AOC_E_UNIT: - r = "aOCEChargingUnit"; - break; - case FAC_OPVAL_AOC_IDOFCRG: - r = "identificationOfCharge"; - break; - case FAC_OPVAL_CONF_BEG: - r = "beginConf"; - break; - case FAC_OPVAL_CONF_ADD: - r = "addConf"; - break; - case FAC_OPVAL_CONF_SPLIT: - r = "splitConf"; - break; - case FAC_OPVAL_CONF_DROP: - r = "dropConf"; - break; - case FAC_OPVAL_CONF_ISOLATE: - r = "isolateConf"; - break; - case FAC_OPVAL_CONF_REATT: - r = "reattachConf"; - break; - case FAC_OPVAL_CONF_PDISC: - r = "partyDISC"; - break; - case FAC_OPVAL_CONF_FCONF: - r = "floatConf"; - break; - case FAC_OPVAL_CONF_END: - r = "endConf"; - break; - case FAC_OPVAL_CONF_IDCFE: - r = "indentifyConferee"; - break; - case FAC_OPVAL_REVC_REQ: - r = "requestREV"; - break; - default: - sprintf(buffer, "unknown operation value %d!", val); - r = buffer; - } - return(r); -} - -/*---------------------------------------------------------------------------* - * billing id string - *---------------------------------------------------------------------------*/ -static char *bid_str(int val) -{ - static char buffer[80]; - char *r; - - switch(val) - { - case 0: - r = "normalCharging"; - break; - case 1: - r = "reverseCharging"; - break; - case 2: - r = "creditCardCharging"; - break; - case 3: - r = "callForwardingUnconditional"; - break; - case 4: - r = "callForwardingBusy"; - break; - case 5: - r = "callForwardingNoReply"; - break; - case 6: - r = "callDeflection"; - break; - case 7: - r = "callTransfer"; - break; - default: - sprintf(buffer, "unknown billing-id value %d!", val); - r = buffer; - } - return(r); -} - -/*---------------------------------------------------------------------------* - * invoke component - *---------------------------------------------------------------------------*/ -static void -F_1_1(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_1, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t invokeComponent\n"); - state = ST_EXP_INV_ID; - } -} - -/*---------------------------------------------------------------------------* - * return result - *---------------------------------------------------------------------------*/ -static void -F_1_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_2, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t returnResult\n"); - state = ST_EXP_RR_INV_ID; - } -} -/*---------------------------------------------------------------------------* - * return error - *---------------------------------------------------------------------------*/ -static void -F_1_3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_3, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t returnError\n"); - state = ST_EXP_NIX; - } -} -/*---------------------------------------------------------------------------* - * reject - *---------------------------------------------------------------------------*/ -static void -F_1_4(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_1_4, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t reject\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * invoke component: invoke id - *---------------------------------------------------------------------------*/ -static void -F_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_2, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val); - state = ST_EXP_OP_VAL; - } -} - -/*---------------------------------------------------------------------------* - * return result: invoke id - *---------------------------------------------------------------------------*/ -static void -F_RR2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR2, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t InvokeIdentifier = %d\n", val); - state = ST_EXP_RR_OP_VAL; - } -} - -/*---------------------------------------------------------------------------* - * invoke component: operation value - *---------------------------------------------------------------------------*/ -static void -F_3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_3, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val); - state = ST_EXP_INFO; - } -} - -/*---------------------------------------------------------------------------* - * return result: operation value - *---------------------------------------------------------------------------*/ -static void -F_RR3(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RR3, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t Operation Value = %s (%d)\n", opval_str(val), val); - state = ST_EXP_RR_RESULT; - } -} - -/*---------------------------------------------------------------------------* - * return result: RESULT - *---------------------------------------------------------------------------*/ -static void -F_RRR(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_RRR, val = %d\n", val); -#endif - state = ST_EXP_NIX; -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t specificChargingUnits\n"); - state = ST_EXP_RUL; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4_1(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_1, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t freeOfCharge\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_4_2(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_4_2, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t chargeNotAvailable\n"); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_5(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_5, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t recordedUnitsList [1]\n"); - state = ST_EXP_RU; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_6(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_6, val = %d\n", val); -#endif - if(val == -1) - { - sprintf((pbuf+strlen(pbuf)), "\t RecordedUnits\n"); - state = ST_EXP_RNOU; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_7(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_7, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t NumberOfUnits = %d\n", val); - state = ST_EXP_TOCI; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_8(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_8, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t typeOfChargingInfo = %s\n", val == 0 ? "subTotal" : "total"); - state = ST_EXP_DBID; - } -} - -/*---------------------------------------------------------------------------* - * - *---------------------------------------------------------------------------*/ -static void -F_9(char *pbuf, int val) -{ -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: exec F_9, val = %d\n", val); -#endif - if(val != -1) - { - sprintf((pbuf+strlen(pbuf)), "\t AOCDBillingId = %s (%d)\n", bid_str(val), val); - state = ST_EXP_NIX; - } -} - -/*---------------------------------------------------------------------------* - * state table - *---------------------------------------------------------------------------*/ -static struct statetab { - int currstate; /* input: current state we are in */ - int form; /* input: current tag form */ - int class; /* input: current tag class */ - int code; /* input: current tag code */ - void (*func)(char *,int); /* output: func to exec */ -} statetab[] = { - -/* current state tag form tag class tag code function */ -/* --------------------- ---------------------- ---------------------- ---------------------- ----------------*/ - -/* invoke */ - - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_1_1 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 2, F_1_2 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 3, F_1_3 }, - {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 4, F_1_4 }, - {ST_EXP_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_2 }, - {ST_EXP_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_3 }, - {ST_EXP_INFO, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_4 }, - {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_NULL, F_4_1 }, - {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 1, F_4_2 }, - {ST_EXP_RUL, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_5 }, - {ST_EXP_RU, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_6 }, - {ST_EXP_RNOU, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_7 }, - {ST_EXP_TOCI, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 2, F_8 }, - {ST_EXP_DBID, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 3, F_9 }, - -/* return result */ - - {ST_EXP_RR_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR2 }, - {ST_EXP_RR_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_RR3 }, - {ST_EXP_RR_RESULT, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SET, F_RRR }, - -/* end */ - - {-1, -1, -1, -1, NULL } -}; - -/*---------------------------------------------------------------------------* - * state decode for do_component - *---------------------------------------------------------------------------*/ -static void -next_state(char *pbuf, int class, int form, int code, int val) -{ - int i; - -#ifdef ST_DEBUG - sprintf((pbuf+strlen(pbuf)), "next_state: class=%d, form=%d, code=%d, val=%d\n", class, form, code, val); -#endif - - for(i=0; ; i++) - { - if((statetab[i].currstate > state) || - (statetab[i].currstate == -1)) - { - break; - } - - if((statetab[i].currstate == state) && - (statetab[i].form == form) && - (statetab[i].class == class) && - (statetab[i].code == code)) - { - (*statetab[i].func)(pbuf, val); - break; - } - } -} - -/* EOF */ - diff --git a/usr.sbin/i4b/isdntrace/q932_fac.h b/usr.sbin/i4b/isdntrace/q932_fac.h deleted file mode 100644 index feae4487e6b88..0000000000000 --- a/usr.sbin/i4b/isdntrace/q932_fac.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * q932_fac.h - facility header file - * --------------------------------- - * - * $Id: q932_fac.h,v 1.4 1998/12/05 18:04:24 hm Exp $ - * - * last edit-date: [Sat Dec 5 18:21:17 1998] - * - *--------------------------------------------------------------------------- - * - * - Q.932 (03/93) Generic Procedures for the Control of - * ISDN Supplementaty Services - * - Q.950 (03/93) Supplementary Services Protocols, Structure and - * General Principles - * - ETS 300 179 (10/92) Advice Of Charge: charging information during - * the call (AOC-D) supplementary service Service description - * - ETS 300 180 (10/92) Advice Of Charge: charging information at the - * end of call (AOC-E) supplementary service Service description - * - ETS 300 181 (04/93) Advice Of Charge (AOC) supplementary service - * Functional capabilities and information flows - * - ETS 300 182 (04/93) Advice Of Charge (AOC) supplementary service - * Digital Subscriber Signalling System No. one (DSS1) protocol - * - X.208 Specification of Abstract Syntax Notation One (ASN.1) - * - X.209 Specification of Basic Encoding Rules for - * Abstract Syntax Notation One (ASN.1) - * - "ASN.1 Abstract Syntax Notation One", Walter Gora, DATACOM-Verlag - * 1992, 3rd Edition (ISBN 3-89238-062-7) (german !) - * - *---------------------------------------------------------------------------*/ - -/* #define FAC_DEBUG */ -/* #define ST_DEBUG */ - -/* protocols */ -#define FAC_PROTO_ROP 0x11 -#define FAC_PROTO_CMIP 0x12 -#define FAC_PROTO_ACSE 0x13 - -/* tag classes */ -#define FAC_TAGCLASS_UNI 0x00 -#define FAC_TAGCLASS_APW 0x01 -#define FAC_TAGCLASS_COS 0x02 -#define FAC_TAGCLASS_PRU 0x03 - -/* tag forms */ -#define FAC_TAGFORM_PRI 0x00 -#define FAC_TAGFORM_CON 0x01 - -/* class UNIVERSAL values */ -#define FAC_CODEUNI_BOOL 1 -#define FAC_CODEUNI_INT 2 -#define FAC_CODEUNI_BITS 3 -#define FAC_CODEUNI_OCTS 4 -#define FAC_CODEUNI_NULL 5 -#define FAC_CODEUNI_OBJI 6 -#define FAC_CODEUNI_OBJD 7 -#define FAC_CODEUNI_EXT 8 -#define FAC_CODEUNI_REAL 9 -#define FAC_CODEUNI_ENUM 10 -#define FAC_CODEUNI_R11 11 -#define FAC_CODEUNI_R12 12 -#define FAC_CODEUNI_R13 13 -#define FAC_CODEUNI_R14 14 -#define FAC_CODEUNI_R15 15 -#define FAC_CODEUNI_SEQ 16 -#define FAC_CODEUNI_SET 17 -#define FAC_CODEUNI_NSTR 18 -#define FAC_CODEUNI_PSTR 19 -#define FAC_CODEUNI_TSTR 20 -#define FAC_CODEUNI_VSTR 21 -#define FAC_CODEUNI_ISTR 22 -#define FAC_CODEUNI_UTIME 23 -#define FAC_CODEUNI_GTIME 24 -#define FAC_CODEUNI_GSTR 25 -#define FAC_CODEUNI_VISTR 26 -#define FAC_CODEUNI_GNSTR 27 - -/* operation values */ -#define FAC_OPVAL_UUS 1 -#define FAC_OPVAL_CUG 2 -#define FAC_OPVAL_MCID 3 -#define FAC_OPVAL_BTPY 4 -#define FAC_OPVAL_ETPY 5 -#define FAC_OPVAL_ECT 6 - -#define FAC_OPVAL_DIV_ACT 7 -#define FAC_OPVAL_DIV_DEACT 8 -#define FAC_OPVAL_DIV_ACTSN 9 -#define FAC_OPVAL_DIV_DEACTSN 10 -#define FAC_OPVAL_DIV_INTER 11 -#define FAC_OPVAL_DIV_INFO 12 -#define FAC_OPVAL_DIV_CALLDEF 13 -#define FAC_OPVAL_DIV_CALLRER 14 -#define FAC_OPVAL_DIV_LINF2 15 -#define FAC_OPVAL_DIV_INVS 16 -#define FAC_OPVAL_DIV_INTER1 17 -#define FAC_OPVAL_DIV_LINF1 18 -#define FAC_OPVAL_DIV_LINF3 19 - -#define FAC_OPVAL_ER_CRCO 20 -#define FAC_OPVAL_ER_MGMT 21 -#define FAC_OPVAL_ER_CANC 22 - -#define FAC_OPVAL_MLPP_QUERY 24 -#define FAC_OPVAL_MLPP_CALLR 25 -#define FAC_OPVAL_MLPP_CALLP 26 - -#define FAC_OPVAL_AOC_REQ 30 -#define FAC_OPVAL_AOC_S_CUR 31 -#define FAC_OPVAL_AOC_S_SPC 32 -#define FAC_OPVAL_AOC_D_CUR 33 -#define FAC_OPVAL_AOC_D_UNIT 34 -#define FAC_OPVAL_AOC_E_CUR 35 -#define FAC_OPVAL_AOC_E_UNIT 36 -#define FAC_OPVAL_AOC_IDOFCRG 37 - -#define FAC_OPVAL_CONF_BEG 40 -#define FAC_OPVAL_CONF_ADD 41 -#define FAC_OPVAL_CONF_SPLIT 42 -#define FAC_OPVAL_CONF_DROP 43 -#define FAC_OPVAL_CONF_ISOLATE 44 -#define FAC_OPVAL_CONF_REATT 45 -#define FAC_OPVAL_CONF_PDISC 46 -#define FAC_OPVAL_CONF_FCONF 47 -#define FAC_OPVAL_CONF_END 48 -#define FAC_OPVAL_CONF_IDCFE 49 - -#define FAC_OPVAL_REVC_REQ 60 - -enum states { - ST_EXP_COMP_TYP, - ST_EXP_INV_ID, - ST_EXP_OP_VAL, - ST_EXP_INFO, - ST_EXP_RUL, - ST_EXP_RU, - ST_EXP_RNOU, - ST_EXP_TOCI, - ST_EXP_DBID, - - ST_EXP_RR_INV_ID, - ST_EXP_RR_OP_VAL, - ST_EXP_RR_RESULT, - - ST_EXP_NIX -}; - -/* EOF */ - diff --git a/usr.sbin/i4b/isdntrace/trace.c b/usr.sbin/i4b/isdntrace/trace.c deleted file mode 100644 index a9dde80108c80..0000000000000 --- a/usr.sbin/i4b/isdntrace/trace.c +++ /dev/null @@ -1,809 +0,0 @@ -/* - * Copyright (c) 1996, 1998 Hellmuth Michaelis. All rights reserved. - * - * Copyright (c) 1996 Gary Jennejohn. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *---------------------------------------------------------------------------* - * - * trace.c - print traces of D (B) channel activity for isdn4bsd - * ------------------------------------------------------------- - * - * $Id: trace.c,v 1.10 1998/10/19 12:32:21 hm Exp $ - * - * last edit-date: [Mon Oct 19 14:30:58 1998] - * - * -hm rewriting for isic and new trace format - * -hm new option -f, use automatic name for -o - * -hm changed default option setting - * -hm multi unit support - * -hm analyzer functionality - * -hm binary record/playback - * -hm -p option - * -hm cleanup - * -hm adding date to timestamp field - * -hm reopen files on SIGUSR1 for rotation - * -hm Joerg reported a bug with commandline options - * -hm I.430 INFO signals from layer 1 - * - *---------------------------------------------------------------------------*/ - -#include "trace.h" - -unsigned char buf[BSIZE]; -FILE *Fout = NULL; -FILE *BP = NULL; -int outflag = 1; -int header = 1; -int print_q921 = 1; -int unit = 0; -int dchan = 0; -int bchan = 0; -int traceon = 0; -int analyze = 0; -int Rx = RxUDEF; -int Tx = TxUDEF; -int f; -int Bopt = 0; -int Popt = 0; -int bpopt = 0; -int info = 0; -int Fopt = 0; - -static char outfilename[1024]; -static char BPfilename[1024]; -static struct stat fst; - -static void dumpbuf( int n, unsigned char *buf, i4b_trace_hdr_t *hdr, int raw ); -static int switch_driver( int value, int rx, int tx ); -static void usage( void ); -static void exit_hdl( void ); -static void reopenfiles( int ); - -/*---------------------------------------------------------------------------* - * usage instructions - *---------------------------------------------------------------------------*/ -void -usage(void) -{ - fprintf(stderr,"\n"); - fprintf(stderr,"isdntrace - i4b package ISDN trace facility for passive cards (%02d.%02d.%d)\n", VERSION, REL, STEP); - fprintf(stderr,"usage: isdntrace -a -b -d -f <file> -h -i -l -n <val> -o -p <file> -r -u <unit>\n"); - fprintf(stderr," -B -F -P -R <unit> -T <unit>\n"); - fprintf(stderr," -a analyzer mode ................................... (default off)\n"); - fprintf(stderr," -b switch B channel trace on ....................... (default off)\n"); - fprintf(stderr," -d switch D channel trace off ....................... (default on)\n"); - fprintf(stderr," -f <file> write output to file filename ............ (default %s0)\n", TRACE_FILE_NAME); - fprintf(stderr," -h don't print header for each message ............. (default off)\n"); - fprintf(stderr," -i print I.430 (layer 1) INFO signals .............. (default off)\n"); - fprintf(stderr," -l don't decode low layer Q.921 messages ........... (default off)\n"); - fprintf(stderr," -n <val> process packet if it is longer than <val> octetts . (default 0)\n"); - fprintf(stderr," -o don't write output to a file .................... (default off)\n"); - fprintf(stderr," -p <file> specify filename for -B and -P ........ (default %s0)\n", BIN_FILE_NAME); - fprintf(stderr," -r don't print raw hex/ASCII dump of protocol ...... (default off)\n"); - fprintf(stderr," -u <unit> specify controller unit number ............... (default unit 0)\n"); - fprintf(stderr," -B write binary trace data to file filename ........ (default off)\n"); - fprintf(stderr," -F with -P and -p: wait for more data at EOF ....... (default off)\n"); - fprintf(stderr," -P playback from binary trace data file ............ (default off)\n"); - fprintf(stderr," -R <unit> analyze Rx controller unit number (for -a) ... (default unit %d)\n", RxUDEF); - fprintf(stderr," -T <unit> analyze Tx controller unit number (for -a) ... (default unit %d)\n", TxUDEF); - fprintf(stderr,"\n"); - exit(1); -} - -/*---------------------------------------------------------------------------* - * main - *---------------------------------------------------------------------------*/ -int -main(int argc, char *argv[]) -{ - extern int optind; - extern int opterr; - extern char *optarg; - char devicename[80]; - char headerbuf[256]; - - int n; - int c; - char *b; - - int enable_trace = TRACE_D_RX | TRACE_D_TX; - char *outfile = TRACE_FILE_NAME; - char *binfile = BIN_FILE_NAME; - int outfileset = 0; - int raw = 1; - int noct = -1; - time_t tm; - i4b_trace_hdr_t *ithp = NULL; - int l; - static struct stat fstnew; - - b = &buf[sizeof(i4b_trace_hdr_t)]; - - while( (c = getopt(argc, argv, "abdf:hiln:op:ru:BFPR:T:?")) != EOF) - { - switch(c) - { - case 'a': - analyze = 1; - break; - - case 'b': - enable_trace |= (TRACE_B_RX | TRACE_B_TX); - break; - - case 'd': - enable_trace &= (~(TRACE_D_TX | TRACE_D_RX)); - break; - - case 'o': - outflag = 0; - break; - - case 'f': - outfile = optarg; - outfileset = 1; - break; - - case 'n': - noct = atoi(optarg); - break; - - case 'h': - header = 0; - break; - - case 'i': - enable_trace |= TRACE_I; - info = 1; - break; - - case 'l': - print_q921 = 0; - break; - - case 'p': - binfile = optarg; - bpopt = 1; - break; - - case 'r': - raw = 0; - break; - - case 'u': - unit = atoi(optarg); - if(unit < 0 || unit >= MAX_CONTROLLERS) - usage(); - break; - - case 'B': - Bopt = 1; - break; - - case 'F': - Fopt = 1; - break; - - case 'P': - Popt = 1; - break; - - case 'R': - Rx = atoi(optarg); - if(Rx < 0 || Rx >= MAX_CONTROLLERS) - usage(); - break; - - case 'T': - Tx = atoi(optarg); - if(Tx < 0 || Tx >= MAX_CONTROLLERS) - usage(); - break; - - case '?': - default: - usage(); - break; - } - } - - if(enable_trace == 0) - usage(); - - if(Bopt && Popt) - usage(); - - atexit(exit_hdl); - - if(Bopt) - { - if(bpopt) - sprintf(BPfilename, "%s", binfile); - else - sprintf(BPfilename, "%s%d", BIN_FILE_NAME, unit); - - if((BP = fopen(BPfilename, "r")) != NULL) - { - char buffer[1024]; - fclose(BP); - sprintf(buffer, "%s%s", BPfilename, TRACE_FILE_NAME_BAK); - rename(BPfilename, buffer); - } - if((BP = fopen(BPfilename, "w")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(BP, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting file [%s] to unbuffered", BPfilename); - perror(buffer); - exit(1); - } - } - - if(Popt) - { - if(bpopt) - sprintf(BPfilename, "%s", binfile); - else - sprintf(BPfilename, "%s%d", BIN_FILE_NAME, unit); - - if((BP = fopen(BPfilename, "r")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - if(Fopt) - { - if(fstat(fileno(BP), &fst)) - { - char buffer[80]; - sprintf(buffer, "Error fstat file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - } - else - { - sprintf(devicename, "%s%d", I4BTRC_DEVICE, unit); - - if((f = open(devicename, O_RDWR)) < 0) - { - char buffer[80]; - - sprintf(buffer, "Error opening trace device [%s]", devicename); - perror(buffer); - exit(1); - } - } - - if(outflag) - { - if(outfileset == 0) - sprintf(outfilename, "%s%d", TRACE_FILE_NAME, unit); - else - strcpy(outfilename, outfile); - - - if((Fout = fopen(outfilename, "r")) != NULL) - { - char buffer[1024]; - fclose(Fout); - sprintf(buffer, "%s%s", outfilename, TRACE_FILE_NAME_BAK); - rename(outfilename, buffer); - } - - if((Fout = fopen(outfilename, "w")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error opening file [%s]", outfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(Fout, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting file [%s] to unbuffered", outfile); - perror(buffer); - exit(1); - } - } - - if((setvbuf(stdout, (char *)NULL, _IOLBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error setting stdout to line-buffered"); - perror(buffer); - exit(1); - } - - if(!Popt) - { - if((switch_driver(enable_trace, Rx, Tx)) == -1) - exit(1); - else - traceon = 1; - } - - signal(SIGHUP, SIG_IGN); /* ignore hangup signal */ - signal(SIGUSR1, reopenfiles); /* rotate logfile(s) */ - - time(&tm); - - if(analyze) - { - sprintf(headerbuf, "\n==== isdnanalyze controller rx #%d - tx #%d ==== started %s", - Rx, Tx, ctime(&tm)); - } - else - { - sprintf(headerbuf, "\n=========== isdntrace controller #%d =========== started %s", - unit, ctime(&tm)); - } - - printf("%s", headerbuf); - - if(outflag) - fprintf(Fout, "%s", headerbuf); - - for (;;) - { - if(Popt == 0) - { - n = read(f, buf, BSIZE); - - if(Bopt) - { - if((fwrite(buf, 1, n, BP)) != n) - { - char buffer[80]; - sprintf(buffer, "Error writing file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - - n -= sizeof(i4b_trace_hdr_t); - } - else - { -again: - if((fread(buf, 1, sizeof(i4b_trace_hdr_t), BP)) != sizeof(i4b_trace_hdr_t)) - { - if(feof(BP)) - { - if(Fopt) - { - if(ferror(BP)) - { - char buffer[80]; - sprintf(buffer, "Error reading hdr from file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - usleep(250000); - clearerr(BP); - - if(stat(BPfilename, &fstnew) != -1) - { - if((fst.st_ino != fstnew.st_ino) || - (fstnew.st_nlink == 0)) - { - if((BP = freopen(BPfilename, "r", BP)) == NULL) - { - char buffer[80]; - sprintf(buffer, "Error reopening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - stat(BPfilename, &fst); - } - } - goto again; - } - else - { - printf("\nEnd of playback input file reached.\n"); - exit(0); - } - } - else - { - char buffer[80]; - sprintf(buffer, "Error reading hdr from file [%s]", BPfilename); - perror(buffer); - exit(1); - } - } - - ithp = (i4b_trace_hdr_t *)buf; - l = ithp->length - sizeof(i4b_trace_hdr_t); - - if((n = fread(buf+sizeof(i4b_trace_hdr_t), 1, l , BP)) != l) - { - char buffer[80]; - sprintf(buffer, "Error reading data from file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - } - - if((n > 0) && (n > noct)) - { - dumpbuf(n, b, (i4b_trace_hdr_t *)buf, raw); - } - } -} - -/*---------------------------------------------------------------------------* - * format header into static buffer, return buffer address - *---------------------------------------------------------------------------*/ -char * -fmt_hdr(i4b_trace_hdr_t *hdr, int frm_len) -{ - struct tm *s; - static char hbuf[256]; - int i = 0; - - s = localtime(&(hdr->time.tv_sec)); - - if(hdr->type == TRC_CH_I) /* Layer 1 INFO's */ - { - sprintf(hbuf,"\n-- %s - unit:%d ---------------- time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%6u ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec); - } - else - { - if(hdr->trunc > 0) - { - sprintf(hbuf,"\n-- %s - unit:%d - frame:%6.6u - time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%6u - length:%d (%d) ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - hdr->count, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec, - frm_len, - hdr->trunc); - } - else - { - sprintf(hbuf,"\n-- %s - unit:%d - frame:%6.6u - time:%2.2d.%2.2d %2.2d:%2.2d:%2.2d.%6u - length:%d ", - ((hdr->dir) ? "NT->TE" : "TE->NT"), - hdr->unit, - hdr->count, - s->tm_mday, - s->tm_mon + 1, - s->tm_hour, - s->tm_min, - s->tm_sec, - (u_int32_t)hdr->time.tv_usec, - frm_len); - } - } - - for(i=strlen(hbuf); i <= NCOLS;) - hbuf[i++] = '-'; - - hbuf[i++] = '\n'; - hbuf[i] = '\0'; - - return(hbuf); -} - -/*---------------------------------------------------------------------------* - * decode protocol and output to file(s) - *---------------------------------------------------------------------------*/ -static void -dumpbuf(int n, unsigned char *buf, i4b_trace_hdr_t *hdr, int raw) -{ - static char l1buf[128]; - static unsigned char l2buf[32000]; - static unsigned char l3buf[32000]; - int cnt; - int nsave = n; - char *pbuf; - int i, j; - - l1buf[0] = '\0'; - l2buf[0] = '\0'; - l3buf[0] = '\0'; - - switch(hdr->type) - { - case TRC_CH_I: /* Layer 1 INFO's */ - pbuf = &l1buf[0]; - - switch(buf[0]) - { - case INFO0: - sprintf((pbuf+strlen(pbuf)),"I430: INFO0 (No Signal)\n"); - break; - - case INFO1_8: - sprintf((pbuf+strlen(pbuf)),"I430: INFO1 (Activation Request, Priority = 8, from TE)\n"); - break; - - case INFO1_10: - sprintf((pbuf+strlen(pbuf)),"I430: INFO1 (Activation Request, Priority = 10, from TE)\n"); - break; - - case INFO2: - sprintf((pbuf+strlen(pbuf)),"I430: INFO2 (Pending Activation, from NT)\n"); - break; - - case INFO3: - sprintf((pbuf+strlen(pbuf)),"I430: INFO3 (Synchronized, from TE)\n"); - break; - - case INFO4_8: - sprintf((pbuf+strlen(pbuf)),"I430: INFO4 (Activated, Priority = 8/9, from NT)\n"); - break; - - case INFO4_10: - sprintf((pbuf+strlen(pbuf)),"I430: INFO4 (Activated, Priority = 10/11, from NT)\n"); - break; - - default: - sprintf((pbuf+strlen(pbuf)),"I430: ERROR, invalid INFO value 0x%x!\n", buf[0]); - break; - } - break; - - case TRC_CH_D: /* D-channel data */ - - cnt = decode_lapd(l2buf, n, buf, hdr->dir, raw, print_q921); - - n -= cnt; - buf += cnt; - - if(n) - { - switch(*buf) - { - case 0x40: - case 0x41: - decode_1tr6(l3buf, n, cnt, buf, raw); - break; - - default: - decode_q931(l3buf, n, cnt, buf, raw); - break; - } - } - break; - - default: /* B-channel data */ - - pbuf = &l2buf[0]; - - for (i = 0; i < n; i += 16) - { - sprintf((pbuf+strlen(pbuf)),"B%d:%.3x ", hdr->type, i); - - for (j = 0; j < 16; j++) - if (i + j < n) - sprintf((pbuf+strlen(pbuf)),"%02x ", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf))," "); - - sprintf((pbuf+strlen(pbuf))," "); - - for (j = 0; j < 16 && i + j < n; j++) - if (isprint(buf[i + j])) - sprintf((pbuf+strlen(pbuf)),"%c", buf[i + j]); - else - sprintf((pbuf+strlen(pbuf)),"."); - - sprintf((pbuf+strlen(pbuf)),"\n"); - } - break; - } - - if(header && ((l1buf[0] != '\0' || l2buf[0] != '\0') || (l3buf[0] != 0))) - { - char *p; - p = fmt_hdr(hdr, nsave); - printf("%s", p); - if(outflag) - fprintf(Fout, "%s", p); - } - - if(l1buf[0] != '\0') - { - printf("%s", l1buf); - if(outflag) - fprintf(Fout, "%s", l1buf); - } - - if(l2buf[0] != '\0') - { - printf("%s", l2buf); - if(outflag) - fprintf(Fout, "%s", l2buf); - } - - if(l3buf[0] != '\0') - { - printf("%s", l3buf); - if(outflag) - fprintf(Fout, "%s", l3buf); - } -} - -/*---------------------------------------------------------------------------* - * exit handler function to be called at program exit - *---------------------------------------------------------------------------*/ -void -exit_hdl() -{ - if(traceon) - switch_driver(TRACE_OFF, Rx, Tx); -} - -/*---------------------------------------------------------------------------* - * switch driver debugging output on/off - *---------------------------------------------------------------------------*/ -static int -switch_driver(int value, int rx, int tx) -{ - char buffer[80]; - int v = value; - - if(analyze == 0) - { - if(ioctl(f, I4B_TRC_SET, &v) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_SET, val = %d", v); - perror(buffer); - return(-1); - } - } - else - { - if(value == TRACE_OFF) - { - if(ioctl(f, I4B_TRC_RESETA, &v) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_RESETA - "); - perror(buffer); - return(-1); - } - } - else - { - i4b_trace_setupa_t tsa; - - tsa.rxunit = rx; - tsa.rxflags = value; - tsa.txunit = tx; - tsa.txflags = value; - - if(ioctl(f, I4B_TRC_SETA, &tsa) < 0) - { - sprintf(buffer, "Error ioctl I4B_TRC_SETA, val = %d", v); - perror(buffer); - return(-1); - } - } - } - return(0); -} - -/*---------------------------------------------------------------------------* - * reopen files to support rotating logfile(s) on SIGUSR1 - * - * based on an idea from Ripley (ripley@nostromo.in-berlin.de) - * - * close file and reopen it for append. this will be a nop - * if the previously opened file hasn't moved but will open - * a new one otherwise, thus enabling a rotation... - * - *---------------------------------------------------------------------------*/ -static void -reopenfiles(int dummy) -{ - if(outflag) - { - fclose(Fout); - - if((Fout = fopen(outfilename, "a")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error re-opening file [%s]", outfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(Fout, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error re-setting file [%s] to unbuffered", outfilename); - perror(buffer); - exit(1); - } - } - - if(Bopt) - { - - fclose(BP); - - if((BP = fopen(BPfilename, "a")) == NULL) - { - char buffer[80]; - - sprintf(buffer, "Error re-opening file [%s]", BPfilename); - perror(buffer); - exit(1); - } - - if((setvbuf(BP, (char *)NULL, _IONBF, 0)) != 0) - { - char buffer[80]; - - sprintf(buffer, "Error re-setting file [%s] to unbuffered", BPfilename); - perror(buffer); - exit(1); - } - } -} - - -/* EOF */ diff --git a/usr.sbin/i4b/isdntrace/trace.h b/usr.sbin/i4b/isdntrace/trace.h deleted file mode 100644 index e4c5b5a76c204..0000000000000 --- a/usr.sbin/i4b/isdntrace/trace.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 1996, 1998 Hellmuth Michaelis. All rights reserved. - * - * Copyright (c) 1996 Gary Jennejohn. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * 4. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software and/or documentation. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * trace.h - header file for isdn trace - * ------------------------------------ - * - * $Id: trace.h,v 1.7 1998/10/19 12:32:23 hm Exp $ - * - * last edit-date: [Mon Oct 19 14:27:21 1998] - * - * -hm splitting - * -hm new filenames - * - *---------------------------------------------------------------------------*/ - -#include <stdio.h> -#include <stdlib.h> -#include <signal.h> -#include <fcntl.h> -#include <ctype.h> -#include <string.h> -#include <time.h> -#include <unistd.h> -#include <sys/uio.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <sys/stat.h> - -#include <machine/i4b_ioctl.h> -#include <machine/i4b_trace.h> - -#include "pcause_1tr6.h" /* obsolete german national ISDN */ -#include "pcause_q850.h" - -#define I4BTRC_DEVICE "/dev/i4btrc" /* trace device file */ -#define TRACE_FILE_NAME "isdntrace" /* default output filename */ -#define TRACE_FILE_NAME_BAK ".last" /* backup filename trailer */ -#define BIN_FILE_NAME "isdntracebin" /* default binary filename */ - -#define BSIZE 4096 /* read buffer size */ -#define NCOLS 80 /* screen width */ - -#define RxUDEF 0 /* analyze mode, default unit for receiver side */ -#define TxUDEF 1 /* analyze mode, default unit for transmitter side */ - -int decode_lapd(char *pbuf, int n, unsigned char *buf, int is_te, int raw, int printit); -void decode_q931(char *pbuf, int n, int off, unsigned char *buf, int raw); -void decode_1tr6(char *pbuf, int n, int off, unsigned char *buf, int raw); -char *print_error(int prot, unsigned char code); -int q931_facility(char *pbuf, unsigned char *buf); -int p_q931cause(char *pbuf, unsigned char *buf); -int p_q931address(char *pbuf, unsigned char *buf); -int p_q931bc(char *pbuf, unsigned char *buf); -int p_q931high_compat(char *pbuf, unsigned char *buf); -int q932_facility(char *pbuf, unsigned char *buf); - -/* EOF */ diff --git a/usr.sbin/i4b/man/Makefile b/usr.sbin/i4b/man/Makefile deleted file mode 100644 index 65248d6dd26be..0000000000000 --- a/usr.sbin/i4b/man/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -MAN4 = i4b.4 i4bctl.4 i4bipr.4 i4bq921.4 i4bq931.4 i4brbch.4 i4btel.4 \ - i4btrc.4 isic.4 daic.4 i4bisppp.4 - -.include <bsd.prog.mk> - diff --git a/usr.sbin/i4b/man/daic.4 b/usr.sbin/i4b/man/daic.4 deleted file mode 100644 index fc0479750d861..0000000000000 --- a/usr.sbin/i4b/man/daic.4 +++ /dev/null @@ -1,98 +0,0 @@ -.\" Copyright (c) 1997 Martin Husemann <martin@rumolt.teuto.de> -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. The name of the author may not be used to endorse or promote products -.\" derived from this software withough specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $Id: daic.4,v 1.1 1998/02/03 12:43:07 hm Exp $ -.\" -.\" last edit-date: [Fri Jan 30 22:49:48 1998] -.\" -.\" -mh writing manual pages -.\" -.\" -.Dd January 30, 1998 -.Dt daic 4 -.Sh NAME -.Nm daic -.Nd isdn4bsd driver for EICON.Diehl active isdn cards -.Pp -The -.Nm -driver supports the old Diehl active cards: -.Em S, SX, SXn, SCOM -and -.Em QUADRO. -.Sh SYNOPSIS -.Pp -Use a config line like this -.Cd "daic0 at isa? iomem 0xd8000 irq 10" -.Pp -For a -.Em QUADRO -card use the same, the driver will detect the board type and use -all four ports, each attached as a controller of its own to the -ISDN4BSD system, which can be listed using the isdnctl utility. -.Sh DESCRIPTION -The -.Nm -driver interfaces the isdn card to the ISDN4BSD kernel subsystem. -All lower layer isdn control is handled by the card. This should -allow you to run any national isdn protocol delivered by EICON.Diehl -for your card, but the driver has only been tested with the DSS1 -protocol and some parts of the cards interface are isdn protocol -dependend. -.Pp -The -.Nm -driver is written to conform to the software interface documented -by Diehl in their -.Nm ISDN-Karten Benutzerhandbuch -from 1992. -.Sh MICROCODE DOWNLOAD -Every active card needs its own operating software before it can -work. You have to download this to the card before using it with -ISDN4BSD. Use the isdnctl utility to do this, i.e. call -.Nm "isdnctl -d te_etsi.sx 1" -to download the file -.Nm te_etsi.sx -to controller number 1. Use -.Nm "isdnctl -l" -to list all available controllers (and ports). You have to select the -correct isdn protocol file for your isdn interface, see the Diehl documentation -for details. -.Pp -The cards bootstrap process involves another file, which is independend -of the card type you use and the protocol you run. It is called -.Nm download.bin -in current versions of the Diehl software distribution and has to be -copied to the kernel compile directory under -.Nm dev/ic/microcode/daic -and converted into a header file used when compiling the kernel by running -.Nm make -in that directory. Your kernel compile will fail and remind you of this -if you forget to do this. Due to copright restrictions we cannot distribute -the driver with this file integrated. But if you own a card, you do have -the file (or can get it from the Diehl web server). -.Sh BUGS -The driver is not yet finished. It will only compile on NetBSD and -even there will not work. This should be fixed soon and the driver -will be ported to FreeBSD. -.Sh SEE ALSO -.Xr isdnctl 1 diff --git a/usr.sbin/i4b/man/i4b.4 b/usr.sbin/i4b/man/i4b.4 deleted file mode 100644 index f285c08fa5fc4..0000000000000 --- a/usr.sbin/i4b/man/i4b.4 +++ /dev/null @@ -1,108 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4b.4,v 1.6 1998/12/05 18:06:03 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:38:11 1998] -.\" -.Dd February 3, 1998 -.Dt i4b 4 -.Sh NAME -.Nm i4b -.Nd isdn4bsd call control ISDN driver -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4b\&" -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -device driver is used by the -.Xr isdnd 8 -daemon to exchange messages with the isdn4bsd kernel part for the purpose -of call establishment, control and disconnection and to access various -control and status informations. -.Pp -The messages and message parameters are documented in the include -file -.Em /usr/include/machine/i4b_ioctl.h . -.Pp -The available ioctl's are: -.Pp -.Bl -tag -width Ds -compact -offset indent -.It Ar I4B_CDID_REQ -Request a unique Call Description IDentifier (cdid) which identifies -uniquely a single interaction of the local D channel with the exchange. -.It Ar I4B_CONNECT_REQ -Actively request a call setup to a remote ISDN subscriber. -.It Ar I4B_CONNECT_RESP -Respond to an incoming call, either accept, reject or ignore it. -.It Ar I4B_DISCONNECT_REQ -Actively terminate a connection. -.It Ar I4B_CTRL_INFO_REQ -Request information about an installed ISDN controller card. -.It Ar I4B_DIALOUT_RESP -Give information about call setup to driver who requested dialing out. -.It Ar I4B_TIMEOUT_UPD -Update the kernels timeout value(s) in case of dynamically calculated -shorthold mode timing changes. -.It Ar I4B_UPDOWN_IND -Inform the kernel userland drivers about interface soft up/down status -changes. -.It Ar I4B_CTRL_DOWNLOAD -Download firmware to active card(s). -.It Ar I4B_ACTIVE_DIAGNOSTIC -Return diagnostic information from active cards. -.El -.Pp -Status and event messages available from the kernel are: -.Pp -.Bl -tag -width Ds -compact -offset indent -.It Ar MSG_CONNECT_IND -An incoming call from a remote ISDN user is indicated. -.It Ar MSG_CONNECT_ACTIVE_IND -After an incoming call has been accepted locally or an outgoing call has -been accepted by a remote, the exchange signaled an active connection -and the corresponding B-channel is switched through. -.It Ar MSG_DISCONNECT_IND -A call was terminated. -.It Ar MSG_DIALOUT_IND -A userland interface driver requests the daemon to dial out (typically a -network interface when a packet arrives in its send queue). -.It Ar MSG_IDLE_TIMEOUT_IND -A call was terminated by the isdn4bsd kernel driver because a B-channel -idle timeout occurred. -.It Ar MSG_ACCT_IND -Accounting information from a network driver. -.It Ar MSG_CHARGING_IND -Charging information from the kernel. -.El -.Pp -.Sh SEE ALSO -.Xr isdnd 8 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4bctl.4 b/usr.sbin/i4b/man/i4bctl.4 deleted file mode 100644 index fa5fccd4fc862..0000000000000 --- a/usr.sbin/i4b/man/i4bctl.4 +++ /dev/null @@ -1,50 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4bctl.4,v 1.4 1998/12/05 18:06:04 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:38:22 1998] -.\" -.Dd February 3, 1998 -.Dt i4bctl 4 -.Sh NAME -.Nm i4bctl -.Nd control device for the isdn4bsd kernel part -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4bctl\&" -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -.Nm -is used by the -.Xr isdndebug 8 -utility to get and set the current debugging level and other information -of the isdn4bsd package kernel ISDN handling layers. -.Sh SEE ALSO -.Xr isdndebug 8 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4bipr.4 b/usr.sbin/i4b/man/i4bipr.4 deleted file mode 100644 index f4cdeacff5c33..0000000000000 --- a/usr.sbin/i4b/man/i4bipr.4 +++ /dev/null @@ -1,98 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4bipr.4,v 1.8 1998/12/05 18:06:06 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:38:34 1998] -.\" -.Dd July 6, 1998 -.Dt i4bipr 4 -.Sh NAME -.Nm i4bipr -.Nd isdn4bsd IP over ISDN B-channel network driver -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4bipr\&" Op count -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -driver interfaces the IP subsystem of the operating system with the -isdn4bsd package so that transport of IP packets over an ISDN link -is possible. -.Pp -The driver just packs IP packets without anything appended or prepended -into raw HDLC packets on the B channel and transfers them to a remote site. -IP packets received from the remote site are queued into the local IP -protocol stack. -.Pp -The format of the resulting packet on the B channel is: -.Pp -.Dl (HDLC opening flag) (IP-packet) (CRC) (HDLC closing flag) -.Pp -In the case where an IP packet for a remote site arrives in the driver and no -connection has been established yet, the driver communicates with the -.Xr isdnd 8 -daemon to establish a connection. -.Pp -The driver has support for interfacing to the -.Xr bpf 4 -subsystem for using -.Xr tcpdump 1 -with the -.Nm ipr -interfaces. -.Pp -The driver optionally (when compiled with the IPR_VJ option) provides Van -Jacobsen header compression, under control of the link0 and link1 options to -.Xr ifconfig 8 -: -.Pp -.Bl -tag -width 15n -offset indent -compact -.It link0 -Apply VJ compression to outgoing packets on this interface, and assume that -incoming packets require decompression. -.It link1 -Check incoming packets for Van Jacobsen compression; if they appear to be -compressed, automatically set link0. -.El -.Pp -The default values are -.Em on -for -.Em link1 -and -.Em off -for -.Em link0 . -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnd.rc 5 -.Xr bpf 4 -.Xr tcpdump 1 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4bisppp.4 b/usr.sbin/i4b/man/i4bisppp.4 deleted file mode 100644 index ce65b823378b3..0000000000000 --- a/usr.sbin/i4b/man/i4bisppp.4 +++ /dev/null @@ -1,107 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4bisppp.4,v 1.9 1998/12/22 19:16:57 hm Exp $ -.\" -.\" last edit-date: [Tue Dec 22 20:15:08 1998] -.\" -.Dd December 22, 1998 -.Dt i4bisppp 4 -.Sh NAME -.Nm i4bisppp -.Nd isdn4bsd synchronous PPP over ISDN B-channel network driver -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4bisppp\&" Op count -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -driver interfaces the IP subsystem of the operating system with the -isdn4bsd package so that a transport of IP packets over an ISDN link -is possible. -.Pp -The driver is just a glue layer between Serge Vakulenko's sppp -backend and the ISDN4BSD package. -.Pp -In case an IP packet for a remote side arrives in the driver and no -connection is established yet, the driver communicates with the -.Xr isdnd 8 -daemon to establish a connection. -.Pp -The driver has support for interfacing to the -.Xr bpf 4 -subsystem for using -.Xr tcpdump 1 -with the -.Nm isp -interfaces. -.Pp -The -.Xr spppcontrol 8 -utility is used to configure all aspects of PPP required to connect to a -remote site. -.Sh LINK0 and LINK1 -The -.Em link0 -and -.Em link1 -flags given as parameters to -.Xr ifconfig 8 -have the following meaning for the -.Nm isp -devices: -.Bl -tag -width link0 -compact -.Pp -.It Li link0 -wait passively for connection -.Pp -.It Li link1 -auto-dial on output -.El -.Pp -The -.Em link0 -and -.Em link1 -flags are set to -.Em off -by default. -.Pp -See -.Xr sppp 4 -for a more detailed discussion of the flags, -.Pp -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnd.rc 5 -.Xr spppcontrol 8 -.Xr sppp 4 -.Xr bpf 4 -.Xr tcpdump 1 -.Sh AUTHOR -The -.Nm -device driver was written by Joerg Wunsch and then added to ISDN4BSD by Gary Jennejohn. -This manpage was written by Hellmuth Michaelis. He can be contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4bq921.4 b/usr.sbin/i4b/man/i4bq921.4 deleted file mode 100644 index bb5bcfc5fe27d..0000000000000 --- a/usr.sbin/i4b/man/i4bq921.4 +++ /dev/null @@ -1,49 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4bq921.4,v 1.5 1998/12/05 18:06:08 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:38:57 1998] -.\" -.Dd February 3, 1998 -.Dt i4bq921 4 -.Sh NAME -.Nm i4bq921 -.Nd isdn4bsd pseudo device driver handling the Q.921 protocol -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4bq921\&" -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -.Nm -is the ISDN D channel layer 2 handler. -.Sh STANDARDS -ITU Recommendation Q.920 and Q.921 -.Sh SEE ALSO -.Xr i4bq931 4 -.Sh AUTHOR -The -.Nm -driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4bq931.4 b/usr.sbin/i4b/man/i4bq931.4 deleted file mode 100644 index 7c8d155fa0351..0000000000000 --- a/usr.sbin/i4b/man/i4bq931.4 +++ /dev/null @@ -1,49 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4bq931.4,v 1.5 1998/12/05 18:06:10 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:39:08 1998] -.\" -.Dd February 3, 1998 -.Dt i4bq931 4 -.Sh NAME -.Nm i4bq931 -.Nd isdn4bsd pseudo device driver handling the Q.931 protocol -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4bq931\&" -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -.Nm -is the ISDN D channel layer 2 handler. -.Sh STANDARDS -ITU Recommendation Q.930 and Q.931 -.Sh SEE ALSO -.Xr i4bq921 4 -.Sh AUTHOR -The -.Nm -driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4brbch.4 b/usr.sbin/i4b/man/i4brbch.4 deleted file mode 100644 index b7ee3dfc39652..0000000000000 --- a/usr.sbin/i4b/man/i4brbch.4 +++ /dev/null @@ -1,50 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4brbch.4,v 1.5 1998/12/05 18:06:11 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:39:19 1998] -.\" -.Dd February 3, 1998 -.Dt i4brbch 4 -.Sh NAME -.Nm i4brbch -.Nd isdn4bsd ISDN Raw B-CHannel access driver -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4brbch\&" Op count -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -driver provides an interface to the raw untranslated B-channel. It is -part of the isdn4bsd package. -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnd.rc 5 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4btel.4 b/usr.sbin/i4b/man/i4btel.4 deleted file mode 100644 index e5f62523e44ea..0000000000000 --- a/usr.sbin/i4b/man/i4btel.4 +++ /dev/null @@ -1,52 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4btel.4,v 1.5 1998/12/05 18:06:12 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:39:31 1998] -.\" -.Dd February 3, 1998 -.Dt i4btel 4 -.Sh NAME -.Nm i4btel -.Nd isdn4bsd ISDN B-channel telephony interface driver -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4btel\&" Op count -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -driver provides an interface to the B-channel for telephony applications -and is currently used by the -.Xr isdnd 8 -for answering machine support. The driver is part of the isdn4bsd package. -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdnd.rc 5 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/i4btrc.4 b/usr.sbin/i4b/man/i4btrc.4 deleted file mode 100644 index 60b88ed971b54..0000000000000 --- a/usr.sbin/i4b/man/i4btrc.4 +++ /dev/null @@ -1,52 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: i4btrc.4,v 1.5 1998/12/05 18:06:13 hm Exp $ -.\" -.\" last edit-date: [Sat Dec 5 18:39:42 1998] -.\" -.Dd February 3, 1998 -.Dt i4btrc 4 -.Sh NAME -.Nm i4btrc -.Nd isdn4bsd ISDN interface driver for D and B channel tracing -.Sh FreeBSD SYNOPSIS -.Cd pseudo-device \&"i4btrc\&" Op count -.Sh NetBSD SYNOPSIS -none -.Sh DESCRIPTION -The -.Nm -driver is used to add a header to the data got from the D and/or B channel -and queues it to be read and further processed by the -.Xr isdntrace 8 -utility. -.Sh SEE ALSO -.Xr isdnd 8 -.Xr isdntrace 8 -.Sh AUTHOR -The -.Nm -device driver and this manpage were written by Hellmuth Michaelis. He can be -contacted at hm@kts.org. diff --git a/usr.sbin/i4b/man/isic.4 b/usr.sbin/i4b/man/isic.4 deleted file mode 100644 index 0ba54d697a2cf..0000000000000 --- a/usr.sbin/i4b/man/isic.4 +++ /dev/null @@ -1,380 +0,0 @@ -.\" -.\" Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: isic.4,v 1.14 1998/12/22 19:12:13 hm Exp $ -.\" -.\" last edit-date: [Tue Dec 22 20:08:06 1998] -.\" -.Dd December 22, 1998 -.Dt isic 4 -.Sh NAME -.Nm isic -.Nd isdn4bsd Siemens ISDN Chipset device driver -.Sh FreeBSD SYNOPSIS -.Pp -For a Teles S0/8 or Niccy 1008 card: -.Cd options \&"TEL_S0_8\&" -.Cd "device isic0 at isa? iomem 0xd0000 net irq 5 flags 1 vector isicintr" -.Pp -For a Teles S0/16 or Creatix ISDN-S0 or Niccy 1016 card: -.Cd options \&"TEL_S0_16\&" -.Cd "device isic0 at isa? port 0xd80 iomem 0xd0000 net irq 5 flags 2 vector isicintr" -.Pp -For a Teles S0/16.3 card: -.Cd options \&"TEL_S0_16_3\&" -.Cd "device isic0 at isa? port 0xd80 net irq 5 flags 3 vector isicintr" -.Pp -For an AVM A1 or AVM Fritz!Card classic: -.Cd options \&"AVM_A1\&" -.Cd "device isic0 at isa? port 0x340 net irq 5 flags 4 vector isicintr" -.Pp -For an AVM Fritz!Card PCMCIA: -.Cd options \&"AVM_A1_PCMCIA\&" -.Cd "device isic0 at isa? port 0x340 net irq 5 flags 10 vector isicintr" -.Pp -For a Teles S0/16.3 PnP card (PnP): -.Cd options \&"TEL_S0_16_3_P\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For a Creatix ISDN-S0 P&P card (PnP): -.Cd options \&"CRTX_S0_P\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For an USRobotics Sportster ISDN TA internal or Stollmann Tina-pp card: -.Cd options \&"USR_STI\&" -.Cd "device isic0 at isa? port 0x268 net irq 5 flags 7 vector isicintr" -.Pp -For an ITK micro ix1 card: -.Cd options \&"ITKIX1\&" -.Cd "device isic0 at isa? port 0x398 net irq 10 flags 18 vector isicintr" -.Pp -For a Dr. Neuhaus Niccy Go@ (PnP): -.Cd options \&"DRN_NGO\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For a Sedlbauer Win Speed card (PnP): -.Cd options \&"SEDLBAUER\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For a Dynalink IS64PH (PnP): -.Cd options \&"DYNALINK\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For an ELSA QuickStep 1000pro ISA (PnP): -.Cd options \&"ELSA_QS1ISA\&" -.Cd "device isic0 at isa? port ? net irq ? vector isicintr" -.Pp -For an ELSA QuickStep 1000pro PCI: -.Cd options \&"ELSA_QS1PCI\&" -.Cd "device isic0" -.Pp -.Ar FreeBSD PnP configuration: -.Pp -To be able to use PnP cards under FreeBSD, you have to add -.Pp -.Cd controller pnp0 -.Pp -to you kernel config file. More, it is recommended to add -.Pp -.Cd options \&"USERCONFIG\&" -.Cd options \&"USERCONFIG_BOOT\&" -.Pp -to your kernel config file to be able to adjust your PnP configuration -in case of trouble. -.Pp -See also: -.Xr pnp 4 -and -.Xr boot 8 -.Pp -.Sh NetBSD SYNOPSIS -On the ISA bus: -.Pp -For a Teles S0/8 or Niccy 1008 card: -.Cd options \&"TEL_S0_8\&" -.Cd "isic0 at isa? iomem 0xd0000 irq 5" -.Pp -For a Teles S0/16 or Creatix ISDN-S0 or Niccy 1016 card: -.Cd options \&"TEL_S0_16\&" -.Cd "isic0 at isa? port 0xd80 iomem 0xd0000 irq 5" -.Pp -For a Teles S0/16.3 card: -.Cd options \&"TEL_S0_16_3\&" -.Cd "isic0 at isa? port 0xd80 irq 5" -.Pp -For an AVM A1 or AVM Fritz card: -.Cd options \&"AVM_A1\&" -.Cd "isic0 at isa? port 0x340 irq 5" -.Pp -For an USRobotics Sportster ISDN TA internal or Stollmann Tina-pp card: -.Cd options \&"USR_STI\&" -.Cd "isic0 at isa? port 0x268 irq 5" -.Pp -For an ITK ix1 micro card: -.Cd options \&"ITKIX1\&" -.Cd "isic0 at isa? port 0x398 irq 10" -.Pp -On the ISAPNP bus: -.Pp -For a Teles S0/16.3 PnP card -.Cd options \&"TEL_S0_16_3_P\&" -.Cd "isic* at isapnp?" -.Pp -For a Creatix ISDN-S0 P&P card -.Cd options \&"CRTX_S0_P\&" -.Cd "isic* at isapnp?" -.Pp -For a Dr. Neuhaus Niccy GO@ -.Cd options \&"DRN_NGO\&" -.Cd "isic* at isapnp?" -.Pp -For an ELSA QuickStep 1000pro (ISA version): -.Cd options \&"ELSA_QS1ISA\&" -.Cd "isic* at isapnp?" -.Pp -For a Sedlbauer WinSpeed: -.Cd options \&"SEDLBAUER\&" -.Cd "isic* at isapnp?" -.Pp -For a Dynalink IS64PH: -.Cd options \&"DYNALINK\&" -.Cd "isic* at isapnp?" -.Pp -Cards on the PCI bus: -.Pp -For an ELSA QuickStep 1000pro (PCI version) -.Cd options \&"ELSA_QS1PCI\&" -.Cd "isic* at pci?" -.Pp -Cards on the PCMCIA or PCCARD bus: -.Pp -For an AVM Fritz!Card PCMCIA -.Cd options \&"AVM_PCMCIA\&" -.Cd "isic* at pcmcia? function ?" -.Pp -For an ELSA MicroLink ISDN/MC -.Cd options \&"ELSA_ISDNMC\&" -.Cd "isic* at pcmcia? function ?" -.Pp -For an ELSA MicroLink MC/all -.Cd options \&"ELSA_MCALL\&" -.Cd "isic* at pcmcia? function ?" -.Pp -.Sh DESCRIPTION -The -.Nm -driver provides D-channel layer 1 supports as specified in ITU Recommendation -I.430 and layer 1 support for the B-channel. -.Pp -The driver supports several 8 and 16bit passive ISDN cards from various -manufacturers which are all based upon the popular Siemens ISDN chipset -consisting of the ISDN Subscriber Access Controller ISAC (such as the -PEB2085 or PSB 2186) and the High-Level Serial Communications Controller -Extended HSCX (such as the SAB82525 or PSB21525). The newer IPAC chip -(which integrates an ISAC and a HSCX in one chip, with the added benefit -of larger FIFO buffers) is also supported. -.Pp -.Sh SUPPORTED CARDS -.Pp -.Bl -tag -width Ds -compact -offset -.It Ar Teles S0/8, Dr. Neuhaus Niccy 1008, Creatix ISDN-S0/8 -.Pp -The required (optional for NetBSD) -.Em flag -value is 1. -.Pp -Notice that this cards must not have a -.Em port -value in the config line. -.Pp -Valid interrupts are 2, 3, 4, 5, 6 and 7. -.Pp -The i/o ports are memory mapped and the memory start address may -be in the range 0xA0000 to 0xDF000 and uses 4kB of memory. -.Pp -.It Ar Teles S0/16, Creatix ISDN-S0, Dr. Neuhaus Niccy 1016 -.Pp -The required (optional under NetBSD) -.Em flag -value is 2. -.Pp -These boards have a jumper which specifies an i/o base address of either -0xd80, 0xe80 or 0xf80. The remaining necessary configuration values are then -programmed at run time by accessing this i/o port. -.Pp -Valid interrupts are 2, 3, 4, 5, 10, 11, 12 or 15. -.Pp -Valid memory start -addresses are 0xC0000, 0xC2000, 0xC4000, 0xC6000, 0xC8000, 0xCA000, 0xCC000, -0xCE000, 0xD0000, 0xD2000, 0xD4000, 0xD6000, 0xD8000, 0xDA000, 0xDC000 and -0xDE000. -.Pp -Notice: Although the Jumpers are labeled 0xd80, 0xe80 or 0xf80, they -also require i/o space at addresses 0x180, 0x280 or 0x380. -.Pp -.It Ar Teles S0/16.3 -.Pp -The required (optional under NetBSD) -.Em flag -value is 3. -.Pp -This card is completely i/o mapped and must not have an -.Em iomem -statement in the config line. -.Pp -Valid interrupts are 2, 5, 9, 10, 12 or 15. -.Pp -Notice: Although the switch positions are labeled 0x180, 0x280 and 0x380, -the card is to be configured at 0xd80, 0xe80 or 0xf80 respectively! -.Pp -.It Ar AVM A1, AVM Fritz!Card -.Pp -The required (optional under NetBSD) -.Em flag -value is 4. -.Pp -These boards have a jumper which specifies an i/o base address of either -0x200, 0x240, 0x300 or 0x340. -.Pp -Valid interrupt configurations are 3, 4, 5, 6, 7, 10, 11, 12 or 15. -.Pp -Older Versions of the AVM A1 also require setting of an IRQ jumper, newer -versions of this and the Fritz!Card only have an i/o base jumper and the -interrupt is setup at runtime by reprogramming a register. -.Pp -This card is completely i/o mapped and must not have an -.Em iomem -statement in the config line. -.Pp -.It Ar Teles S0/16.3 PnP -.Pp -Possible i/o port values are 0x580, 0x500 and 0x680. -Possible interrupt configurations are 3, 5, 7, 10, 11 and 12. -.Pp -The the card is auto-configured by the PnP kernel subsystem. -.Pp -.It Ar Creatix ISDN-S0 P&P -.Pp -Valid i/o port values are 0x120, 0x180 and 0x100. -.Pp -Valid interrupt configurations are 3, 5, 7, 10, 11 and 12. -.Pp -The card is auto-configured by the PnP kernel subsystem. -.Pp -.It Ar "3Com USRobotics Sportster ISDN TA intern and Stollmann Tina pp" -.Pp -The required (optional for NetBSD) -.Em flag -value is 7. -.Pp -Valid i/o port values are 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230, -0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270 and 0x278. -.Pp -Valid interrupt configurations are 5, 7, 10, 11, 12, 14, 15. -.Pp -Notice: this card has a strange address decoding scheme resulting in 64 -windows of some bytes length. Anyway, support for this card is good because -the manufacturer gave out technical docs for this card! -.Pp -.Pp -.It Ar "Dr. Neuhaus Niccy Go@" -.Pp -Valid i/o port values must be in the range 0x200 ... 0x3e0. -.Pp -Valid interrupt configurations are 3, 4, 5, 9, 10, 11, 12, 15. -.Pp -The card is auto-configured by the PnP kernel subsystem. -.Pp -.It Ar "Sedlbauer Win Speed" -.Pp -Valid i/o port values must be in the range 0x100 ... 0x3f0. (alignment 0x8, -len 0x8) -.Pp -Valid interrupt configurations are 3, 4, 5, 7, 10, 11, 12, 13, 15. -.Pp -The card is auto-configured by the PnP kernel subsystem. -.Em FreeBSD: -This card is PnP only, and so it can be configured using USERCONFIG -('man 4 pnp'). This can be done via -.Em /kernel.config -\&. For example: -.Pp -.Cd USERCONFIG -.Cd pnp 1 0 os enable port0 0x270 irq0 10 -.Cd quit -.Pp -.Pp -.It Ar "ELSA QuickStep 1000pro (ISA)" -.Pp -I/O port in the range 0x160 ... 0x360 (occupies 8 bytes). -.Pp -Valid interrupt configurations are 3, 4, 5, 7, 10, 11, 12, 15. -.Pp -The card is auto-configured by the PnP kernel subsystem. -.Pp -.Pp -.It Ar "ELSA QuickStep 1000pro-PCI" -.Pp -The card is auto-configured by the PCI kernel subsystem. -.Pp -.Pp -.It Ar "ITK ix1 micro" -.Pp -The required (optional under NetBSD) -.Em flag -value is 18. -.Pp -Valid i/o port values must be in the range (<unknown>). -.Pp -Valid interrupt configurations are (<unknown>). -.Pp -.Sh CAVEATS -Note that all of the boards with I/O ports actually use several ranges -of port addresses; Teles happen to refer to the 0xd80 range in their -documentation (the board also uses 0x180 etc.), while AVM happen to refer -to the 0x200 range in their documentation (the board also uses 0x600 etc.) -The driver matches the manufacturers' description for the purposes of -configuration, but of course makes use of all the ports in order to -operate the card. -.Pp -.Sh BUGS -Since there is no hardware documentation available from several manufacturers -for their boards, it is likely that there are many, many bugs left. - -.Sh STANDARDS -CCITT Recommendation I.430 - -.Sh SEE ALSO -.Xr i4bq921 4 -.Xr i4bq931 4 - -.Sh AUTHOR -The -.Nm -driver and this manpage were written by Hellmuth Michaelis. It is based -on earlier work of Arne Helme, Andrew Gordon and Gary Jennejohn. The author -can be contacted at hm@kts.org. -.Pp -The complete porting to and maintenance of NetBSD was done by Martin Husemann. -He can be contacted at martin@rumolt.teuto.de |
