diff options
author | hm <hm@FreeBSD.org> | 2001-07-21 11:49:28 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2001-07-21 11:49:28 +0000 |
commit | b310ff388a7a2cff1a87ae703d493427fb0f38a4 (patch) | |
tree | 4b9d689a883267e750359c816ee5d64a518f3407 /share | |
parent | 7c1e3e5d276608396ba609f919c6dc9dfa32b1b9 (diff) | |
download | FreeBSD-src-b310ff388a7a2cff1a87ae703d493427fb0f38a4.zip FreeBSD-src-b310ff388a7a2cff1a87ae703d493427fb0f38a4.tar.gz |
Add the i4brunppp utility to the example section. This utility is one way
of taking incoming calls with i4b in conjunction with userland ppp(8).
Diffstat (limited to 'share')
-rw-r--r-- | share/examples/isdn/i4brunppp/Makefile | 19 | ||||
-rw-r--r-- | share/examples/isdn/i4brunppp/README | 19 | ||||
-rw-r--r-- | share/examples/isdn/i4brunppp/i4brunppp-isdnd.rc | 65 | ||||
-rw-r--r-- | share/examples/isdn/i4brunppp/i4brunppp.8 | 47 | ||||
-rw-r--r-- | share/examples/isdn/i4brunppp/i4brunppp.c | 223 |
5 files changed, 373 insertions, 0 deletions
diff --git a/share/examples/isdn/i4brunppp/Makefile b/share/examples/isdn/i4brunppp/Makefile new file mode 100644 index 0000000..80cde94 --- /dev/null +++ b/share/examples/isdn/i4brunppp/Makefile @@ -0,0 +1,19 @@ +# $FreeBSD$ + +PROG = i4brunppp +SRCS = i4brunppp.c +MAN8 = i4brunppp.8 + +RUNPPPDEST= /etc/isdn + +INSTALL ?= install + +install: + @echo i4brunppp is not installed automatically. In case you want to run + @echo user-ppp in dial-in server under i4b, please copy it into /etc/isdn. + +installetc: i4brunppp + ${INSTALL} -c -m ${BINMODE} -o ${BINOWN} -g ${BINGRP} \ + ${.CURDIR}/i4brunppp ${RUNPPPDEST} + +.include <bsd.prog.mk> diff --git a/share/examples/isdn/i4brunppp/README b/share/examples/isdn/i4brunppp/README new file mode 100644 index 0000000..ea0ba9a --- /dev/null +++ b/share/examples/isdn/i4brunppp/README @@ -0,0 +1,19 @@ +$FreeBSD$ + +BEWARE: HIGHLY EXPERIMENTAL! +--------------------------- + +This program is used in conjunction with a isdnd.rc entry similar to + + regexpr = "ULPPP.*call active" # look for matches in log messages + regprog = i4brunppp # execute program when match is found + +this one (see also i4brunppp-isdnd.rc). + +i4brunppp _must_ be put into /etc/isdn! + +When an active call is detected, isdnd fires off i4brunppp, which attaches +the rbch device used to stdin/stdout and then runs ppp which is given the +"-direct" command and the string "inc_rbchX" (where X is the i4brbch unit +number) as arguments. + diff --git a/share/examples/isdn/i4brunppp/i4brunppp-isdnd.rc b/share/examples/isdn/i4brunppp/i4brunppp-isdnd.rc new file mode 100644 index 0000000..9620220 --- /dev/null +++ b/share/examples/isdn/i4brunppp/i4brunppp-isdnd.rc @@ -0,0 +1,65 @@ +#------------------------------------------------------------------------------ +# +# sample isdnd.rc for taking incoming calls with userland ppp +# ----------------------------------------------------------- +# +# $FreeBSD$ +# +# last edit-date: [Sat Jul 21 13:40:50 2001] +# +#------------------------------------------------------------------------------ +#============================================================================== +# SYSTEM section: global configuration parameters +#============================================================================== +system + +ratesfile = /etc/isdn/isdnd.rates # name & location of rates file + +useacctfile = yes # generate accouting info to file +acctall = on # generate info for everything +acctfile = /var/log/isdnd.acct # name & location of accounting file + +rtprio = 25 # modify isdnd's priority + +regexpr = "ULPPP.*call active" # look for matches in log messages +regprog = i4brunppp # execute program when match is found + +#============================================================================== +# ENTRY: Userland PPP over ISDN +#============================================================================== +entry + +name = ULPPP # name for reference + +usrdevicename = rbch # ipr, tel, rbch +usrdeviceunit = 0 # unit number + +isdncontroller = 0 # contoller to use or -1 to use any +isdnchannel = -1 # channel (1/2) to use or 0 or -1 for any + + # numbers used to verify at DIAL IN +local-phone-incoming = 567 # this is my number +remote-phone-incoming = 123 # this one can call in + + # numbers used to DIAL OUT +local-phone-dialout = 567 # this is my number +remote-phone-dialout = 123 # i call this number + +remdial-handling = first # first, last or next + +dialin-reaction = accept # accept, reject, ignore, answer + +dialout-type = normal # normal / calledback + +b1protocol = hdlc # hdlc, raw + +idletime-incoming = 30 # 3 seconds idle timeout +idletime-outgoing = 30 # 3 seconds idle timeout + +ratetype = 0 # ratesfile entry to use +unitlength = 60 # unitlength to assume + +dialretries = 2 # # of dial retries +recoverytime = 5 # time to wait between 2 dial tries + +# EOF ######################################################################### diff --git a/share/examples/isdn/i4brunppp/i4brunppp.8 b/share/examples/isdn/i4brunppp/i4brunppp.8 new file mode 100644 index 0000000..49499e8 --- /dev/null +++ b/share/examples/isdn/i4brunppp/i4brunppp.8 @@ -0,0 +1,47 @@ +.\" +.\" Copyright (c) 1999, 2001 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. +.\" +.\" $FreeBSD$ +.\" +.\" last edit-date: [Sat Jul 21 13:37:00 2001] +.\" +.Dd July 28, 1999 +.Dt i4brunppp 8 +.Sh NAME +.Nm i4brunppp +.Nd is used to interface i4b to userland ppp in server mode +.Sh DESCRIPTION +.Nm i4brunppp +is part of the isdn4bsd package and is used to interface i4b to the so-called +userland +.Xr ppp 8 +when dialling into an i4b machine. +.Pp +.Sh FILES +/dev/i4brbchX +.Sh AUTHOR +The +.Nm +utility and this manpage were written by Hellmuth Michaelis. He can be +contacted at hm@freebsd.org. diff --git a/share/examples/isdn/i4brunppp/i4brunppp.c b/share/examples/isdn/i4brunppp/i4brunppp.c new file mode 100644 index 0000000..50c4dc3 --- /dev/null +++ b/share/examples/isdn/i4brunppp/i4brunppp.c @@ -0,0 +1,223 @@ +/* + * Copyright (c) 1999, 2001 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. + * + *--------------------------------------------------------------------------- + * + * i4brunppp - run userland ppp for incoming call from rbch i/f + * ------------------------------------------------------------ + * + * $FreeBSD$ + * + * last edit-date: [Sat Jul 21 13:38:10 2001] + * + *--------------------------------------------------------------------------- + * + * BEWARE: HIGHLY EXPERIMENTAL! + * --------------------------- + * + * This program is used in conjunction with a isdnd.rc entry similar to + * + * regexpr = "ULPPP.*call active" # look for matches in log messages + * regprog = i4brunppp # execute program when match is found + * + * this one. It _must_ be put into /etc/isdn! + * When an active call is detected, isdnd fires off i4brunppp, which attaches + * the rbch device used to stdin/stdout and then runs ppp which is given the + * "-direct" command and the string "inc_rbchX" (where X is the i4brbch unit + * number) as arguments. + * + *---------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <errno.h> +#include <unistd.h> +#include <fcntl.h> +#include <syslog.h> +#include <errno.h> +#include <string.h> +#include <time.h> +#include <ctype.h> + +#include <machine/i4b_ioctl.h> +#include <machine/i4b_rbch_ioctl.h> + +#define I4BDEVICE "/dev/i4b" + +#define PPPPROG "/usr/sbin/ppp" +#define PPPNAME "ppp" +#define PPPARG1 "-direct" +#define PPPLABEL "inc_" + +#define VERIFYSTRING "call active" +#define DEVSTRING "rbch" + +#define PPPDEBUG + +/*---------------------------------------------------------------------------* + * program entry + *---------------------------------------------------------------------------*/ +int +main(int argc, char **argv) +{ + char buffer[256]; + int rbch_fd; + char *p = "DeadPointer"; + int found; + int i; + +#ifdef PPPDEBUG + FILE *dfp; + time_t tim; + register struct tm *tp; +#endif + + /* open syslog */ + + (void)openlog("i4brunppp", LOG_PID|LOG_CONS|LOG_NDELAY, LOG_USER); + +#ifdef PPPDEBUG + + /* open debug log */ + + if((dfp = fopen("/tmp/i4brunppp-debug.log", "a")) == NULL) + { + syslog(LOG_INFO, "cannot open logfile: %s", strerror(errno)); + exit(1); + } + + tim = time(NULL); + tp = localtime(&tim); + strftime(buffer, 40, I4B_TIME_FORMAT, tp); + fprintf(dfp, "\n=================== %s ===================\n", buffer); + + for(i=0; i < argc; i++) + fprintf(dfp, "\t%s\n", argv[i]); +#endif + + /* check if this is the right message */ + + found = 0; + + for(i=0; i < argc; i++) + { + if((strstr(argv[i], VERIFYSTRING)) != NULL) + { + found = 1; + break; + } + } + + if(found == 0) + { +#ifdef PPPDEBUG + fprintf(dfp, "did not found [%s], exit\n", VERIFYSTRING); +#endif + exit(0); + } + + found = 0; + + /* check if we got a good device name */ + + for(; i < argc; i++) + { + if((p = strstr(argv[i], DEVSTRING)) != NULL) + { + found = 1; + break; + } + } + + if(found == 0) + { +#ifdef PPPDEBUG + fprintf(dfp, "did not found [%s], exit\n", DEVSTRING); +#endif + exit(0); + } + + /* everything ok, now prepare for running ppp */ + + /* close all file descriptors */ + + i = getdtablesize(); + + for(;i >= 0; i--) + close(i); + + /* fiddle a terminating zero after the rbch unit number */ + + p += strlen(DEVSTRING); + + if(isdigit(*p) && isdigit(*(p+1))) + *(p+2) = '\0'; + else + *(p+1) = '\0'; + + /* construct /dev/i4brbchX device name */ + + sprintf(buffer, "%s%s%s", I4BDEVICE, DEVSTRING, p); + + /* open the rbch device as fd 0 = stdin */ + + rbch_fd = open(buffer, O_RDWR); + + if(rbch_fd != 0) + { + if(rbch_fd < 0) + syslog(LOG_INFO, "cannot open %s: %s", buffer, strerror(errno)); + else + syslog(LOG_INFO, "cannot open %s as fd 0 (is %d): %s", buffer, rbch_fd, strerror(errno)); + exit(1); + } + + /* dup rbch device fd as fd 1 = stdout */ + + if((i = dup(rbch_fd)) != 1) + { + if(i < 0) + syslog(LOG_INFO, "cannot dup rbch_fd: %s", strerror(errno)); + else + syslog(LOG_INFO, "cannot dup rbch as fd 1 (is %d): %s", i, strerror(errno)); + exit(1); + } + + /* construct the label for ppp's ppp.conf file */ + + sprintf(buffer, "%s%s%s", PPPLABEL, DEVSTRING, p); + + syslog(LOG_INFO, "executing: %s %s %s %s", PPPPROG, PPPNAME, PPPARG1, buffer); + + /* execute ppp */ + + if((execl(PPPPROG, PPPNAME, PPPARG1, buffer, NULL)) == -1) + { + syslog(LOG_INFO, "cannot exec: %s", strerror(errno)); + exit(1); + } + syslog(LOG_INFO, "finished: %s %s %s %s", PPPPROG, PPPNAME, PPPARG1, buffer); + return(0); +} + +/* EOF */ |