Remove ISDN4BSD (I4B) from HEAD as it is not MPSAFE and

parts relied on the now removed NET_NEEDS_GIANT.
Most of I4B has been disconnected from the build
since July 2007 in HEAD/RELENG_7.

This is what was removed:
- configuration in /etc/isdn
- examples
- man pages
- kernel configuration
- sys/i4b (drivers, layers, include files)
- user space tools
- i4b support from ppp
- further documentation

Discussed with: rwatson, re
This commit is contained in:
bz 2008-05-26 10:40:09 +00:00
parent cf7fbdd930
commit 6bba9b4244
343 changed files with 136 additions and 103830 deletions

View File

@ -14,6 +14,120 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
# 20080525: I4B removed
OLD_FILES+=etc/isdn/answer
OLD_FILES+=etc/isdn/isdntel
OLD_FILES+=etc/isdn/record
OLD_FILES+=etc/isdn/tell
OLD_FILES+=etc/isdn/tell-record
OLD_FILES+=etc/isdn/unknown_incoming
OLD_FILES+=etc/isdn/holidays.D
OLD_FILES+=etc/isdn/isdnd.rates.A
OLD_FILES+=etc/isdn/isdnd.rates.D
OLD_FILES+=etc/isdn/isdnd.rates.F
OLD_FILES+=etc/isdn/isdnd.rates.L
OLD_FILES+=etc/isdn/isdnd.rates.UK.BT
OLD_FILES+=etc/isdn/isdnd.rc.sample
OLD_FILES+=etc/isdn/isdntel.alias.sample
OLD_DIRS+=etc/isdn
OLD_FILES+=etc/rc.d/isdnd
OLD_FILES+=usr/include/i4b/i4b_cause.h
OLD_FILES+=usr/include/i4b/i4b_debug.h
OLD_FILES+=usr/include/i4b/i4b_ioctl.h
OLD_FILES+=usr/include/i4b/i4b_rbch_ioctl.h
OLD_FILES+=usr/include/i4b/i4b_tel_ioctl.h
OLD_FILES+=usr/include/i4b/i4b_trace.h
OLD_DIRS+=usr/include/i4b
OLD_FILES+=usr/sbin/dtmfdecode
OLD_FILES+=usr/sbin/g711conv
OLD_FILES+=usr/sbin/isdnd
OLD_FILES+=usr/sbin/isdndebug
OLD_FILES+=usr/sbin/isdndecode
OLD_FILES+=usr/sbin/isdnmonitor
OLD_FILES+=usr/sbin/isdnphone
OLD_FILES+=usr/sbin/isdntel
OLD_FILES+=usr/sbin/isdntelctl
OLD_FILES+=usr/sbin/isdntrace
OLD_FILES+=usr/share/isdn/0.al
OLD_FILES+=usr/share/isdn/1.al
OLD_FILES+=usr/share/isdn/2.al
OLD_FILES+=usr/share/isdn/3.al
OLD_FILES+=usr/share/isdn/4.al
OLD_FILES+=usr/share/isdn/5.al
OLD_FILES+=usr/share/isdn/6.al
OLD_FILES+=usr/share/isdn/7.al
OLD_FILES+=usr/share/isdn/8.al
OLD_FILES+=usr/share/isdn/9.al
OLD_FILES+=usr/share/isdn/beep.al
OLD_FILES+=usr/share/isdn/msg.al
OLD_DIRS+=usr/share/isdn
OLD_FILES+=usr/share/man/man1/dtmfdecode.1.gz
OLD_FILES+=usr/share/man/man1/g711conv.1.gz
OLD_FILES+=usr/share/man/man4/i4b.4.gz
OLD_FILES+=usr/share/man/man4/i4bcapi.4.gz
OLD_FILES+=usr/share/man/man4/i4bctl.4.gz
OLD_FILES+=usr/share/man/man4/i4bing.4.gz
OLD_FILES+=usr/share/man/man4/i4bipr.4.gz
OLD_FILES+=usr/share/man/man4/i4bisppp.4.gz
OLD_FILES+=usr/share/man/man4/i4bq921.4.gz
OLD_FILES+=usr/share/man/man4/i4bq931.4.gz
OLD_FILES+=usr/share/man/man4/i4brbch.4.gz
OLD_FILES+=usr/share/man/man4/i4btel.4.gz
OLD_FILES+=usr/share/man/man4/i4btrc.4.gz
OLD_FILES+=usr/share/man/man4/iavc.4.gz
OLD_FILES+=usr/share/man/man4/isic.4.gz
OLD_FILES+=usr/share/man/man4/ifpi.4.gz
OLD_FILES+=usr/share/man/man4/ifpi2.4.gz
OLD_FILES+=usr/share/man/man4/ifpnp.4.gz
OLD_FILES+=usr/share/man/man4/ihfc.4.gz
OLD_FILES+=usr/share/man/man4/itjc.4.gz
OLD_FILES+=usr/share/man/man4/iwic.4.gz
OLD_FILES+=usr/share/man/man5/isdnd.rc.5.gz
OLD_FILES+=usr/share/man/man5/isdnd.rates.5.gz
OLD_FILES+=usr/share/man/man5/isdnd.acct.5.gz
OLD_FILES+=usr/share/man/man8/isdnd.8.gz
OLD_FILES+=usr/share/man/man8/isdndebug.8.gz
OLD_FILES+=usr/share/man/man8/isdndecode.8.gz
OLD_FILES+=usr/share/man/man8/isdnmonitor.8.gz
OLD_FILES+=usr/share/man/man8/isdnphone.8.gz
OLD_FILES+=usr/share/man/man8/isdntel.8.gz
OLD_FILES+=usr/share/man/man8/isdntelctl.8.gz
OLD_FILES+=usr/share/man/man8/isdntrace.8.gz
OLD_FILES+=usr/share/examples/isdn/contrib/README
OLD_FILES+=usr/share/examples/isdn/contrib/anleitung.ppp
OLD_FILES+=usr/share/examples/isdn/contrib/answer.c
OLD_FILES+=usr/share/examples/isdn/contrib/answer.sh
OLD_FILES+=usr/share/examples/isdn/contrib/convert.sh
OLD_FILES+=usr/share/examples/isdn/contrib/hplay.c
OLD_FILES+=usr/share/examples/isdn/contrib/i4b-ppp-newbie.txt
OLD_FILES+=usr/share/examples/isdn/contrib/isdnctl
OLD_FILES+=usr/share/examples/isdn/contrib/isdnd_acct
OLD_FILES+=usr/share/examples/isdn/contrib/isdnd_acct.pl
OLD_FILES+=usr/share/examples/isdn/contrib/isdntelmux.c
OLD_FILES+=usr/share/examples/isdn/contrib/mrtg-isp0.sh
OLD_FILES+=usr/share/examples/isdn/i4brunppp/Makefile
OLD_FILES+=usr/share/examples/isdn/i4brunppp/README
OLD_FILES+=usr/share/examples/isdn/i4brunppp/i4brunppp-isdnd.rc
OLD_FILES+=usr/share/examples/isdn/i4brunppp/i4brunppp.8
OLD_FILES+=usr/share/examples/isdn/i4brunppp/i4brunppp.c
OLD_FILES+=usr/share/examples/isdn/v21/Makefile
OLD_FILES+=usr/share/examples/isdn/v21/README
OLD_FILES+=usr/share/examples/isdn/v21/v21modem.c
OLD_FILES+=usr/share/examples/isdn/FAQ
OLD_FILES+=usr/share/examples/isdn/KERNEL
OLD_FILES+=usr/share/examples/isdn/Overview
OLD_FILES+=usr/share/examples/isdn/README
OLD_FILES+=usr/share/examples/isdn/ROADMAP
OLD_FILES+=usr/share/examples/isdn/ReleaseNotes
OLD_FILES+=usr/share/examples/isdn/Resources
OLD_FILES+=usr/share/examples/isdn/SupportedCards
OLD_FILES+=usr/share/examples/isdn/ThankYou
OLD_DIRS+=usr/share/examples/isdn/contrib
OLD_DIRS+=usr/share/examples/isdn/i4brunppp
OLD_DIRS+=usr/share/examples/isdn/v21
OLD_DIRS+=usr/share/examples/isdn
OLD_FILES+=usr/share/examples/ppp/isdnd.rc
OLD_FILES+=usr/share/examples/ppp/ppp.conf.isdn
# 20080420: Symbol card support dropped
OLD_FILES+=usr/include/dev/wi/spectrum24t_cf.h
# 20080420: awi removal

View File

@ -22,6 +22,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 8.x IS SLOW:
to maximize performance. (To disable malloc debugging, run
ln -s aj /etc/malloc.conf.)
20080525:
ISDN4BSD (I4B) was removed from the src tree. You may need to
update a your kernel configuration and remove relevant entries.
20080509:
I have checked in code to support multiple routing tables.
see the man pages setfib(1) and setfib(2).

View File

@ -127,9 +127,6 @@ distribution:
${BSM_ETC_RESTRICTED_FILES} ${BSM_ETC_DIR}
cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 0500 \
${BSM_ETC_EXEC_FILES} ${BSM_ETC_DIR}
.if ${MK_I4B} != "no"
${_+_}cd ${.CURDIR}/isdn; ${MAKE} install
.endif
.if ${MK_BIND_MTREE} != "no"
@if [ ! -e ${DESTDIR}/etc/namedb ]; then \
set -x; \

View File

@ -194,8 +194,8 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration.
# If you have any sppp(4) interfaces above, you might also want to set
# the following parameters. Refer to spppcontrol(8) for their meaning.
sppp_interfaces="" # List of sppp interfaces.
#sppp_interfaces="isp0" # example: sppp over ISDN
#spppconfig_isp0="authproto=chap myauthname=foo myauthsecret='top secret' hisauthname=some-gw hisauthsecret='another secret'"
#sppp_interfaces="...0" # example: sppp over ...
#spppconfig_...0="authproto=chap myauthname=foo myauthsecret='top secret' hisauthname=some-gw hisauthsecret='another secret'"
gif_interfaces="" # List of GIF tunnels.
#gif_interfaces="gif0 gif1" # Examples typically for a router.
# Choose correct tunnel addrs.
@ -363,15 +363,6 @@ atm_enable="NO" # Configure ATM interfaces (or NO).
atm_pvcs="" # Set to PVC list (or leave empty).
atm_arps="" # Set to permanent ARP list (or leave empty).
### ISDN interface options: (see also: /usr/share/examples/isdn) ###
isdn_enable="NO" # Enable the ISDN subsystem (or NO).
isdn_fsdev="NO" # Output device for fullscreen mode (or NO for daemon mode).
isdn_flags="-dn -d0x1f9" # Flags for isdnd
isdn_ttype="cons25" # terminal type for fullscreen mode
isdn_screenflags="NO" # screenflags for ${isdn_fsdev}
isdn_trace="NO" # Enable the ISDN trace subsystem (or NO).
isdn_traceflags="-f /var/tmp/isdntrace0" # Flags for isdntrace
### Bluetooth ###
hcsecd_enable="NO" # Enable hcsecd(8) (or NO)
hcsecd_config="/etc/bluetooth/hcsecd.conf" # hcsecd(8) configuration file

View File

@ -1,25 +0,0 @@
# $FreeBSD$
NO_OBJ=
SCRIPTS= answer \
isdntel.sh \
record \
tell \
tell-record \
unknown_incoming
FILES= holidays.D \
isdnd.rates.A \
isdnd.rates.D \
isdnd.rates.F \
isdnd.rates.L \
isdnd.rates.UK.BT \
isdnd.rc.sample \
isdntel.alias.sample
BINDIR= /etc/isdn
BINMODE= 700
FILESMODE= 600
.include <bsd.prog.mk>

View File

@ -1,97 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# answer script for i4b isdnd
# ---------------------------
#
# $FreeBSD$
#
# last edit-date: [Thu May 20 11:44:38 1999]
#
#---------------------------------------------------------------------------
VARDIR=/var/isdn
#FreeBSD < 3.1, NetBSD, OpenBSD, BSD/OS
#LIBDIR=/usr/local/lib/isdn
#FreeBSD 3.1 and up
LIBDIR=/usr/share/isdn
LOGFILE=/tmp/answer.log
NCALLFILE=${VARDIR}/ncall
DATE=`date +%d%H`
DF=0
dF=0
sF=0
if ! set -- `getopt D:d:s: $*`; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
for i ; do
case ${i} in
-D)
DEVICE=$2
DF=1
shift
shift
;;
-d)
DEST=$2
dF=1
shift
shift
;;
-s)
SRC=$2
sF=1
shift
shift
;;
--)
shift
break
;;
esac
done
echo "" >>${LOGFILE}
if [ "${DF}" -eq 0 -o "${dF}" -eq 0 -o "${sF}" -eq 0 ]; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
echo "answer: device ${DEVICE} destination ${DEST} source ${SRC} " >>${LOGFILE}
if [ -r "${NCALLFILE}" ]; then
NCALL=`cat ${NCALLFILE}`
else
NCALL=0
fi
NCALL=`printf "%.4d" ${NCALL}`
echo Date: `date` >> ${VARDIR}/I.${NCALL}.${DATE}
if [ -n "${SRC}" ]; then
echo "From: ${SRC}" >> ${VARDIR}/I.${NCALL}.${DATE}
fi
if [ -n "${DEST}" ]; then
echo "To: ${DEST}" >> ${VARDIR}/I.${NCALL}.${DATE}
fi
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k # >/dev/null 2>&1
fi
if [ -r "${LIBDIR}/msg.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/msg.al bs=2k # >/dev/null 2>&1
if [ -r "${LIBDIR}/beep.al" ]
then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k # >/dev/null 2>&1
fi
fi
echo `expr ${NCALL} + 1` >${NCALLFILE}

View File

@ -1,51 +0,0 @@
#---------------------------------------------------------------------------
#
# german national holidays 2002/2003/2004
# bundeseinheitliche Feiertage 2002/2003/2004
# -------------------------------------------------------------
#
# last edit-date: [Sat Apr 13 14:22:43 2002]
#
# got from: http://www.ferienkalender.com/
#
# This file is only of value for installations which are
# using the german Telekom "T-ISDN XXL" tariff where calls
# on sundays and holidays are free of charge. Additional
# configuration of /etc/isdnd.rc has to take place to enable
# support for this tariff, see output of "man isdnd.rc" and
# search for keyword "valid".
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
#
# same day/month each year
#
1.1 Neujahr
1.5 Tag der Arbeit
3.10 Tag der deutschen Einheit
25.12 1. Weihnachtsfeiertag
26.12 2. Weihnachtsfeiertag
#
# 2002 - different day/month each year
#
29.3.2002 Karfreitag
1.4.2002 Ostermontag
9.5.2002 Christi Himmelfahrt
20.5.2002 Pfingstmontag
#
# 2003 - different day/month each year
#
18.4.2003 Karfreitag
21.4.2003 Ostermontag
29.5.2003 Christi Himmelfahrt
9.6.2003 Pfingstmontag
#
# 2004 - different day/month each year
#
9.4.2004 Karfreitag
12.4.2004 Ostermontag
20.5.2004 Christi Himmelfahrt
31.5.2004 Pfingstmontag
#
# EOF

View File

@ -1,39 +0,0 @@
#---------------------------------------------------------------------------
#
# i4b - PTA Telekom charging rates config file
# --------------------------------------------
#
# $Id: isdnd.rates.A,v 1.2 1999/12/13 21:25:24 hm Exp $
#
# $FreeBSD$
#
# last edit-date: [Mon Dec 13 21:42:02 1999]
#
# -mr updated to reflect last Telekom changes as of 1.9.99
#
#---------------------------------------------------------------------------
#
# reference: http://www.pta.at/
#
#---------------------------------------------------------------------------
#
# Syntax:
# -------
# rate-code: ra0 = Online Tarif
# Day-No: 0-6, where 0 = Sunday, 1 = Monday, etc.
# Rate: start_hour.minutes-end_hour.minutes:period in seconds
#
#------------------------------------------------------------------------------
#
#=================== Online ==================================
#
#rate-code Day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra0 0 00.00-24.00:360
ra0 1 00.00-08.00:360 08.00-18.00:120 18.00-24.00:360
ra0 2 00.00-08.00:360 08.00-18.00:120 18.00-24.00:360
ra0 3 00.00-08.00:360 08.00-18.00:120 18.00-24.00:360
ra0 4 00.00-08.00:360 08.00-18.00:120 18.00-24.00:360
ra0 5 00.00-08.00:360 08.00-18.00:120 18.00-24.00:360
ra0 6 00.00-24.00:360
#================== EOF ======================================

View File

@ -1,50 +0,0 @@
#---------------------------------------------------------------------------
#
# i4b - Deutsche Telekom charging rates config file
# -------------------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Sun Jan 17 18:38:29 1999]
#
# -hm updated to reflect last Telekom changes as of 1.1.99
#
#---------------------------------------------------------------------------
#
# reference: http://www.telekom.de/untern/tarife/inland/index.htm
#
#---------------------------------------------------------------------------
#
# Syntax:
# -------
# rate-code: ra0 = City, ra1 = Deutschland
# Day-No: 0-6, where 0 = Sunday, 1 = Monday, etc.
# Rate: start_hour.minutes-end_hour.minutes:period in seconds
#
#------------------------------------------------------------------------------
#
#=================== T-ISDN City =============================================================
#
#rate-code Day rate1 rate2 rate3 rate4 rate5
#--------- --- --------------- --------------- --------------- --------------- ---------------
ra0 0 00.00-05.00:240 05.00-21.00:150 21.00-24.00:240
ra0 1 00.00-05.00:240 05.00-09.00:150 09.00-18.00:90 18.00-21.00:150 21.00-24.00:240
ra0 2 00.00-05.00:240 05.00-09.00:150 09.00-18.00:90 18.00-21.00:150 21.00-24.00:240
ra0 3 00.00-05.00:240 05.00-09.00:150 09.00-18.00:90 18.00-21.00:150 21.00-24.00:240
ra0 4 00.00-05.00:240 05.00-09.00:150 09.00-18.00:90 18.00-21.00:150 21.00-24.00:240
ra0 5 00.00-05.00:240 05.00-09.00:150 09.00-18.00:90 18.00-21.00:150 21.00-24.00:240
ra0 6 00.00-05.00:240 05.00-21.00:150 21.00-24.00:240
#
#=================== T-ISDN Deutschland ======================================================
#
#rate-code Day rate1 rate2 rate3 rate4 rate5
#--------- --- --------------- --------------- --------------- --------------- ---------------
ra1 0 00.00-24.00:60
ra1 1 00.00-02.00:60 02.00-05.00:120 05.00-09.00:60 09.00-18.00:30 18.00-24.00:60
ra1 2 00.00-02.00:60 02.00-05.00:120 05.00-09.00:60 09.00-18.00:30 18.00-24.00:60
ra1 3 00.00-02.00:60 02.00-05.00:120 05.00-09.00:60 09.00-18.00:30 18.00-24.00:60
ra1 4 00.00-02.00:60 02.00-05.00:120 05.00-09.00:60 09.00-18.00:30 18.00-24.00:60
ra1 5 00.00-02.00:60 02.00-05.00:120 05.00-09.00:60 09.00-18.00:30 18.00-24.00:60
ra1 6 00.00-24.00:60
#
#================== EOF ======================================================================

View File

@ -1,152 +0,0 @@
#---------------------------------------------------------------------------
#
# i4b - Tarifs France Telecom
# ---------------------------
#
# $FreeBSD$
#
# last edit-date: [Thu Mar 19 20:05:18 1998]
#
# -hm got from Aurelien Bargy <dj@dial.oleane.com>
#
#---------------------------------------------------------------------------
#
# a jour au 1.10.97
# Aurelien Bargy - 18.03.97
#
# I wrote a rates file for France. It is rather approximative
# because some time ago France Telecom decided to abandon the charging
# units system. The problem is, on ISDN lines charging units are still
# used for the aocd system, even as it gives a completely false price
# for a communication, so "abandoning" the msg_charging_unit system for
# French users of i4b is not a good idea :))
#
#---------------------------------------------------------------------------
#
# Syntax:
# -------
# rate-code: ra0 = local ; ra1 = zone 1 ; ra2 = zone 2...
# plus quelques tarifs internationaux
# Day-No: 0-6, where 0 = Sunday, 1 = Monday, etc.
# Rate: start_hour.minutes-end_hour.minutes:period in seconds
#
#------------------------------------------------------------------------
#
#========================== Communications locales ======================
#rate-code Day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra0 0 00.00-24.00:317
ra0 1 00.00-08.00:317 08.00-19.00:158 19.00-24.00:317
ra0 2 00.00-08.00:317 08.00-19.00:158 19.00-24.00:317
ra0 3 00.00-08.00:317 08.00-19.00:158 19.00-24.00:317
ra0 4 00.00-08.00:317 08.00-19.00:158 19.00-24.00:317
ra0 5 00.00-08.00:317 08.00-19.00:158 19.00-24.00:317
ra0 6 00.00-08.00:317 08.00-12.00:158 12.00-24.00:317
#
#
#
#================== Zone 1 : < 25 km ==================================
#
#rate-code Day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra1 0 00.00-24.00:222
ra1 1 00.00-08.00:222 08.00-19.00:111 19.00-24.00:222
ra1 2 00.00-08.00:222 08.00-19.00:111 19.00-24.00:222
ra1 3 00.00-08.00:222 08.00-19.00:111 19.00-24.00:222
ra1 4 00.00-08.00:222 08.00-19.00:111 19.00-24.00:222
ra1 5 00.00-08.00:222 08.00-19.00:111 19.00-24.00:222
ra1 6 00.00-08.00:222 08.00-12.00:111 12.00-24.00:222
#
#
#
#================== Zone 2 : 25-30 km =================================
#
#rate-code Day rate1 rate2 rate3
#--------- --- --------------- --------------- --------------
ra2 0 00.00-24.00:148
ra2 1 00.00-08.00:148 08.00-19.00:74 19.00-24.00:148
ra2 2 00.00-08.00:148 08.00-19.00:74 19.00-24.00:148
ra2 3 00.00-08.00:148 08.00-19.00:74 19.00-24.00:148
ra2 4 00.00-08.00:148 08.00-19.00:74 19.00-24.00:148
ra2 5 00.00-08.00:148 08.00-19.00:74 19.00-24.00:148
ra2 6 00.00-08.00:148 08.00-12.00:74 12.00-24.00:148
#
#=================== Zone 3 : 30-52 km ================================
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra3 0 00.00-24.00:94
ra3 1 00.00-08.00:94 08.00-19.00:47 19.00-24.00:94
ra3 2 00.00-08.00:94 08.00-19.00:47 19.00-24.00:94
ra3 3 00.00-08.00:94 08.00-19.00:47 19.00-24.00:94
ra3 4 00.00-08.00:94 08.00-19.00:47 19.00-24.00:94
ra3 5 00.00-08.00:94 08.00-19.00:47 19.00-24.00:94
ra3 6 00.00-08.00:94 08.00-12.00:47 12.00-24.00:94
#
#
#=================== Zone 4 : > 52 km =================================
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra4 0 00.00-24.00:78
ra4 1 00.00-08.00:78 08.00-19.00:39 19.00-24.00:78
ra4 2 00.00-08.00:78 08.00-19.00:39 19.00-24.00:78
ra4 3 00.00-08.00:78 08.00-19.00:39 19.00-24.00:78
ra4 4 00.00-08.00:78 08.00-19.00:39 19.00-24.00:78
ra4 5 00.00-08.00:78 08.00-19.00:39 19.00-24.00:78
ra4 6 00.00-08.00:78 08.00-12.00:39 12.00-24.00:78
#
#
#=================== INTERNATIONAL : Allemagne ========================
# (pour appeler Hellmuth)
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra5 0 00.00-24.00:27
ra5 1 00.00-08.00:27 08.00-19.00:21 19.00-24.00:27
ra5 2 00.00-08.00:27 08.00-19.00:21 19.00-24.00:27
ra5 3 00.00-08.00:27 08.00-19.00:21 19.00-24.00:27
ra5 4 00.00-08.00:27 08.00-19.00:21 19.00-24.00:27
ra5 5 00.00-08.00:27 08.00-19.00:21 19.00-24.00:27
ra5 6 00.00-08.00:27 08.00-12.00:21 12.00-24.00:27
#
#
#=================== INTERNATIONAL : Pays-Bas ==========================
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra6 0 00.00-24.00:25
ra6 1 00.00-08.00:25 08.00-19.00:20 19.00-24.00:25
ra6 2 00.00-08.00:25 08.00-19.00:20 19.00-24.00:25
ra6 3 00.00-08.00:25 08.00-19.00:20 19.00-24.00:25
ra6 4 00.00-08.00:25 08.00-19.00:20 19.00-24.00:25
ra6 5 00.00-08.00:25 08.00-19.00:20 19.00-24.00:25
ra6 6 00.00-08.00:25 08.00-12.00:20 12.00-24.00:25
#
#
#=================== INTERNATIONAL : Portugal ===========================
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra7 0 00.00-24.00:22
ra7 1 00.00-08.00:22 08.00-19.00:18 19.00-24.00:22
ra7 2 00.00-08.00:22 08.00-19.00:18 19.00-24.00:22
ra7 3 00.00-08.00:22 08.00-19.00:18 19.00-24.00:22
ra7 4 00.00-08.00:22 08.00-19.00:18 19.00-24.00:22
ra7 5 00.00-08.00:22 08.00-19.00:18 19.00-24.00:22
ra7 6 00.00-08.00:22 08.00-12.00:18 12.00-24.00:22
#
#
#=================== INTERNATIONAL : USA/Canada ========================
#
#rate-code day rate1 rate2 rate3
#--------- --- --------------- --------------- ---------------
ra8 0 00.00-24.00:25
ra8 1 00.00-13.00:25 13.00-19.00:20 19.00-24.00:25
ra8 2 00.00-13.00:25 13.00-19.00:20 19.00-24.00:25
ra8 3 00.00-13.00:25 13.00-19.00:20 19.00-24.00:25
ra8 4 00.00-13.00:25 13.00-19.00:20 19.00-24.00:25
ra8 5 00.00-13.00:25 13.00-19.00:20 19.00-24.00:25
ra8 6 00.00-24.00:25
#
#================== EOF ==============================================

View File

@ -1,45 +0,0 @@
#---------------------------------------------------------------------------
#
# i4b - Luxembourg PT charging rates config file
# -------------------------------------------------
#
# $Id: isdnd.rates.L,v 1.2 1999/12/13 21:25:24 hm Exp $
#
# $FreeBSD$
#
# last edit-date: [Mon Dec 13 21:42:33 1999]
#
# Sent in by Joakim Hernberg, Digital Design Luxembourg sarl, jbh@ddl.lu
#
#---------------------------------------------------------------------------
#
# reference: http://www.pt.lu
#
#---------------------------------------------------------------------------
#
# Syntax:
# -------
# rate-code: ra0 = Luxembourg normal isdn call
# rate-code: ra1 = Luxembourg PT Internet access
# Day-No: 0-6, where 0 = Sunday, 1 = Monday, etc.
# Rate: start_hour.minutes-end_hour.minutes:period in seconds
#
#------------------------------------------------------------------------------
#
#rate-code Day rate1 rate2 rate3 rate4 rate5
#--------- --- --------------- --------------- --------------- --------------- ----------------
ra0 0 00.00-24.00:960
ra0 1 00.00-06.00:960 06.00-08.00:480 08.00-19.00:240 19.00-23.00:480 23.00-24.00:960
ra0 2 00.00-06.00:960 06.00-08.00:480 08.00-19.00:240 19.00-23.00:480 23.00-24.00:960
ra0 3 00.00-06.00:960 06.00-08.00:480 08.00-19.00:240 19.00-23.00:480 23.00-24.00:960
ra0 4 00.00-06.00:960 06.00-08.00:480 08.00-19.00:240 19.00-23.00:480 23.00-24.00:960
ra0 5 00.00-06.00:960 06.00-08.00:480 08.00-19.00:240 19.00-23.00:480 23.00-24.00:960
ra0 6 00.00-06.00:960 06.00-23.00:480 23.00-24.00:960
ra1 0 00.00-24.00:60
ra1 1 00.00-24.00:60
ra1 2 00.00-24.00:60
ra1 3 00.00-24.00:60
ra1 4 00.00-24.00:60
ra1 5 00.00-24.00:60
ra1 6 00.00-24.00:60

View File

@ -1,61 +0,0 @@
#---------------------------------------------------------------------------
#
# i4b - BT charges
# -------------------------------------------------
#
# $FreeBSD$
#
# Barry A. Scott barry@scottb.demon.co.uk
#
#---------------------------------------------------------------------------
#
# reference: http://www.bt.com/Business/price_frm.htm
# (I use the bussiness figures as the Ex VAT gives more
# accurate rate data because BT round the Inc VAT figures)
#
#---------------------------------------------------------------------------
#
# Syntax:
# -------
# rate-code: ra0 = Local, ra1 = Regional, ra2 = National
# Day-No: 0-6, where 0 = Sunday, 1 = Monday, etc.
# Rate: start_hour.minutes-end_hour.minutes:period in seconds
#
#------------------------------------------------------------------------------
#
#=================== Local =========================================================================
#
#rate-code Day rate1 rate2 rate1
#--------- --- --------------- --------------- ---------------
ra0 0 00.00-24.00:296
ra0 1 00.00-08.00:200 08.00-18.00:75 18.00-00.00:200
ra0 2 00.00-08.00:200 08.00-18.00:75 18.00-00.00:200
ra0 3 00.00-08.00:200 08.00-18.00:75 18.00-00.00:200
ra0 4 00.00-08.00:200 08.00-18.00:75 18.00-00.00:200
ra0 5 00.00-08.00:200 08.00-18.00:75 18.00-00.00:200
ra0 6 00.00-24.00:296
#
#=================== Regional =========================================================================
#
#rate-code Day rate1 rate2 rate1
#--------- --- --------------- --------------- ---------------
ra1 0 00.00-24.00:100
ra1 1 00.00-08.00:75 08.00-18.00:37 18.00-00.00:75
ra1 2 00.00-08.00:75 08.00-18.00:37 18.00-00.00:75
ra1 3 00.00-08.00:75 08.00-18.00:37 18.00-00.00:75
ra1 4 00.00-08.00:75 08.00-18.00:37 18.00-00.00:75
ra1 5 00.00-08.00:75 08.00-18.00:37 18.00-00.00:75
ra1 6 00.00-24.00:100
#
#=================== National =========================================================================
#
#rate-code Day rate1 rate2 rate1
#--------- --- --------------- --------------- ---------------
ra2 0 00.00-24.00:100
ra2 1 00.00-08.00:71 08.00-18.00:37 18.00-00.00:71
ra2 2 00.00-08.00:71 08.00-18.00:37 18.00-00.00:71
ra2 3 00.00-08.00:71 08.00-18.00:37 18.00-00.00:71
ra2 4 00.00-08.00:71 08.00-18.00:37 18.00-00.00:71
ra2 5 00.00-08.00:71 08.00-18.00:37 18.00-00.00:71
ra2 6 00.00-24.00:100
#================== EOF ============================================================================================================

View File

@ -1,409 +0,0 @@
#------------------------------------------------------------------------------
#
# example of a configuration file for the isdn daemon
# ---------------------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Sun May 27 09:33:59 2001]
#
# NOTICE:
# =======
# This configuration file is an EXAMPLE only and MUST be edited
# carefully to get the desired results!
#
# Please read the "isdnd.rc" manual page (execute "man isdnd.rc")
# for reference !
#
#------------------------------------------------------------------------------
#==============================================================================
# SYSTEM section: isdnd global configuration parameters
#==============================================================================
system
# accounting
# ----------
acctall = on # generate info for everything
acctfile = /var/log/isdnd.acct # name & location of accounting file
useacctfile = yes # generate accouting info to file
# monitor
# -------
monitor-allowed = no # global switch: monitor on/off
monitor-port = 451 # default monitor TCP port
# Monitor rights are granted due to the most specific host/net spec, i.e. in
# the example below host 192.168.1.2 will have the rights specified on that
# line, even so it belongs to net 192.168.1.0/24 as well.
#
# A monitor specification may either be:
#
# - the name of a local (UNIX-domain) socket; this MUST start with a "/"
monitor = "/var/run/isdn-monitor"
monitor-access = fullcmd
monitor-access = channelstate, logevents
monitor-access = callin, callout
#
# - a dotted-quad host spec
monitor = "192.168.1.2"
monitor-access = restrictedcmd, channelstate, callin, callout
#
# - a dotted-quad net spec with "/len" (CIDR-style) netmask spec
monitor = "192.168.1.0/24"
monitor-access = restrictedcmd, channelstate, callin, callout
#
# - a resolveable host name
monitor = "rumolt"
monitor-access = restrictedcmd, channelstate, callin, callout
#
# - a resolveable net name with "/len" netmask (s.a.) appended
monitor = "up-vision-net/24"
monitor-access = restrictedcmd, channelstate, callin, callout
# ratesfile
# ---------
ratesfile = /etc/isdn/isdnd.rates # name & location of rates file
# regular expression pattern matching
# -----------------------------------
#regexpr = "connected.*XXX" # look for matches in log messages
#regprog = connectXXX # execute program when match is found
regexpr = "<unknown> incoming call from"
regprog = unknown_incoming # execute program whan match is found
# realtime priority section
# -------------------------
rtprio = 25 # modify isdnd's process priority
#===========================================================================
# controller section
#===========================================================================
controller
firmware = /etc/isdn/b1.t4 # microcode for an AVM B1 controller
#==============================================================================
# entry section: IP over ISDN example - i call back the remote end
#==============================================================================
entry
name = I4BIP # name for reference. This name will
# be used in the logfile to identfy
# this entry.
# the network or telephone device
# the data traffic should be routed to:
usrdevicename = ipr # ipr, isp, tel, rbch
usrdeviceunit = 0 # unit number
# the ISDN controller number to be
# used for this entry:
isdncontroller = 0 # controller to use or -1 to use any
isdnchannel = -1 # channel (1/2) to use or 0 or -1 for any
# incoming only, outgoing only or both:
direction = inout # in, out, inout
# numbers used to verify a DIAL IN:
local-phone-incoming = 321 # this is my number
remote-phone-incoming = 0123456789 # this one can call in
# numbers used at DIAL OUT time:
local-phone-dialout = 321 # this is my number
remote-phone-dialout = 00123456789 # i call this remote number
# in case i have several remote
# telephone numbers specified, this
# is used to specify which one is
# used next on dial fail or retry:
remdial-handling = first # first, last or next
# what happenes if someone dials in:
dialin-reaction = callback # accept, reject, ignore, answer, callback
# normal dialout or do i call back:
dialout-type = normal # normal / calledback
callbackwait = 1 # no of secs to wait before calling back
# type of protocol on the B-channel:
# hdlc must be specified for IP (the
# ipr and isp drivers), raw must be
# specified for telephone answering
b1protocol = hdlc # hdlc, raw
# shorthold mode and idle time
# configuration:
ratetype = 0 # ratesfile entry to use
unitlength = 90 # unitlength to assume
unitlengthsrc = rate # none, rate, cmdl, conf, aocd
idletime-incoming = 120 # incoming call idle timeout
idletime-outgoing = 60 # outgoing call idle timeout
earlyhangup = 5 # time to hangup before an expected
# next charging unit will occur
# retry and recovery parameters
dialretries = 3 # # of dial retries
dialrandincr = off # random dial increment time
recoverytime = 5 # time to wait between 2 dial tries
usedown = off # set i/f down
downtries = 5 # retry cycles before set down
downtime = 30 # time to be in down before going up
#connectprog = "ip-up" # run /etc/isdn/ip-up when an interface
# has established its network connection.
# example parameters are:
# /etc/isdn/ip-up -d isp0 -f up -a 192.110.12.14
#disconnectprog = "ip-down" # like connectprog, but run after the connection
# is closed (ISDN layer down). The actual
# interface address might not be known
# any more. example parameters are:
# /etc/isdn/ip-up -d isp0 -f down -a 0.0.0.0
#==============================================================================
# entry section: IP over ISDN example - i am called back by the remote end
#==============================================================================
entry
name = I4BIP1 # name for reference
usrdevicename = ipr # ipr, tel, rbch
usrdeviceunit = 1 # unit number
isdncontroller = 0 # controller to use or -1 to use any
isdnchannel = -1 # channel (1/2) to use or 0 or -1 for any
# numbers used to DIAL OUT
remote-phone-dialout = 00401234567 # remote number to dial
local-phone-dialout = 38 # our number to tell remote
# numbers used to verify at DIAL IN
local-phone-incoming = 38 # we take calls for this local number
remote-phone-incoming = 00401234567 # we take calls from this remote machine
b1protocol = hdlc # hdlc, raw
ratetype = 0 # city
unitlength = 90 # default unit length
earlyhangup = 5 # safety zone
unitlengthsrc = aocd # none, rate, cmdl, conf, aocd
dialin-reaction = accept # accept, reject, ignore, anwer, callback
dialout-type = calledback # normal or calledback
dialretries = 3
recoverytime = 3
calledbackwait = 20
dialrandincr = off
usedown = off
downtries = 2
downtime = 30
idletime-incoming = 300
idletime-outgoing = 30
#==============================================================================
# entry section: answering machine example
#==============================================================================
entry
name = I4BTEL # name for reference
usrdevicename = tel # ipr, tel, rbch
usrdeviceunit = 0 # unit number
isdncontroller = 0 # controller 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 = 456 # this is my number
remote-phone-incoming = * # anyone can call in
dialin-reaction = answer # accept, reject, ignore, answer
answerprog = answer # program to run
b1protocol = raw # hdlc, raw
idletime-incoming = 5 # 5 seconds idle timeout
#==============================================================================
# kernel PPP (with budget handling) - Sunday & Holidays, we call back
#==============================================================================
entry
valid = "0,7" # sundays & holidays
name = KPPPs # name for reference
usrdevicename = isp # ipr, tel, rbch
usrdeviceunit = 0 # unit number
isdncontroller = 1 # controller 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 = 29 # this is my number
remote-phone-incoming = 00401234567 # this one can call in
# numbers used to DIAL OUT
local-phone-dialout = 29 # this is my number
remote-phone-dialout = 00401234567 # i call this number
remdial-handling = first # first, last or next
dialin-reaction = callback # accept, reject, ignore, answer, callback
dialout-type = normal # normal / calledback
b1protocol = hdlc # hdlc, raw
idletime-incoming = 30 # incoming call idle timeout
idletime-outgoing = 120 # outgoing call idle timeout
unitlength = 360 # unitlength to assume
unitlengthsrc = conf # none, rate, cmdl, conf, aocd
dialretries = 5 # # of dial retries
dialrandincr = on # random dial increment time
recoverytime = 3 # time to wait between 2 dial tries
callbackwait = 5 # time to wait to call back
usedown = off # set i/f down
downtries = 5 # retry cycles before set down
downtime = 60 # time to be in down before going up
budget-callbackperiod = 10800 # 3 hours
budget-callbackncalls = 1000 # 2 callbacks in 3 hours
budget-callbacksfile = /var/log/isdn/callbacks.isp0
budget-callbacksfile-rotate = yes
budget-calloutperiod = 3600 # 1 hour
budget-calloutncalls = 1000 # 3 calls in 1 hour
budget-calloutsfile = /var/log/isdn/callouts.isp0
budget-calloutsfile-rotate = yes
#==============================================================================
# kernel PPP (with budget handling) - Monday-Saturday, 9:00-18:00: we call back
#==============================================================================
entry
valid = "1,2,3,4,5,6,9:00-18:00" # Monday-Saturday, day
name = KPPPd # name for reference
usrdevicename = isp # ipr, tel, rbch
usrdeviceunit = 0 # unit number
isdncontroller = 1 # controller 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 = 29 # this is my number
remote-phone-incoming = 00401234567 # this one can call in
# numbers used to DIAL OUT
local-phone-dialout = 29 # this is my number
remote-phone-dialout = 00401234567 # i call this number
remdial-handling = first # first, last or next
dialin-reaction = callback # accept, reject, ignore, answer, callback
dialout-type = normal # normal / calledback
b1protocol = hdlc # hdlc, raw
idletime-incoming = 30 # incoming call idle timeout
idletime-outgoing = 30 # outgoing call idle timeout
unitlength = 60 # unitlength to assume
unitlengthsrc = conf # none, rate, cmdl, conf, aocd
dialretries = 5 # # of dial retries
dialrandincr = on # random dial increment time
recoverytime = 3 # time to wait between 2 dial tries
callbackwait = 5 # time to wait to call back
usedown = off # set i/f down
downtries = 5 # retry cycles before set down
downtime = 60 # time to be in down before going up
budget-callbackperiod = 10800 # 3 hours
budget-callbackncalls = 1 # 1 callbacks in 3 hours
budget-callbacksfile = /var/log/isdn/callbacks.isp0
budget-callbacksfile-rotate = yes
budget-calloutperiod = 3600 # 1 hour
budget-calloutncalls = 3 # 3 calls in 1 hour
budget-calloutsfile = /var/log/isdn/callouts.isp0
budget-calloutsfile-rotate = yes
#==============================================================================
# kernel PPP (with budget handling) - Monday-Saturday: we call back
#==============================================================================
entry
valid = "1,2,3,4,5,6,18:00-9:00" # Monday-Saturday, night
name = KPPPn # name for reference
usrdevicename = isp # ipr, tel, rbch
usrdeviceunit = 0 # unit number
isdncontroller = 1 # controller 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 = 29 # this is my number
remote-phone-incoming = 00401234567 # this one can call in
# numbers used to DIAL OUT
local-phone-dialout = 29 # this is my number
remote-phone-dialout = 00401234567 # i call this number
remdial-handling = first # first, last or next
dialin-reaction = callback # accept, reject, ignore, answer, callback
dialout-type = normal # normal / calledback
b1protocol = hdlc # hdlc, raw
idletime-incoming = 30 # incoming call idle timeout
idletime-outgoing = 30 # outgoing call idle timeout
unitlength = 60 # unitlength to assume
unitlengthsrc = conf # none, rate, cmdl, conf, aocd
dialretries = 5 # # of dial retries
dialrandincr = on # random dial increment time
recoverytime = 3 # time to wait between 2 dial tries
callbackwait = 5 # time to wait to call back
usedown = off # set i/f down
downtries = 5 # retry cycles before set down
downtime = 60 # time to be in down before going up
budget-callbackperiod = 7200 # 2 hours
budget-callbackncalls = 2 # 2 callbacks in 2 hours
budget-callbacksfile = /var/log/isdn/callbacks.isp0
budget-callbacksfile-rotate = yes
budget-calloutperiod = 3600 # 1 hour
budget-calloutncalls = 3 # 3 calls in 1 hour
budget-calloutsfile = /var/log/isdn/callouts.isp0
budget-calloutsfile-rotate = yes
# EOF #########################################################################

View File

@ -1,21 +0,0 @@
#---------------------------------------------------------------------------
#
# alias file for the isdntel(1) application
# -----------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Fri Dec 18 18:06:03 1998]
#
# -hm cleanup for release
#
#
# the format is simple: the number beginning in column one followed
# by one or more spaces or tabs. The rest of the line is taken as
# and alias string for the number. Comment lines start with a "#".
#
#---------------------------------------------------------------------------
123 alias for 123
456 alias for 456
789 alias for 789

View File

@ -1,98 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# isdn telephone answering
# -------------------------
#
# $FreeBSD$
#
# last edit-date: [Thu May 20 11:45:04 1999]
#
#---------------------------------------------------------------------------
#FreeBSD < 3.1, NetBSD, OpenBSD, BSD/OS
#LIBDIR=/usr/local/lib/isdn
#FreeBSD 3.1 and up
LIBDIR=/usr/share/isdn
VARDIR=/var/isdn
DEVICE=/dev/i4btel0
# sounds
MESSAGE=${LIBDIR}/msg.al
BEEP=${LIBDIR}/beep.al
# dd options
SKIP=25
# max message size
MAXMSIZ=100
# src and dst telephone numbers
src=
dst=
# current date
DATE=`date`
# check if directory exists
if [ ! -d "${VARDIR}" ]
then
mkdir ${VARDIR}
fi
# get options
if ! set -- `/usr/bin/getopt D:d:s: $*`; then
echo "usage2: play -D device -d <dest-telno> -s <src-telno>"
exit 1
fi
# process options
for i ; do
case $i in
-D)
DEVICE=$2; shift; shift;
;;
-d)
dst=$2; shift; shift;
;;
-s)
src=$2; shift; shift;
;;
--)
shift; break;
;;
esac
done
# this is a __MUST__ in order to use the fullscreen inteface !!!
FILEDATE=`date \+%y%m%d%H%M%S`
# echo message to phone
if [ -r "${MESSAGE}" ]; then
/bin/dd of=${DEVICE} if=${MESSAGE} bs=2k >/dev/null 2>&1
fi
# echo beep to phone
if [ -r "${BEEP}" ]; then
/bin/dd of=${DEVICE} if=${BEEP} bs=2k >/dev/null 2>&1
fi
# start time
START=`date \+%s`
# get message from caller
/bin/dd if=${DEVICE} of=${VARDIR}/${FILEDATE}-${dst}-${src} skip=${SKIP} bs=2k count=${MAXMSIZ} >/dev/null 2>&1
# end time
END=`date \+%s`
# duration
TIME=`expr ${END} - ${START}`
# save recorded message
if [ -r "${VARDIR}/${FILEDATE}-${dst}-${src}" ]; then
mv ${VARDIR}/${FILEDATE}-${dst}-${src} ${VARDIR}/${FILEDATE}-${dst}-${src}-${TIME}
fi
exit 0

View File

@ -1,99 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# answer and record message script for i4b isdnd
# ----------------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Thu May 20 11:45:10 1999]
#
#---------------------------------------------------------------------------
VARDIR=/var/isdn
#FreeBSD < 3.1, NetBSD, OpenBSD, BSD/OS
#LIBDIR=/usr/local/lib/isdn
#FreeBSD 3.1 and up
LIBDIR=/usr/share/isdn
LOGFILE=/tmp/answer.log
NCALLFILE=${VARDIR}/ncall
DATE=`date +%d%H`
DF=0
dF=0
sF=0
if ! set -- `getopt D:d:s: $*`; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
for i ; do
case ${i} in
-D)
DEVICE=$2
DF=1
shift
shift
;;
-d)
DEST=$2
dF=1
shift
shift
;;
-s)
SRC=$2
sF=1
shift
shift
;;
--)
shift
break
;;
esac
done
echo "" >>${LOGFILE}
if [ "${DF}" -eq 0 -o "${dF}" -eq 0 -o "${sF}" -eq 0 ]; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
echo "answer: device ${DEVICE} destination ${DEST} source ${SRC} " >>${LOGFILE}
if [ -r "${NCALLFILE}" ]; then
NCALL=`cat ${NCALLFILE}`
else
NCALL=0
fi
NCALL=`printf "%.4d" ${NCALL}`
echo Date: `date` >> ${VARDIR}/I.${NCALL}.${DATE}
if [ -n "${SRC}" ]; then
echo "From: ${SRC}" >> ${VARDIR}/I.${NCALL}.${DATE}
fi
if [ -n "${DEST}" ]; then
echo "To: ${DEST}" >> ${VARDIR}/I.${NCALL}.${DATE}
fi
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi
if [ -r "${LIBDIR}/msg.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/msg.al bs=2k >/dev/null 2>&1
fi
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi
dd if=${DEVICE} of=${VARDIR}/R.${NCALL}.${DATE} bs=2k >/dev/null 2>&1
echo `expr $NCALL + 1` >$NCALLFILE

View File

@ -1,87 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# tell called and calling numbers answer script for i4b isdnd
# -----------------------------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Thu May 20 11:45:15 1999]
#
#---------------------------------------------------------------------------
VARDIR=/var/isdn
#FreeBSD < 3.1, NetBSD, OpenBSD, BSD/OS
#LIBDIR=/usr/local/lib/isdn
#FreeBSD 3.1 and up
LIBDIR=/usr/share/isdn
LOGFILE=/tmp/answer.log
NCALLFILE=${VARDIR}/ncall
DATE=`date +%d%H`
DF=0
dF=0
sF=0
if ! set -- `getopt D:d:s: $*`; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
for i ; do
case ${i} in
-D)
DEVICE=$2
DF=1
shift
shift
;;
-d)
DEST=$2
dF=1
shift
shift
;;
-s)
SRC=$2
sF=1
shift
shift
;;
--)
shift
break
;;
esac
done
echo "" >>${LOGFILE}
if [ "${DF}" -eq 0 -o "${dF}" -eq 0 -o "${sF}" -eq 0 ]; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
echo "answer: device ${DEVICE} destination ${DEST} source ${SRC} " >>${LOGFILE}
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi
# tell the caller the number he is calling from
POS=1
LENGTH=`expr ${SRC} : '.*'`
while : ; do
DIGIT=`echo ${SRC} | cut -c ${POS}`
/bin/dd of=${DEVICE} if=${LIBDIR}/${DIGIT}.al bs=2k >/dev/null 2>&1
POS=`expr ${POS} + 1`
if [ "${POS}" -gt "${LENGTH}" ]; then
break
fi
done
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi

View File

@ -1,89 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# tell called and calling numbers answer script for i4b isdnd
# -----------------------------------------------------------
#
# $FreeBSD$
#
# last edit-date: [Tue Oct 31 10:59:49 2000]
#
#---------------------------------------------------------------------------
VARDIR=/var/isdn
#FreeBSD < 3.1, NetBSD, OpenBSD, BSD/OS
#LIBDIR=/usr/local/lib/isdn
#FreeBSD 3.1 and up
LIBDIR=/usr/share/isdn
LOGFILE=/tmp/answer.log
NCALLFILE=${VARDIR}/ncall
DATE=`date +%d%H`
DF=0
dF=0
sF=0
if ! set -- `getopt D:d:s: $*`; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
for i ; do
case ${i} in
-D)
DEVICE=$2
DF=1
shift
shift
;;
-d)
DEST=$2
dF=1
shift
shift
;;
-s)
SRC=$2
sF=1
shift
shift
;;
--)
shift
break
;;
esac
done
echo "" >>${LOGFILE}
if [ "${DF}" -eq 0 -o "${dF}" -eq 0 -o "${sF}" -eq 0 ]; then
echo 'Usage: answer -D device -d destination -s source'
exit 1
fi
echo "answer: device ${DEVICE} destination ${DEST} source ${SRC} " >>${LOGFILE}
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi
# tell the caller the number he is calling from
POS=1
LENGTH=`expr ${SRC} : '.*'`
while : ; do
DIGIT=`echo ${SRC} | cut -c ${POS}`
/bin/dd of=${DEVICE} if=${LIBDIR}/${DIGIT}.al bs=2k >/dev/null 2>&1
POS=`expr ${POS} + 1`
if [ "${POS}" -gt "${LENGTH}" ]; then
break
fi
done
if [ -r "${LIBDIR}/beep.al" ]; then
dd of=${DEVICE} if=${LIBDIR}/beep.al bs=2k >/dev/null 2>&1
fi
dd if=${DEVICE} of=${VARDIR}/recorded.msg bs=2k >/dev/null 2>&1

View File

@ -1,79 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# unknown_incoming - script for isdnd
# -----------------------------------
#
# $FreeBSD$
#
# last edit-date: [Wed Jan 10 13:40:36 2001]
#
# This script may be configured to be called by isdnd when an
# unknown incoming call is received. In case the destination
# telephone number is available, it sends mail with the time,
# source and destination numbers to a configurable address.
#
# For this to work, and entry like this:
#
# regexpr = "<unknown> incoming call from"
# regprog = unknown_incoming
#
# is needed in the system section of /etc/isdn/isdnd.rc.
#
# This script has to be configured to the sites needs, look
# for the comment lines start with "configure:"
#
#---------------------------------------------------------------------------
#
# configure: who shall receive the mail
mailaddr=root
#
from=`echo $* | awk '{print $6}'`
to=`echo $* | awk '{print $8}'`
test=`echo $* | awk '{print $9}'`
ctrl=`echo $* | awk '{print $10}'`
date=`date "+%b %d"`
time=`date "+%H:%M"`
mach=`hostname`
# configure: list of destination numbers to ignore
case "$from" in
"NotAvailable" ) exit 0 ;;
"00401234567"* ) exit 0 ;;
"00407654321" ) exit 0 ;;
esac
# configure: how to name the line on which this was received
if [ $test = "ctrl" ]
then
case "$ctrl" in
"1")
line="PBX 1"
;;
"2")
line="PBX 2"
;;
*)
line="controller is $ctrl"
;;
esac
else
line="test is $test, controller is $ctrl"
fi
cat << ENDOFDATA | mail -s "isdnd: unknown incoming telephone call" $mailaddr
Unknown incoming telephone call recognized:
Date: $date
Time: $time
Line: $line
From: $from
To: $to
Sincerly yours,
the isdnd on $mach
ENDOFDATA
exit 0

View File

@ -189,8 +189,6 @@
..
gssapi
..
i4b
..
isofs
cd9660
..

View File

@ -32,8 +32,6 @@
..
gss
..
isdn mode=0700
..
mail
..
mtree

View File

@ -221,14 +221,6 @@
..
iscsi
..
isdn
contrib
..
i4brunppp
..
v21
..
..
kld
cdev
module
@ -344,8 +336,6 @@
..
info
..
isdn
..
locale
UTF-8
..

View File

@ -52,7 +52,6 @@ _start=quietstart
/etc/rc.d/netif ${_start}
/etc/rc.d/ipsec ${_start}
/etc/rc.d/dhclient ${_start}
/etc/rc.d/isdnd ${_start}
/etc/rc.d/ppp ${_start}
/etc/rc.d/ipfw ${_start}
/etc/rc.d/ip6fw ${_start}

View File

@ -16,7 +16,7 @@ FILES= DAEMON FILESYSTEMS LOGIN NETWORKING SERVERS \
hostapd hostid hostname \
idmapd inetd initrandom \
ip6addrctl ip6fw ipfilter ipfs ipfw ipmon \
ipnat ipsec ipxrouted isdnd \
ipnat ipsec ipxrouted \
jail \
kadmind kerberos kernel keyserv kldxref kpasswdd \
ldconfig local localpkg lockd lpd \

View File

@ -4,7 +4,7 @@
#
# PROVIDE: NETWORKING NETWORK
# REQUIRE: netif netoptions routing network_ipv6 isdnd ppp
# REQUIRE: netif netoptions routing network_ipv6 ppp
# REQUIRE: routed mrouted route6d mroute6d resolv
# This is a dummy dependency, for services which require networking

View File

@ -1,56 +0,0 @@
#!/bin/sh
#
# $FreeBSD$
#
# Mostly based on original script (/etc/rc.isdn) written by Hellmuth Michaelis
#
# PROVIDE: isdnd
# REQUIRE: netif FILESYSTEMS cleanvar
# KEYWORD: nojail
. /etc/rc.subr
name="isdnd"
rcvar=`set_rcvar isdn`
pidfile="/var/run/${name}.pid"
command="/usr/sbin/isdnd"
start_cmd="isdnd_start"
isdnd_start()
{
echo -n 'ISDN subsystem setup:'
# Start isdnd
#
echo -n ' isdnd'
case ${isdn_fsdev} in
[Nn][Oo] | '')
/usr/sbin/isdnd ${isdn_flags}
;;
*)
# Change vidmode of ${isdn_fsdev}
#
case ${isdn_screenflags} in
[Nn][Oo])
;;
*)
/usr/sbin/vidcontrol < ${isdn_fsdev} > ${isdn_fsdev} 2>&1 ${isdn_screenflags}
;;
esac
/usr/sbin/isdnd ${isdn_flags} -f -r ${isdn_fsdev} -t ${isdn_ttype}
;;
esac
# Start isdntrace
#
if checkyesno isdn_trace; then
echo -n ' isdntrace'
nohup /usr/sbin/isdntrace ${isdn_traceflags} >/dev/null 2>&1 &
fi
echo '.'
}
load_rc_config $name
run_rc_command "$1"

View File

@ -4,7 +4,7 @@
#
# PROVIDE: ppp
# REQUIRE: netif isdnd
# REQUIRE: netif
# KEYWORD: nojail
. /etc/rc.subr

View File

@ -26,9 +26,6 @@ INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \
ulimit.h unistd.h utime.h utmp.h uuid.h varargs.h vis.h wchar.h \
wctype.h wordexp.h
I4BHDRS=i4b_cause.h i4b_debug.h i4b_ioctl.h i4b_rbch_ioctl.h \
i4b_tel_ioctl.h i4b_trace.h
MHDRS= float.h floatingpoint.h stdarg.h
PHDRS= sched.h semaphore.h _semaphore.h
@ -181,13 +178,6 @@ copies:
cd ${.CURDIR}/../sys/crypto; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 rijndael/rijndael.h \
${DESTDIR}${INCLUDEDIR}/crypto
.if ${MACHINE_ARCH} == "i386"
.if ${MK_I4B} != "no"
cd ${.CURDIR}/../sys/i4b/include; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 ${I4BHDRS} \
${DESTDIR}${INCLUDEDIR}/i4b
.endif
.endif
cd ${.CURDIR}/../sys/opencrypto; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 *.h \
${DESTDIR}${INCLUDEDIR}/crypto
@ -269,11 +259,6 @@ symlinks:
ln -fs ../../../sys/crypto/$$h \
${DESTDIR}${INCLUDEDIR}/crypto; \
done
cd ${.CURDIR}/../sys/i4b/include; \
for h in ${I4BHDRS}; do \
ln -fs ../../../sys/i4b/include/$$h \
${DESTDIR}${INCLUDEDIR}/i4b; \
done
cd ${.CURDIR}/../sys/opencrypto; \
for h in *.h; do \
ln -fs ../../../sys/opencrypto/$$h \

View File

@ -9,7 +9,6 @@ SUBDIR= ${_colldef} \
${_dict} \
${_doc} \
${_examples} \
${_isdn} \
${_man} \
${_me} \
misc \
@ -52,10 +51,6 @@ _me= me
_examples= examples
.endif
.if ${MK_I4B} != "no"
_isdn= isdn
.endif
.if ${MK_DICT} != "no"
_dict= dict
.endif

View File

@ -15,7 +15,6 @@ LDIRS= BSD_daemon \
find_interface \
ibcs2 \
ipfw \
isdn \
kld \
libvgl \
mdoc \
@ -77,35 +76,6 @@ XFILES= BSD_daemon/FreeBSD.pfa \
ibcs2/README \
ibcs2/hello.uu \
ipfw/change_rules.sh \
isdn/FAQ \
isdn/KERNEL \
isdn/Overview \
isdn/README \
isdn/ROADMAP \
isdn/ReleaseNotes \
isdn/Resources \
isdn/SupportedCards \
isdn/ThankYou \
isdn/contrib/README \
isdn/contrib/anleitung.ppp \
isdn/contrib/answer.c \
isdn/contrib/answer.sh \
isdn/contrib/convert.sh \
isdn/contrib/hplay.c \
isdn/contrib/i4b-ppp-newbie.txt \
isdn/contrib/isdnctl \
isdn/contrib/isdnd_acct \
isdn/contrib/isdnd_acct.pl \
isdn/contrib/isdntelmux.c \
isdn/contrib/mrtg-isp0.sh \
isdn/i4brunppp/Makefile \
isdn/i4brunppp/README \
isdn/i4brunppp/i4brunppp-isdnd.rc \
isdn/i4brunppp/i4brunppp.8 \
isdn/i4brunppp/i4brunppp.c \
isdn/v21/Makefile \
isdn/v21/README \
isdn/v21/v21modem.c \
kld/Makefile \
kld/cdev/Makefile \
kld/cdev/README \
@ -146,9 +116,7 @@ XFILES= BSD_daemon/FreeBSD.pfa \
ppi/Makefile \
ppi/ppilcd.c \
ppp/chap-auth \
ppp/isdnd.rc \
ppp/login-auth \
ppp/ppp.conf.isdn \
ppp/ppp.conf.sample \
ppp/ppp.conf.span-isp \
ppp/ppp.conf.span-isp.working \

File diff suppressed because it is too large Load Diff

View File

@ -1,82 +0,0 @@
#---------------------------------------------------------------------------
#
# example fragment of a kernel config file to include all
# parts of isdn4bsd. This file should be appended to your
# kernel config file and then edited (stripped down) to
# match your hardware configuration.
#
# last edit-date: [Sun Oct 21 11:03:37 2001]
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
# Siemens/Infineon chipsets
device isic 4
# Winbond chipset
device iwic 4
# AVM Fritz PCI
device ifpi 4
# AVM Fritz PCI version 2
device "ifpi2" 4
# Teles 16.3c
device ihfc 4
# NETjet-S / Teles PCI-TJ
device itjc 4
# AVM Fritz PnP
device ifpnp 4
# AVM B1/T1
device "i4bcapi"
device iavc 4
# enable some ISA cards within the "isic" driver
options TEL_S0_8
options TEL_S0_16
options TEL_S0_16_3
options AVM_A1
options USR_STI
options ELSA_PCC16
# enable some ISA PnP cards within the "isic" driver
options TEL_S0_16_3_P
options CRTX_S0_P
options DRN_NGO
options SEDLBAUER
options ELSA_QS1ISA
options SIEMENS_ISURF2
options ASUSCOM_IPAC
options EICON_DIVA
options COMPAQ_M610
# enable ELSA Microlink PCI card within the "isic" driver
options ELSA_QS1PCI
# protocol stack
device "i4bq921"
device "i4bq931"
device "i4b"
# control devices
device "i4btrc" 4
device "i4bctl"
device "i4brbch" 4
device "i4btel" 2
# IP over raw HDLC
options IPR_VJ
device "i4bipr" 4
# kernel sppp/isppp
device "i4bisppp" 4
# Netgraph interface
#options NETGRAPH
#device "i4bing" 4

View File

@ -1,307 +0,0 @@
Short technical overview of isdn4bsd
====================================
Copyright (c) 1998 Hellmuth Michaelis. All rights reserved.
$FreeBSD$
Last edit-date: [Tue Oct 27 11:26:03 1998]
-hm starting an overview ...
Contents:
---------
Functional block diagram
Layer 1
Layer 2
Layer 3
Debugging control
Layer 4
ISDN protocol trace
Functional block diagram
========================
isdndebug isdnd isdntrace
+-------+ +----------------------------------------------------+ +--------+
| | | | | |
| | | | | |
+-------+ +----------------------------------------------------+ +--------+
| | |
| | |
| /dev/i4bctl Userland | /dev/i4b /dev/i4btrc<n> |
===============================================================================
| Kernel | |
| | |
+-------+ +----------------------------------------------------+ +--------+
| | | | | |
|i4bctl | | i4b | | i4btrc |
| (6) | | (7) | | (8) |
| debug | | Layer 4 - common call control interface | | ISDN |
|control| | | | trace |
+:-:-:--+ +----------------------------------------------------+ +--------+
: : : ^ ^ ^
: : : Call | various ptr arrays | Call %
. . . Control | in i4b_l3l4.h | Control %
V V %
+----------------------+ +----------------------+ %
| | | | %
| i4bq931 | ISDN | active card | %
| (5) | ##### | %
| Layer 3 (Q.931) | # | driver | %
| | # | | %
+----------------------+ # +----------------------+ %
^ # B + %
| i4b_l2l3_func function # | + +------------+ %
| ptr array in i4b_l2l3.h # C +++++ isp |----> %
V # h + +------------+ IP %
+----------------------+ # a + Subsys %
| | # n + +------------+ %
| i4bq921 | # n +++++ ipr |----> %
| (4) | # e + +------------+ IP %
| Layer 2 (Q.921) | # l + Subsys %
| | # + +------------+ %
+----------------------+ # D +++++ tel/rbch |----> %
^ # a + +------------+ to %
| i4b_l1l2_func function # t + /dev/i4btel<n> %
| ptr array in i4b_l1l2.h # a + or /dev/i4brbch<n>%
V # + %
+----------------------+ # +---------------------+ %
| | # | | %
| isic (ISAC part) | D-ch trace # | isic (HSCX part) |B-ch%
| (2) |%%%%%%%%%%%% # | (3) |%%%%%
| Layer 1 (I.430) | % # | non-HDLC / HDLC |trc %
| | % # | | %
+----------------------+ % # +---------------------+ %
^ % # ^ %
D-channel | % # B-channels | %
+-----------------------------------------------+ %
| function ptr in % # %
| in isic_softc in %%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
V i4b_l1.h #
+----------------------+ #
| | #
| isic | #
| (1) | #
| Card hardware driver | #
| for Teles, AVM, USR | #
| | #
+----------#-----------+ #
# #
# #
# #
# #
|=========#===============================#============================|
ISDN S0 bus
Layer 1
=======
(1) A driver for a special card hardware consists of a
- probe routine
- attach routine
- FIFO read
- FIFO write
- register read
- register write
routines. These routines handle the card/manufacturer specific stuff
required to talk to a particular card.
The addresses of the read/write routines are put into an array found
in struct isic_softc and they are later called by the macros:
ISAC_READ(r), ISAC_WRITE(r,v), ISAC_RDFIFO(b,s), ISAC_WRFIFO(b,s),
HSCX_READ(n,r), HSCX_WRITE(n,r,v), HSCX_RDFIFO(n,b,s), HSCX_WRFIFO(n,b,s)
(see file layer1/i4b_l1.h)
Files currently used for this purpose are
- i4b_avm_a1.c AVM A1 and AVM Fritz!Card drivers
- i4b_ctx_s0P.c Creatix S0 PnP (experimental!)
- i4b_tel_s016.c Teles S0/16 and clones
- i4b_tel_s0163.c Teles S0/16.3
- i4b_tel_s08.c Teles S0/8 and clones
- i4b_tel_s0P.c Teles S0/16 PnP (experimental!)
- i4b_usr_sti.c 3Com USRobotics Sportster
(2) The files i4b_isac.c and i4b_isac.h contain the code to control the
ISAC chip by using the above mentioned macros.
Files i4b_l1.c and i4b_l1.h handle stuff used to access layer 1
functions from layer 2.
Layer 1 and layer 2 access functionality of each other by using
a well known function pointer array, which contains addresses of
"primitives" functions which are defined in I.430 and Q.921. The
function pointer array for layer 1/2 communication is defined in
file include/i4b_l1l2.h and is initialized i4b_l1.c at the very
beginning.
File i4b_isic.c contains the main code for the "isic" device driver.
i4b_l1fsm.c is the heart of layer 1 containing the state machine which
implements the protocol described in I.430 and the ISAC data book.
(3) All above code is used for handling of the D channel, the files
i4b_bchan.c, i4b_hscx.c and i4b_hscx.h contain the code for handling
the B-channel, the HSCX is used to interface the userland drivers
isp, ipr, tel and rbch to one of the B-channels and i4b_hscx.c and
i4b_hscx.h contain the code to handle it (also by using the above
mentioned macros). i4b_bchan.c contains various maintenance code for
interfacing to the upper layers.
Layer 2
=======
(4) Layer 2 implements the LAPD protocol described in Q.920/Q.921. Layer 2
interfaces to layer 1 by the above described function pointer array,
where layer 1 calls layer 2 functions to provide input to layer 2 and
layer 2 calls layer 1 functions to feed data to layer 1.
The same mechanism is used for layer 2 / layer 3 communication, the
pointer array interface is defined in include/i4b_l2l3.h ad the array
is initialized at the very beginning of i4b_l2.c which also contains
some layer 1 and some layer 3 interface routines. As with l1/l2, the
l2/l3 array also contains addresses for "primitives" functions which
are specified in Q.920/Q.921 and Q.931.
i4b_l2.h contains the definition of l2_softc_t, which describes the
complete state of a layer 2 link between the exchange and the local
terminal equipment.
i4b_l2.c contains the entrance of data from layer 1 into the system,
which is split up in i4b_ph_data_ind() into the 3 classes of layer 2
frames called S-frame, I-frame and U-frame. They are handled in files
i4b_sframe.c, i4b_iframe.c and i4b_uframe.c together with the respective
routines to send data with each ones frame type.
i4b_l2timer.c implements the timers required by Q.921.
i4b_tei.c contains the TEI handling routines.
i4b_lme.c implements a rudimentary layer management entity.
i4b_util.c implements the many utility functions specified
in Q.921 together wit some misc routines required for overall
functionality.
i4b_mbuf.c handles all (!) requests for mbufs and frees all mbufs used
by the whole isdn4bsd kernel part. It should probably be moved else-
where.
i4b_l2fsm.c and i4b_l2fsm.h contain the heart of layer 2, the state-
machine implementing the protocol as specified in Q.921.
Layer 3
=======
(5) i4b_l2if.c and i4b_l4if.c contain the interface routines to communicate
to layer 2 and layer 4 respectively.
i4b_l3timer.c implements the timers required by layer 3.
i4b_q931.c and i4b_q931.h implement the message and information element
decoding of the Q.931 protocol.
i4b_q932fac.c and i4b_q932fac.h implement a partial decoding of facility
messages and/or information elements; the only decoding done here is
the decoding of AOCD and AOCE, advice of charge during and at end of
call.
As usual, i4b_l3fsm.c and i4b_l3fsm.h contain the state machine required
to handle the protocol as specified in Q.931.
Layer 3 uses a structure defined in include/i4b_l3l4.h to store and
request information about one particular isdncontroller, it is called
ctrl_desc_t (controller descriptor). It contains information on the
state of a controller (controller ready/down and which B channels are
used or idle) as well as a pointer array used for communication of
layer 4 with layer 3: layer 3 "knows" the routines to call within
layer 4 by name, but in case layer 4 has to call layer 3, several
possibilities exist (i.e. active / passive cards) so it has to call
the routines which the ISDN controller had put into the the function
pointer array (N_CONNECT_REQUEST, N_CONNECT_RESPONSE etc) at init time.
Layer 3 shares a structure called call_desc_t (call descriptor) with
layer 4. This structure is used to describe the state of one call. The
reference to layer 3 is the Q.931 call reference value, the reference to
layer 4 (and the isdn daemon, isdnd) is the cdid, an unique integer
value uniquely describing one call, the call descriptor id.
This structure is used to build an array of this structures
(call_desc[N_CALL_DESC]), which must be large enough to hold as many
calls as there are B channels in the system PLUS a reserve to be able
to handle incoming SETUP messages although all channels are in use.
More, this structure contains the so called "link table pointers"
(isdn_link_t *ilt and drvr_link_t *dlt) which contain function pointers
to "link" a B-channel (better the addresses of functions each participant
needs to access each others functionality) after a successful call setup
to a userland driver (such as isp, ipr, rbch or tel) to exchange user
data in the desired protocol and format.
Debugging control
=================
(6) the device driver for /dev/i4bctl in conjunction with the userland
program isdndebug(8) is used to set the debug level for each of the
layers and several other parts of the system, information how to use
this is contained in i4b/i4b_debug.h and all parts of the kernel
sources. It is only usable for passive cards.
Layer 4
=======
(7) Layer 4 is "just" an abstraction layer used to shield the differences
of the various possible Layer 3 interfaces (passive cards based on
Siemens chip-sets, passive cards based on other chip-sets, active cards
from different manufacturers using manufacturer-specific interfaces)
and to provide a uniform interface to the isdnd userland daemon, which
is used to handle all the required actions to setup and close calls
and to the necessary retry handling and management functionality.
Layer 4 communicates with the userland by using a well defined protocol
consisting of "messages" sent to userland and which are read(2) by the
isdnd. The isdnd in turn sends "messages" to the kernel by using the
ioctl(2) call. This protocol and the required messages for both
directions are documented in the i4b/i4b_ioctl.h file and are
implemented in files i4b_i4bdrv.c and i4b_l4.c, the latter also
containing much of the Layer 4 interface to the lower layers.
i4b_l4mgmt.c contains all the required routines to manage the above
mentioned call descriptor id (cdid) in conjunction with the call
descriptor (array) and the call reference seen from layer 3.
i4b_l4timer.c implements a timeout timer for Layer 4.
ISDN protocol trace
===================
(8) ISDN D-channel protocol trace for layers 2 and 3 is possible by using
hooks in the ISAC handling routines.
In case D-channel trace is enabled, every frame is prepended with a
header containing further data such as a time stamp and sent via the
i4btrc driver found in driver/i4b_trace.c to one of the /dev/i4btrc<n>
devices, where <n> corresponds to a passive controller unit number.
If desired, B-channel data can be made available using the same
mechanism - hooks in the HSCX handler send data up to the i4btrc
device.
The raw data is then read by the isdntrace userland program which
decodes the layer 2 and/or layer 3 protocol and formats it to be
easily readable by the user.
B-channel data is not interpreted but dumped as a hex-dump.
/* EOF */

View File

@ -1,342 +0,0 @@
$FreeBSD$
--------------------------------------------------------------------------------
isdn4bsd
========
Version 1.04.00 / August 2002
written by:
Hellmuth Michaelis
Hallstrasse 20
D-25462 Rellingen
voice: +49 4101 473574
fax: +49 4101 473575
email: hm@freebsd.org
-----
The isdn4bsd package is:
Copyright (c) 1997, 2002 by Hellmuth Michaelis. All rights reserved.
The standard FreeBSD license applies, for details see the file
/usr/share/examples/etc/bsd-style-copyright
-----
isdn4bsd would not be what it is without
the help and support of many people,
see file ThankYou !
-----
Vote with your wallet: in case you want to buy new ISDN hardware,
buy it from manufacturers who support the development of i4b,
for a list of supporters have a look at file ThankYou!
-----
This package is postcard-ware:
==============================
The (for laywer infected places: optional) license fee for using
isdn4bsd is sending a picture postcard of your home town.
My address can be found at the top of this file.
--------------------------------------------------------------------------------
Contents:
---------
1. Disclaimer
2. What is isdn4bsd ?
3. Which BSD's are supported ?
4. Which ISDN cards are supported ?
5. Where do i find documentation for isdn4bsd ?
6. How do i install isdn4bsd ?
7. Where do i get support for isdn4bsd ?
8. Where do i get commercial support for isdn4bsd ?
9. How can i help and/or support isdn4bsd ?
10. How do i report bugs ?
11. Is there a mailing-list available for isdn4bsd ?
12. Where can i get isdn4bsd ?
13. What is the reward for reading everything in this file ?
1. Disclaimer:
--------------
It may be illegal in your country to connect an isdn4bsd based machine
using a passive ISDN card to the ISDN at your site because the protocol
stack of isdn4bsd, which is necessary to run passive cards, has not been
approved by the telecommunication certification authority of your country.
If in doubt, please contact your local ISDN provider !
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.
2. What is isdn4bsd ?
---------------------
Isdn4bsd (or in short i4b) is a package for interfacing a computer running
FreeBSD, NetBSD, OpenBSD or BSD/OS to the ISDN.
The only ISDN protocol currently supported by the drivers for passive cards
is the BRI protocol specified in I.430, Q.921 and Q.931; better known as
DSS1 or Euro-ISDN.
Other ISDN Protocols may be / are supported by the microcode of the supported
active ISDN cards.
Isdn4bsd allows you to make IP network connections by using either IP packets
sent in raw HDLC frames on the B channel or by using built-in synchronous PPP
(or using userland ppp, this is experimental and only available for FreeBSD).
For telephony, isdn4bsd can answer incoming phone calls like an answering
machine and now has preliminary dialout capabilities for voice and data calls.
3. Which BSD's are supported ?
------------------------------
FreeBSD:
--------
FreeBSD-STABLE and FreeBSD-CURRENT is supported
by this version of isdn4bsd.
I4b was integrated into FreeBSD in January 1999, so it is part
of the base FreeBSD system since FreeBSD 3.x.
Please take the time to read the available documentation carefully.
NetBSD/i386:
------------
The NetBSD specific support and the Diehl driver was written by
Martin Husemann, (martin@netbsd.org). Isdn4bsd was integrated
into the NetBSD tree in January 2001, please have a look at
http://www.de.netbsd.org/Documentation/network/isdn/ for more
information.
NetBSD/Amiga:
-------------
The NetBSD/Amiga specific support was done by Ignatios Souvatzis,
(is@netbsd.org).
NetBSD/Atari:
-------------
The NetBSD/Atari specific support was done by Leo Weppelman,
(leo@netbsd.org).
NetBSD/Alpha:
-------------
This port is still experimental!
The NetBSD/Alpha specific support was done by Jan-Hinrich Fessel,
(oskar@zippo.unna.ping.de)
OpenBSD/i386:
-------------
Nikolay Sturm (sturm@physik.rwth-aachen.de) sent in patches to
support OpenBSD/i386 2.6, they are still experimental and since
i don't run OpenBSD i have no idea on the state of affairs.
BSD/OS:
-------
The BSD/OS 4.0 specific support was done by Bert Driehuis. The
support is not yet complete. Please contact Bert directly in case
of questions regarding this at driehuis@playbeing.org.
4. Which ISDN cards are supported ?
-----------------------------------
For a list of supported ISDN cards, please have a look at
the file "SupportedCards".
Please have a look at the ReleaseNotes file !
5. Where do i find documentation for isdn4bsd ?
-----------------------------------------------
- in case you are upgrading from previous versions of isdn4bsd, have a
look at the ReleaseNotes file in the top level directory for major
changes and improvements.
- For installation instructions have a look at the isdn4bsd handbook
available online at http://people.freebsd.org/~hm/i4b-home/
- isdn4bsd has a homepage at http://www.freebsd-support.de/i4b/ where i
will try to maintain links to docs, updates and errata.
- Every program and every driver has a man page.
Hint: try "apropos isdn4bsd", it displays all available manual pages.
- The file Overview contains a short technical overview of the inner
workings of isdn4bsd.
- The file Resources contains URL's and ISBN's to more interesting ISDN
related stuff.
6. How do i install isdn4bsd ?
------------------------------
Read the installation instructions in the isdn4bsd handbook which is
available online at http://people.freebsd.org/~hm/i4b-home/
In case they are incomplete, unclear, wrong or outdated, please send me an
update for inclusion into a future distribution!
7. Where do i get support for isdn4bsd ?
----------------------------------------
Please send all questions regarding the installation, configuration
and setup of isdn4bsd to the isdn4bsd mailing list (see below).
Please do not send me private mail asking for help with the installation,
configuration and setup of isdn4bsd: due to the amount of mail of this
type i'm no longer able to reply to those mails.
Before sending mail asking for help, PLEASE (!) read the supplied
documentation, the examples, the handbook, the manual pages and the FAQ !
I will support and help with isdn4bsd as my time permits it. Please
keep in mind that in this case support is given on a voluntary basis
and your questions might not be answered immediately.
Also, i strongly recommend subscribing to the mailing list mentioned below.
Due to the experience gained supporting the predecessor of isdn4bsd, let
me please clearly state that there is no guarantee that your bug will be
fixed within some specific amount of time, in fact there is no guarantee
that your bug will be fixed at all; i'll do my best but there might be
more important things going on in my life than giving free support for
isdn4bsd.
Some bugs seem to occur only in certain environments and are not
reproduceable here without access to the equipment you are connected
to or other equipment like ISDN simulators (which i don't get access to
for free): in this case you are the only person being able to trace down
the bug and fix it.
There is a web page for i4b at http://www.freebsd-support.de/i4b/ available
where i will put bugfixes, updates and contributions. In particular it has
an "errata" page, where you should look in case you have problems with i4b.
8. Where do i get commercial support for isdn4bsd ?
----------------------------------------------------
In case you want to pay for support, maintenance, enhancements, extensions
to isdn4bsd or whatever else you may need, it is possible to hire me for
reasonable rates through my employer HCS GmbH; in this case please contact
me for details at hm@hcs.de and/or look at http://www.freebsd-support.de
9. How can i help and/or support isdn4bsd ?
-------------------------------------------
Send a postcard! :-)
I'm open for constructive suggestions, bugreports, fixes, patches,
enhancements and comments to improve isdn4bsd.
Please send all questions regarding the installation, configuration
and setup of isdn4bsd to the isdn4bsd mailing list.
Please send flames to /dev/null and/or start writing your own ISDN package.
Isdn4bsd is a project on a voluntary basis and writing and supporting
communication systems like isdn4bsd costs much money and much time.
Any contribution in terms of equipment, cards, documentation, cash
and/or daytime payed work on isdn4bsd will be highly appreciated!
You can help by not only reporting bugs, but by sending in a patch for
the problem together with a bugreport.
In case you cannot fix something yourself, please describe your problem
as detailed as possible, include information which version of an operating
system you are running, which ISDN board you are using, to which kind
of ISDN equipment (like the brand of PBX) you are connected etc. etc.
In case you want to get a currently unsupported card supported, write a
low level driver for it yourself and submit it. In case you can't write
it yourself there is a good chance to get it supported if you can donate
one of those cards and - if at all possible - docs for it.
10. How do i report bugs ?
--------------------------
Please submit patches ONLY as context diffs (diff -c)!
I vastly prefer receiving bug fixes and enhancements that are clearly
differentiated. I don't always know what to do with large patches that
contain many bugs and enhances folded into the same context diffs.
Please keep it to one fix or enhancement per patch!
If your change modifies the external interface of an isdn4bsd program,
i.e. more config options, command-line switches, new programs, etc.,
then please also include patches for the manual pages and documentation.
Thank you!
11. Is there a mailing-list available for isdn4bsd ?
---------------------------------------------------
There is a mailing list available at
freebsd-isdn@freebsd.org
The list is maintained by majordomo, so i.e. to subscribe,
send a mail with the text
subscribe freebsd-isdn
in the message body sent to
majordomo@freebsd.org
This mailing list is NOT (!) FreeBSD specific, everyone is welcome there!
12. Where can i get isdn4bsd ?
------------------------------
The isdn4bsd package is part of FreeBSD since FreeBSD 3.0-RELEASE so you
get isdn4bsd where you can get FreeBSD: http://www.freebsd.org
Isdn4bsd has its own homepage at
http://www.freebsd-support.de/i4b/
13. What is the reward for reading everything in this file ?
------------------------------------------------------------
Have fun!
hellmuth

View File

@ -1,86 +0,0 @@
Roadmap of isdn4bsd as integrated into FreeBSD
==============================================
$FreeBSD$
last edit-date: [Mon Aug 12 09:42:53 2002]
1. Documentation
---------------------
The i4b handbook which describes the setup and configuration of
isdn4bsd under FreeBSD in detail can be found at
http://people.freebsd.org/~hm/i4b-home/
The i4b homepage is http://www.freebsd-support.de/i4b/
The command "apropos isdn" will list all manpages available for
isdn4bsd. Two more manual pages of interest to syncronous PPP
over ISDN users are the pages for sppp and ispppcontrol.
Under directory /usr/share/examples/isdn, you will find:
FAQ - isdn4bsd Frequently Asked Questions
KERNEL - kernel config(8) file fragment to add ISDN support
Overview - short technical overview (outdated)
README - the original isdn4bsd README file
ROADMAP - this file
ReleaseNotes - list of major changes
Resources - where to get more information about ISDN
SupportedCards - list of supported ISDN cards
ThankYou - contributors to isdn4bsd
contrib - contributed examples and code
v21 - V.21 (300Bd) soft modem emulator
2. Configuration
---------------------
Configuration of the isdn4bsd package consists of:
- configuring a kernel suitable for running isdn4bsd. All
kernel configuration statements for isdn4bsd can be found
in the file /usr/src/sys/i386/conf/NOTES - another way to
get started is taking the GENERIC configuration file and
appending the KERNEL file mentioned above.
- configuring the network interfaces iprX and/or ispX; the
former are used for "IP over raw HDLC" and the latter are
used for "sync PPP over ISDN". To configure the ipr-
interfaces, read the output of "man i4bipr", to configure
the isp-interfaces, read the output of "man i4bisppp",
"man sppp" and "man ispppcontrol" carefully.
- writing a configuration file /etc/isdn/isdnd.rc for the
isdn daemon isdnd(8) which is responsible for the ISDN
call control mechanisms such as: dial on demand, dial
retry, dial recovery, timeout and short hold operation.
A sample (!) file can be found in /etc/isdn. Please read
the output of "man isdnd" and "man isdnd.rc" carefully.
2. Userland programs
-------------------------
The userland programs can be found in the sourcetree under
/usr/src/usr.sbin/i4b and get installed under /usr/sbin.
Isdntest will not be installed by default.
Isdnphone is experimental and may not run with your soundcard.
3. Kernel part
-------------------
The kernel part of isdn4bsd can be found at /usr/src/sys/i4b.
4. Answering machine messages
----------------------------------
Messages to be used by the answering machine can be found in
/usr/share/isdn, you'll find the numbers 0 to 9, a beep and
a short announcement message here.

View File

@ -1,196 +0,0 @@
$FreeBSD$
ReleaseNotes for isdn4bsd last edit-date: [Mon Aug 12 09:47:59 2002]
================================================================================
release 1.04
--------------------------------------------------------------------------------
- add support properly displaying and logging incoming telephone numbers (MSNs)
by looking at the "type of number" field and providing configurable hooks
to correct the numbers accordingly. See keywords add-prefix, prefix-national
and prefix-international in isdnd.rc(5).
This feature was implemented by Christian Ullrich <chris@chrullrich.de>
release 1.03
--------------------------------------------------------------------------------
- add support for Data over Voice (DoV) outgoing calls, see entry keywork
bcap in isdnd.rc(5).
based on patches received from Guy Ellis (guy@traverse.com.au),
Chris Collins (xfire@xware.cx) and Phillip Musumeci (phillip@cs.jcu.edu.au).
release 1.02
--------------------------------------------------------------------------------
- add support for ISDN subaddressing written by Steve Looman
- made ELSA PCC16 attach correctly (again ?)
- fixed bug in CAPI support (patch from Juha-Matti Liukkonen <jml@cubical.fi>)
- add support written by Steve Looman for the Compaq Microcom 610 ISDN card
(also known as Compaq series PSB2222I).
release 1.01
--------------------------------------------------------------------------------
- add experimental support to send messages via the keypad facility to the
PBX or exchange office. The messages - if supported - may be used to
configure and maintain optional services offered by the PBX or exchange
office such as call deflection mailbox services. Please consult the
nice documentation for the exchange you are connected to.
Currently keypad messages can be send by using the isdnphone utilities
"-k" switch on the command line. Don't forget to properly quote the
message in case it contains shell meta characters!
- add keyword "maxconnecttime" to isdnd to prevent a potential telco bill
desaster. Caution: use only in conjunction with budgets to limit the number
of dials per timeunit otherwise you will get endless redials and reconnects!
release 1.00
--------------------------------------------------------------------------------
- CAPI interface driver and AVM B1/T1 driver added. Both were written and
contributed by Juha-Matti Liukkonen <jml@cubical.fi> of Cubical Solutions
Ltd, Finnland. To support this, two new keywords were added to isdnd.rc:
"firmware" to be used in the controller section and "clone" to be used
in the entry section.
beta release 0.96
--------------------------------------------------------------------------------
- it is now possible to mark an entry as valid for a specified day of week
and a specific time range only to take advantage of some new tariff models.
Please see the new keywords "valid" and "holidayfile" in isdnd.rc(5).
This feature is considered experimental, use at your own risk!
- keywords budget-callbacksfile and budget-calloutsfile added to isdnd's
entry section to write statistics information to a file
- a driver for the Dynalink IS64PH is now available for FreeBSD 4.x and up
beta release 0.95
--------------------------------------------------------------------------------
- ITK ix1 micro ISA non-PnP card should now work for FreeBSD >= 4.0
- setting "dialretries = -1" in isdnd.rc gives an unlimited number
of dial retries for that entry.
- the ELSA PCFpro ISDN card should now work for FreeBSD >= 4.0
- added new keywords (patch from Stefan Esser) to configure isppp
from within isdnd.rc. Documented in isdnd.rc(5), grep for "ppp-"
- isppp VJ compression negotiation now run-time configurable using
keywords "enable-vj" / "disable-vj" with ispppcontrol
- added new keywords to specify "budgets" for outbound calls in isdnd
to limit the number of possible calls within a given time period.
Runtime budget information and statistics are available in the isdnd
fullscreen menu display.
- added new "ifpnp" AVM Fritz!Card PnP driver for FreeBSD >= 4.0
contributed by Udo Schweigert.
- added experimental hardware driver from Hans Petter Selasky for the
Teles 16.3c card based on the Cologne Chip Designs HFC-S 2BDS0 chip
called "ihfc".
notes for Teles 16.3c PnP and AcerISDN P10: For optimal performance:
-> please connect the card to the S0-bus before booting the computer.
-> do not change the cable you're using when first booted.
Other notes if the card does not work at all:
-> disconnect other isdn equipment on your S0-bus and
reboot your computer.
-> try changing the CLKDEL/stdel value for your card:
../i4b/layer1-nb/ihfc/i4b_ihfc_pnp.c or
../i4b/layer1/ihfc/i4b_ihfc_pnp.c
around line 100. The value can be in the range 0x0-0xf.
- the FreeBSD >= 4.0 AVM Fritz PCI driver was moved to a separate layer 1
driver called "ifpi".
- the sppp subsystem was integrated into the i4bisppp/isp driver. There
is no need to include something like "option sppp" into your kernel
config file anymore. The spppcontrol utility is no longer usable to
configure the i4bisppp/isp driver, instead use the new ispppcontrol
utility!
- FreeBSD >= 4.0: "iwic" driver for Winbond PCI ISDN chipset (W6692)
added, used i.e. in ASUSCOM P-IN100-ST-D and Dynalink IS64PPH.
- added more protocol decoding to isdntrace
- isntrace now adds a time/datestamp to the trace filename, signal USR1
behaviour has changed, see manpage.
- ispppcontrol now has a new option of setting the LCP timeout value
- add directory mpd which contains docs and files on howto interface
i4b by using the netgraph subsystem to the multilink ppp daemon, mpd.
- add i4bing, a raw HDLC B-channel interface to the NetGraph subsystem
- add a V.21 modem emulator written by Poul-Henning Kamp
- a new system configuration keyword "extcallattr" was added to isdnd
which allows to configure the display of the extended caller
attributes "screening indicator" and "presentation indicator" in
isdnd's log file.
beta release 0.90
--------------------------------------------------------------------------------
- the following cards are no longer supported for FreeBSD 4.0 and up:
AVM Fritz!Card PnP
AVM Fritz!Card PCMCIA
Dynalink IS64PH
ITK ix1 Micro
USRobotics Sportster ISDN TA intern
The AVM cards, the USR card and perhaps one of the ITK cards are likely
to be resurrected in the future, we just ran out of time, docs and/or
into programming problems for this release.
- the rbch driver was enhanced to support the generation of accounting
information in HDLC mode. The bytecount and bps fields in isdnd
fullscreen mode now show meaningful information.
- most of the layer1 drivers have been rewritten to support the new bus
and driver architecture for FreeBSD 4.0.
- the ipr interfaces now support logging of some of the first ip packets
of a new connection and displaying them in the isdnd logs. To enable
this, add a line like: "options IPR_LOG=32" to your kernel config
file. The parameter to IPR_LOG specifies the number of packets to be
logged.
- support for FreeBSD 2.x and FreeBSD 3.0-RELEASE has been removed.
The last beta release which supports this OS versions is i4b-0.83.
- isdnd now recognizes two new keywords in the system section, mailto
and mailer. mailer is used to configure a mail program and is typically
set to /usr/bin/mail and mailto is set to the address of the isdnd
administrator. If both are set and a fatal error inside isdnd
happenes, mail is sent to the address in mailto with the error
message before isdnd terminates.
- isdnd.rc now has an optional new "controller" section. This will be
used to specify different D-channel protocols in the future. It looks
like this:
controller
protocol = dss1 # dss1 (default) or d64s (leased line)
Please note that leased line support (d64s) is NOT yet functional!
- isdnmonitor is now able to be used like isdnd in fullscreen mode from
a remote machine.
EOF

View File

@ -1,82 +0,0 @@
$FreeBSD$
Bugfixes, improvements and patches for i4b
==========================================
http://www.freebsd-support.de/i4b/ (in the "errata" section)
Standards:
==========
ETSI
----
http://www.etsi.org/
ITU
---
http://www.itu.ch/
ftp://ftp.leo.org/pub/comp/doc/standards/itu/
CAPI
----
http://www.capi.org/
ISDN Chips
==========
Infineon (formerly Siemens)
---------------------------
http://www.infineon.com/
Cologne Chip Design
-------------------
http://www.colognechip.de/
Winbond
-------
http://www.winbond.com/
SunShine Project - Implementation of the ISDN recommendations Q.921 & Q.931
===========================================================================
http://www.tcm.hut.fi/~bos/ISDN/sunshine/SunShine.html
Books:
======
"ISDN: concepts, facilities and services",
Gary C. Kessler, McGraw-Hill 1993,
ISBN 0-07-034247-4
"Integrated services digital networks: architectures, protocols, standards",
Herman J. Helgert, Addison-Wesley 1991,
ISBN 0-201-52501-1
"ISDN and Broadband ISDN with Frame Relay and ATM",
William Stallings, Prentice Hall 1995,
ISBN 0-02-415513-6
"Technik der Netze",
Gerd Siegmund, R. v. Decker's Verlag 1996,
ISBN 3-7685-2495-7
"Euro-ISDN fuer Anwender und Techniker"
Reinhard Heermeyer und Maria Spath, Festo DIDACTIC 1996,
ISBN 3-8127-4334-5
"ISDN implementors guide: standards, protocols & services",
Charles K. Summers, McGraw-Hill 1995,
ISBN 0-07-069416-8
"PPP Design and Debugging",
James Carlson, Addison-Wesley 1998,
ISBN 0-0201-18539-3
"ISDN - Die Technik",
Andreas Kanbach, Andreas Koerber, Huethig Verlag 1999,
ISBN 3-7785-2288-4

View File

@ -1,196 +0,0 @@
--------------------------------------------------------------------------------
ISDN cards supported by isdn4bsd in FreeBSD
===========================================
last edit-date: [Sun Oct 21 11:09:24 2001]
$FreeBSD$
--------------------------------------------------------------------------------
YES - card is generally supported for this OS
NO - card is NOT supported for this OS
EXP - card is in an experimental status for this OS
DEV - card driver is under development
??? - card status is unknown for this OS
1. Passive non-PnP ISA bus ISDN cards
=====================================
Type FreeBSD Notes
--------------------- ------- -----------------------
AVM A1 YES
AVM Fritz!CardClassic YES
Creatix ISDN-S0/8 YES (= Teles S0/8 )
Creatix ISDN-S0/16 YES ( = Teles S0/16 )
Dr.Neuhaus Niccy 1008 YES ( = Teles S0/8 )
Dr.Neuhaus Niccy 1016 YES ( = Teles S0/16 )
ELSA PCC-16 YES
ELSA PCFpro YES
ITK ix1 micro YES (Note 13)
Stollmann Tina-pp YES
Teles S0/8 YES
Teles S0/16 YES
Teles S0/16.3 YES
3Com/USR SportsterInt YES ( = Stollmann Tina-pp )
TELEINT ISDN SPEED EXP (Note 4)
2. Passive PnP ISA bus ISDN cards
=================================
Type FreeBSD Notes
--------------------- ------- -----------------------
AVM Fritz!Card PnP YES (Note 1)
Asuscom I-IN100-ST-DV ??? ( = Dynalink IS64PH )
Asuscom ISDNlink 128K YES (Note 16)
Creatix ISDN-S0 PnP YES (Note 2)
Dr.Neuhaus Niccy GO@ YES (Note 2)
Dynalink IS64PH YES (Note 11)
ELSA 1000pro ISA YES (Note 3)
ITK ix1 micro V.3 YES (Note 13)
Sagem Cybermod YES (= Niccy GO@ )
Sedlbauer Win Speed YES (Note 9)
Siemens I-Surf 2.0 YES (Note 15)
Teles S0 PnP YES (Note 5)
Teles 16.3c EXP (Note 4)
AcerISDN P10 EXP (Note 4)
Compaq Microcom 610 YES ( = Compaq series PSB2222I ?)
3. Passive PCI bus ISDN cards
=============================
Type FreeBSD Notes
--------------------- ------- -----------------------
ASUSCOM P-IN100-ST-D YES
AVM Fritz!Card PCI YES (Note 14)
AVM Fritz!Card PCI V2 YES (Note 14)
Dynalink IS64PPH YES
Dynalink IS64PPH+ YES
ELSA 1000pro PCI YES ( = ELSA Microlink PCI )
Teles PCI-TJ YES
NETJet-S YES
Winbond W6692-based YES
4. Passive PCMCIA bus ISDN cards
================================
Type FreeBSD Notes
--------------------- ------- -----------------------
AVM Fritz!Card PCMCIA NO (Note 10)
ELSA ISDN/MC NO
ELSA MC/ALL NO
5. Passive Zorro2 ISDN cards for the Amiga
==========================================
Type FreeBSD Notes
--------------------- ------- -----------------------
ISDN Blaster NO (Note 12, Amiga/NetBSD)
ISDN Master NO (Note 12, Amiga/NetBSD)
ISDN Master II NO (Note 12, Amiga/NetBSD)
6. Active ISDN cards
====================
Type (active, ISA) FreeBSD Notes
--------------------- ------- -----------------------
AVM B1 YES (Note 17)
AVM T1 YES (Note 18)
DiehlS,SX,SCOM,QUATRO NO (Note 7)
Miro P1 DEV ( = Tina-dd )
Stollmann Tina-dd DEV (Note 8)
7. Notes
========
Note 1: The driver for the Fritz!Card PnP was developed by Udo Schweigert
(ust@cert.siemens.de) who develops under FreeBSD only.
Please contact Udo in case of trouble.
Note 2: The NetBSD version has not been verified to work yet.
Note 3: Due to its design, this card produces 128 IRQs/sec. This can be
reportedly stopped by disconnecting pin 12 of the 7474 and wiring
it to pin 15 of the 74175. Be careful! This procedure has not been
verified and doing this will immediately terminate your warranty !!
The card will not function anymore with drivers for other OSes and
you may not get any further support from the manufacturer! YMMV!
Note 4: This driver was developed by Hans Petter Selasky, hselasky@c2i.net
The code is still somewhat experimental.
Note 5: The card has only been verified to work under FreeBSD 4.0 and up.
Note 6: This driver is currently under development by Gary Jennejohn who
develops under FreeBSD only.
Note 7: This driver is currently under construction by Martin Husemann who
develops under NetBSD only.
Note 8: This driver is currently under development by Hellmuth Michaelis who
develops under FreeBSD only.
Note 9: This driver was developed by German Tischler, tanis@gaspode.franken.de.
Please contact him in case of trouble. The "Teledat 100" sold by the
german Telekom is identical with this card.
Note 10: This driver is developed by Matthias Apitz, matthias.apitz@sisis.de.
Please contact him in case of trouble. Please read the file
misc/README.PCCARD in the i4b distribution for additional installation
instructions.
Note 11: This driver was developed by Martijn Plak (martijn@be3.com)
This driver might also work for Asuscom cards. (Andrew Gordon
wrote: Just to let you know that I've now tried the i4b "dynalink"
driver with the ASUSCOM I-IN100-ST-DV card, and it appears to work
fine.)
Note: This driver is now unsupported as Martijn is no longer able
to maintain this driver.
The BSD/OS support for this card was written by Bert Driehuis.
Ported to FreeBSD newbus by Kazunori Fujiwara <fujiwara@rcac.tdi.co.jp>
Note 12: This driver was developed by Ignatios Souvatzis (is@netbsd.org)
Please contact him in case of trouble.
This driver is supposed to work on the ISDN Master versions and
lookalikes, like the ISDN Blaster, and on the ISDN Master II.
Note that the ISDN Master II does not AutoConfig(tm)ure in the
DraCo Zorro bus and thus only works in real Amigas. This is no
i4b problem, but general.
Note 13: This driver was developed by Martin Husemann, please contact him
in case of trouble. The FreeBSD PnP support for version 3 of the
card was done by Philippe Guezou <Philippe.Guezou@wanadoo.fr>.
Note 14: This driver was developed by Gary Jennejohn who develops under
FreeBSD only. In case of problems with this driver, please contact
him directly at garyj@jennejohn.org.
Note 15: The driver for the Siemens I-Surf 2.0 was developed by Udo Schweigert
(ust@cert.siemens.de) who develops under FreeBSD only.
Please contact Udo in case of trouble.
Note 16: The driver for the Asuscom ISDNlink 128K PnP was developed by
Ari Suutari (ari@suutari.iki.fi). Please contact Ari directly
in case of trouble with this driver.
Note 17: The driver was written by Juha-Matti Liukkonen <jml@cubical.fi>,
Cubical Solutions Ltd. I have tested it with an AVM B1 PCI card
V.4.0 and an AVM B1 ISA card V.2.0.
Note 18: The driver was written by Juha-Matti Liukkonen <jml@cubical.fi>,
Cubical Solutions Ltd. I have no access to any PRI equipment at
all so i have not tested the driver, feedback welcome!
EOF

View File

@ -1,289 +0,0 @@
$FreeBSD$
Thanks a lot for postcards from:
--------------------------------
Aachen
Arnhem
Arolsen
Bad Rothenfelde
Berlin
Birenbach
Bochum
Bohnsdorf
Bonn
Bornheim
Braunschweig
Darmstadt
Delft
Dresden
Eggstaett am Hartsee
Flekkefjord
Freiburg
Habichtswald
Hamburg (2)
Ihlow
Jena
Kassel
Koengen
Kymgbuk, Korea
Landsberg
Leiden
Magdeburg
Mauerbach
Mersch
Middelburg
Mosi-Oa-Tunya
Muenchen (4)
Netherlands (Leo)
Netherlands (Peter)
Rio de Janeiro
Saint-Gilles-Croix-de-Vie
Scheessel
Siena, Italy
St. Jacob
Stuttgart
Travemuende
Vedskoelle, Danmark
Windach
Wuerzburg
Zuberec
I would like to thank the following people and organisations:
-------------------------------------------------------------
Gary Jennejohn for his constant kind support while writing isdn4bsd
during that year. Gary always runs the latest and
greatest FreeBSD-current and makes isdn4bsd run
there, if his root fs is intact, of course! :-).
In February 1999, Gary contributed the AVM Fritz!
Card PCI driver to isdn4bsd.
Martin Husemann is a major contributor to isdn4bsd. He wrote almost
all of the NetBSD support for isdn4bsd, the monitor
network code and the Diehl driver. He constantly
tries put strange macros into i4b ... ;-)
Serge Vakulenko for writing the sppp driver and making it freely
available.
Joerg Wunsch for adapting the synchronous PPP stuff to i4b.
Gary finished this and integrated the PPP stuff into
current isdn4bsd.
Wolfgang Helbig for many patches, polishing isdn4bsd and layer 1
debugging.
Thomas Halenbeck and
Stephan Forth of FORTH EDV in Mainz donated two AVM A1 card and
one AVM B1 card to support the development and
maintenance of drivers for this cards. Thomas donated
three more AVM A1 cards in the meantime - Thank you!
Arne Helme for the initial work on how to support IOM-2 based
boards.
Andrew Gordon for disassembling an old AVM A1 and documenting it.
Andrew added VJ header compression to the ipr interface
and is a constant source of various hints and
suggestions :-)
Andrew sent in a Teles S0/16 PnP for FreeBSD newbus
conversion, thanks a lot!
Juergen Krause and someone who does not want to be mentioned anymore
for the work on the first ISDN package for FreeBSD.
Michael Elbel for supporting the development with ftp/www/mail
resources.
Leo Weppelman for the port to the NetBSD/Atari platform.
Bas Oude Nijeweme for the port to OpenBSD/i386 2.2.
German Tischler for the driver for the Sedlbauer WinSpeed card,
for the PnP support for FreeBSD and for constant
testing and contributions. German did the initial
mostly complete conversion of the layer1 code
to the FreeBSD 4.0 new-bus driver architecture!
Matthias Apitz for the driver for the AVM PCMCIA Fritz!Card.
Martijn Plak for the Dynalink driver.
Ignatios Souvatzis for the NetBSD/Amiga port and associated driver(s).
Christoph Weber-Fahr donated an AVM B1 card to support development of a
driver. Thanks a lot, Christoph!
Eivind Eklund for the PnP support for FreeBSD, for __FreeBSD_version
and more.
Karsten Keil author of the hisax isdn4linux driver for some details
about the one or the other piece of hardware.
Bert Driehuis for the support of the BSDI BSD/OS 4.0 operating system
Barry Scott for fixed charging units shorthold mode support (as
used in the UK by British Telecom).
Poul-Henning Kamp for the work on DTMF decoding and many hints, fixes
and suggestions.
Stefan Bethke for the work on the audio format conversion stuff in
the telephony paths.
Udo Schweigert for PCMCIA support and work on FreeBSD 2.2x
compatibility. Udo contributed the AVM Fritz PnP
and the Siemens I-Surf V2.0 driver.
Ernst Winter donated a Fritz!Card PCI which was used to develop
and test the driver.
Harald Frank long-term loan of an ISDN Blaster board.
Klaus Burkert for a loan of an ISDN Master II.
Ari Suutari for a driver for the Asuscom ISDNlink ISA PnP card
Brian Somers for working on making userland ppp work with i4b
Rune Knapstad for good help with the port to OpenBSD/i386 2.5
Uwe Laverenz for the donation of an ELSA PCC-16 card
Luke Roberts for the long time loan a Dynalink ISDN intern PCI card
Marc van Kempen for the donation of a Dynalink ISDN intern PCI card
Christoph Kukulies for the donation of an ITK ix1 card
Nikolay Sturm sent in patches to get OpenBSD 2.6 supported.
Dave Boyce wrote a driver for the Winbond W6692 PCI ISDN
chip which eventually lead to a layer 1 reorg.
Hans Petter Selasky for his contribution of a driver for the
Teles 16.3c card (and the complete ihfc driver).
Sergio de Souza Prallon for the contribution of the itjc driver which
supports the NETJet-S and the Teles PCI-TJ cards
Steve Looman for the driver for a Compaq Microcom 610 ISDN card
and for the subaddressing implementation
Christian Ullrich for the "type of number" patchset
------------------------------------------
Liebscher & Partner Martin Welk and Holm Tiffe sent in a motivating
BSD daemon plushie :-)
Abaid Andreas Mutschlechner of Abaid, Alte Strasse 2, in
I-39017 Schenna (BZ) donated money to support i4b
development, which was used to upgrade my main test
machine for isdn4bsd from an 486 to a Pentium II.
Thank you very, very much, Andreas !
3Com USRobotics Christian Weissgerber of 3Com USRobotics in Munich
donated a passive "Sportster ISDN TA intern" ISDN
card and complete hardware documentation for the card.
Florian Uhl of 3Com in Munich donated two MC68SC302
"3Com U.S.Robotics ISDN Card PnP internal" cards and
documentation to support writing a driver for this
card.
Dr. Neuhaus Klaus Muehle of Dr. Neuhaus Telekommunikation in
Hamburg sent documentation for the NICCY GO@ and
NICCY EASY@ ISDN cards to support development of
a driver for this cards.
Stollmann Many thanks to Christian Luehrs and Manfred Jung
for giving out docs and sources to support the
driver development for the tina-dd active card.
ELSA Axel Riemer of ELSA AG in Aachen donated several
ISA, PCI and PC-Card ISDN boards to three developers
and provided support and documentation to help with
adding support to i4b for this hardware. Werner Fehr
of ELSA answered our technical questions and gave
valuable hints. Thanks also to Andreas Klemm for
making the contact ;-)
Cologne Chip Design Harald Schaefer of Cologne Chip Design send in a
HFC-S-PCI developer card, complete docs and
layer 1 example code to support the development
of a driver for that chipset! Thanks a lot!
ASUSCOM Network Inc. Mr. Ben Chen of Asuscom sent a Winbond based PCI
card and a Cologne Chip Design based PCI card to
support the development of device drivers.
Cubical Solutions Ltd. Juha-Matti Liukkonen <jml@cubical.fi> of Cubical
contributed the CAPI layer and the AVM B1/T1 device
driver to isdn4bsd.
AVM GmbH Mr. A. Ziessnitz of AVM donated an AVM B1 PCI cards
to support development and maintenance of a driver
for this card.
Intelligent Network Technology Ltd.
David Hedley provided an AVM Fritz!Card PCI Version 2
controller to support development of a driver.
The following people contributed in one or the other way to isdn4bsd:
---------------------------------------------------------------------
Alexander Langer
Andreas Haakh
Andreas Lohrum
Arve Ronning
Aurelien Bargy
Bart van Leeuwen
Caspar Schlegel
Chris Collins
Christian Wolf
Christoph Kukulies
Daniel Rock
David Wetzel
Dirk Meyer
Doobee R. Tzeck
Dominik Brettnacher
Gabor Dolla
Guy Ellis
H. Eckert
Hans Huebner
Harald Hanche-Olsen
Harold Gutch
Heiko Schaefer
Jan Sparud
Joachim Kuebart
Joakim Hernberg
Juha-Matti Liukkonen
Julian H. Stacey
Kazunori Fujiwara
Lars Koeller
Malte Lance
Marcel Moolenaar
Martin Recktenwald
Meike Aulbach
Michael Hohmuth
Michael Ranner
Michael Reifenberg
Nils Ulltveit-Moe
Paul Herman
Paul Sijben
Phillip Musumeci
Philippe Guezou
Rob Pickering
Stefan Esser
Stefan Herrmann
Steven Looman
Wolfgang Solfrank
(In case i forgot someone, please tell me!)

View File

@ -1,42 +0,0 @@
$FreeBSD$
This directory contains various unsupported contributions to isdn4bsd
---------------------------------------------------------------------
anleitung.ppp Anleitung für syncPPP Internet-Zugang und
Anrufbeantworter / FreeBSD 2.2.x / Teles.S0/16.3-Karte
(stefan@asterix.webaffairs.net)
answer.c answering machine in C by David Wetzel
(dave@turbocat.de)
answer.sh a much better replacement for answer, tell and record
from Stefan Esser (se@freebsd.org)
convert.sh convert recorded message to WAV format, optionally
send it via mail. from Stefan Herrmann
(stefan@asterix.webaffairs.net)
hplay.c isdn4bsd telephony output driver for the "rsynth"
package to play synthetic speech to a telephone
connection
i4b-ppp-newbie.txt setup PPP for isdn4bsd for newbies text from
Dominik Brettnacher <domi@saargate.de> (german)
isdnctl This script can control the state of your ISDN line.
It counts how many scripts/users currently use the
ISDN line and uses "ifconfig down" if noone uses it
any more. Alexander Langer <alex@big.endian.de>
isdnd_acct the barebones isdnd accounting script
isdnd_acct.pl enhanced accounting from Joachim Kuebart
(joki@kuebart.stuttgart.netsurf.de)
isdntelmux.c a "record while play" program contributed by
Michael Reifenberger (Michael@Reifenberger.com)
mrtg-isp0.sh shell script and mrtg config entry to display
callout and callback statistics with mrtg
(www.mrtg.org) using the budget file statistics

View File

@ -1,142 +0,0 @@
$FreeBSD$
i4b Anleitung für syncPPP Internet-Zugang und Anrufbeantworter
unter FreeBSD 2.2.x mit Teles.S0/16.3-Karte
===============================================================
by Stefan Herrmann <stefan@asterix.webaffairs.net>
Installation
------------
1) Neues Verzeichnis "/usr/src/i4b" anlegen.
2) Ins Verzeichnis "/usr/src/i4b" wechseln und Sourcen entpacken.
3) Ins Verzeichnis "FreeBSD" wechseln und den Befehl "sh install.sh ausführen:
z.B. "root@asterix[0]/usr/src/i4b/FreeBSD # sh install.sh"
Wenn auf eine neuere Version von i4b gewechselt wird, zuerst
"sh uninstall.sh" ausführen, dann erst "sh install.sh"
4) Dann ins Verzeichnis "/usr/src/i4b" (zurück-)wechseln und die Befehle
"make depend", "make" und "make install" ausführen.
5) Nun muß der kernel mit neuen Optionen versehen werden. Dazu wird an die
Kernel-Konfigurationsdatei im Verzeichnis "/sys/i386/conf" folgendes ans
Ende hinzugefügt:
# i4b passive ISDN cards support (isic - I4b Siemens Isdn Chipset driver)
# note that the ``options'' and ``device'' lines must BOTH be defined !
# Teles S0/16.3
options "TEL_S0_16_3"
device isic0 at isa? port 0xd80 net irq 5 flags 0x04 vector isicintr
# i4b passive cards D channel handling
# Q.921
pseudo-device "i4bq921"
# Q.931
pseudo-device "i4bq931"
# common passive and active layer 4
# layer 4
pseudo-device "i4b"
# userland driver to do ISDN tracing (for passive cards oly)
pseudo-device "i4btrc" 4
# userland driver to control the whole thing
pseudo-device "i4bctl"
# userland driver for access to raw B channel
pseudo-device "i4brbch" 4
# userland driver for telephony
pseudo-device "i4btel" 2
# network driver for IP over raw HDLC ISDN
pseudo-device "i4bipr" 4
# enable VJ header compression detection for ipr i/f
options IPR_VJ
# network driver for sync PPP over ISDN
pseudo-device "i4bisppp" 4
pseudo-device sppp 4
6) Danach wird der kernel durch Eingabe der Befehle "make depend", "make" und
"make install" im Verzeichniss "/usr/src/sys/compile/<CONFIG>" neu
übersetzt und installiert.
7) Nach dem Booten kann man dann mit dem Befehl "dmesg" überprüfen, ob die
Karte korrekt erkannt wurde und alle erforderlichen Treiber installiert
sind.
Konfiguration
-------------
8) Die Konfiguration von i4b wird hauptsächlich im Verzeichnis "/etc/isdn"
druchgeführt, dort sucht der isdnd beim Start auch seine Konfigurations-
datei "isdnd.rc". Da vorgenanntes Verzeichnis nach der Installation aber
noch leer ist, kopiert man zuerst die Beispieldateien aus dem Verzeichnis
"/etc/isdn/samples" nach "/etc/isdn".
9) Die Datei "isdnd.rc" enthält schon recht aussagekräftige Kommentare zu den
einzelnen Optionen, weitere Informationen erhält man mit "man isdnd.rc" und
"man isdnd".
10) Für syncPPP und Anrufbeantworter sind nur die Sektionen "SYSTEM",
"telephone answering" und "example for sPPP" notwendig, die Sektion
"IP over ISDN example" kann dafür also entfernt werden.
11) Für den automatisierten Start des isp0 Interfaces und des isdnd erstellt
man nun ein Start-Skript. Dazu kopiert man die Datei
"/usr/src/i4b/etc/rc.isdn-PPP" nach "/etc/rc.isdn" und paßt sie
entsprechend an. Man beachte hierbei auch die FAQ "/usr/src/i4b/FAQ", die
Tips für die richtige Eintragung der IP-Adressen bereithält.
12) Der Anrufbeantworter wird dadurch aktiviert, daß das entsprechende
Programm, das in "/etc/isdn/isdnd.rc" hinter dem Eintrag "answerprog = "
steht, aufgerufen wird. Wird dort kein Pfad angegeben, wird das Programm
im Verzeichniss "/etc/isdn" erwartet. Beispiele solcher Programme findet
man wiederum im Verzeichnis "/etc/isdn/samples". Sie nennen sich
"answer" Nur Ansagetext abspielen, keine Aufzeichnungsmöglichkeit.
"record" Ansage wird abgespielt, nach Piep-Ton kann gesprochen
werden.
"tell" Als Ansagetext wird die anrufende Nummer gesprochen, keine
Aufzeichnung.
"tell-record" Anrufende Nummer als Ansagetext, nach Piep-Ton kann ge-
sprochen werden.
"isdntel.sh" Ansagetext und Aufzeichnung; mittels dem Programm "isdntel"
hat man die Kontrolle übe die Aufzeichnungen im Ver-
zeichniss "/var/isdn". Siehe auch "man isdntel" und
"man isdntelctl".
Diese Programme müssen an die eigenen Wünsche angepaßt werden. Leider gibt es
kein mitgeliefertes Programm, mit dem man so auch den Ansagetext aufsprechen
kann. Das ist aber nicht allzuschlimm, da man nur das Programm "record" dafür
etwas anpassen muß (Ansagetexte beep und msg auskommentieren). Damit die Anrufe
aufgezeichnet werden können, muß zuerst noch das Verzeichnis "/var/isdn"
angelegt werden. Dort werden dann alle Aufzeichnungen obiger Programme gespeichert.
13) Man sollte sich auch noch die man-Pages der Programme "isdnd", "isdnctl",
"isdnd_acct", "isdndebug" und "isdntrace" zu Gemüte führen.
Betrieb
-------
14) Der syncPPP Zugang zum Provider wird einfach mit dem Aufruf von
"/etc/rc.isdn" initialisiert. Jegliche Aktivitäten ins Internet (also z.B.
ein "ping 141.1.1.1") starten die Verbindung. Wenn in "/etc/isdn/isdnd.rc"
beim Eintrag "unitlengthsrc = " "rate" angegeben wurde, wird die Verbindung
kurz bevor die nächste Einheit begonnen wird, beendet. Informationen über
die Einheiten werden aus der Datei "/etc/isdn/isdnd.rates" ausgelesen
(Beispiele sind in "/etc/isdn/samples").
Mit "/etc/rc.isdn [restart|stop]" kann i4b entweder neu gestartet (z.B. zum
Einlesen der geänderten Konfiguration aus "isdnd.rc") oder beendet werden.
15) Für den Anrufbeantworter muß nur der "isdnd" gestartet sein. Ein
ankommender Anruf wird dann automatisch angenommen (je nach den Einträgen
in "/etc/isdn/isdnd.rc").
16) Informationen über die Verbindung erhält man sowohl in "/var/log/messages",
also auch in "/var/log/isdnd.log" (so der isdnd mit der Option "-l"
gestartet wird) bzw. auf dem aktuellen tty (wenn der isdnd mit der Option
"-f" gestartet wird).

View File

@ -1,178 +0,0 @@
// $FreeBSD$
// changed ".g711a" to ".al" (-hm)
// Tue Mar 3 02:42:14 MET 1998 dave@turbocat.de
// started
#define BLK_SIZE 2048
#define SOX "/usr/local/bin/sox"
#define ALAWULAW "/usr/local/bin/alaw2ulaw"
#include <stdio.h>
#include <time.h>
FILE *device;
FILE *logfile;
char srcNum[30];
char destNum[30];
char argbuf[255];
char tmpBuf[1024] = "";
void writeToPhone (char *path)
{
char buf[BLK_SIZE];
FILE *srcfile;
int i = 0;
int readcount = 0;
srcfile = fopen(path,"r");
if (srcfile) {
for (i=0;i<BLK_SIZE;i++) {
buf[i] = '\0';
}
readcount = BLK_SIZE;
i = 0;
do {
readcount = fread(buf,1, BLK_SIZE, srcfile);
fwrite(buf, 1, readcount, device);
i = readcount + i;
// fprintf(logfile,"%d read (%d)\n",i,readcount);
} while (readcount == BLK_SIZE);
fclose(srcfile);
} else {
fprintf(logfile,"Can't open file '%s'\n",path);
}
}
void readFromPhone (char *path)
{
char buf[BLK_SIZE];
FILE *destfile;
int i = 0;
int readcount = 0;
destfile = fopen(path,"a");
if (destfile) {
for (i=0;i<BLK_SIZE;i++) {
buf[i] = '\0';
}
readcount = BLK_SIZE;
i = 0;
do {
readcount = fread(buf,1, BLK_SIZE, device);
fwrite(buf, 1, readcount, destfile);
i = readcount + i;
// fprintf(logfile,"%d read (%d)\n",i,readcount);
} while (readcount == BLK_SIZE);
fclose(destfile);
} else {
fprintf(logfile,"Can't open file '%s'\n",path);
}
}
void usage (void)
{
fprintf(stderr,"usage: answer -D device -d destination -s source\n");
exit(1);
}
const char * argWithName (const char* aName)
{
// '-D /dev/null -d 82834 -s 3305682834'
int i = 0;
int optionSeen = 0;
int startpos = 0;
for (i = 0; i < sizeof(tmpBuf);i++) {
tmpBuf[i] = '\0';
}
for (i = 0; i<strlen(argbuf);i++) {
if (optionSeen) {
for (;(i<strlen(argbuf) && (argbuf[i] != ' '));i++) {
}
i++;
startpos = i;
for (;(i<strlen(argbuf) && (argbuf[i] != ' '));i++) {
}
strncpy(tmpBuf,&argbuf[startpos], i-startpos);
return tmpBuf;
}
if (0 == strncmp(aName,&argbuf[i], strlen(aName))) {
optionSeen = 1;
}
}
usage();
return NULL;
}
int main (int argc, const char *argv[]) {
int i,pos = 0;
extern char *optarg;
extern int optind;
int bflag, ch;
char timeStr[50];
char outfileName[1024] = "";
char cmdStr[2048] = "";
time_t now;
now=time(NULL);
strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now));
logfile = fopen("/var/log/answer.log","a");
fprintf(logfile,"%s Started\n",timeStr);
pos=0;
for (i=1;i<argc;i++) {
sprintf(&argbuf[strlen(argbuf)],"%s ",argv[i]);
}
if (strlen(argbuf) > 2) {
argbuf[strlen(argbuf)-1] = '\0';
}
device = fopen(argWithName("-D"),"r+");
strcpy(destNum, argWithName("-d"));
strcpy(srcNum, argWithName("-s"));
fprintf(logfile,"device '%s'\n", argWithName("-D"));
fprintf(logfile,"srcNum '%s'\n", srcNum);
fprintf(logfile,"destNum '%s'\n", destNum);
if (device) {
strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now));
sprintf(outfileName,"/var/isdn/%s_%s_%s", timeStr, srcNum, destNum);
writeToPhone ("/usr/local/lib/isdn/msg.al");
readFromPhone (outfileName);
sprintf(cmdStr,"/bin/cat %s | %s | %s -t raw -U -b -r 8000 - -t .au %s.snd", outfileName, ALAWULAW, SOX, outfileName);
fprintf(logfile,"%s\n",cmdStr);
system(cmdStr);
unlink(outfileName);
fclose(device);
} else {
fprintf(logfile,"Can't open file '%s'\n",argWithName("-D"));
}
now=time(NULL);
strftime(timeStr,40,I4B_TIME_FORMAT,localtime(&now));
fprintf(logfile,"%s Done\n",timeStr);
fclose(logfile);
exit(0); // insure the process exit status is 0
return 0; // ...and make main fit the ANSI spec.
}

View File

@ -1,111 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# answer script for i4b isdnd
# ---------------------------
#
# last edit-date: [Fri May 25 15:21:05 2001]
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
VARDIR=/var/isdn
LIBDIR=/usr/local/lib/isdn
LOGFILE=/tmp/answer.log
NCALLFILE=$VARDIR/ncall
DATE=`date +%d%H`
progname=${0##*/}
set -- $@ # have to split argument string !!!
# ----------------------------------------------------------------------
usage ()
{
echo "usage: $progname -D device -d dest -s src"
exit 1
}
ncall ()
{
nfile=$1
[ -f $nfile ] && read n < $nfile || n=0
echo $(($n + 1)) > $nfile
printf "%.4d" $n
}
# ----------------------------------------------------------------------
while getopts "D:d:s:" opt
do
case $opt
in
D) DEVICE=$OPTARG ;;
d) DEST=$OPTARG ;;
s) SRC=$OPTARG ;;
esac
done
[ -c "$DEVICE" -a -n "$DEST" -a -n "$SRC" ] || usage;
shift $(($OPTIND - 1))
# ----------------------------------------------------------------------
NCALL=`ncall $NCALLFILE`
echo "$progname: device $DEVICE destination $DEST source $SRC " >>$LOGFILE
{
echo "Date: "`date`
echo "From: \"$SRC\""
echo "To: \"$DEST\""
echo
} >> $VARDIR/I.$NCALL.$DATE
# ----------------------------------------------------------------------
tellnumber ()
{
number=$1
digits=`echo $number | sed -e 's/\(.\)/\1 /g'`
files=""
for digit in $digits
do
files="$files $LIBDIR/$digit.al"
done
cat $files
}
# ----------------------------------------------------------------------
do_answer ()
{
[ -f $LIBDIR/beep.al ] && cat $LIBDIR/beep.al
[ -f $LIBDIR/msg.al ] && cat $LIBDIR/msg.al
[ -f $LIBDIR/beep.al ] && cat $LIBDIR/beep.al
} > $DEVICE
do_record ()
{
cat $DEVICE > $VARDIR/R.$NCALL.$DATE
}
do_tell ()
{
[ -f $LIBDIR/beep.al ] && cat $LIBDIR/beep.al
[ -f $LIBDIR/msg.al ] && cat $LIBDIR/msg.al
tellnumber $SRC
[ -f $LIBDIR/beep.al ] && cat $LIBDIR/beep.al
} > $DEVICE
# ----------------------------------------------------------------------
case $progname
in
answer) do_answer ;;
record) do_answer; do_record ;;
tell) do_tell ;;
esac

View File

@ -1,86 +0,0 @@
#!/bin/sh
#
# convert recorded message to WAV format, optionally send it via mail
#
# by: Stefan Herrmann <stefan@asterix.webaffairs.net>
# Date: Fr 22 Mai 1998 14:18:40 CEST
#
# $FreeBSD$
CAT=/bin/cat
RM=/bin/rm
SOX=/usr/local/bin/sox
ALAW2ULAW=/usr/local/bin/alaw2ulaw
MAIL=/usr/bin/mail
GZIP=/usr/bin/gzip
ZIP=/usr/local/bin/zip
UUENCODE=/usr/bin/uuencode
inputfile=""
outfilename=""
mailto=""
iF=0
oF=0
mF=0
set -- `getopt i:o:m: $*`
if test $? != 0
then
echo 'Usage: r2w -i <input file> -o <outfile name>.wav -m <email address>'
exit 1
fi
for i
do
case "$i"
in
-i)
inputfile=$2
iF=1
shift
shift
;;
-o)
outfilename=$2
oF=1
shift
shift
;;
-m)
mailto=$2
mF=1
shift
shift
;;
--)
shift
break
;;
esac
done
if [ $iF -eq 0 -o $oF -eq 0 ]
then
echo 'Usage: r2w -i <input file> -o <outfile name>.wav -m <email address>'
exit 1
fi
if [ $iF -eq 1 -a $oF -eq 1 ]
then
echo
echo "converting $inputfile to $outfilename.wav ..."
$CAT $inputfile | $ALAW2ULAW | $SOX -t raw -U -b -r 8000 - -t .wav $outfilename.wav
fi
if [ $iF -eq 1 -a $oF -eq 1 -a $mF -eq 1 ]
then
echo "... and sending it via email to $mailto ..."
$UUENCODE $outfilename.wav message.wav | $MAIL -s"new message $outfilename" $mailto && $RM $outfilename.wav
# only usefull when sending over the internet
#$GZIP -c $outfilename.wav | $UUENCODE message.zip | $MAIL -s"Nachricht vom ISDN Anrufbeantworter" $mailto && $RM $outfilename.wav
fi
echo "done."
echo

View File

@ -1,241 +0,0 @@
/*---------------------------------------------------------------------------*
*
* rsynth driver to output to
* - an open isdn4bsd telephone connection or
* - an output file or
* - the /dev/audio device
* ----------------------------------------------------------------
*
* tested with rsynth-2.0
*
* written by Hellmuth Michaelis (hm@kts.org)
*
* last edit-date: [Fri May 25 15:21:33 2001]
*
* $FreeBSD$
*
*---------------------------------------------------------------------------*/
#include <config.h>
#include <useconfig.h>
#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <ctype.h>
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/signal.h>
#include <sys/ioctl.h>
#include <i4b/i4b_tel_ioctl.h>
#include "proto.h"
#include "getargs.h"
#include "hplay.h"
#include "l2u.h"
#define SAMP_RATE 8000
long samp_rate = SAMP_RATE;
char *prog = "hplay";
static int use_audio = 1;
static int use_isdn = 0;
static int unit_no = 0;
static int audio_fd = -1;
static int isdn_fd = -1;
static int file_fd = -1;
char *audio_dev = "/dev/dsp";
char *isdn_dev = "/dev/i4btel";
static char *ulaw_file = NULL;
int
audio_init(int argc, char *argv[])
{
char dev[64];
int format = CVT_ALAW2ULAW;
prog = argv[0];
argc = getargs("FreeBSD audio/i4b/file output driver",argc, argv,
"a", NULL, &use_audio, "use /dev/audio (default)",
"i", NULL, &use_isdn, "use /dev/i4btel",
"u", "%d", &unit_no, "/dev/i4btel unit number (def = 0)",
"f", "", &ulaw_file, "u-law output to file",
NULL);
if(help_only)
return argc;
if(ulaw_file)
{
if(strcmp(ulaw_file, "-") == 0)
{
file_fd = 1; /* stdout */
}
else
{
file_fd = open(ulaw_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if(file_fd < 0)
fprintf(stderr, "ERROR: cannot open %s, error = %s\n", ulaw_file, strerror(errno));
}
}
if(use_isdn)
{
sprintf(dev, "%s%d", isdn_dev, unit_no);
if((isdn_fd = open(dev, O_WRONLY)) < 0)
{
fprintf(stderr, "ERROR: cannot open %s, error = %s\n", dev, strerror(errno));
}
if((ioctl(isdn_fd, I4B_TEL_SETAUDIOFMT, &format)) < 0)
{
fprintf(stderr, "ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno));
}
}
if(use_audio)
{
audio_fd = open(audio_dev, O_WRONLY | O_NDELAY);
if(audio_fd < 0)
{
fprintf(stderr, "ERROR: cannot open %s, error = %s\n", audio_dev, strerror(errno));
}
}
return argc;
}
void
audio_term()
{
int format = CVT_NONE;
if(isdn_fd >= 0)
{
if((ioctl(isdn_fd, I4B_TEL_SETAUDIOFMT, &format)) < 0)
{
fprintf(stderr, "ioctl I4B_TEL_SETAUDIOFMT failed: %s", strerror(errno));
}
close(isdn_fd);
isdn_fd = -1;
}
if(audio_fd >= 0)
{
#if 0
ioctl(audio_fd, SNDCTL_DSP_SYNC, &dummy);
#endif
close(audio_fd);
audio_fd = -1;
}
if(file_fd >= 0)
{
close(file_fd);
file_fd = -1;
}
}
void
audio_play(int n, short *data)
{
int ret;
unsigned char *p;
if (n > 0)
{
unsigned char *converted = (unsigned char *) malloc(n);
int i;
if(converted == NULL)
{
fprintf(stderr, "Could not allocate memory for conversion\n");
exit(3);
}
for (i = 0; i < n; i++)
{
converted[i] = short2ulaw(data[i]);
}
if (isdn_fd >= 0)
{
p = converted;
errno = 0;
while((ret = write(isdn_fd, p, n)) != n)
{
if(!errno)
{
p += ret;
if(p > (converted + n))
break;
}
else
{
fprintf(stderr, "write /dev/i4btel ERROR: ret (%d) != n (%d), error = %s\n", ret, n, strerror(errno));
break;
}
}
}
for (i = 0; i < n; i++)
converted[i] = (data[i] - 32768) / 256;
if(audio_fd >= 0)
{
p = converted;
errno = 0;
while((ret = write(audio_fd, p, n)) != n)
{
if(!errno)
{
p += ret;
if(p > (converted + n))
break;
}
else
{
fprintf(stderr, "write /dev/dsp ERROR: ret (%d) != n (%d), error = %s\n", ret, n, strerror(errno));
break;
}
}
}
if(file_fd >= 0)
{
int ret;
p = converted;
errno = 0;
while((ret = write(file_fd, p, n)) != n)
{
if(!errno)
{
p += ret;
if(p > (converted + n))
break;
}
else
{
fprintf(stderr, "write file ERROR: ret (%d) != n (%d), error = %s\n", ret, n, strerror(errno));
break;
}
}
}
free(converted);
}
}
/* EOF */

View File

@ -1,237 +0,0 @@
$FreeBSD$
PPP mit isdn4bsd
_________________________________________________________________
Version 1.01
Datum: 22.02.1999
Autor: [1]Dominik Brettnacher <domi@saargate.de>
- Anmerkungen und Verbesserungsvorschläge sind willkommen -
1. vorab
Dieser Text soll Neulingen helfen, sich mittels isdn4bsd und BSD
per PPP z.B. bei ihrem Provider einwählen zu können.
isdn4bsd bringt einiges an Dokumentation und
Konfigurationsbeispielen mit, jedoch ist es nicht immer leicht,
die entsprechenden Hinweise gut miteinander zu kombinieren, so daß
am Schluß das dabei herauskommt, was man haben möchte.
2. Wo bekomme ich isdn4bsd?
hier solle es keine allzu großen Probleme geben: isdn4bsd ist auf
dem FTP-Server [2]ftp.consol.de erhältlich. Man beachte dabei, daß
man sich nicht, wie üblich, als anonymous, sondern als isdn4bsd
einloggen muß. Benutzer von Browsern geben als Adresse
[3]ftp://isdn4bsd@ftp.consol.de und als Passwort ihre
eMail-Adresse an.
Wertvolle Informationen findet man in der Datei README.
3. Welche ISDN-Karten werden unterstützt?
Informationen darüber findet man in der README-Datei.
4. Ich benutze einen externen ISDN-Adapter - was nun?
Externe Adapter benötigen keine direkte Unterstützung, weil sie
über die serielle Schnittstelle angesteuert werden. Man kann also
das normale PPP benutzen. man ppp hilft hier sicher weiter.
5. isdn4bsd installieren
Wie man isdn4bsd installiert, steht in der Datei
FreeBSD/INSTALLATION (für NetBSD und OpenBSD analog). Eine
Beispielkonfiguration des Kernel sieht so aus:
[...]
#
# i4b passive ISDN cards support (isic - I4b Siemens Isdn Chipset driver)
# note that the ``options'' and ``device'' lines must BOTH be defined !
#
# Non-PnP Cards:
# --------------
#
# AVM A1 or AVM Fritz!Card
options "AVM_A1"
device isic0 at isa? port 0x300 net irq 15 flags 4 vector isicintr
#
# ISDN Protocol Stack
# -------------------
#
# Q.921 / layer 2 - i4b passive cards D channel handling
pseudo-device "i4bq921"
#
# Q.931 / layer 3 - i4b passive cards D channel handling
pseudo-device "i4bq931"
#
# layer 4 - i4b common passive and active card handling
pseudo-device "i4b"
#
# ISDN devices
# ------------
#
# userland driver to do ISDN tracing (for passive cards only)
pseudo-device "i4btrc" 4
#
# userland driver to control the whole thing
pseudo-device "i4bctl"
#
# userland driver for access to raw B channel
#pseudo-device "i4brbch" 4
#
# userland driver for telephony
#pseudo-device "i4btel" 2
#
# network driver for IP over raw HDLC ISDN
#pseudo-device "i4bipr" 4
# enable VJ header compression detection for ipr i/f
#options IPR_VJ
#
# network driver for sync PPP over ISDN
pseudo-device "i4bisppp" 1
pseudo-device sppp 1
#
#---------------------------------------------------------------------------
[...]
Nachdem ein neuer Kernel kompiliert und das System neugestartet
wurde, kann es weiter gehen.
6. Konfiguration isdnd.rc
Die für ISDN wichtigste Konfigurationsdatei ist
/etc/isdn/isdnd.rc. Mit man isdnd.rc erhält man Informationen über
die Einstellungen, die man dort vornehmen kann. Im Folgenden ein
Beispiel:
#==============================================================================
# SYSTEM section: isdnd global configuration parameters
#==============================================================================
system
# accounting
# ----------
acctall = on # generate info for everything
acctfile = /var/log/isdnd.acct # name & location of accounting file
useacctfile = yes # generate accouting info to file
# monitor
# -------
monitor-allowed = no # global switch: monitor on/off
monitor-port = 451 # default monitor TCP port
# Monitor rights are granted due to the most specific host/net spec, i.e. in
# the example below host 192.168.1.2 will have the rights specified on that
# line, even so it belongs to net 192.168.1.0/24 as well.
#
# A monitor specification may either be:
#
# - the name of a local (UNIX-domain) socket; this MUST start with a "/"
monitor = "/var/run/isdn-monitor"
monitor-access = fullcmd
monitor-access = channelstate, logevents
monitor-access = callin, callout
# ratesfile
# ---------
ratesfile = /etc/isdn/isdnd.rates # name & location of rates file
# regular expression pattern matching
# -----------------------------------
#regexpr = "connected.*KTS" # look for matches in log messages
#regprog = connectKTS # execute program when match is found
# realtime priority section
# -------------------------
rtprio = 25 # modify isdnd's process priority
###############################################################################
entry
name = lf
usrdevicename = isp
usrdeviceunit = 0
isdncontroller = 0
isdnchannel = -1
local-phone-incoming = 012345678
remote-phone-incoming = 876543210
local-phone-dialout = 012345678
remote-phone-dialout = 876543210
remdial-handling = first
dialin-reaction = accept
dialout-type = normal
b1protocol = hdlc
idletime-incoming = 240
idletime-outgoing = 30
earlyhangup = 5
ratetype = 0
unitlength = 90
unitlengthsrc = rate
dialretries = 3
dialrandincr = on
recoverytime = 25
connectprog = is-up
disconnectprog = is-down
Wichtig sind hier für den Neuling die vier *-phone-* Einträge, die
jeweils die lokale Rufnummer und die der Gegenstelle für ein- und
ausgehende Verbindungen angeben.
7. ISDN-Verbindungen aufbauen
um ISDN-Verbindungen aufzubauen, bedarf es einiger Befehle, die
beim Systemstart aufgerufen werden. Man kann sie zum Beispiel am
Ende von /etc/rc.local unterbringen. Hier gibt es aber durchaus
noch andere Lösungen:
[...]
# start ISDN
echo -n 'ppp / ISDN...'
echo -n 'isdnd...'
/usr/local/bin/isdnd
echo -n 'ifconfig...'
ifconfig isp0 link1 0.0.0.0 1.1.1.1 netmask 0xffffff00
ifconfig isp0 down
echo -n 'sppp...'
spppcontrol isp0 myauthproto=pap myauthname="xxx"
myauthsecret="xxx" hisauthproto=none
echo -n 'ifconfig...'
ifconfig isp0 up
echo -n 'setting routes...'
route add default -interface isp0
echo '.'
Ändern muß man hier eventuell die Zieladresse des Providers (im
Beispiel 1.1.1.1). Man bekommt diese entweder vom Provider, oder
aber man muß einen Versuch daransetzen, sie selbst herauszufinden.
Wie das funktioniert, steht in der Datei FAQ des isdn4bsd-Paketes.
Auch am Aufruf von spppcontrol (Vorsicht: spppcontrol bis
hisauthproto=none ist eine Zeile!) muß noch etwas umgestellt
werden:
+ myauthproto steht für das Authentifizierungsprotokoll.
Möglich sind pap oder chap.
+ myauthname ist der PPP-Benutzername.
+ myauthsecret ist das PPP-Kennwort.
Wenn man nun die Befehle in /etc/rc.local ausführt, kann man mit
einem ping auf eine beliebige Adresse außerhalb des lokalen Netzes
eine Verbindung öffnen. Sie wird automatisch nach einiger
Inaktivität (siehe isdnd.rc) wieder geschlossen.
8. Es funktioniert nicht - was kann ich tun?
Es gibt einige Möglichkeiten zur Fehlerdiagnose:
+ dmesg gibt Aufschluß darüber, ob die Karte richtig erkannt
wurde.
+ ifconfig (siehe rc.local) kann mit dem Parameter debug
aufgerufen werden und gibt dann einiges an Informationen aus.
+ die Nachrichten in /var/log/messages können außerdem
hilfreich sein
9. wer kann mir helfen?
+ die erste Adresse für ISDN-Probleme ist die Mailingliste
[4]freebsd-isdn@freebsd.org - man bestellt sie, indem man
eine Mail mit dem Text subscribe freebsd-isdn an
[5]majordomo@freebsd.org schickt.
+ auch die deutschsprachige Mailingliste kann hilfreich sein.
Mit einer Mail an [6]majordomo@de.freebsd.org, die im Text
subscribe de-bsd-questions enthält bestellt man sie.
_________________________________________________________________
References
1. mailto:domi@saargate.de
2. ftp://isdn4bsd@ftp.consol.de/
3. ftp://isdn4bsd@ftp.consol.de/
4. mailto:freebsd-isdn@freebsd.org
5. mailto:majordomo@freebsd.org
6. mailto:majordomo@de.freebsd.org

View File

@ -1,111 +0,0 @@
#!/bin/sh
# isdnctl
# Control the ISDN line based on usage
#
# This script can control the state of your ISDN line. It counts
# how many scripts/users currently use the ISDN line and uses
# "ifconfig down" if noone uses it any more.
# I use this script for cronjobs that fetch mail and news and run cvsup.
# If I'm still using the line, the script won't close the connection,
# but if not, it saves a lot of phone costs.
#
# ----------------------------------------------------------------------------
# "THE BEER-WARE LICENSE" (Revision 42, (c) Poul-Henning Kamp):
# Alexander Langer <alex@big.endian.de> wrote this file. As long as you retain
# this notice you can do whatever you want with this stuff. If we meet some
# day, and you think this stuff is worth it, you can buy me a beer in return.
#
# Alexander Langer
# ----------------------------------------------------------------------------
#
# $FreeBSD$
#
usage () {
echo "usage: $0 [-i interface] [-f /path/to/users.file] [up|down|show]"
}
# Defaults
INTERFACE=isp0
USERSFILE=
# Getopt stuff
args=`getopt i:f: $*`
if [ $? != 0 ]; then
usage
exit 2
fi
set -- $args
for i; do
case "$i" in
-i)
INTERFACE="$2"
shift; shift
;;
-f)
USERSFILE="$2"
shift; shift
;;
--)
shift
break
;;
esac
done
if [ -z $USERSFILE ]; then
USERSFILE=/var/run/isdn.users.$INTERFACE
fi
if [ -z $1 ]; then
usage
exit 2
fi
# Does Usersfile exist?
if [ ! -f $USERSFILE ]; then
# Try to create it
if ! /sbin/ifconfig $INTERFACE | grep "^$INTERFACE.*<UP," > /dev/null; then
echo "0" > $USERSFILE || exit 1
else
echo "1" > $USERSFILE || exit 1
fi
elif [ ! -w $USERSFILE ]; then
echo "Error: $USERSFILE not writeable!"
exit 1
fi
if ! /sbin/ifconfig $INTERFACE | grep "^$INTERFACE.*<UP," > /dev/null; then
if ! cat $USERSFILE | grep '^0$' > /dev/null ; then
echo "Interface down, removing number from file";
echo "0" > $USERSFILE
fi;
fi;
case "$1" in
show)
echo "`cat $USERSFILE` users online"
;;
up)
expr `cat $USERSFILE` + 1 > $USERSFILE
/sbin/ifconfig $INTERFACE up
echo "`cat $USERSFILE` users online"
;;
down)
if cat $USERSFILE | grep '^0$' > /dev/null ; then
echo "Already down"
exit 0
fi
expr `cat $USERSFILE` - 1 > $USERSFILE
if cat $USERSFILE | grep '^0$' > /dev/null ; then
echo "`cat $USERSFILE` users online, interface down"
/sbin/ifconfig $INTERFACE down
exit 0
fi
echo "`cat $USERSFILE` users online"
;;
esac
exit 0

View File

@ -1,137 +0,0 @@
#!/usr/bin/perl
#---------------------------------------------------------------------------
#
# Copyright (c) 1996, 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.
#
#---------------------------------------------------------------------------
#
# accounting report script for the isdnd daemon accounting info
# -------------------------------------------------------------
#
# last edit-date: [Fri May 25 15:28:20 2001]
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
# where the isdnd accounting file resides
$ACCT_FILE = "/var/log/isdnd.acct";
# the charge for a unit, currently 0,12 DM
$UNIT_PRICE = 0.12;
# open accounting file
open(IN, $ACCT_FILE) ||
die "ERROR, cannot open $ACCT_FILE !\n";
# set first thru flag
$first = 1;
# process file line by line
while (<IN>)
{
# remove ( and ) from length and bytecounts
tr/()//d;
# split line into pieces
($from_d, $from_h, $dash, $to_d, $to_h, $name, $units, $secs, $byte)
= split(/ /, $_);
# get starting date
if($first)
{
$from = "$from_d $from_h";
$first = 0;
}
# split bytecount
($inb, $outb) = split(/\//, $byte);
# process fields
$a_secs{$name} += $secs;
$a_calls{$name}++;
$a_units{$name} += $units;
$a_charge{$name} += $units * $UNIT_PRICE;
$a_inbytes{$name} += $inb;
$a_outbytes{$name} += $outb;
$a_bytes{$name} = $a_bytes{$name} + $inb + $outb;
}
# close accouting file
close(IN);
# write header
print "\n";
print " ISDN Accounting Report ($from -> $to_d $to_h)\n";
print " =====================================================================\n";
#write the sum for each interface/name
foreach $name (sort(keys %a_secs))
{
$o_secs = $a_secs{$name};
$gt_secs += $o_secs;
$o_calls = $a_calls{$name};
$gt_calls += $o_calls;
$o_units = $a_units{$name};
$gt_units += $o_units;
$o_charge = $a_charge{$name};
$gt_charge += $o_charge;
$o_inbytes = $a_inbytes{$name};
$gt_inbytes += $o_inbytes;
$o_outbytes = $a_outbytes{$name};
$gt_outbytes += $o_outbytes;
$o_bytes = $a_bytes{$name};
$gt_bytes += $o_bytes;
write;
}
$o_secs = $gt_secs;
$o_calls = $gt_calls;
$o_units = $gt_units;
$o_charge = $gt_charge;
$o_inbytes = $gt_inbytes;
$o_outbytes = $gt_outbytes;
$o_bytes = $gt_bytes;
$name = "Total";
print "======= ====== ===== ===== ======== ============ ============ ============\n";
write;
print "\n\n";
exit;
# top of page header
format top =
Name charge units calls secs inbytes outbytes bytes
------- ------ ----- ----- -------- ------------ ------------ ------------
.
# record template
format STDOUT =
@<<<<<< @##.## @#### @#### @####### @########### @########### @###########
$name, $o_charge, $o_units, $o_calls, $o_secs, $o_inbytes, $o_outbytes, $o_bytes
.
# EOF

View File

@ -1,258 +0,0 @@
#!/usr/bin/perl
#
#ich habe zwei vielleicht n?tzliche Erweiterungen an isdn_pacct
#gemacht:
#
# 1) Man kann den Namen der Accounting-Datei angeben. Ich
# habe Accounting-Files nach Telekom-Rechnung aufgeteilt
# und kann diese so sehr sch?n nachvollziehen.
#
# 2) Die Abrechnung wird nach Einheitenl?ngen aufgelistet.
# Leider wird zur Zeit immer Nahzone verwendet (isdnd.rates
# wird ausgelesen), und Feiertage stehen als erstes auf
# der TODO-Liste. Wenn man dieses Feature durch einen
# Switch anschaltet, kann man es sogar unauff?llig in die
# Distribution aufnehmen.
#
# Mir hilft diese Abrechnung, an mir zu arbeite und mehr
# Tests und Zug?nge nachts durchzuf?hren... Aber die meisten
# Einheiten werden immer noch im 90s-Takt verbraucht :-(
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
#
# Copyright (c) 1994, 1996 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. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by Hellmuth Michaelis
# 4. 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.
#
#---------------------------------------------------------------------------
#
# accounting script for the isdn daemon accounting info
# -----------------------------------------------------
#
# last edit-date: [Fri May 25 15:22:26 2001]
#
# -hm my first perl program :-)
# -hm sorting the output
# -hm adding grand total
#
#---------------------------------------------------------------------------
sub wday {
local ($y, $m, $d) = @_;
local ($nday, @mon);
@mon = (0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337);
# M A M J J A S O N D J F
if ($m > 2) {
$m -= 3;
} else {
$m += 9;
$y--;
}
if ($y < 1600) {
return -1;
}
$y -= 1600;
$nday = $y * 365 + $mon[$m] + $d +
int($y / 4) - int($y / 100) + int($y / 400);
($nday + 2) % 7;
}
# where the isdnd accounting file resides
if ($#ARGV == 0) {
$ACCT_FILE = $ARGV[0];
} else {
$ACCT_FILE = "/var/log/isdnd.acct";
}
# $PERIOD_FILE = "/usr/local/etc/isdnd.periods";
# # read periods that need to be separately listed
# if (open(IN, $PERIOD_FILE)) {
# while (<IN>) {
# chop;
# ($start, $end) = split(/ /);
# push(@p_start, $start);
# push(@p_end, $end);
# }
# close(IN);
# }
$RATES_FILE = "/etc/isdn/isdnd.rates";
if (open(IN, $RATES_FILE)) {
while(<IN>) {
chop;
if (! /^ra0/) {
next;
}
($ra0, $day, $rest) = split(/[ \t]+/, $_, 3);
@periods = split(/[ \t]+/, $rest);
foreach $period (@periods) {
($h_start, $m_start, $h_end, $m_end, $secs) =
$period =~ /(.+)\.(.+)-(.+)\.(.+):(.+)/;
for ($h = int($h_start); $h < $h_end; $h++) {
$secs{$day, $h} = $secs;
}
}
}
close(IN);
}
# the charge for a unit, currently 0,12 DM
$UNIT_PRICE = 0.12;
# open accounting file
open(IN, $ACCT_FILE) ||
die "ERROR, cannot open $ACCT_FILE !\n";
# set first thru flag
$first = 1;
# process file line by line
while (<IN>)
{
# remove ( and ) from length and bytecounts
tr/()//d;
# split line into pieces
($from_d, $from_h, $dash, $to_d, $to_h, $name, $units, $secs, $byte)
= split(/ /, $_);
# get starting date
if($first)
{
$from = "$from_d $from_h";
$first = 0;
}
# split bytecount
($inb, $outb) = split(/\//, $byte);
# if user wants to account time periods, put this to the right
# slot(s)
($hour, $minute, $second) = split(/:/, $from_h);
($day, $mon, $year) = split(/\./, $from_d);
$day = &wday('19' . $year, $mon, $day);
if ($secs{$day, int($hour)}) {
$secs = $secs{$day, int($hour)};
# process fields
$p_secs{$name, $secs} += $secs;
$p_calls{$name, $secs}++;
$p_units{$name, $secs} += $units;
$p_charge{$name, $secs} += $units * $UNIT_PRICE;
$p_inbytes{$name, $secs} += $inb;
$p_outbytes{$name, $secs} += $outb;
$p_bytes{$name, $secs} = $p_bytes{$name, $secs} + $inb + $outb;
}
# process fields
$a_secs{$name} += $secs;
$a_calls{$name}++;
$a_units{$name} += $units;
$a_charge{$name} += $units * $UNIT_PRICE;
$a_inbytes{$name} += $inb;
$a_outbytes{$name} += $outb;
$a_bytes{$name} = $a_bytes{$name} + $inb + $outb;
}
# close accouting file
close(IN);
# write header
print "\n";
print " ISDN Accounting Report ($from -> $to_d $to_h)\n";
print " =================================================================\n";
#write the sum for each interface/name
foreach $n (sort(keys %a_secs))
{
$o_secs = $a_secs{$n};
$gt_secs += $o_secs;
$o_calls = $a_calls{$n};
$gt_calls += $o_calls;
$o_units = $a_units{$n};
$gt_units += $o_units;
$o_charge = $a_charge{$n};
$gt_charge += $o_charge;
$o_inbytes = $a_inbytes{$n};
$gt_inbytes += $o_inbytes;
$o_outbytes = $a_outbytes{$n};
$gt_outbytes += $o_outbytes;
$o_bytes = $a_bytes{$n};
$gt_bytes = $o_bytes;
$name = $n;
write;
foreach $i (keys %p_secs) {
($nam, $secs) = split(/$;/, $i);
if ($nam ne $n) {
next;
}
$o_secs = $p_secs{$i};
$o_calls = $p_calls{$i};
$o_units = $p_units{$i};
$o_charge = $p_charge{$i};
$o_inbytes = $p_inbytes{$i};
$o_outbytes = $p_outbytes{$i};
$o_bytes = $p_bytes{$i};
$name = sprintf(' %5.1fs', $secs / 10);
write;
}
}
$o_secs = $gt_secs;
$o_calls = $gt_calls;
$o_units = $gt_units;
$o_charge = $gt_charge;
$o_inbytes = $gt_inbytes;
$o_outbytes = $gt_outbytes;
$o_bytes = $gt_bytes;
$name = "Total";
print "======= ====== ===== ===== ======== ============ ============ ============\n";
write;
print "\n\n";
exit;
# top of page header
format top =
Name charge units calls secs inbytes outbytes bytes
------- ------ ----- ----- -------- ------------ ------------ ------------
.
# record template
format STDOUT =
@<<<<<< @##.## @#### @#### @####### @########### @########### @###########
$name, $o_charge, $o_units, $o_calls, $o_secs, $o_inbytes, $o_outbytes, $o_bytes
.
# EOF

View File

@ -1,197 +0,0 @@
/*
* Copyright (c) 1999 Michael Reifenberger (Michael@Reifenberger.com).
* 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.
*
*---------------------------------------------------------------------------
*
* i4btemux - record while playing
* ===============================
*
* $FreeBSD$
*
*----------------------------------------------------------------------------*/
#include<stdio.h>
#include<stdarg.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<sys/param.h>
#include<i4b/i4b_tel_ioctl.h>
// DECL DEFS
#define BUFLEN 2048
#define MAXBLOCKS_DEFAULT 23
// DECL VARS
int ibytes = 0;
int obytes = 0;
int maxbytes = (BUFLEN * MAXBLOCKS_DEFAULT);
int xfd = -1, xact = 0;
int ifd = -1, iact = 0;
int ofd = -1;
FILE *dfp = NULL;
int opt_dbg = 0;
int maxfd = 0;
fd_set set;
struct timeval timeout;
char nambuf[PATH_MAX];
int ch;
// DECL FUNC
void ifd_hdlr( void);
void xfd_hdlr( void);
void usage( void);
void dbg( char *fmt, ... );
// DEF FUNC
int main (int argc, char **argv) {
int dummy;
int x = -1;
dfp = stderr;
while( ( ch = getopt( argc, argv, "x:i:o:b:D:")) != -1 ){
switch(ch){
case 'b':
x = atoi(optarg);
maxbytes = x * BUFLEN;
break;
case 'i':
ifd = open( optarg, O_RDONLY );
iact = 1;
break;
case 'o':
ofd = open( optarg, O_WRONLY|O_TRUNC|O_CREAT );
break;
case 'x':
xfd = open( optarg, O_RDWR );
xact = 1;
break;
case 'D':
opt_dbg = 1;
if( (dfp = fopen( optarg, "w" )) < 0) {
dfp = stderr;
dbg("Err for opening %s\n", optarg);
exit(1);
}
break;
case '?':
default:
usage();
break;
}
}
if( ( xfd < 0 ) || ( ifd < 0 ) || ( ofd < 0 ) ) {
dbg("Err opening one ore more Files.\n");
dbg("xfd: %d, ifd: %d, ofd: %d\n", xfd, ifd, ofd );
usage();
}
if((x = ioctl(xfd, I4B_TEL_EMPTYINPUTQUEUE, &dummy)) < 0){
dbg("Err I4B_TEL_EMPTYINPUTQUEUE\n");
}
while( (iact == 1) || ( (obytes < maxbytes) && (xact == 1) ) ){
FD_ZERO( &set);
if( iact == 1){
FD_SET( ifd, &set);
if( ifd > maxfd)
maxfd = ifd;
dbg("FSET ifd\n");
}
if( xact == 1){
FD_SET( xfd, &set);
if( xfd > maxfd)
maxfd = xfd;
dbg("FSET xfd\n");
}
x=select( maxfd+1, &set, NULL, NULL, NULL);
if( x > 0){
if( (iact == 1) && FD_ISSET( ifd, &set) ){
ifd_hdlr();
}
if( (xact == 1) && FD_ISSET( xfd, &set) ){
xfd_hdlr();
}
}
}
dbg("exit0\n");
return(0);
}
void ifd_hdlr( void) {
int x;
unsigned char buf[BUFLEN];
x = read( ifd, buf, BUFLEN);
dbg("ifd read %d bytes\n", x);
if( x > 0 ){
write( xfd, buf, x);
ibytes += x;
dbg("xfd %d bytes written to %d\n", x, ibytes);
} else {
iact = 0;
}
}
void xfd_hdlr( void) {
int x;
unsigned char buf[BUFLEN];
x = read( xfd, buf, BUFLEN);
dbg("xfd read %d bytes\n", x);
if( x > 0){
write( ofd, buf, x);
obytes += x;
dbg("ofd %d bytes written to %d\n", x, obytes);
} else {
xact = 0;
}
}
void usage( void) {
fprintf(dfp, "isdntelmux V.1\n");
fprintf(dfp, "usage: isdntelmux -x device -i ifile -o ofile [-b blocks]\n");
exit(1);
}
void dbg( char *fmt, ... ) {
va_list ap;
if( opt_dbg == 0 )
return;
va_start( ap, fmt );
vfprintf( dfp, fmt, ap);
va_end(ap);
}

View File

@ -1,53 +0,0 @@
#!/bin/sh
#---------------------------------------------------------------------------
#
# collect callout and callback statistics for the isp0 i/f
#
# enable budget callout and callback restrictions and file
# rotation in the isdnd.rc file.
#
# last edit-date: [Fri May 25 15:22:45 2001]
#
# $FreeBSD$
#
#---------------------------------------------------------------------------
#
#---------------------------------------------------------------------------
# this is the entry for mrtg in mrtg.cfg
#---------------------------------------------------------------------------
# Target[ernie.cstat.isp0]: `/usr/local/etc/mrtg/util/mrtg-isp0.sh`
# MaxBytes[ernie.cstat.isp0]: 10
# AbsMax[ernie.cstat.isp0]: 200
# Title[ernie.cstat.isp0]: isp0: callouts / callbacks
# PageTop[ernie.cstat.isp0]: <H1> isp0: callouts /callbacks </H1>
# Options[ernie.cstat.isp0]: gauge, nopercent, integer
# YLegend[ernie.cstat.isp0]: co / cb
# ShortLegend[ernie.cstat.isp0]: n
# Legend1[ernie.cstat.isp0]: callouts
# Legend2[ernie.cstat.isp0]: callbacks
# LegendI[ernie.cstat.isp0]: callouts:
# LegendO[ernie.cstat.isp0]: callbacks:
# WithPeak[ernie.cstat.isp0]: ymwd
#
#---------------------------------------------------------------------------
# this is the shell script run by mrtg
#---------------------------------------------------------------------------
if [ -r /var/log/isdn/callouts.isp0 ]
then
cat /var/log/isdn/callouts.isp0 | awk '{print $3}'
else
echo 0
fi
if [ -r /var/log/isdn/callbacks.isp0 ]
then
cat /var/log/isdn/callbacks.isp0 | awk '{print $3}'
else
echo 0
fi
uptime | cut -c 12-18
uname -nsr
exit 0

View File

@ -1,19 +0,0 @@
# $FreeBSD$
PROG = i4brunppp
SRCS = i4brunppp.c
MAN = 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} -m ${BINMODE} -o ${BINOWN} -g ${BINGRP} \
${.CURDIR}/i4brunppp ${RUNPPPDEST}
.include <bsd.prog.mk>

View File

@ -1,18 +0,0 @@
$FreeBSD$
BEWARE: HIGHLY EXPERIMENTAL!
---------------------------
This program is used in conjunction with an 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.

View File

@ -1,65 +0,0 @@
#------------------------------------------------------------------------------
#
# 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 #########################################################################

View File

@ -1,51 +0,0 @@
.\"
.\" 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
.Os
.Sh NAME
.Nm i4brunppp
.Nd interface i4b to userland ppp in server mode
.Sh DESCRIPTION
The
.Nm
utility
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.
.Sh FILES
.Bl -tag -width ".Pa /dev/i4brbchX"
.It Pa /dev/i4brbchX
.El
.Sh AUTHORS
The
.Nm
utility and this manpage were written by
.An Hellmuth Michaelis Aq hm@FreeBSD.org .

View File

@ -1,224 +0,0 @@
/*
* 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 an 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 <i4b/i4b_ioctl.h>
#include <i4b/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--)
if (i != 2)
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 */

View File

@ -1,13 +0,0 @@
# $FreeBSD$
PROG= v21modem
NO_MAN=
DPADD= ${LIBUTIL} ${LIBM}
LDADD= -lutil -lm
CFLAGS+= -g -Wall
.if !defined(BSDTYPE)
BSDTYPE!=uname
.endif
.include <bsd.prog.mk>

View File

@ -1,50 +0,0 @@
V.21 Modem for ISDN4BSD.
INTRODUCTION:
The modem is implemented in software and is rather simple minded.
It works with my Telebit TB2500 and Zyxel 2864I modems.
There are plenty of knobs and handles which can be adjusted and I have
no real idea what to set them to for best all-round performance.
The carrier detect timer may be a bit short tempered, and this is
probably why the dialing modem needs to be told to talk V.21 up
front. If this code were mode tolerant of loss of carrier auto
negotiation might work.
When you get carrier ("CONNECT 300"), you must press a key before the
login banner gets printed. See the comments in "input_byte" why this
is.
THE KERNEL PART:
Implementes a crude "send these tones" facility, but it is enough to
take most of the real-time worries out of doing FSK modulation in
software. If suitably extended, the code could also be used to
send DTMF tones and other similar signals.
INSTALLATION:
The program is started from /etc/isdn/isdnd.rc:
entry
name = I4BTEL
usrdevicename = tel
usrdeviceunit = 0
isdncontroller = 0
isdnchannel = -1
local-phone-incoming = 2934812934
remote-phone-incoming = *
dialin-reaction = answer
answerprog = v21modem
b1protocol = raw
idletime-incoming = 5
Poul-Henning (phk@freebsd.org)
19991212
$FreeBSD$

View File

@ -1,394 +0,0 @@
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <phk@FreeBSD.org> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* This is a V.21 modem for ISDN4BSD.
*
* $FreeBSD$
*/
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <err.h>
#include <sys/ioccom.h>
#include <errno.h>
#include <syslog.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <libutil.h>
#include <i4b/i4b_tel_ioctl.h>
static void create_session(void);
static void input_byte(int byte, int stopbit);
static void sample(int vol, int* tones);
static void tonedetect(unsigned char *ptr, int count);
static void uart(int bit);
static int dcd; /* Carrier on ? */
static int ptyfd = -1; /* PTY filedescriptor */
static int telfd = -1; /* I4BTEL filedescriptor */
/*
* Alaw to Linear [-32767..32767] conversion
*/
static int a2l[256] = { -5504, -5248, -6016, -5760, -4480, -4224,
-4992, -4736, -7552, -7296, -8064, -7808, -6528, -6272, -7040,
-6784, -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
-3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392, -22016,
-20992, -24064, -23040, -17920, -16896, -19968, -18944, -30208,
-29184, -32256, -31232, -26112, -25088, -28160, -27136, -11008,
-10496, -12032, -11520, -8960, -8448, -9984, -9472, -15104, -14592,
-16128, -15616, -13056, -12544, -14080, -13568, -344, -328, -376,
-360, -280, -264, -312, -296, -472, -456, -504, -488, -408, -392,
-440, -424, -88, -72, -120, -104, -24, -8, -56, -40, -216, -200,
-248, -232, -152, -136, -184, -168, -1376, -1312, -1504, -1440,
-1120, -1056, -1248, -1184, -1888, -1824, -2016, -1952, -1632,
-1568, -1760, -1696, -688, -656, -752, -720, -560, -528, -624,
-592, -944, -912, -1008, -976, -816, -784, -880, -848, 5504, 5248,
6016, 5760, 4480, 4224, 4992, 4736, 7552, 7296, 8064, 7808, 6528,
6272, 7040, 6784, 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368,
3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392, 22016, 20992, 24064,
23040, 17920, 16896, 19968, 18944, 30208, 29184, 32256, 31232,
26112, 25088, 28160, 27136, 11008, 10496, 12032, 11520, 8960, 8448,
9984, 9472, 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
344, 328, 376, 360, 280, 264, 312, 296, 472, 456, 504, 488, 408,
392, 440, 424, 88, 72, 120, 104, 24, 8, 56, 40, 216, 200, 248, 232,
152, 136, 184, 168, 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184,
1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696, 688, 656, 752, 720,
560, 528, 624, 592, 944, 912, 1008, 976, 816, 784, 880, 848 };
/*
* A High Q Tone detector
*/
#define NTONES 2 /* Number of tones to detect */
#define SCALE 4096 /* Scaling factor */
#define EXPAVG 14 /* Exponential Average factor */
#define POLERAD 3885 /* pole_radius ^ 2 * SCALE */
/* Table of "-cos(2 * PI * frequency / sample_rate) * SCALE" */
static int p[NTONES] = {
-2941, /* 980 Hz */
-2460 /* 1180 Hz */
};
static void
tonedetect(unsigned char *ptr, int count)
{
int i, j;
int y;
int c, d, f, n;
static int k[NTONES], h[NTONES];
static int tones[NTONES];
static int amplitude;
for (i = 0; i < count; i++) {
y = a2l[*ptr++];
if (y > 0)
amplitude += (y - amplitude) / EXPAVG;
else
amplitude += (-y - amplitude) / EXPAVG;
for(j = 0; j < NTONES; j++) {
c = (POLERAD * (y - k[j])) / SCALE;
d = y + c;
f = (p[j] * (d - h[j])) / SCALE;
n = y - k[j] - c;
if (n < 0)
n = -n;
k[j] = h[j] + f;
h[j] = f + d;
tones[j] += (n - tones[j]) / EXPAVG;
}
sample(amplitude, tones);
}
}
/*
* Taste each sample, detect (loss off) carrier, and feed uart
*/
#define NCARRIER 1000 /* Samples of carrier for detection */
static void
sample(int vol, int* tones)
{
static int carrier;
if ((tones[0] + tones[1]) > vol * 3/2) { /* XXX */
if (carrier < NCARRIER)
carrier ++;
} else {
if (carrier > 0)
carrier --;
}
if (!dcd && carrier > NCARRIER / 2) {
syslog(LOG_ERR, "CARRIER ON");
dcd = 1;
} else if (dcd && carrier < NCARRIER / 2) {
syslog(LOG_ERR, "CARRIER OFF");
dcd = 0;
}
if (!dcd)
return;
if (tones[0] > tones[1]) {
uart(1);
} else {
uart(0);
}
}
/*
* A UART in software
*/
#define BITCENTER 13 /* Middle of a bit: 8000/300/2 */
static int bitsample[] = { /* table of sampling points */
BITCENTER,
BITCENTER + 27,
BITCENTER + 54,
BITCENTER + 80,
BITCENTER + 107,
BITCENTER + 134,
BITCENTER + 160,
BITCENTER + 187,
BITCENTER + 214,
BITCENTER + 240
};
static void
uart(int bit)
{
static int n, v, j;
if (n == 0 && bit == 1)
return; /* Waiting for start bit */
if (n == 0) {
j = 0; /* Begin start bit */
v = 0;
n++;
} else if (j == 0 && bit && n > bitsample[j]) {
n = 0; /* Gone by middle of start bit */
} else if (n > bitsample[j]) {
j++; /* Sample point */
if (j == 10) {
n = 0;
input_byte(v, bit);
} else {
v = v / 2 + 128 * bit;
n++;
}
} else {
n++;
}
}
/*
* Send a byte using kenrnel tone generation support
*/
static void
output_byte(int val)
{
struct i4b_tel_tones tt;
int i;
i = 0;
tt.frequency[i] = 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 1 ? 1650 : 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 2 ? 1650 : 1850; tt.duration[i++] = 26;
tt.frequency[i] = val & 4 ? 1650 : 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 8 ? 1650 : 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 16 ? 1650 : 1850; tt.duration[i++] = 26;
tt.frequency[i] = val & 32 ? 1650 : 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 64 ? 1650 : 1850; tt.duration[i++] = 27;
tt.frequency[i] = val & 128 ? 1650 : 1850; tt.duration[i++] = 26;
tt.frequency[i] = 1650; tt.duration[i++] = 27;
tt.frequency[i] = 1650; tt.duration[i++] = 0;
i = ioctl(telfd, I4B_TEL_TONES, &tt);
if (i != 0 && errno != EAGAIN) {
syslog(LOG_ERR, "%d: *** %d/%d ***", __LINE__, i, errno);
exit(0);
}
}
/*
* Create Session
*/
static void
create_session(void)
{
int i;
char buf[100];
i = forkpty(&ptyfd, buf, 0, 0);
if (i == 0) {
execl("/usr/libexec/getty", "getty", "std.300", "-",
(char *)NULL);
syslog(LOG_ERR, "exec getty %d", errno);
exit(2);
} else if (i < 0) {
syslog(LOG_ERR, "forkpty failed %d", errno);
exit(2);
}
syslog(LOG_ERR, "pty %s", buf);
}
static void
input_byte(int byte, int stopbit)
{
u_char c;
int i;
static int first;
static u_char buf[80];
if (!stopbit)
return;
c = byte;
/*
* I have no idea why, but my TB2500 modem sends a sequence of
* 28 bytes after carrier is established at the link level, but
* before it is acceptted at the logical level.
*
* [16100214010201060100000000ff0201020301080402400010034510]
*
* Unfortunately this contains a ^D which kills getty.
* The following code swallows this sequence, assuming that it
* is always the same length and always start with 0x16.
*
*/
if (first == 0 && c == 0x16) {
sprintf(buf, "%02x", c);
first = 27;
return;
} else if (first == 0) {
first = -1;
dcd = 2;
return;
}
if (first > 0) {
sprintf(buf + strlen(buf), "%02x", c);
first--;
if (!first) {
syslog(LOG_NOTICE, "Got magic [%s]", buf);
*buf = 0;
}
return;
}
if (ptyfd != -1 && dcd) {
i = write(ptyfd, &c, 1);
if (i != 1 && errno != EAGAIN) {
syslog(LOG_ERR, "%d: *** %d/%d ***", __LINE__, i, errno);
exit(0);
}
}
}
int
main(int argc, char **argv)
{
char *device = "/dev/tel0";
u_char ibuf[2048];
int ii, io;
int i, maxfd;
struct i4b_tel_tones tt;
fd_set rfd, wfd, efd;
openlog("v21modem", LOG_PID, LOG_DAEMON);
/* Find our device name */
for (i = 0; i < argc; i++)
if (!strcmp(argv[i], "-D"))
device = argv[i + 1];
telfd = open(device, O_RDWR, 0);
if (telfd < 0) {
syslog(LOG_ERR, "open %s: %m", device);
exit (0);
}
syslog(LOG_NOTICE, "Running on %s", device);
/* Output V.25 tone and carrier */
i = 0;
tt.frequency[i] = 0; tt.duration[i++] = 1000;
tt.frequency[i] = 2100; tt.duration[i++] = 2*8000;
tt.frequency[i] = 0; tt.duration[i++] = 400;
tt.frequency[i] = 1650; tt.duration[i++] = 1;
tt.frequency[i] = 1650; tt.duration[i++] = 0;
tt.frequency[i] = 0; tt.duration[i++] = 0;
i = ioctl(telfd, I4B_TEL_TONES, &tt);
if (i < 0) {
syslog(LOG_ERR, "hangup");
exit(0);
}
create_session();
/* Wait for carrier */
do {
ii = read(telfd, ibuf, sizeof ibuf);
tonedetect(ibuf, ii);
} while (ii > 0 && dcd != 2);
if (ii < 0) {
syslog(LOG_ERR, "hangup");
exit(0);
}
maxfd = ptyfd;
if (telfd > maxfd)
maxfd = telfd;
maxfd += 1;
do {
FD_ZERO(&rfd);
FD_SET(telfd, &rfd);
FD_SET(ptyfd, &rfd);
FD_ZERO(&wfd);
FD_ZERO(&efd);
FD_SET(telfd, &efd);
FD_SET(ptyfd, &efd);
i = select(maxfd, &rfd, &wfd, &efd, NULL);
if (FD_ISSET(telfd, &rfd)) {
ii = read(telfd, ibuf, sizeof ibuf);
if (ii > 0)
tonedetect(ibuf, ii);
else
syslog(LOG_ERR, "hangup");
}
if (FD_ISSET(ptyfd, &rfd)) {
io = read(ptyfd, ibuf, 1);
if (io == 1)
output_byte(*ibuf);
else if (io == 0) {
syslog(LOG_ERR, "Session EOF");
exit(0);
}
}
if (FD_ISSET(telfd, &efd)) {
syslog(LOG_ERR, "Exception TELFD");
exit (0);
}
if (FD_ISSET(ptyfd, &efd)) {
syslog(LOG_ERR, "Exception PTYFD");
exit (0);
}
} while (dcd);
syslog(LOG_ERR, "Carrier Lost");
exit(0);
}

View File

@ -1,69 +0,0 @@
# example of a configuration file for the isdn daemon & user-ppp
#
# $FreeBSD$
# SYSTEM section: isdnd global configuration parameters
system
# accounting
acctall = on # generate info for everything
acctfile = /var/log/isdnd.acct # name & location of accounting file
useacctfile = yes # generate accouting info to file
isdntime = on
monitor-allowed = no # global switch: monitor on/off
# User-ppp example
entry
name = userppp0
usrdevicename = rbch
usrdeviceunit = 0
isdncontroller = 0
isdnchannel = -1
local-phone-incoming = 1234567
remote-phone-incoming = *
local-phone-dialout = 1234567 # This *MUST* be your local number
remote-phone-dialout = 1234567 # ppp(8) will override this
remdial-handling = first
dialin-reaction = ignore
dialout-type = normal
b1protocol = hdlc
idletime-incoming = 900 # Should be larger than ppp's timeout
idletime-outgoing = 900 # Should be larger than ppp's timeout
unitlength = 0
unitlengthsrc = conf
dialretries = 1
dialrandincr = on
recoverytime = 1 # Should be smaller than ppp's redial
usedown = off
downtries = 2
downtime = 30
entry
name = userppp1
usrdevicename = rbch
usrdeviceunit = 1
isdncontroller = 0
isdnchannel = -1
local-phone-incoming = 1234567
remote-phone-incoming = *
local-phone-dialout = 1234567 # This *MUST* be your local number
remote-phone-dialout = 1234567 # ppp(8) will override this
remdial-handling = first
dialin-reaction = accept
dialout-type = normal
b1protocol = hdlc
idletime-incoming = 900 # Should be larger than ppp's timeout
idletime-outgoing = 900 # Should be larger than ppp's timeout
unitlength = 0
unitlengthsrc = conf
dialretries = 1
dialrandincr = on
recoverytime = 1 # Should be smaller than ppp's redial
usedown = off
downtries = 2
downtime = 30

View File

@ -1,98 +0,0 @@
#
# Copyright (c) 1997 Brian Somers <brian@Awfulhak.org>
# 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$
# This is an example ppp profile for bringing up a multilink ppp connection
# over ISDN. It needs at least version 0.83.0 of the i4b code. An example
# isdnd configuration file is also supplied in this directory (isdnd.rc)
#
# NOTE: This is for use with i4b-supported ISDN cards. If you have an
# external Terminal Adapter (TA) plugged into a serial port on your
# machine, you should use the TA example in ppp.conf.sample.
#
isdn:
set phone 12345678 # Replace this with your ISPs phone number
set authname "somename" # Replace these with your login name & password.
set authkey "somepasswd" # This profile assumes you're using PAP or CHAP.
set enddisc mac # Assuming you have a LAN
enable lqr echo
set reconnect 3 5
set redial 3 10
set lqrperiod 45
disable pred1 deflate mppe
deny pred1 deflate mppe
set timeout 60 300 # The minimum charge period is 5 minutes, so don't
# hangup before then
# We have no chat scripts in the ISDN world (yet)
set dial
set login
set logout
set hangup
set device /dev/i4brbch0 /dev/i4brbch1 # Raw B-channel devices
set speed sync # ISDN is synchronous
enable dns # Ask the peer what to put in resolv.conf
# Take a wild guess at an IP number and let the other side decide
set ifaddr 172.16.0.1/0 212.0.0.0/0 0 0
add! default hisaddr
set mrru 1500 # Multilink mode please
set mru 1504 # Room for the MP header
clone 1,2 # Two new links
link deflink rm # And get rid of the original one
link * set mode auto # Automatically manage the second link
set autoload 10 80 30 # Down @10% usage, up at 80%, 30s sample
set server /var/run/ppp/ppp-isdn "" 0177 # The diagnostic port (-rw-------)
#
# When phone calls become free (say 0:00 Saturday morning), we may want
# this in crontab (``crontab -l'', not /etc/crontab):
#
# 1 0 0 0 6 /usr/sbin/pppctl /var/run/ppp/ppp-isdn link \* set mode ddial
#
# and when we have to pay again (say 23:59 Sunday night), we may want
# this:
#
# 54 23 0 0 0 /usr/sbin/pppctl /var/run/ppp/ppp-isdn link \* set mode auto
#
# And of course just in case of a weekend reboot, add
# /usr/local/etc/rc.d/ppp.sh:
#
# #! /bin/sh
# [ ."$1" != .start ] && exit 0
# case `date +%w` in
# 6|0) /usr/sbin/pppctl /var/run/ppp/ppp-isdn link \* set mode ddial;;
# esac

View File

@ -672,8 +672,6 @@ callback-server-client-decides:
# It's worth increasing your MTU and MRU slightly in multi-link mode to
# prevent full packets from being fragmented.
#
# See ppp.conf.isdn for an example of how to do multi-link isdn.
#
# You can now ``dial'' specific links, or even dial all links at the
# same time. The `dial' command may also be prefixed with a specific
# link that should do the dialing.

View File

@ -1,323 +0,0 @@
# $FreeBSD$
begin 644 0.al
M5=75U=?7UM?4U=;3U-37U55555545%15U=7555175U965U15U=34U-?7U];6
MT=?555175%555575U=75U=55U=37U]?7U]37U]34U5555=55555455145516
M4U)75%77U];0T-#1T=#1UM155%=75U=55555U=37U]?7U5555U=65E=75E?5
MU];1UM?6UM?4U5545E975U74U]?4U]?4U%555%15U=75U534T=75UU55U-35
MU=74U555U=37U-?4U%575E965E=75-75U-34U=74U]?7U]34U5545=34U-75
MU-75U=75U=74U5545U175575U-37UM;0T-5655915U175=34U-34U];7U]?4
MU-3555575E%15E965%75U];1UM?7U-35U-74557555145%15U=75U575U-34
MU=75U=34U555U5545%16U-=5U=55U=75U-75U-35U-37U]?6UM?7U]34U=54
M5U9145965E=75U145575U-?7U-34U-37UM;6U]?4U-35U-?7U-5555175E96
M5U965E164=35U-'0T-;6UM?7U575U-?6U];6U]545%965U14557555145=75
MU555U=75U-34U=55U=35U=75U-?4U=555575557555755555U=35U=;0U-?7
M55545U175U975U=55=74UM'6U-755=75U-;1T=;1UM?4U-75551745%15E15
MU=37U]37U-5555545%75U-37U];7U]34555555574U-75U=45=76T='0T-'1
MU]555%155575U=75555555545%145=34U]34U5555%145%15U-37UM;7U-55
M5%74U]'0T]/0UM?55%1745!04%;7UM74U]36UM?4U5175%145575U-555515
M5%=45U=75%145%74U-37UM'1T-#0T='1UM?455=645975%1455175%75U=75
MU=36UM?7UM;6UU%05%=75514U=75U555U=555%145-74U-34U]'1T='1T='6
MU-555U%04%!15E=4U=34U-34U-?7U]35U-37U]?4U=75U];1UM?455=645%6
MU=175555U555U=74U5545U975U15U=37UM;7U];6U]3555555U=5U=55U=35
MU=35U5755535U-?7U-75U-74U=55U=75U=35U-37U];7U]565]155=?4U=35
MU=75U555U57555175%545U145U=45=75U-37T=#0T=;7U%545%145U15U=37
MU]37U]155%=75U965U35U=37UM'1T=#7U]+0U=34U=75U5545U9145%65U=4
M55=65U145=75U=;1T=;1T=#3TM/1U]545U965U=65E145U145%=45=37U]?1
MT='1UM?4U-34U-555%=675-64%945=?3T]#0T]/1U]35555555555%15U=54
M5U=75U975U=45%75U-?6UM;6U]555%35U-?6UM;4U-755%=75%155%55U515
M55145-70T-?0T=?4U]?555175%555%755=74U-37U]?5U55555175U=55=74
MU-?6U]?4U5175U1455555=74U-75U-34U-5555555=75U-?4U]?6UU=5UU55
M551555545%555=55U=35U=75U5555-75U=?7U];7U]35U5145U=455175U14
M5=34U]?4U-74U55555755=75U=37U]355%145%17U]565%14U-35U=75U=35
MU=77UM;7U=74U]34U=74U]?7U=7555175E965U=4U=?7UM;6UM34U-355=75
MU-34U-3555=45U9145975-7555=15=;4U]?7U-?7U]?7U]?7U]?4U5545514
M5%145%965U35U=555=77U];6UM'6U]?4U-?7U-5555=645%65%545%145554
M5=74T=#2TM/1T=+65%5645%04%965U=55575U]?7U]35U=77U];6UM;6UM;7
MU51645!045%65U15U=555574UM;1T-#1T='6U];7U-555=555%=65U145516
M4U955E155%75U-?6T='0T='6U]7555555575U]?4U=545E=75U145%145%15
MU=36UM34U-34U-37U-34U]35U55555145%145U175U155-33UM74U-31UM?7
MU-34U-34U-35U-34U5=65E965U15U=55U=74U-34U-34U-555555U=555=75
MU=77U];6U]155%15U=34U575U-?6UM;3T574U%1555175E=45%965%34U-37
MU-5555175E975-77T=/2T];4U=575U=5U-?7U=55U=7555545%175E74U-?6
MUM;7U]34U]575E965U35T=15U%555555U=75U-34U]?6UM?4U-755575U=35
MU-555%=65U=45%15U=37U]'7U-755%1555545%175U=45=77U]?4U=555=77
MU]?7UM57U-?5U-75U=77U]?7U-?7U]355=545%555%965U145%74U-;7UM;7
MU-34U-34UM;7U5165E%145975%155=75555555545%15U=36T=#6T-W1U];7
MU-555%=45%1555=75%555%175U14U-?1T]+2T-'7U-?45%914%975%545555
MU=75U-745%175U75U-?7UM;1T='6UM?555175E=14E=55U145%74U];1T=#1
MU]34U-35U5545%755575U]35U51645!15U75U-;6U];7U]34U5555%75U=75
MU-34U=555%155%54551455555]7155555U35U=34U];6T='7U]37U-755%=4
M5U=5U535U-?5U=55U=36U-74UM14U%51U%115%=7U-;4U%=75%=5U=77U=75
MU=?7UM#3T]/0U5%45U!04597UU?55576U-'5U=75U]34U-555E=15E=5U-?6
MU]'1UM;5555555=55%!7TU'05%335-Y6T%%5U5;445565U17U5=5U=31U]'1
MW=34U%575%=75U15U-34U-37U]?7U=35U-?6T=;7U5545E%145965U34U]34
MU-34U%555U=45=77UM'0T-;7U-555%965U=75-75U-35U%=1U-34T=#1T=;6
MU]555U145%=65E=75U35U5545555U=55U=74U];1T=#0T=?4U-35U=555517
M5E965U175575U-?45=75U=34U];6T=;6TMS0T-955E904%!045975=75U=75
M55555%55U=77T='1UM'6U]?5U5145U=75%1455145%15U=?6U]34U=75U=34
MU];1T=;6U]?7U5575E9275%04515U-;1T='0T=?7U-555575U-755575U=75
MU5575E=65U=45U=45=37T=#0T='6UM;7U]555%=65U=75U15U=345=75U=77
MU]?7U-'05=755-74U-1555145U965U155=34U]?7UM355=74U-75U=74U-?6
MU]?455545U=45515U=75U=555U145%75U=34U];1T='1UM;7U]?445-745%7
M5%7555555=75U-35U=7555555%15U=37U]37U];6T-'6U]355%9645!04%!6
M5-36T=;7U]155575U=?6UM'6UM?4U5145U145U34UE145%975555U=37UM'6
MU];1T=?455965U=75U=5U=55U=75U555U=?7UM;6UM=55U=75U15U=34U]35
MU=74U]35U575U-34U5575U=45%!0U575UM'0T-;6UM;4U=555=75U=37U-55
M5U=65E965U=65U145=36T-/0T]#6UM545U145%155=74U=35U=5555145%75
MU-74U=37U]75UM95U=5455175U=75U35U]'1T-#6U]35U=74U-34U5545U=6
M5U965E945=74U];6UM;6UM?7UM;6U]?4U]?7U]5555145%175%175%545%10
M4%55U=?4U]?7U]?7U]?7U]?4U-34U-34U=755=7555155%965%145%145574
MU-;6UM;1UM?4U555U=555555U-34U5545U915E=4U=?7UM+3U]'7U-34U=55
M5%=645%15E975%15U=34U]?7U]?4U-?1T=#0T-?4U=55U5545%=65E965U=4
M5%74U-?6T=;7U]?7U-5555175U74U-;1U=76U5145U965U74U]?7U]?55517
M5U=75E145=34UM;1T-'0UM?4U5145%55U5555%915U35U]?7UM35U=75U=37
MU]?7UM;7U]34U-545E;455955%155%145%15U-?7U]?4U5555%75U=75U=55
M5=75U=555575U=74U-37U-?7U];6U]15555455555=74U=37U-545E=75%75
MU-37UE35UM35U575U=755575U=7555145%15U-?7U]155%175%555=55U=37
MU-35U=77U]?5U-75U5575U155=34U5555%75U=74U-36UM'1UM;6W=!5U%57
M5E9645975E155=75U5555=55U=74U]?4U-745=75U=37U-555U9645%65%74
MU]'1T='1U]35U=75U=555=75U=35U5545%14U=575=145-55U-?7U]?4U]34
MU-34U5555%175U15U=34U-55557555555%145=74U5155%155574U-?6U]34
MU575U=36U]?4U-555U=75U=65='1U]'6U]34U=37U-555%145%=5U=755555
M555555555555U=36T='1T=;4U55555545%145%145%145%555=75U5555=74
MU-37U]'1T=;75]37U=7555545%175U74U-37U]?4U=75U=545U965U35U-?5
MU=74U-34U-35U=75U-?6U]74U=75U=75U=5455545%15U=?6U]37U%545E36
M55=55U=555555=75U-37U];6U]?6U]'1UM;4U5545%915U=4U=34U-345515
MU-?4U-35U575U575U=74U5545U%045975U15U575U-37U537T=;3T]+2T]#6
MU]1555=75E975%145%545U914%-045=5U-?6T=#0T-;7U5545%74UM'6T='7
MU]34U575553555175E145%55U=3555?5UU5755175%75U]?4U=35U-34U]?4
MU=74U-?6T=;1UM?6U]35U-755%=65E=75E!04%!65]77UM'1UM?7U-?55=74
MUM;1T='1U]155%=65U!?4%=15%75UM'1T=;7U-?7U]?7U]?4U5545%155%14
M5U914%!05E14U-;0T=;7UM?6U]?6U]?7U]?7UM'7U-145E%045145554U=75
MU517U-'45=34U=145U=15E=65575U-?6U];4U-;4U-555=77U];6U];7U-75
MU=3455575E904%%05E965E34U=;7U-75U=745=75U=;6T=#0UM'45-355=34
MU=34U=35U=75U-35U-35U-35U=755%=65U=65E945U1555175%75U5555%74
MU]?6T-#1T]'7UM'1T=#1T='6U]3555145%965E775%=55U145U145U165E14
MU=555%145-74U-?1UM;6U]35U=?6U];6U]#3T='6U-;3T=;1U]7555=65E96
M5E965E975U=14U)24U-75%745576T=;6T='1UM'4U-/1UM'1U-?7U]'1T-#1
MUM?1UU5555575=34U=?6UM35U5=14UU=7%U275Q>7UQ24%;5U=74U576UM?2
MW=W<W]_?W-S9WMS0T-?7U%34UM?4U5545%155%145%175U=75U%14%)275Q?
M7UY?7UQ24U!65U54U='<W]C:Q<7:V]G;V-[9W]+2T-'6U-?455=745!145U>
M5E17551645%075)=7%E86UM86%A97%!15E71T]S>WL7$QL''QL3$Q,3%V=_2
MW=W155=14%Q?7U]<4E!65E95U-7455=14UQ>7EE:1$1:7U)97U-35U=4U];0
MW=G:QL3&QL'&P<':V][<W]_2T=5545-34EU?65Y24%=5U-'2W=/0UE514EA$
M1T=$15I;65A>7UQ34%=5U]/<WMK&P,'%V,3%Q<?%W-S2W=+3TM;4U5=17%A8
M6%A87%-6U=;0TM_?W-W=T=507UI$1D9!0$!'15A<4U94U=30W=_>Q<3%Q\3%
MQL?%V-[>V=[?W-/7U]'645)>6UI'1$1;4%34T=/=W-O8V=_=UE127EA;6D1'
M1%I:6%A97EQ24%37T-+=WMG8V\?;VMK9WM_?W-G9V-G?W-W0UU514UQ?65E>
M65Y<7%)5U]'<V=O8W]_=T%1=6$1'1$1$1%A>7UQ24E)05E95UM'1TMS>V=C;
MVL7:V=G>WMC?W=S?W-/2T-'45U!04UE;6UM;65Q05-77T][;V][;V-%44%A%
M1$%"34%:6%]<7U97U=?6T-/<WMG%Q<7$V][<W]W3T]/0T-#0T-;7U]35U-14
M5%%04U)>6%Y?75)1U];7TMC:Q,39W]W15E];1$!"0T!%6%A?7%-4U574U]/<
MW-_>V=G9WM_=W]_=W=[?W-+3T]#7U-=55U%24%-34%-<75)145)05=;4TMC;
MQ<38W]+74%E$04%#0D!%6UE<45165=77UM+=W]_?V=O9W-_0TM+<W=[?TMW<
MW-W0UM;455=65U%265E?7%]>7U155M'?WMC:V=_<UEU9149'1T=$6%A975]2
M5U55U]W<V=C<V<?:W]O>W='7U=32T]/2W-G>W='1UM=55%%04%U?6%A94E)7
MU]76W-[;Q-K?W]W54U]%1D9`0$186EA>7E]?4E!5T=#8V<3&P<?;WMW>T]#6
MT-S<W=+=TM#7T-#1U55645936%E>7%U=4-'75=S9V\3%W-S?55Q91D-#3$Q"
M6EE;6%M24535T-S?W]G%P,;:V-S<T-'45-#3T-32T]W?T=70U]7555=15E)3
M4EU?4%35T-33Q=K&QMC=W-%?1$=-3TIU2$%$05E>4-305=7<T]/9V<;9Q-_8
MQ]G>U=W6T]#2WM+<WMS0W=54T%5=7UQ=7T1<7%U3UMW3TMO!P\+$VMK<55]!
M27=W<7!U24]"6%U4T-#2Q<#8Q=O$V=G;T=G2U]/>W]K%WMK8V=+!W\7%U=90
M4%M>0D5:1D-:5=%55M['R\["P<3:4UI-2W9R?GQU2'5"75?3UM[8S<3;S<?,
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
M=$95QO;YY.;G^?3874!)2DY"1EA=5=S'S_7W],[:UUQ&3$E.3TQ!6E]1T-O"
MR,G/S,?8W-/445-5TL?)]/7`TEQ/<']X>'Y]<71)1U+2S?#_^/C\]LS9U%U8
M1T-,3DQ!6U#7WL;-SL["Q=U5745!0T)`1UE1T=O#SLK*R,+%WM1<75%4TMC:
MV==?3'=Q<'%W2TU&15E3U]C,]/'P\<K`WU5=6T5%6E]35];=V-K$QL38W=53
M6T9!04=94E'4TM_9VL7%Q=K9T]116$=%7=?3Q,O)P=Q30W5W=G1/1%]05=?1
MW-O'P\#$V=!67%A;7E)6U-#<W][?W]W0T=?5U=34U-36T]S<WM_<T5127U#6
MV=O:Q=U16$AP<'!Q2D125]S9W=G:Q=K;V-[=T=575E=5U]#9Q<3%V=+1UM?5
MU=345U%26%I>7UQ1U5515U!<75!05M?0T]S?TM+=TM+=TM#0T==555145-75
MU=37U]154U-64U)04U!04U)24U!05E=5U=31T]W?V=O;V-G>W=/6U]1555=6
M5%145U=64%-34%!05E77UM;7U]1445-<7UQ=4E)15-77T-+<V=C%VMK&VMW3
MU5%34U)24U;4UM#3W=+3UE1375E:6EI;65]<75!65]31T-+2W=W3T]/2TM/3
MTM+2T-'7U];6U]?7U]3555=64%!15E965E9145%65E-6U]37T=;7U-55U=35
M5535U]'3TMW=W=+0T=?5U55455555%=5U]+05-166%Y>1UI645?3TM3=W-;1
MW-/0W=/4U-115E=75]?4U];1T=/2W-/7U5914%U=4E-15U15U-34U5545=75
MU-?7U];6U]35U=5445!045945=76T-/2TMW2TM/1UM?4U-7555145%965E=7
M5E905E=75U=75%1345145%74U]'3W=S<W-+2T]#0T-'6U-55U5165E%04%%6
M45%15E965U1555155%77U]?7U]'1UM?7UM?4U-75U-755=74U=5555=45U=6
M5];4U='7U]355%155%755575U=34U=555554U=74U]34U]34U-?7U]?4U%54
M5U965E=45%75U-75U-75U=74U-34U-34U-155%15U-?7U=355E355=74U-34
MU-?7U];6UM?7U%555U=65E145%75U=74U-?6UM;7U]555%=65%75U=?7U]?4
MU5545%=45%55U=37U]?4U-1555145U145-30U%74U=75U=75U-34U]?7U-15
M55145-75U=74U=37UM;455545U=45=74U]?7U-74U5145%145%155%=75U54
M5=76UM;6U]?4U-545%155%%5UM37UM;6U]?6UM155%=75U35U-?7U]155U=6
M5E965U=5U-;6UM;6UM?4U5145=5555545%155555U=75U]?55535U=75U-?7
MU];7U-77T]?4UU545U904U-65E145575U-?4U]31T-/0UM?7U]?4U]?4U-55
M55164%!045%65U74U];1T-'6U]555%55U-;6T=;7UM37UU575E%045-<4U=7
MU-;1T=;7T='1T=?7U]7555145U=45%55U=34U-74U%555555U=75U-34U-?4
MU5555%75U-34U%555574U-75U-7455545U=45%14U-/7UM#6U-3555145554
M5%15555555555575U-37U-355555U-34U-34U]?7U-3555145E=75=74U-75
MU-37U-75U-35U-?7U=37U]35U=544%145U155%55U555U=74U-37U-34U-55
MU=35U-35U=7455145%175575U575U-37U-74U=74U-37U]?7U5145U975%14
M5575U-37UM?7U-'2U-7555555=75U=75U5155=755=555=74U]?7U-555%=7
M5U94U5555=75U=34U=35U-75U=37U]?7U]34U5555%55U-?7U-35U%555=74
M5%;4U]37UM?7U%545U=75%145%75U=74U5555%=75E175%75UM'0T]#3T=?5
M5%=45%145=5555545=75U=75U5555%155%15U=55U-?6T=;3W-'6UU575E%1
M45965U145=75U-34U]?6UM?7U-155575U-34U]37U]155%=645%15U155555
M5555U=34U];7U]37U];6U-35U5145%75U%=1U=54U=34UM'0T-#6U-545U=6
M5E965U35U-?7U-545%=75E=45=36UM'1T='1T=?7U]555%=45%=65U145=15
M5%5555555575U=75U=75UM#4UM'6T='6U]3555175E975%=75%555=75U-35
MU=75U-55U=74U]37T=#0UM?4U5575E%15E975U=5U=34U-755555U=37UM;7
MU]?7U]164U=645145%74U-355=75U=75U-34U=75U-34U-37U];6U]155%=1
M4%!65%74T=/0UM?455545U74U]?7U]?7U5=14%!65E155=75U=155]375%55
M5U75U-;1T]#1UM?4U=545U=45%=5U=34U=34U=35U575U=34U-?4U-555514
M5%=45=74UM'1UM#1T=?455=65E965E975E=45=775571U];0T-#0T-;6U%54
M5U%04U-345945=34U-75U=75U-?6U];1T-#0T=?5551555=45%=45U=75U14
M5575U-74U-35U-35U-?7UM;6U-36UE155%%34U!15E15U-;1UM'1UM?7U=74
MU-34U-7555=75U145=55U5555=755515U=755=76T=;4U=77UM;4U=75U514
MU=?7U%555%755%-055915-74U%755=77U-?7T='1U]34U%1445!15U35U=55
M5%=65U77UM;6T-#1U]?7U-34U-34U-15U=7555575%555%=65U145U=45574
MTM_3TM#7U%165E%65U74U5545-75U555U=37U]37UM;7U%555=74U]355554
M5%=7555555555575U-;0T]#6U-34U575U]?4U-55U=34U5515E575]74U];7
MU5555=74U-555%975%75U=75U=?4U]?4U-34U5555%=45%145%55U-?6UM?5
MU-34U-35U5555=74U];7U-545%175%575]?75-35U=34U-34U=74U]?7U-55
MU=74U=75U=75557555545U=4U=75U-75U555U=37U%145%145=74U-555%74
MU]?4U-3555=75-75U=3545?7U=76UM155555U=37UM;7U-75U=34U=545%=6
M5E975%75U=37U-35U%55U-;6UM?7U-34T=5045%25=!55]73W59'7M_3U=3=
MVU!1WL#16D52U%-3T=O?65_<W=U67U-36E]75=/=Q\#=U='<VM)65M576$19
M4U-65E555%=745)7T-O&Q=G?T55445=75U?1UU174%35W=-75U-34%M1UM54
MT=_0UU=75%=5T-+65U?4U-71T]W<U%=75U%=4U3555!35%755%35T=S6T=?4
MUM35U=;755935E?4T=?55E?7UU545E%45575U]37T]#<V=+1U-?4U5%=7UQ3
M5U51U-?7U%36UM145=54U556U=77TM#6T]W2UM'6U59=4%%07%-34-77T-+1
MT='4U%74U59555155%555%77T]=14535U]'55=3455965]74U=34U]?5U=54
MU=555=36U-34U-;7UM?6T='755555U=555145%555%1455145%=5U-#3T-#2
MT]?455545U=6U=;45E=45U145%545U34U-77U]34U-355E?5UM15U-355%=4
M5U901G=)6E+7W-O'QL#`P<;$VMC>W-+1U]555U914%-34E)24E)34U-34%%1
M5E=45%75U=34U-?7U]?7UM?7U]?7U]?4U-34U-75U=75U=75U=5555555=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
:____________________________________
`
end

View File

@ -1,323 +0,0 @@
# $FreeBSD$
begin 644 1.al
M55=75%755=545U1455145575U-37UM'6U];6UM155%175U975U74U-35U-77
MU]75U=75U=565=;5U-'1U]345%=75U15U=75U]?7U]545E975%75U]?55555
M55555=74U]355%74U-74U-37U-34U]'6U]355=34U=35U5555574U]355=55
M5]?6U=555%=75U975-74U]?4U%575U=75%755575U=?6T='6UM;6U]555516
M5E965U15U-?7UM;5U5555=7555555=55U=34U];6U]?45%745U355=75U=74
MU-355=7555165U=4U=?6UM?55=75U-55U-?6T=?55%914594U=?6T='1UM?7
MU5145U145=34U-?7U-74U=555E=4U=755E-65%74UM'1UM;4U=355=55U=55
MU=35U-155U%65U155=55U-?7T=#1T=;7U-74UM?7U55645%05E=55515U555
M55555=34U-?6UM?6U]31T=75U5145=555555U=34U-355=77UM?4551645%1
M45=45=77T=W<W=/1UU545%=75U965U15U-?4U-545%=75-555555U-;6UM35
M5%5555=6U-34U];1T=?55575U-?4U5545E%65U15U-34U-;7UM'6U]1555=6
M5E=455555U145=75U-55U=75U=555=77UM;6UM3555175U145U%15=15U]'1
MT]+3T-'6U-555%755%=75E=75=?4U-555=75U5175U=5U]#3TM+1U%555%91
M4U)345=5U]?6UM;55555557555555=77UM;6UM175E5555545%55U-74UM'1
MU];1T-#655=75%75U55645945=37U51145%7U=?7U-3455755=545=355=;5
MT=;4UM36U%155-76UM;455165M745=355%145-77U];1T==75E=65U165U94
MU=76T='1UM=45U=655145%35U]36UM'1T='6U]35U=34U-35U=755%964596
M5U145555U=345U37U-?1U]74U-35U=545E=4U=37U]?4U=74U-36UU545U96
M5555U555U-36T='1UM34U5175%74U]?555165E915E94U=74U-?6T-#0T='0
MT=34U5145E!15U=455145=77U]?55%145=36UM?7U]35U=74U5545-75U554
M5%1555575E=45-77T=#3T]#6U]155%=45%15U=555U=555!05E!05E34UM'1
MUM?6T='0T]#0T=?7U%545%=65U54U=555%%145!15E=45=36T-/0T-'7UU54
M5575U=755=755=34U-7555904-157U#7U-;3T-#=W='4U-36T==45U975U17
M5E145%155%72U%'15%?45%15U-15UM;7T=;5U=5555=65E=4U=34U-37U]75
MU55555555=37U];7U]=45=545%1455545%35U-?7U];7U]35U5545%17U575
MU=7555555=555%35U]355%965E=5U-;1UM?55=75U]155%14U=34U]34U=74
MU-?4U-'55U=75U=45574U=36UM;7U=555575U-37UM?7U]3455575U%04%%1
M5E=45%75U-;0T-+=TM#1U]175E965U74U-555%145%1455555=755-76U-'6
MT=#0UM155%965E=555555=74U-34U-555=5555=45%75U-?6UM;7U-?55%14
M55165E35U-?7U]?7U]145U965E=45=37T=;6U];2T-?755145U145%145-75
MU5545U=75U=45-74UM#3T-+?TE54UM;4UM534E965E9075!4U=75U-37T-#1
MUM?4U];6U]555%75U-7555=64U]045'5UM'3T=;6U]?4U=3455545%74U]35
MU55555145]77U]?4U555U=75U=74UM'1UM?4U5145%145U=75E=45%35U554
M5%175U=55574T]'1T]#0T-#1U]555%=65E975=?7U-74U-755%175U15U-37
MU]'1UM;7U-34U-7555575E=75U14U=34U]5555545%=65]75U-?6U]?6UM14
MU];4U]35U5555=5555575U1555545U975=75U-37UM?6U]?7U-75U=34U=54
M5%=75E965U145%34U];6T='6T=?4UM?7U-555575U-145=575U545%175U=7
M5%75U=36UM?4U-35U-35U=75U-?7U]?45%964%-34%%65]76T-#0T]+3T-'7
MU-555U94U=75U-35U-755%=65E%15E=65M?1U]'0T-#3TM/1U]145E975U=4
M5%555%=75E965E=5U=74U-?1T=#0T-'1UM?55%=75U145%175=74UM155U=7
M5U75U=37U-74U=37U-'0U]?7U]545E9645=45U=75=36T=;6U]37U-755555
MU=75U]?7U]355%=75U145%15U=?7U];6U]545U=5U=?7U]?4U-75U-74UM;6
MU%5445U34U-65%14U=37T=;1T=?7UM;6U]37UM?4U-75U-355%1745%14%-0
M4%%7U=;0TM/0UM?55574U]34U-34U=55U=75U-3555=65E965E%5T=36T-#3
MT=;55514U55555145=34U];455545U975%145=75U-?0T]/2T];455114597
M5%75U=3455755%=645%04595U=;1T='1T=#0T-?4UM35U=75U-75U-34U516
M5E975U145575U-545%=55-37U];1T='0T=;7U5=14%!34%%15E75U-36T=;6
MU]37U-35U-75U=75U=74U554U=565U145U155=76T-#1T='6UM?7U%145U14
M5%74U-3555545E-34U%75-36T-#0T-#0T=?4U-7555175U15U-;1UM?55U96
M5U155%145%=15M74U]'0T='7U%55U=?6UM355575U-34U%545U965E%15E15
MU-;0T]#1U]?45=75U555U=7555145E975%555=37U]'1T='1U]75U-?7U-;6
M5%1645=45%=145975%35U]37U-55U=?1T='6U]1555145575U574U-75U=55
MU=555575U=555%755=74U=35U555U=?7UM;6U]?4U]355E%74%!65U=15U15
MU-?1T=;7U%555=36T=/0UM34U-?4U%575E%145975%545U75UM/3T]#1U]?7
MUM145U=75U=75U75U-?4U%545U945U?4U-76T='1T=;4U5755=74U5545%=7
M5U=75575U=745=75U-37U]'6T=;7U]34U%575E=4U=#=W-+74%E'0$=95]/8
MQ,7?T55645?7TM[>W-5645U35M76T-/0U%9275)24%95U=355U=45=?1T]/0
MUM?4U-37UM;1T=?45%=65E965U74U5575E975-77T=;4U=555%15U=?7U]?6
MT=?4UM515E%15E74U]'3TM/0UM;7U-155U=65U=55%145575551745%15E96
M5U35U-37UM?5U=34U-34U-?6T='3T]/0T-#0T='7U-34U575U-575E=65E90
M4UU?7%Q<7U]?4U95U]'0T]/3T]+2TMW=W=/3T]+=W]G;Q<3$Q<3%V-W65E]&
M27=P<W)P=TI#6%-4UM/=WMC:Q<?$V]C>W=W<V,;`P,+#PLW,SO3V\?;TP-5#
M<V5@8F)C9GAP3UE5W=O`R?3V\?'WR\+;TE504E)1U-S$S<CU]<[`Q-K;V\7%
MV-)61G1\>F1G9'I\=T%=U][:Q<'-PL_.R<G/P,39W-+3T-/<V,7'QL?:VMO;
MVL3$VMS57DQQ?F5D9V5Y<TA:5]S'S,G*]<K*R<_"P<39TM?55=76W=G%Q,?&
MQL?$Q\;'VMG24$%U<GME9&1Z?W%.6E;=Q,_U]/?W]_7)P\79T]?55%34T][%
MQL##S<_,R?7*R<+85$9V>6=@8V-A9']W1E??P,CW\?/S\_#VRL+$W-;55EU1
M5=?2V<7!P,;'QL;#S,_.PL766'5_9&!C8V!G>79&5=K.]_#R\O/S]O3(P]K=
MU%%?65]35=/>V\?#PLW`Q]O=UU1075Y96UI'04),24M)0T)"1UI94E;5UM+9
MV]K:V]G?W][9V=_?WM[9V=[>WMS<W-W3T]'7U5115E?4W=K`PL+&TE-#=GYE
M9&1E>'-+6]3:S_3Q\/'WRLS`Q=_0UU104596U-/<V,7'P<#!Q-O=UU=375!7
MUM_%P<':TE%&='QZ9V9G97YV0538SO?P\_#Q]_7)S,/`Q-O?T512645'0$!'
M6UQ5TMC!S<_/S<;;W-!675Y%1%Y0UMO,RO7TR,371'9Y9&%@861Y<4)1WLSW
M\_W___WS\?7.Q]S44UM#3TA)3$-:4=/:S?7W]_3,VU5:1%Y5Q?#DX.+BY_=2
M?VP7$Q(2$!1M?EWUY>/O[N[LX^?[_//V]<O,Q-U61W1R>&1G9'I_=T95Q_?R
M__[_\_3-V-1214!,3TQ-0$5;7U)04534UM/=W]C:Q<78W-/45E967%]34534
MUM'3TM+0UM?55%904%%65E=45=555%%145!05E37T-+2W=W2T]#1UM;7UM35
M55=75U965E=65U=645%045%75=74UM#3T]/3UM7755=45U975U15U]'0W=S=
MTM/3T-/1U]755%=145-34%945%75U-?7U-34U]?6T-W?W]W1U5!>1$U*='%Q
M<7=/15;>PO7P_?W]\O'*P]C=UUU:04](0E+?]?O@[._LX?+0<6,5$1(=$A$5
M8W#4\>?MZ>CHZ>_MX^;D^?+UVU%)?F%O:A04%6]G=-+]X.F5E>OLYO/?0G]F
M;6-D=-_EZ):3DY;N_T1C%A\8&A@<$6Y^5_'G[>_N[.+@X>#@X^WBX.3QUW%@
M:Q80$Q$58W'9^^R5EY>4Z./[R-1"<'AD9V9G9V1E?W=;Q/_CZI:0D);KY]YY
M:!`?&!@>$A=M<=CZ[)66D9:7E>[@_LQ2=F1B;FAK;F-Z3M_]X>[JE97H[>7*
M479D;&L4%Q<58';&[)&?FYJ>D.+:9Q8?&@0%&!T484G:_N/NZI27EI&1EI3I
MY\%W8A<2'Q\=$6]]VN?KEI"0D93OY_35=65B:!06%6!PPNF0GH6;G)3_=A0>
M!08&!!@3;W#<_^#NZ.N5EY:0DI.0E^SP2FP0'AH:&!)J>]SDZ9>6EI>5Z>/E
M]MU#?V!I%!81:'G0Z9^%AH&$G>%Q$00``@T`!!QH=\_G[.N5E9>1DYR9F9^3
MZ/=\%!X$!P<:$FYWRN.5EY:6E.KNXN3]P5I_8VH6$!,3:$;XD(:#C8R&G/QN
M&`,.#@X"!!UI2L+DXNB7D9V8A82$A9^4\WX6&P<!!@4<:W;*X^J7EI:7E.KI
MXN7U4WEM%1$3$A`6:5SODH&.CHZ"F>9N!0T*-0L)`!D5=O3BE)&?FH6'@8>$
MF)?Y?!<;!@`!!QX4?/?OEY.2DI"7ZN+X]5-P9&UK%104%6YA>GS%E)F&B8N.
MC)GQ%@(+-S$U"``1>?Z4DYF8FH>'AX:%G.K'8QP$`0,&&!%^_>F0G9V3E^OA
M]]M:?'IF8V!F>')+7UM&6DUP9$SKG82*BXR-E&8'-#<P,0X`$_'MD)R2GIR9
MAH>'AY#X91P'`P`$'F#(X):2D)"5Z>'UP$E@;144;'I6_>#HXOC(<6!L:FYN
M:5R3A8*WM8R!W1\),3$P-P88?^CJG)R8AH>#C8>>XFP8`PT#!A9T\):2DY*1
ME^K@^4AO%Q\>%FW2[)"?DY3Z<6(4$!$6$Q7I@8*QLHN,_P8T/CPR,`1@VYN8
MA(>%C8*!@IU+'0\U-0P7P9B,@H&8X]ID9'AH:18;'Q-CY9V&@(>?_&(0&Q@<
M$!45:6@7[;2SOJ>]AV,])"`A/35@B8FUBH.-A("/D\T<-ST_,`?AM+Z\LH[X
M'`P/#087%A9F9?J>@(Z"A>`1!`$&$V;$_%1=?F36S.6&L[.WLY``-R4[.S-2
MY8.QC8V%Z)-P6&<,#`@*&-F-L+"RB>46"S0)`V/;E9F5D)3GZ<%U;!P6%W_B
M[Y;H5'$5%6!DQ4!O0(^\L[FS%0LD(20Z3H^+N+>>[A-C$19'`P\-"16>M+^R
MMIL$"#`W!'J9AX2;Y/G`<=UF%1$<8D+NGI;KV&EH%&Q[?T5G%6N8N+N^OG0S
M)RTE/5:\MK*U?FD;:$P7>@,T#03ZB["RM(1;`P(#!V)_\>?MGIV;D'45!`<=
M8^R1DI'$07!Y4G-@%AX0;D;IBJ6ELXD#.R8F,0:&LHN/EA47%?5D'!H+#Q[_
M@K6TC9748'G0<6D8!AEXGXR)@_T;#`X;1).:D?MZ;WS8Y_));Q`3:'7$5Y>S
MI+^QE#,E(3D"4K.W@IP0'1+=X140#`L$9X6)BHR1_T)<Y7<0!P,?R("UB(1G
M`@L,%96'A.Q^$A-^YI/JTQ08'&C`[N-&\K&[L[=W,R4F-!*:LHV9$0$?%Y[H
M>1,+`A_[@XV/G.#N\N9T'``,'OZ#M(F?:PT)`7&=A)S6%1-M_I21Y7@7$FEY
MU_/68TNTI;FV<CTD)S54@+:%6@8'9N:`EFH#-`-MGH*!A>;CDY"58`8)#62;
MM;6'=P$,!V66GI1U$1-DXY.0YG\4%FY]1-G-UTEM2+6EOK5K,CHZ`."$C<D6
M`1#@G(/[&0\*&]R%A)*4QY6%A))F!PX!UX2(C946``<4_9"7\VX2%TWLE^C]
M4G-G;6IJ85+FX\-WA+ZXL)8T/R4W<.J`YV@%&>*0@)<2`C4!9)"$DY#@EH>$
MEFH!#1OMAH^']1(&$DWJD?I\$QUM])24XM-D86=P?'I[<,3]P7&1LKNRA@P]
M.S!O^YOE%!D9XY"'D1$!"`%B[ISHE^B=@(&=;`8-!/R%@H7V%Q@5U^N4RF40
M$&S=ZY?HRWQM;65^?F5QPOKS=_^UN+Z('#,X/!GEG>\7&!KWDH6?:`8.`VG@
MG>[OE)^-@Y`6#0P:YX>#F\44$F/P[N)=86II?=OGX>3RV4]A:!5M4^3FTF)?
MM;JYBP4].3)OEYS'!P$$ZH>`GQ(""`9^ZISYY)2:CX.5'PP#$9:'A.MG:VWQ
ME>[%%1`18</AZ^/^Q5=&8140:%C^[NGL@;.SBW(U,3,$4.7Q$!T9P)*=D&@$
M`P=N]9'L[9:<AH>78`4:%.:3D.=[87/[ZN+<:!$78=/[X/K]P-95=WYD9']T
M1G%PFKV[LY8(,CT-5N;5&P8%U(6$GGL$`P$47>'Q]Y:$C(V=8@$&$>&9G>1@
M:'O\E)7S8104;'=4S?+EY/K+?6\4:4ORY,^1M[^SA`8V,`]TPDD:``5\F(6?
M0P4``!-SY>;XEIF&AY#":6AES^+XUV=F0/SOX/9W9F9@9F9^1?;CY_97=GI[
M1]S2<V66L;B]F@TP,`+8VFP``AG*AH209`4'!!%@0U#QGX:"AY5(%VI_\.#V
M4GEQV/SG_<1/?'IC;6)S]^B4YTYH%VQ9^^528DN-N;BT;C8S-&_[?`4.!&"9
MAY#?'@4:$&EC=$25AX*`DO5L:']7^_1414;*_?CWT5I]<V=L;F95Y.KI\'%I
M:V!;\_9/;)2SNKR>"3,Q!/]<'`X-$.N&G^85&1\=%A%O?.>$@X.9Y4Q]W\;`
MU7%&7<;W]?;-SE-S9VEH;77VXN;<=WAS3]W(7V=J7XZXN[44-C8)9,\1``X9
MT9Z8YT@1$182'1QLQYV`@(26^5YV3$A15][+V<73V/?P]$YE;!5I>,CC[OI<
M?F1]4MY`8Q3'M;JXCALV-P-&3!L."1+EA)_S919J%1(8'F+^A8*!F.S]R?3!
M=71S7,W9TU_8\N3^3F,4%V]P]>7G\59$1]771'1F:_6UN+^"&S0*!UES!`\,
M$/J?D<!R;F)K'!L<9N::@(2=X/#EX^5;>V5UQ-A21]7RYN519V@4;'/0]/'W
MPMU00'1*2V5L^;2XO($8-0@%<&,!#@(4XYR6S'5G9F@?!!EO^9N`AY#^5?*7
MG>A::A5E5,'74,SDX/1]:!5C<5/3UD5-1UM86=?&4GI[G[.XL>X`"PT38!X"
M#`1#ZI'@0WUD914?&QQFX)N&A9;D\>.7E_IP;FY_UL'2WO;EY,!_:15L>4%6
M4%]5Q\'>W-9%='%)E[2]MI\1```9%AD#`@=J_NWL\]1W?6$0'!)IW9:8FYV7
MZ>_OY_=>?V1Y25W<P?/_\\1.9VYO8'!355)86UG5P<G87G=WZXNRMYEB&@89
M$!D``P<37/GBY,E80W5N%!<49/Z7DY*6EY>7Z>3,3GQE>WQT0E?/]/SU765B
M8V5$5%],=4Y=WMK8QLG;]Y^)M8'L6&D1%AT$!P4%$V!RQ,+24\7<4M%(?$C<
MS?WGX.B5Z.WCY/+(5$1%4%U=7US3U49Q?7U+6T)U<7]_=TY#5M_`R,GTZ9J8
MY/GNY/;+2F!E8VIO;A5N:Q848&1TT516P_'W\?+\Y?O^Y?OX^_CQ\OO[_O/`
M55])?'MY?7!]965^<79W3%A0T-W5])":[_Z7E^GB_'1W<6QN;A<7%Q,2:V-F
M2$=!WOS]]_'V_.?GY.'@Y^?Z__[X^?[TU%A#<GM[>'Y\96=Y<W!W2DI8T-95
MUM3TD9[FY)*0ZNWW=UA#8VYJ$1<4$!!K;V!(6US"\LO#S_7^YN?DY.?FYOO\
MY>;E\L=54T9Q>7IZ>'ME>GYR<W%U1=?<V=C2T=S;Y9.1_.B0E>WGT79;?FUM
M:A84$1,78F%]1413R/;-R_?PY>?EY>3EY.3Y_N7E_O?9UU5`<GY_?W)\965\
M<'-S=$%>4E72T-/0W>"=E?V4D^KB^UE"5'EM;!44:!01:F-C<D1&5,C-TL7/
M]N7E__CDY.?D_OGDY/KRQM'46'=\?GY_>&1D>GA^<$I#65!4T=W8QMK<S>B2
MX?V6D>C@]D)0UWIB;Q05:Q<6;F-C?$Y"T?3'T\'U\N7Z_N7FYN?D^^7GY/[V
MQ==707-^?GEY>&5E>']\<'1/6E;4U=#:S\S>UOB1EO?CD)?LY-Q.UT-F8F@4
M:VH6%&QM9G9(1=K.WMO/]_OGY>7FX.'A^O[EY/ORP-/07'1P<WYZ961D>GIE
M>')T0UE<4-/#R<_*]_;U]N*1[?+JEN_Z]$9`7'EB;VH5:Q01%6QM>TY;T,O,
MP?7R^N;GY^'AY^3[_OG[_O+TV%=?2')^>'IZ961D>F5^=DE%5=#2Q<'-]_'*
MS\[SZ93]_I24X/S925]"9FUO:VAH%Q1O8V9Q0EC?R<#,]_SDYN3EY^;GY?WP
M__[P],;15UAU<G]Y?GAE97MX>7)W3UA6T-S9P_3W]_'WR_CJZ_7EZN[D\5=*
M6W=F8V]H;&X4:F)@94M%4<;+S<[W_>3GY>3AX>?X\/;S\_3!T59<07=\?WY_
M?WMX?'U\<4Q%4E37V<_.S<CUSL_UYI7F]NSKX__/1T1??V%B:6EL:Q5L86=Q
M15W2SL+-]/'\Y?KY^N3D^OSP\_WQR,744EE/<G]Y>7E[>GE]<'9*1E/6T-+8
MP<_+R<CT^^+@Y>;BX.7VTE-8='AF8FUM;VEL8&=_=497WMO%S_7P_OOEY?KZ
MY/K]\?'WR\/245]'271S?GAY>WA^?'-T3D=3U-W;P<[UR\K^XNWZY^SMY//:
M45-!?65A8V-B;VUA9WEW0US7WMG:P\KP\_/\^N7Y^?CY_OSVSL/=4%M,=W!]
M?GA[>WYS<'9.1UY7UM[`S\OW\?#\^_KX_O[\\<G:UE!%27=]>'IE9&5[>7UW
M2$!>4%70W]K#S,GT]O;Q\//P\?;TSL;>UE1=65M$04%!04!"0$9&1E/:R,3>
M]O/TQMW5U=9?04U(2TIV<4I#0%E245345U;4T]G%V]O%QL'`P,'"S,W,P\'&
MQL7>W==44%A'04-,3DE.3D]`0$=%6EE<4%36TMW>QL?$P\##PLW"P\#`QMO?
MW]+655%27%A%1D-"0T)"0T=$65)05E37T]_8VL3'QL?8W]#75U%34E)24E!6
M5-;3W=S>W]S2U]75U=75U%75T]!7U]S3T-/6U]9445-<6%M$041:1$5;65]2
M5]71W-G;V]O8V-O9WM[?W=+2T-#2TMW?W-W=T%545%%=7UM%6UM:6%]<7UU3
M4534UM#3T]/3T=#6U=755515U];1T]#0T];4U%55U-355%545=34UM'7U]?6
MT=;4U=35U557459745965E%04%%145;5U]?7U]?1UM?1T-#0T-;6UM?4U]=5
M5M77U-345=77UU575U145%555U965E%65U1555555=37U]?7U]?7U]75U=36
MT=;7U]?7T-+3UM355%=65E965U15U5145E914%%15U545=71U]77U-?6U-34
MU=75U]?1T-/2T-;7U5555%1555=65E=45=77U]'0T=?4551445!34E)35E=6
M5=37T=;7U];6U]?4U-34U-34U=36T='1U594U5=75%15U=755=545U75U-?4
MU=7555155%=55=74U-?6U]555575U-75U-34U-145%175%1555555U=4U-?6
MUM;1T-#7U-555%=75E94UU54U5165U=75%=75-77U]?6T=#0UM;6U]755554
M5%175U14555555175U=45=37T=;1T=;7U]?5U575U=?7U]34U=555%=45%91
M45=5U-35U];7UM;7U%575E%15U75U=77UM?7U-555%1745975=75U=36UM;1
MT-;6UM?7U%545%=75U=45575U-355U%65=35U-37UM;6UM'6U]?5U-=45%54
M5%145%545U=75E=75U975]77UM'1T-'1T=;1UM34U-3455145U975E%65U54
MU=37U-74U575U=36T-/3T=?5U5555%=75=545%104E=55=75U=74U-;6T='6
MU-35U=74U]555%=75%145%5555555%155555U-?6T='1UM;7U-5555555%=4
M55545=74U%545U=5555555145=;3UM'3UM?7U]?4U-75U-3555145E%75U%1
M5U155%=7U=34U575U-?6U]?4U]?1T-'1UM?4U555U=75U5575E965E=75%55
MU=?1T]+2T]'15%!45U945%1455=65U35U=34U=?7U-74U=34U-75U-?6U]75
MU5145%55555555165%155575U-?6UM;7U%555%75U]34U]34U=75U=555515
MU5=5U5=75U?5U-34U]37UM;6UM;7U=55U=34U-555%175E=65E965U35U-37
MU]?6UM;6UM?4U5145U155=?7U5545E%04%%65%15U-;0TM'6T]#6UM?5U515
M5575U=545%155574U5545U=75%155=75U=37U];1UM;1UM?4U5175E=75=54
M5%14U=3555175E965U=5U-'0T-#3T]#1T]%455545%=65U=75U=75%145%35
M5=74U=37UM;7U]37T=;6UM35U-355=34U=555%=75U965U35U-;7U5145554
M5=75U-?7UM?7U-3555134E=65U14U-;6UM;4U=745575U]?7U]?4UM;4U=75
M55=14%!15E=45=74UM;6UM;7U57555175%75U-?7UM'6U]555%145E%15E=7
M5=77U-'0U]'6U%555%55U=55U=555%155%145%74U-36U]34U]35U]34U-34
MU=575U15U=74U]34U55455575%145=75U=34U=75U=75U];6UM?45E%45E94
M5%145=34UM'1U]155%1555=45-75U]?7U]'7U-55551755145=75U-?4U555
M5U965U35U]'0T=;7U-34U-555%175U=45-555%37U%74U5=4U=74U-34U]34
MU-37U%5455145=75U]34555555155%=65E=5U-?1T=;6U]34U=75U=75U-35
MU-37U]?75%965E15U=555%15U5=5UU145515U-?4U-34U-?7U-34U-555514
M5=555%545%55U=75551555755=75U-?7UM?7U]?4U-34U%175E=455555%17
M5%74U]?6UM?6T];5U]155%175E975=55U=55U=37U];6U];4U-?6T=;7UU54
M5U%145%65E904594U=?6T=;7U-34U-?6UM?7UM?4U]?4U=7555145U14U551
M5E=05E75U-;6U]34U-34U-34U-?6UM?4U]35U55745=455145%=75U=5U=74
MU-34U];6T=?455555575U-1555575E965E9645;5U];6T]S3T=#6U]355554
M5U=45=55U=34U-545U=75E975%=5U=36UM;6U];7U]?7U-155%74U5545%55
M5%=65U=45=77U];6UM=555555%155%544%355=74U]'1T-'1T='7U575U=75
M5%=75E155=555%54U5555=7555545%75UM;1UM?4U=75U=35U=944E175=75
M5=77U=155-555%555]71U-37U-?55-54U=37U-;1UM;7U-34U-355%145%17
M5U1745%15E35U-36UM#2T-;7U]?7U]35U=545U145%=45%=75%75U=545=74
MUM?6U%?5U]37U]75U555U=34U-?4U=35U-155%175E!65]76T='7U-35U=75
MU=75U=35U=74U-?4U=7555145%965E965-77UM;55575U-?6UM?1T]1455=6
M45!65E=75555U=75U=74U=34U-;6U]?6U];1T-'1UM;7U%164%-24U!65-74
MU];7U-34U-?7U=34U]?7U-5455575E=75U94U-14U]?4U];6UM;7U-555%=7
M5U15U=75U=5555545U=75575U=34U-?4U-?7U];6UM?7U]?7U%545%575U=6
M5U5555555-75U=545%=45515T=+3T]+6U]?55%=75U=75%74UM;7U-755%=6
M45975U=75%74T='1T='1T='1U]=55U155=75U-745%145%145%145575U-37
MUM'6U]?55=1445555%555555U=37U]7555=75%55U=355=74U]3455145=74
MU];7U%575E965U=45%74UM#0T-;7U5=75E?5U];1T=;4U=55555745%04577
MU=?0UM;6U-555%1455755555U=74U-?7U-7555545E9645965E355%35U-'0
MT='1UM?4U%55U=?7U];7U-545E=755555%%15U35U-?65%%55574U]?7U]?4
M55555-74U-35U-34U5145%145%155555U=37T-'6U-55555455555%55U=37
MU]?7U%545%145U=5U=75U-?7U]355571T-75U5175%145%=45=74U=755%=7
M5%75UM#1UM;6U]37U5145E=4U=75U5145U945=37U]545U555=35U=75U=37
MUM?7U]755-74555455%05%=7U=37UM;7U]?4U=37U]?45575U=75U-34U516
M5E145575U-34U-75U-?7U%555555555555155%555%145%555=34U%55U=74
MU577TMW1T=;5U55455=555555=75U-?4U5545U965U=75%145575U];1T]/3
MTM/1U%545%145U9145975U75U-75U=555555U=37UM#0T='6T=9745934%%7
M5U55U-;6UM?4U]34U-75U=35U-?7UM?5557555145%9145!15E155=34U]?6
MT=;6T-#0T-'1UM?7U-7555175E965E=75%175]355]555%55U=75U-?7U]15
M5=37T=;6UM;6T=3455145U965E=65E975=74U]34U-37U-34U]?7U-75U=?6
MT-'1U]555%145U145%145-755E;55%=45=34U-?4U-37U]?7U-75U=755554
M5555U=75U-74U]?4U-37U-35U%545%1455545%35U=5555555=55U-35U=75
MU=?6U];7U=?0T=?7U5=645%75U=75%=75U145555U=74U];1T-/3T]#6U-55
M5%=75U945=7555=45%75U]15U555U=74U-?7U]?7U-75U555U=75U5545%%4
MU-77U]75U=75U];1T='6U-545E%15E975%145555U=5555545U=4U=;1T-#0
MT-;6U]?7U-?4U=545%545U=65E965E=65E35U]'0T=;6T]'4U]75U=74U=75
MU=3555175U155%145%555555U=15U=?7UM;1U]545E=75U15U=75U=74U575
M55555U975-74U-?6UM'0T-'6UM?7U]515U115E=755145=77T=;4U%545=74
MU=545555U=?7U-155=75U=75555555145%14U-?4U]34U-155%75U-?7U]?6
MU]355%145U175554UM/0UM;4U5545U175%555515U=37U-?7U]755515U=75
MU=555=545%155=37U]34U5555555U=355514U=?4UM;7UM?4U-755%=75U54
M5-355-?6U]37U]545U=75=74U=35U-1555545U545U155=75U-;6T='7U-55
M5515U=?4U55455145%15U=7555=75%=75%74U-34U-34U-34U=?3U-74U-75
M5%575U915E97U=;1T='6T='7U-?4U];6T=;755=65E=75E%04594U=?6UM?7
MU%55U=34U-?7U-37U]35U=74U5=75U915E=445)7U=36T=;6T='1U]34U-55
M5555U=74U]3555545-555=5455145U35U]?4U-75U-?7U]34U%545%=5U-34
MU%5555145%145%55U-?7UU74T=;6T=?5U5145U975U75U=?7U];1UM155%=7
M5U%15E=45E95U-?1T-#0TM/1T-?4U%75U=77UM;7UU555%=45E!75%=14U;4
MUM'6T=?5UE56U=?6T=;45-74UM'755=655965E914-?`VDU.U<K79&W>X,'/
M_,C-_G-L2.*6\&L4T=GS57G:?47$^_Q"9&="V?OOX$9[0WAM6-CZY\WT\E=V
MW_?WRU]T0TQQ?&5D6M#>P_/PSU52R<C;05+SS%S=W%7&\5UD9$]8<E]71.7W
M6<'43U?&R<+&R<]%7<=(7T9^3,+*QT-E2$?*__#W5,9`6M59]<GP4W=30$%7
M1DY9T-=4W=S&QL)57,+975)U=UG65-32W-_=Q51=WU78P%E"U]U644W8V]S:
MT<!7U5A+3T163<3TV]M16UW&S-'6U5==6]5>4-K/U5I:7M955MG?U%-#T=#4
MWM'"R%Q!7EE?W-?1VU-=0=;%W])'05_<V5%66UK4W-??T]+8W=C45]S55U1%
M7M_>UUE5WU705T=&T-U04$595\':WMK2QUY.7E-74]'0W-%6Q]G%VUY>5MC4
M4EU&4M#34=717EY5QMY645_7U=16W-A5U5E3W=I76-53W=E56D/=Q<740%I8
MU][>TE765-_0T=+?V]9445%25U-2T]934%Q775Y3U=;9W=70TMM54E!?4]?;
MT];2TM=45E]=4-=74=31U]144US4U-'77UU4TM#?U-+8WME14EE4UU-26%?5
MTM36T==47-;<TUQ=5]'3U]+2W=/4T];74UA:65#0UM%44=;5U=744U!75-?2
MW]!55=/4UM'5U%%17=117-?6WM54U];54U-1TMQ5TM1`<'1#65?0W]K'QL'&
MQL3%V-G<W=#1U-545U%14U-24E)24E-24U-04%965U=45-75U-74U-?7U]?6
MU]?7U]37U-?4U-34U=35U-75U=75U5755=55U5755=55U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M__________________________________________________\`````````
M````````````````````````````````````````````````````````````
:````````````````````````````````````
`
end

View File

@ -1,278 +0,0 @@
# $FreeBSD$
begin 644 2.al
MU]?455175U14U=375U;55U145%175U75U]'0T]/0T=?4U5545%175E%15U15
MU=?6UM564U-045=75E34UM#2W=W=TM#6U-555=5555=65U15U=55U=555U%1
M5E;4UM?1T-'1T=?7U%75U=545U=45%145U145E915U75U-?7U-34U]34U]?7
MU];1T=;6U%175E975U=65E35U-37T-+3T-;455175%175U?5U%35T='6T==5
M5U965E975U=5U=37T=#3T];7U-545E=45%15U=37U]555%=75U965E975%75
MU-55U=37T='1T='1T='1UU545%15U=35551755575%=65E915E;5UM'0T=#0
MT-;4U-35U5575U=75%1555145=55U555U=75U=74U]'0T-'4U-155U965E96
M5U14U=36U];6U-555515U=15U='6T=#6UM?4U%175E%15E175%55U=555=74
MU];7U-34U575U575U-3555545U555=545U=45%145=37UM;7U]?7U=75U=75
M5=75U=74U]+0U]'6U-345%145%175U=65E=4U=355=755=75U]?6T=;4U-75
MU=75U-7555545U=45%74U-555%75U]575%55U=?7U]?7UM34U514551745%6
M45145555U]?6TMW3T]#7U]=75-1455515511U5=7U5%55535U-=4U-56U-;7
MU]'3UM'65514U5555U%1453555745U;5U-=55-;4U=77UU77T-#0UM'1UM17
M45%65E%75U35U-'7U554U=545%7555755=36T=/0UM?4U5175E=45%555555
MU555U=37UM;6U]?4U-34U-34U5155%%4U%145%=455545E=75-75U=31T-#6
MU-;6U]5445?5U-?4U=?6UM;55%145%545%914515U=34U]?6UM?755145%14
M5%15U=36UM?5U-74T-=5U5=65U=55%35U]'1UM34U-555%=45%15U=?6UM?4
MU55745%65U=55=36UM#3T]#1UM;55%555%145U975-76UM?7U-555%165%15
MU%57U=;1T-/0T-?5T=51UU!355-6U515UM54U%=655175514U];1T-=75=?0
MW-_3UE565-7555=04U%65=36T=1175)6U=;6U]34UM+=TM#55=145=545U=6
M5U7555145U14U-?7U-35U=75U-?7U5545U74U-545U155=75U-355555U=75
MU=75U-?7UM;6U]34U=55U=35U-?6T-'6U]517UU<7%-15-?6T-+2T-#0UM;1
MU-545U175%1455155%155%175U=65U15U-?1T-/0T-'6U]3555175%=75U97
M5%74U-75U=74U55455545U375574U=37U]?6UM;7U5575U=45574U]?6U]?4
MU-54551745%15U145%74U];7U]75U=74U-?1T=/0UM;6U-755U9645975U96
M5-77UM#0U%?55%975U=55=755574U]'1T='6U]75U51555545U145%55U=34
MU-34U55555145%=45%55U-35U-?7U];6U-155%=75555U=77U]?6U%1455%1
M45%15%77T=#1T-'1UM?7U-?455=45-74U]7555175%=645965%75U-?6T=;6
MUM?7U]37U-155%175%5555555%975-75U-5555545U=6U-34T-#3T]'6U-75
MU5165E945=74U]?6U%545U975=35U-37UM?4U=77UM#3T-=55U%34E)34%=5
MU=74U-?4U]55U575U-34U]?7U]?7T=/7U]145U915E945=74U-?7U-345517
M5U=45=77U];6U]?4U-?455555575U5545%75U-37U-75U555U=37U-74U-34
MU]35U=755514555745555U=45%545-75U]'1T-/3T-'1U]55U555U-35U517
M5E9145%145%65U?5U]'0T]#6U]?1UM?45%145%75U]34U%755%145U=645%0
M5M?3T='1UM;7U-55U5545%=75U55U5545U965U=4U=37T=;6UM'1UM?7U=75
MU-?4U-35U5545%175U=45%74U];7U-?455145%74U-34U-?75U945%=75U96
M5U?5U-34U-;6T=?4U5175%145=76T='1T-#0UM;4U5=65E975E9645=75E=7
M5575U-?4U]34U]?6T-#3T-;55555U555559555!65E%65U15U=36T-/3T=?7
MU-555%55U=7555555%=75U=75%555%75U=74U]?6UM;1UM34U-55U575U555
M55145=555%145575U575U5=7U-37T='1UU?4T-505=-44=?75=76U5?5U%96
M5U%25E175-?7U=?1UM37T=?7T=95U=3555575E=455=75%545%555=55U-37
MUM'0T-;1T]/5U-155%175U965U%65U155%75U=75U]?7U]?7UM;6U]?7U-15
MU=545U=75U!15E=75-74U];6UM;6U-75U=75U-;6T=#0UM155%165U=34516
M5E145=74U-36UM'0UM=555175=36T=#0T=3555=04%%04%%65U75U=36UM'1
MT-;7U]34U-34U=75U-34U%555%=65E=75U=75U=5U-+2T-+3T-+0T=;55%=6
M45%65U=5U55555=65E=75U15U-'0T]/3T]#6U]75U575U5545U9645=65E=4
MU5555=5555545%74U]?1T-#1U]?75U964%%65U35U-?7U];6U]34U5545U=5
MU-?7U-35U=34U-35U=34U]34U5575E%75%75U-5555555555U555U=75U]?6
MUM;6U-?555555U955%!45U15U=35U=?7U-37U=74U=75U-?6U]?45=555%=6
M5U=75%155%75U-155=75U=35U=31UM?7T=#0T='7U-545E%04U!045=5U=74
MU5=5U]36UM;0T-'6U-?4U=7555165%145%=65E=65E965-74U]?1T-#3TM#7
MU=34U5575E=45=35U575U5545U9145=45=77T-#0T]'0UU55U%575515U=34
MU5545U915E1555545%15U-;1T]/3T-#1U%545U=75%=45%145%=45=74U-?4
MU-37UM;6U]355=36UM?7U=555%=645%75%924%965=37UM;1T='6U]?4U-15
M5-37UM'7U]155=555U9645!65U=45574U]?7U]?5U-?4U=75U=75U=34U-34
M55145U945555U575U]?4U]#7U-;4U-?4U]?4U5545%145U965U175U155575
M5=55U=34U]?7U];6U];7U=7555175U=75%55U=?7UM;4U5555=74U-37U]?7
MUM?4U-35459745=5U=37U-55U=5555175%145%15U=77UM;6UM;6U]155517
M5%1645%75-74U-?6U]155%=45%555%75U-?6T='1UM?7U=355%755-7455=5
M5%145%35U-34U-?55=75U=555=55U=37UM;1UM545U915E975-75U]?6T=;7
MU55555145=74U-37U5175U175U155575U=74U-345537T='1UM155574U]34
MU-75U%5455145U=14%%65%75U-?1T-#3T]'4U5165E94U=54U55555575U=1
M5]74U];7U575U=77T='0TM/0UE75UU=645!15E=55=35U-?7U-75U=555%17
M5%74U]?4U-55U=34U]35U=755%=75U74U]34U-34U-75U5545575U-;6U]?4
MU-75U-35U-37U]57U5575%=15E=75%35U575U=75U-?7UM'6UM;1U]345%17
M5E%65%15U-34U-37U]?4U=74555555555=35U-75U5555U145%175U=4U=37
MT]_0T]#6U%545U=65E?7]>9`8,E]?\AQ4LA%U\[6VL'0QL15WME=W=)#Q%%9
MW-'TV'KBVAW[6VOA<'7C<MCX6O'%4<#ER&;'U&'.2W?W6O#GQ7[41&/!<=_T
M</'4P\I!RE3`4DW87M#F<&61;&?N%OK":.EEVN%OYE-4SW/WS$GIQ73!>MM_
M;?!R?/=U\=#$]DGG_7[[PU?=6]9:0=]U2<A(1/1S\$I:^V?]5D7R7\5;S%;'
MTOKT:>,5>/%N_5)Y[W?,YW#Z]]+;1%+=9,-T7U=<5%S%7U??W<U#T?%U\5-`
M\D3`7M'6PD!<55C<><1'0?5]\-O?U=;*4U[4=]O>?_ET]<U\],!<VE5"Q<5Q
MP=/=77[T54WU=\;.=]U2W45:75?8V=Y<R?1V]<-:7%W32M//>O__?/1!YV=Q
MXA3/_67PQ\E?=^).9^IE<N9DTWS]T&KA1GW`\-52YD9VYU).]]A>=<7T;/?.
M9>941_91QU5+Y7W1U4Y04UEPS%#%1]'<2_=81=/*2E'Q=/-=6E33U]YV\-UV
MX'+"_TY;TU==</?%?>%?<?[14V?EQ6?+==M.7EA[Q?%VT?W66_O54?)TPV7!
MP&CO3&7A=]GPV?Y'5,9^WM9_]%)VY';)]6WD=TY0?^%32?E6PL5VUO1)0-+0
MTD%'V%U2TWOEQW;R7?!%>>5QPL)\]_%8VU;6Q'!22''P<'OPT5W0W]U?UL96
MVO+57\S$WG/(4W'.6]]'5O=3TE-1RW1'WTW10T;]6MG:4-Y>5%%TTM-QS=1?
MT-O*W\7R0=[-0U93V$YQ5==64M/;W-)2W<U2T57264Q104%5=U;:3-I5S\[2
M]</VW%?$VE!-7D%30UA=7]-'V=G2UEC<W=?35E?<P596P-;55E34075'<797
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
M5E=075Y;6UE>7UQ=75!7U-/>VL7$Q=O9W=+0UE507%E97%'4W=O&QL;'Q,3'
MQ-G=UU!96UE3U]+>V])6645'04196$=-2$M,0%E6UM'1UM?0W\3-R\K/QMG2
MW=[9V=C9TM=45E15U=555E)?65M;6%E97E]?7%Q<4E?4T=/2TMS<W=+=W-S<
MW-W2T]/0T-#3UE9375]25M36T=#65%!24U;5U5107UM;6%Y35-31T-;6T='3
MW=S<TM'45=74T=/<WM_?W-'7U];755=14UU<7UU24U-15%=75=54U=75U%55
MUM?4U-75U-'3T]/3T-#0T=?4U-355%%34E)1U=;1T-#6U55745975U=645%7
M5%76T-+2T-'45U-=7%E87U)1U-W9VL?&QL?:V=_3UM1645-=4U-05E=75%=7
M55905E%=7%Q=4E%75-31T-+2W=W<W-S?TM#1U]55U5575E%15E%15E94U=35
MU=345515U=15U5575U975U35U-?7UM=55=;4U];6T='1T-;7U=755%555=37
MU-7555=45U=65U915U75U-37U]37U]?7UM?555145%145%74UM'1UM545E97
M5U=75%755574U]'1U-'15=34U=555U55U=74U-36T=345515551645%15E35
MU-?6T-#7U]?4U-545E%645=5U=?7U]34U-55U=555%55U=77UM'1UM;6U]15
M5E%075)75E?4U=76UM'7U-34U%545=77T-+2TM+3UM1445-=7%)04%%65%34
MU];1T-'0T==55%555=55U-?7U-34U-555U9645%65E9645=45=?2W=/3T=?7
MU]34U575U-34U=555-545U=45%=455755=75U=34U555U-?4U]?4U-34U=74
MUM;7U]?555=65U96459745=45=34UM?4UM;1UE14U%7555545%75U-36UM35
M55914U!65E=4U-;1T-#3TM/1UM35U5755=545%=45%15U=555%=65U965%14
M5=36T=;1UM'0T=;4U5555514U]54U%5555545%545U=75U=55555U-37UM;1
MT=#3T-'7U]?7U-35U5175E965E=75E975E=45=77T=#0T-'1U]545%=65U=5
M5=74U-34U%565-555=34U-35U-34U]?7UM;7U=555%175E!05E965U74UM;6
MUM?1T='6UM?7U]34U-34551445!15E965%145=75U=34U];7U];6UM'7U]+1
MU-?4U5575E975U=45=555%175U555=74U-36UM34U]355=75U-?555545%55
M5%=4U=755555U-37U-355%75U-?7UM;6UM?7U5155=555E355=545U54U555
M55555=755%145%15U-;1T=#1U]545U%05E965U355515U=75U-34U=77U]?4
MU=34U-;1UM35U5575E175E%15E%75-70T='3T-;6UM'6U5165E=75574U]?7
MUM?4U=755%=65E=75%145U35U]35U-34U]?4U=55U=55U=35U=55U=35U-35
M5=555%=75U155=365595U515U=76T=;7U]'1UM?7U-555%=145%65=74U-37
MU]?7U=37U5175U=45-74U-35U5575%145E945%=5U=75U]'0T-'1T=;7U-55
M5%94UE57U5165-555=36U555U=74U=34U%77U-?6U]?6UM3555145%175=54
M5-75U=?45%155%745595U514U-;1UM37U]75U-5555=75=575=5655575U57
M5=?4U-?1U-30T=;4U=355%75553555975U905%54U575U-37UM;5UM/1UM;6
MU]145-?45%975%145]76U5555U%45%%75%37T]/45=?4U-74T-=55=55U-?5
MU=5555164594U-?5U='0T=;1UM35551145945%55U=755=37U]#1U]355514
M5U34U]545U35U=34U=74UM165E755555U5545E-7U535UM?4T='7U];6T-;5
MU=545-145-75U=575E144E-45U155=?0U-?0UM?1U]?6U-?1UM3455145%94
M5%965U155577U-?6U-355%=755165-37U=74T=;4UM=45E=45%1455575]?6
MU-76T=;7U];6UM?6UU545-5175!45%97U=55U5=6U]W3T=;7U-75T=W0U%=7
M459075?6U]36T=#65534UU5645!455%65=34U-75U-?7U%545=34U%915-'7
MU=?1T]/1T='7U5165E9645975E?5T-'6UU514%=75U36T];7U-?2TM#1T-/7
M5E)24E!04E-045;5U]/=TM#1T]+0U]?45U904U%55596U-#75U70TM+255%4
M45Q<4U!75U!7T=+<WM_=W=/55=545%!3U-/3T=145%5745745U-=7%#5U]?7
MU=7755?5T]/1UM15U5575-77UM;1T-/755934U;55%=5U=545E%5U]75U]?4
M55965=37T='6U]?1TM+6T=167%U7U=355U%4U-31UM74UU9275)7U]15U-/<
MV=[?W-W1U%%34%-24U-24U%75=36T-%45M76T-/0U]144U-75=?6U-?6UM#6
MU]'75%115E77U517U5115E76T-/75%=65-37U]'45E)?7%/5U-71T-/2T]+<
MW]+1U5%245-24U-65U15U=74U-;1T=?7T==75]75U5555=34U-;45-555U97
M5U96U=?6U-?4U]?4UM#1U]1645175%55U]955-74UM#6U=355U%24U?55%55
MU-'6UM;6UU555U1645955=36UM?4U]575U555%175555U555U=34UM'3T]#1
MU]755%?5U%17U5575U175]55U5575E35U-'6UM#6U]3455175U175U155%34
MU]34U5175=55U];6UM'0UM;1U]15555555155%1455545%=15U145%15U];7
MU]'6U]?4U=?45=55U=3455555%155=37U];1U514U=55U]'6UM?7U=545U17
M5U=65E%65E;4UM#0UM;7T=#1U-355U355=555%1745%645!75U=5U-37U-31
MT]+3TM+0T-#6U]1545%14E)05E1455555=77U]3555545U15U=37UM;6T=?5
MU=555=555=755=77U-555U=65U=75%15U-34U];7U]?5U=555=355-74U-?7
MU-?4U55745%75E=65E=75=36UM'3T]/3T-?4U-?7U5=05-575E=75=35U-?6
MT=;6U5175E965E=45%15U-35U=?455145=75U-?6T-+=W=+1U-555U965U15
M5=75U-3555=645%34E)=4E945=?6T=_=T]S<T]/0T]'6U]?4U]?4U-555U%1
M4U%6459755545U915E145=37UM;6T='0T-#1UM;6U-55U5545U=75E975E96
M5U=5U=34U]?6T-#65=?75%545%15U=34U]?4U=755%145U915U74T=;6UM;1
MT=#6UM145U964%!075U<4E-6U=?6UM;0TMS?WM_<TM'45%=14U)24E)=4%;5
MU]#<TM#3UM?7U-35U5115E!34%%65574UM#3TM/3T-'7U-545U%14%%65U35
MU-?7U]34U-34U=545%75U5755555U=55U=55U-35U-?7U-3455?5U-36U]75
MU-75U-36T=#6UU545U965E=75U145U145=77U];7U-36UM?4UM'6UM155=55
M5%175%555U175E=45U=4U=35U=555=74U]?1W=/0T];4U%545E945%75U-74
MU%145U=75555U=75U]'6U]?7U=555U175E15U-?6UM;6U]155U1455555%17
M5U=75=77UM;1UM?45=5555=05E=15=75U];1T='1U%545U75U-37U-34U-77
MU]?4U5575U914%!15E=455555=37T=#3T]'1UM74U]34U-?6T=;455904E)=
M4E-05E96U-/0T=/1UM;6UM'6UM;7U]?7U-3555145U914%!04%%45=37UM#1
MT=;7UM?6T='6U]35U5545%5555145%=75%145%145575U-?6UM?4U]=55]55
M5E145%145575U-34U%55U-75U-35U=75U-?7U-?4U=34U];1UM?55U975U14
MU=74U5545E%65E975=34U];6UM;6U-?7U]34U-75U=?0U-755%145E%14597
M5%175E=5U-?7UM'1UM;1T='6UM34U5904%!15E745%?5U]36T];45%375%35
MU]?4UE55U]?7U-555%145U%75=755%31T=;6U-77U%75U=75U%55U=74U%54
M5U=65E=64%975U74U]?7U]?6UM'6U]?7U]34U-?7U-555%165E9755145%14
M5%15U=37UM?7U];3W]/2TM;7U%=14%!04U!65E965%175U74U];1T-#0T]+1
MT=#6U-555U%15E=75E945%145U=75-74U]?7U];6UM;1T=;55-555%555535
M55915%165%75U-?4U5545=34U];6U];7UM?7U%5555145%545U145%=65E97
M5=74UM;4U-;6T='1UM;6U-75551455145U=75%=65E=75U=6U-/6T=#0T-#0
MT=;7U575U575U5=75E=65U965-5555755=75U];6T=;6U]34U-1555175%=6
M5E155=75U-3555545%155=75U-36UM'6T-94451745965-34U];6UM;7U]35
MU-74U5545%=65E=75=74U%555555U=36U-34U=34U-?7U-355%15U5555517
M5-75U-?7UM;7U]155=545]36U5555%5745=75575U-36UM;6UM'6T=#1UM;4
MU5555%1445!045%65%75U=555575U-?7U];6UM'0T='7UM1555164%!64597
M5%5555555E;55=77U];0T-#0T=;4U5545U75U-?4U-555%1645975%165U35
MU-;1UM'6U]755=74U]74U-34U-75555555545U=75-74U-?6UM34U-77UM75
MU-545E965U14U=7555175U75U-?6T=#1T-'1T=;7U=75U55455545U964%!1
M5E=45=74U];7U]'0T-'6UM;6T-'7U5575E%15E7555%05%97U=77U];7U-55
MU=75U5755575U=74U]34U-545U=45%145U35U-;6UM;7UM?7UM;45%175E15
MU=75U=75U=75U=75U-34U5545%=4U]=5U]355%145%?55=77U];6U]?7U]35
M5%965E=45=755515U-37UM?6UM?6UM;4U%575E=5U=545E=45U965E914%94
MUM#0T-/=TM/3T-=45=15U=545=545%=75U975U=5U-?6U]34U-75U-3455=1
M5E=45U%7U5575]30T-#=W=#3T]%55U945%!65]555=?555945%=445545=;0
MW]_2U-=54U?:VW)U\\]A$5V5VE3L^];D711@_)V6:!YMEY=]%V/E_M9\RN1X
M%FC@E);L8F%656%K>%/NE>;^4USP]W-S4E=`2D=90&!XW_7Q\OO;=GM:SMU3
M=\#FX?S"]][<=F%I9-1>2$+`_^16=,A:Q?G+T'!4UM)97L7!WWQXP_+)UF=\
M4]/\P\E51-A`QEA0]L+'25_2=%752UI,WM;?RL;]Q])64MA=07-P25#;75?>
MP,'9V];5TM57<'#4\\W!4%'SP-Y.5=!"14Q-3U%=TO#V]L1<<$'26T1?T%?<
M54[5]?;-UG15VE-#=L[8UE-&S=+'T-#.7ME>='=-S]?0V%+>U]/<U]9:5,';
MW49?4EW!TM/51U/7VU5$75'1UE]/UL[!7U7%TMO624+5QL346T9=QMK4T5?'
MUT)/25];5MS9S=C8QL;&UT%%TM]>4T5&V<;3U=U77UY0Q=9:05;3T]?5PL?:
M5$'4TM5:0%C5R-I;0%',S-!=2UG15]W74-;4V-!5T]S`UUY94-5<65#7Q=%0
M55!245?77-C<4M#2Q]Q44EM45%#65=?6TE117=74U-Y7T]'5T==66%_4T=C7
M7%574%'1U-;0Q-)<6U+;UEU'7=_&P==45]904M%4U%Y64];24-;2W-;7W-11
M7T%:4-G:W-+5T-_755986%U14-/<T][5U]/=U%U04%->4E935-W8V]'1WM1=
M15M7T-W1U][<W='45U)=7%!=5M==5M#3U-?0W-C57E?7U5)0U=';T%'3W=10
M4EU75%)<5-!55EU35=W:T]'3W=16T=#0U%U55-35U=1!<'5#6%;6W-C$Q\;'
MQ\7:V-[<W=#1U]155%=645!04%-34U!34%!04%%65U=45%55U=74U-34U]?7
MU]?7U]37U-34U-34U-34U-74U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75________________________________________________________
#____
`
end

View File

@ -1,323 +0,0 @@
# $FreeBSD$
begin 644 3.al
MU=755537UE1555=75E=75%145%75U-?1UM;1UM;7U-555%=75U=75575U=?7
MU]?7U]355%545%155%15U-?7UM;1T=?4U-5555175E965E=45=?0T]?4UM55
M5%=45%=5U=;0W=+3UM145E%15E!145=45%555%=75U74U-77T=#0T=;6UM?6
MU]34U-545U145=77U-355%=645%75U15U=74U]?6T]#4U]545%74U];1T=?4
MU5145U914%%75574U-34U]'1UM?4U51145945=74UM;6UM?455=645%15E=5
MUM/2TM+3T=?6U]?7UU5445)24U%05]?4U-?4U555U=37U-35U574UM'3T]'1
MU]35U5575U975%=755145U145%555=555=74U-34U-74U]34U-?6T='6U]15
M55175E965-77UM#65%1745965E94U=37UM'3TM/1UU5555545U145%75U-?4
MU=555U915U=4U=?6UM;6U]?4U5145%175E%65U=5U=74U-'0T-/1T=;5U=75
M5U77U-35U5545E9145?5U=?7U]3555=14%%4U-;3W=W2T-=55%=75E145%14
M5%77T=;4U5545%145U=65E975=?1T]/3T-?5551745=45-?3T-37U%545E%1
M4515U=37UM;6U]355%145%545=74U5555%35U]?6U]?7U]3555545%15U=37
MU-?7U]?7U55455175%=65E145%75U=34U%74U%145-75U];6T=#1T=?7U]15
M555555575U=75U915E35U-?1UM?7U]?7U]?7U]?1UM?7U-34U55745!14594
M5%1555545U15U-?1T-;1TM;5U5755=75U=545%145U975%=75%155535U-'3
MW=S3T-'7U5545E!04U!65M74U]?555155515U=?6T-/3T]#1U];7U5175U93
M4U!15U=6U=34U];4U=555%75U=555=34U-?4U-37U-75U%5455175E%65%75
MU]?7UM;4U5545U74U-;1T='0T=?455155%=75U145%55U=555555U-'4U-?5
MU=555%175U15U]?6T=155%=45=3555145-75U-?4U-34U575U=34U-34U-34
MU-3555145%175U=45=74U-77UM#3T]'6U]34U-145E145U555=37U5174%)2
M4U%15E15U-;1T]/3T-/0UM?5U=545575U=3555=55=77U]5445%05E=75-77
MT=;4U-35U-?6U]?7U=75U=755=3655=55=75U=555-5555145=75U-?6UM?4
MU5545U=75%15U=74U-75U=74U-755%175U15U=?7U]?7UM;6UM'6UM355517
M5U=45%75U5755U9455155575U-'0T-#1UU545%145%145%145U=55%=65E35
MU=36T=#1UM34U%55U=37U-37U-37U]=55U%145975E=5U-37UM;6UM;7U-76
MT=35U]55555455555%55551555175%75U=34T=#3T-'455175E975-74U-75
M5%75U5545%75U=75U=75U=75U-?6T-#1UM34U-555U9455%1555555145%54
M5=37UM;7U]?7UM'0T-#6U-545E%145%65U975%35U-36U]?45%=75U355=37
MU]'0T-#1T=?55%915U=65U155555U-?4U]=75-74U-34U-755554U=36T=;4
MU55555545U=65E=4U=?7U]3455175=74UM;0T]'6U]545U75U5545%175%57
M5U=45574U];6UM#0T-=75E545%545%35U-;6UM?45U9145%7U=34UM?7U-75
M5%175U55U-37U-?4U]?6U-?6UM?55%%045%65U35U=37U-?7U]?4U-?7UU55
MU-34U-'155555=5555=65U=75U=75%75U=?7U-35U]'1T=;1T-;7U5545U=6
M5U=75U5555545U=75=77UM'1T-/0UM?4U5175U=455145%=145=45E?7U=37
MU]?6U]37T='3TM/0UU575E915E975U=45%75U5545U975=71T]+3T=?4U=75
M5=555575U-155E975E=45U145%75U-;1T]/2UM36UU1555175U965]77T=#0
MUM545U%15U145U=5U=74T='3T-'6U%565]55U=75551555545%175%=75=74
MU]'0T-/3T=?55%175-74UM'0T51455%15E975%155%145=55U=34UM'0T-#0
MT=?555145E!14595U=34U=755=75U]?4U575U535U=?6UM'0T=?4U5175E%0
M45%15E35U]?7T-'7U]?4U]?4U=75U-34U=74U]3555175E965E965%75U=55
MU=37U=74U5145=37UM'6U-?7U]?7U]1555=45%155%975%=75%15U-74UM=4
M5=34U]'6U]?4U]'1UM;45%904%!15E975=74U];1T='6UM;4U5545U15U=74
MU-34U5555E%15U=75U14U-;1T]+2T]'6U-5745!04%%65='1U];7U]35U554
M5%975%55U-;1T='1T='755165E=75%175U=75]74U-?7U-35U=35U=74U]?7
MU]37U-555575U=555%=65%55U=75U-?55E745575U=?7U]?7UM;6UM?55514
M5%=65U145%355%145%155=77U-?7U]?4U-77UM;6U]35U5545U=15E=55555
M5%145%75UM'1T='1UM'0UU555U=75=75U=37U%175E975U145%145%34UM;1
MT-#1U]3555=75U14U=75U5555%74U-?7U]=55%=75%75U-;6T=;6U]375=75
M55145U%45%965U=455555%965U34U-;6T]+2T]+3T-'755=65E%65U155557
M5%145%=75U=75=74UM#0T]+2T-;555=645975%965E965U155574T-=5U]?6
MT='0UM?755145%75U-3555555%=65E=75E75U-?6UM;7UM?6U]155U975U=5
MU=?1T]/0UM;7U-545E%05E975%77U]?6UM?5U51655175=37T]W<W=#54UQ<
M75U=75)6U-+<W=/6U]?1T-?4U-77UM?55575U];7U5145%155%=65E=75U=4
M5=37UM;6T='1UM155%=145%15-15U=?4U-74U=755%175E975=?1T=;1T-#0
MT=;45%914%!15E145%74U]?7U]555575U=76T=#6U-74U-37U-7555=75=34
MU=5555175-564%155%555=?6T='1T-;7U-?6U]?455545%175U145U975E-1
M5E=75]75U];6T='1T-'0T=/0UM?4U-575E%04UU245=4U=31T-'1T='55=?0
MU=74U=155575U-355%574%975U915U=5U-;2W=W3T==555175574U=545554
M5%74U-545%7555=455555=77UM'1T='6U-35U-545%755E'5U=7455545%14
M5555U-37U]?7U=37U-?7U5555%75555555545=75U=75U5545515U=75U=35
M5554U=?1T=;455175E975-75U=?4U-30T]37U-74U5545%=45U=5U-75UM'1
MT=?55%965U35U-;1T=?7U]155%=75E%145945=37T=;6T='55535U=745596
M55175535U-?0UM;1UM55UU115%75U-37UM?45=555U914%%65U=5U-?7U]36
MT='1U];455145-74U=36UM;755904%%65E75U=75U555555555555-35U=77
MUM?7T-#4U];7UM155U=75U%14%-15=74U];6T=/3T]#1UU575U945%77U]34
MU=5745%04%975=75U=34U-36T=#0UM3455555555U5575%145=575-;4U-34
MU=55U=75U-34U];7U-5555175%545%145%1745975%55U=?1T='1T-#6U];4
MU-74UM'6U]155%=04U-15E=75E?5U=;1T=;7U]'655555-75U-5555145U75
MU=34U5165U=75=74U]?1T=#1U]355%9145145U15U-?6U]7555555%975-77
MT=#3TM+2T]'45%9145965U144%%75E975-75U-37UM37U]?7UM;6UM'6U=35
MU=555%74U-755%115E%45=76UM505]555=?1U%54U=77U='2T]=55%!34594
M5574UM'4UU75U-)71E9<5E=7U-3<T]W1T]/2T-'7UU745E904U%75U155%15
MU]9445=5U];7U-77T=?7UM#1U-?75%%145%75U545%75U%14U=76T-#1U]37
MUM76UE96U-'3W/'[W$1A84)]6$+4V,W"QL?#R\??WL764%975%)<7U#74]!4
MT%%155;4T=;05U14TU34U%%05U%4U%374%704592U=72T]#<W]-4T%54U%=4
M4%?4W]94U5=55]=64%54TM165571W=114%51U-=4U=305%)4U%9%UMK3V]15
M7U;77-W0U]%2TM;255M4T]I=45-:4EU2U-[<V=[?TU]25,745U%>V=?2W-O4
MW5)25T=70U950<=;V%+3TM3=U][#W=9?TEA"4$/"3U117,K,P-)5TD/65%55
MUM1!U5)34]G67=]77]/2U-_2W]=>7M57555'6-S9V%E?VU]6P=_U7U!35,;4
M6GU%7\#:6O%9\?9>]73=7E'/</5Q2M%X\$I7P$+_P,#Q4,A!T%AX5']!4]#*
M4-W<P</7SM5755#44M7=1=-3V]!&1EW$==)U4?3"S-#'UO906TEVP$E-ST'W
MS'WR3M?U=_%;6_]4P-=U2EI;WE%/V4/2R4/1QE?]P%/:3D14>5K85<99W?W.
M\-37S-K=W'5Y6'_=4W#&0-?_W-7(34+.=E3>>=G?6?#!T?/=T]78?-C2>,Y>
M><O16>10W.;?1=5/<%-%8U3;3_#-0L;\2MKR2=_/0T'"VT_*QGSTUWO.WGC>
M]'52\TQ5_71<]T!3PD92RDA=^T]+\-!TP%YWSDI=U5G&V]=$Q]M:P%=55]/=
MV\%`U,Q+1MM0T])<TMQ3TEQ87%K?U%W<V<?>7]E=4590WW;5W%#6W5-=S591
MQ]!;W\185U#54%G5V437QM135-%<UTS<]G76]EA%5]W?Q-+!5UQ7V5Y(64'$
M4=?P4%U5T=!WUU+9P%I4U%M!W<%25%?>P%3'V-A765]1T]5&TEQ-5%M0T\?>
MQMA$4E]74U7+UM7&W5A<U]%?4=[?0D7'5]=05,Q#?5W-QT36_=Q.W\K26U/=
MU-5>6U980-/.4UY!P,I%7];"05GRWT5VP/!>TUIW6==,U?=55=K4P-I;6L7;
M=$E%5]Y0P,W;U]?05E%0TL791'70Q-AV<L;*5TA0\<])2-/XSG/7S=531D1!
M54%6S\?-55I=U%7=457?]<Q,05?=05S$QM)*U,=$0T-1WE/:V]#0W,]T=?W"
M141>4=;125+!V=9'4E=2]OW$U%+=5==?=5I/UU+=R%9(0]C,4%K:SM_;V-S'
M74U.1D%:0M777=W)\??26-?!W5]/1%E;55-51$/2]</<WM#3Q-O=7D-'U-S7
M07=8T-12U='>UU7&P]=<U-?#W%I>U-Q%0=3%V5-?7-WUQ%);T--27EM85M34
M5]3)P%-'6][$T-9?7=?17T]2V]50T=[%VM!45EA3T5W01$O7QM]<QLO9U%3:
M5TA/UL31T=C`W%%?U]!?2W9;5U)75%73R_'-UU37U=555%!<7%-?4M?55537
MW\?<4%M85M+?U5'44%39W%17U=76TM%04M3=T==5UE1:1%W7W]S54ES4W]+5
M5E755=%57EM7W-S6U-/=TM14U-/;V=-37U31U41"4M/<U]?2T-%54=?255!0
MU]-445116%Y7TMG3T593U=174U'1T-?5U-W2TM_<WM=35=/1U5934EU>04)9
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
MT-'6U-545U975%755]775%554%!27U];1$=$1$1;6%A<4%?5T=[8VL3&QL3%
MV][2TM#6T-'4U5=14U-7U=77UM;6T-#6T='7U5914%-=75!04U!15%55U]15
MU-15U-564%U<65E<4E%65];1TMW<W-W?V=G9V]K:Q=G?W=;55U%27%]>7E)3
M4577U=37UM?5UU514%Q?65A?65Y<4U94UM+<WM[>W]W2TM/3TM+3TM/2TM/1
MU]3555=645=14U-375]?7%]<4U%7U=?0T]+2TM/3T]'6U]755575T=/7U]14
M55575E904%!05E=5U=37U-555%15U-;6T-/3W=W3T]#1UM3555=65E904%%7
M5U=45575U5555515U-34UM?4U=74U-36UM1455514%175E145%54U=37UM;1
MT=#3T-'6T='1T=;7U-37555745%34E)34EU345=45=77UM?7U]?7U]?7U]75
MUM;6T=#=W]_<T];45%904EU=4E36U]#3T-#6U-564%!04U)34%965U145=75
MU]?6UM?45=74U]'2W-[>V=_=T=?4U55455545%175E%14%!05E%04%!24E)3
M4595U-;6T-+<T]/?W=/0T=#1UM'1U]155U=45%75U-545E%34E)34U!65=36
MT]/0T]'7U575555555545=55U=75U-35U-37U]?4U]?7U=34U55745%145#5
MU%35U=77U]55U=75U=75U=74U];6UM?4U-35U-35U=?4U574U5175E975%17
M5]77U];1UM?7U];6U]?4U5=75%975=74U];7U-545U=65E-35U95UM;0T-;7
MU-74UM'1T=;7U555551455175%175U=75U175U15U=?6T=#0T-#6U%545U%1
M5E=75U35U-;6UM?455=65E=4U=37UM?0W-+6U]545E965U=75U5555755U97
M5-75U-?6UM'6UM?4U=155=75U=75U-34U-145U=75U155574U-37T-'6U%16
M5E=75=37UM;6U]?4UM165E=04%%15]74U];1UM;7U]?4U-?7U]?7U]355575
M55555%175E%65E975%74U-75U554U-?6UM37U-37U];6U-555U145U=75%55
MU=15U]/3T=#1U]?55%15U5545%965E%15E?5U=37U]?4U5545%155574U-;1
MT='7U];6UM1555145%=75U=455575]74U-74U-75U=37UM'1UM'75%155%17
M5U=45=75U=7555555%75U=34U]?6UM?6U]35U=55U-355575U=75U-155%=6
M45%65E=4U=?4U-35U=74U-?6U]?4U-35U=555-30UU555U=45555U-37U]15
M5%145%155%75U=?1T]/3T-'7U5165E965E35U=75U555U51555145]74U]?6
MU]34U-35U-?4U5755575U51645U15574UM;7U-;6T=;7U]37UM;7U-37U555
M5%=145%15E=45%75U-34U]?6UM;6U]?4U-?4U51645%75%155%175U=4U-34
MU];7U-?1UM;1TM?5U5115E=75U1555555%75U=75U554U=37U]34U-34U-34
MU-75U5575U975%545%15U-34U=75U=?1T-/3T-955%=645%65U77U];7U%10
M5U145%=4U=74U-37U]?6T='7U]545U9645975=75U=75U=75555555175=75
MU-34U%145U145=36UM'1T='0T=?4551645!045965U75UM+6UM'45555U-37
MU]37U]755%145E=75U=4U=35U=355575U=34U]?7UM;6UM;6U-555%=64597
M5%75U=37U]345555U=34U-?7U-35U-?45=?7U-7555145U=75-5555=75U=5
M55755574U=34U-?7T='1T='1UM;7U51745945U=455555%15U5545%=45575
MU]?1T=;7U]?7U-34U=?65%3555555%175U=5U=74557555155=55U-?6U];6
MUM?4U5575E975U14U=34U]?6T='0T=?45%145%55U=34U]?4U%545U%15U14
M5=345%?4U-31T='1UM'1U]?7U-355575U=555E%04U975=;45=36U=76U%11
M5M34U-;3T=;1U]7555=65E%04U975]77U-75U-?7T='6U]345%31TM'1UM15
M55545U=65%=645975%74U-;1T='6U]355514U=37UM;4U5574%!045!15U75
MU]'0T]/0T=?55575U=74U];6U-555%145U9755=7U-34U]37U%555%155=74
MU]?4U-?4U-555%=65E15U=?6UM?4U-55551455545%75U575U-74U-34U-?6
MU]34U=35U=75U-5455=65E!35%565-55U];6UM?6UM'6T='7U]34U-35U555
M55=65E=75E=75-755554U=37UM#0T=;7U%575U145%=5U=74U-34U%75U=55
M55155=74U-145-?55=74U-?6U-545U=75U55U=37U];1T='1UU545%14U555
MU=555=5555145%545%74U-34U-77U]77U]155%155575U-35U5575%55U=;6
M5%555U35U-?7U]?5U=35U=555=74T=;6UM;75555U-3555575U975%=45%=6
M5U145=36T='7U]?7U-34U=74U-35U-;0UM=55%934%!34E#5U=77U-?7U];4
MU=34U-545515U=355=74U]?6UM355=755=75U=75U5555=755=74U]34U%75
MU5555%145%145575U-34U-34U5555%70T-?1UM35U55555=75U=75-55U=75
MU5545U=4U=75U-?6T='6T]/0T-#6U-355%9645%65E975U=75%175%155=77
MT=/2TM+0T]#6U%1745Q=4%%75=755=75U=55U515U=74U]?4U-?4U51645=4
M5=75U-34U=74U%555U=75%74T=#0T-'7UM145U=75U145%75U-75U=75U-35
MU%15UM?5U]35U-34U=74U=5555145%75U5555%965U35U-?1UM;0T=?555=1
M5E=5U-36UM?7U-3555145=75U-?6UM?555145U=75%55U-;1T==75-54U=75
MU-?7U-75U5=64%975=?0T-'1UM34U5545E975E945=74U]?7U-155U=75U74
MU]?7U=34U=74U-355=75U=75U=555%175U55U-/1U]=55U9645!05E34UM#0
MT-#1T=;7U-155%35U-?7U5145U=45%975U965U175]75U=34UM?4U]34U]?7
MU]?7U-355%555%175U35U=544%95U=37UM'0T-#1T=;7U5=75%145U54U=34
MU-75U5165U9045975=36T=/2TM+2T=?555=65E9145!15E75U-3555145=75
MU=75U-;6U]#?T];6U]34U=7555145E9145%65U75U]?555555575U=34U-75
MU=74U-37UM;6UM?4U-75555555755555U5175U54555555145%55U-'65594
M5%=75%74U]?6T-'1UM;7U-55U=55U=555%145574U]34U5555E%65U=75=74
MU];1T='1UM?4U=5555545%=75U965E945%175E35U-71TM#1T];6UM?5U-;7
MU-?7U-755%=65E%14%%65=37U]35U-?7U];6UM?7U]?6UM?4U5575U915U=4
M5515U-?7U]15U=545=34U-35U=75U5=15%555%75U555U515U=75U=37UM'6
MU]3455=75U155=74U-34U]34U-3555555%=75%145%545U55U=37UM?4U];6
MU]?6U]?4U=55U=55UM#555104E)34U!15E15U]'0T-#3T-'6U]545%15U=34
MU];455145U9645%75-77UM;1T=?5U-34U=75U=35U5=7U5555595UM;7U=74
MU5905M145]76TMW=T=;45U%34E%65]555U%65=31T]W2UU=4U-?6UM?6U%57
M45!65577T=;7U-555%155E-35U575]?0T=#1T=564%!15]30T]W=T]+=UE17
M5U=7TE!T6E%<P=],<M'DVT)>W?OD1VQ2Y?/?T'1G\/%)?F!4^>/`95/<=F1)
M\>/^?61.UE?5W\'YX^[E0GIP44UY?T'.QEQP3452R=]7RO+,44AQ5]C4V?']
M\<1,=T?5=WYP7O3*]%)0]??<<4%#4/7%5E+-W-+435=;24A:5_7TU45>Q,?"
MUEE7UME0T%92P]]46UM435]?1M'4Q5'1R\CQUU]114%$14Q0Q,S/T575U]5%
M15+45=/85U)5T]O4U5-2W=-545!25%114][>VL'9TT%)0-':UU9:5]S6TU?1
MUM117D9=Q=W2WLW>V59>5%#%5%U?3=1%5E90R,W!74515--95%Y1P=C=4]95
M45=7U=#0T=-55EE=TU164593T=A545+3V]916M'1U=5355O6V]+1T=)0U5Q<
M5U-5U-[2W=-7TM154%/55=G2U5Q5Q=%26%#54-#7U-11U-'05=W05%-65$5<
M4U'75MW'Q=-25=;2T%526U)6T-S45U;1T-)46%31W-5?4-'24=;1T]51UE%3
M5-_65]#3TU=14%%14%!1TMS4U-W65==66U+0T-?6T=_?U5!55%?1UE=<4U75
M5537UE75T51?7U)4T]!65]#3TM175E?0T][05=32W-;5U-1545)65E-<7E!0
MT=G6U5'755%27]74T=?2V]G;W=W75==65EY25E%74]575='0U5/5UU175-;7
MTM+0TU7455!<7%5645=5T=;6U]375%57U-56UM/1U=;1U-+3U571UE504U?4
MU5U35-'745U3U-'7U5=5U]=5U=;1T-%45=#75=3655355U-15E36T=;3T=;4
M5E30U%!45U77UUIP=$!95]#?VL3&QL;&Q,78V=S=T-'4U51745%04U)24E)2
M4E-34U!145975U145=75U=34U]?7U]?7U]?7U]?4U-34U-34U-34U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
:____________________________________
`
end

View File

@ -1,323 +0,0 @@
# $FreeBSD$
begin 644 4.al
M5-77UM'0T]/0U]31UE975U=45U=45%165E=75%155575U-?7U-34U=?6UM35
MU=37U55555175E=75%75U-?4U-;1T-;1T=34U=555%545555U]?4U]?45514
M5%!05U965U34UM;6UM;1UU545U=75-74U];1T=#0T=;55%%045%15E155=54
MU=75U]?4U=35U-;6UM#4U-'545755%145E975U555=75U574T-/6T-#1T=;1
MU]34555745%04%%65U145%=45%74U]?6U];6UM'1T=/0T]'4U5545E%04%%1
M5E=15=34U=34U=?7U]34U%555515U-37UM=65E165U545575U]?7U]37U-55
M5575U];7U]?7U%755U965U155575U-;6U]575E965U14U=34U];1UM?4U-?4
MU5145U155=75U-355U9045555-37UM'0T-'1T='1U%175U145%545%555555
MU=?7U]545E%15E97U=?1T-/3T-#0T=35U-545U%65U145U=45U=75-74U-37
MUM;6UM;75U345=74U-355555555555545U?5U-;6U]?4U%55551455575%55
MU-?7U]?6U]34U]37UM?5U555U=555U1555145%=755155=34U-?7U-31UU75
MU%545E!04%945=75U];7UM?4U=?1T-#6U]?4U-555=74U]345515U=5445%1
M5E=5U=37U]?4U=34U-75U-7555=45E=5U=34U=755%-15U94U=?7T-/2T]#0
MT='6U%5745!04U-05M77T='6U]34U=755%=45-74U-?6UM35U5555=555%35
M5555U5545%55U5145=74U-37U]34T-'4UM?5U=3455145%14557555555517
M5U1555545574U-34U];6T='1T=?45514551645%15U35U];1T='0T]/0UM34
MU=34U=7555175%=05E1645=75E975%15U=36T='6T=#1T=#1U]35U5145U=7
M5U=75%555%75U%55U=555=75U=37UM;6UM34U-7555555575U=75U5555U91
M5-;4U=?4U=75U-755574U]?7U-555U915E975=36T-'6U]3555545U145=34
MU-?7U-37U]5555555%545=55U575U=77U]?45%=65%145=345-36U-;6UM'1
MUM;7U]?455=14%!04%%15U15U=37UM?6UM;6UM?6T=?4U5755%1455545U91
M5E%15U545=75U-?6T=#3T]/3T-#0UM155%7455945U%145!04%!15%75U-;6
MT-/0UM?5U=74U];1T=;6U]555U%045!0459455145555U=34U]'0T=#6U]34
MU57555155-74U-35U=755U-65%=45%75U-?6T-#1T=;6UM'7U5175U=75E=7
M55575%755%=45U74U-?6T-#0T-'7U%5645975U145%965%155=55U=34U]37
MUM'6UM;0W='4U]545%=75U9645!15U155-77U-77U];6T='1UM?7U555U555
M5%15U=75U-?7U-3555165U=4U=35U-34U-75U575U5545%545=37UM=5U];5
M551455=75%15U=545%74U];6T='7U-?6U]35U-5555555=345%%34%965U=7
M5=36T='3T-#0T=;4U-75U%575E9145975U=45%915-?5U='6UM;1T-'0T='1
MT=;455=145975U=75U145575555455145555U-;6T=#0T=;6UM35U=755515
M55=75U=45=?7U-74U5575E=75U164%76UM#3T-/2T-=55U=75E965E=45%75
M5574U-?6UM;6UM;7UM;7U=75U-5555175U=45U=65E975%555555U=34UM'0
MT]#1U];7U]155-775U964%!145%15E15U=30T]W2T]/1U]545%555575U554
M5U=45%15U5175U=4U=37T='6UM;7U-75U=35U5545U975%75U-37UM?7U]?4
M5%!75%35U-37U-7555545%35U=755555U=74U51645975%55U-34U-34U=74
MU]?7U]?6UM#0T=?5U55445!04U!15%755574U]?6UM#1U-76T];1T]'6UU57
M5E%34U%65U=65E965U35U-36UM;6U]?6UM;6U]?5555555545575U-3555=6
M5E975%55U=?7UM?6U]75U=75U=?4U-75U%5755545515U=74U575U=75U-?7
MU]?4U%545%5555555-55U=75U=74U-?555145%=65U74UM'0T='6UM355%=6
M5E=45%175E975%15U555UM#7U];7U]34U-?7U];6U-?7U]145E%04%%65U35
MU-34U]?6U%5555545U14U=74U-?4U-34U=545=75U-74U=755=34U-?7UM15
MU=555%104E975U55U-75U-?7U]?455155=34U-?7U5555-75U-?6UU545%14
M5=77UM;55%=145=455=75U94U-37UM;6T='1U]3555155-75U5145-?1U-15
M5E934U!15U76UM'1UM?7U-74U]35U]'1UM?55%=75E964597U=75U];6UU57
M5U35U]'1UM;4U];1UU165E%65%14U=55U=74U]554%)145?4U]?7U]36U]?6
MU];7U-35U-75U=775=?7U=15U5=55U174%915U35U='1UM;7U]?4U554U=;4
MU=555]174517U=34U53555745-36T];7U%955]75U=5555755%155U165E34
MUM'3T-#0U-?7U-?55%165%?5U=31U]?455=65U=755?4U-=555=4U534T=/0
MT=;7T='4U5564%U>45!7U574U=;6U-?7UM34UM'3T=375%545='4UE175U95
M5514U555U='6U5575U155%945-74T]#=W=/155915E934E-7U='1T]W=W='5
MU=1045=34E!04='?T]955%=5UM145%57U]'455%05]76T=;45=;3T]%55E95
MU]'4U5565-74U53755914%%4U5=15U=5T-_2UU55U='=W='7UM36UM-54E]>
M5-?65UU?7%745E=4UM?7T='0W=/0UM77UE515E77UM'455155555U=1545!2
M4E%45514UM;2WM/7U-=45-97U=945U145]#25=36T=565%134=55T-!45E36
MUM355E37U]=15M37W==05]'<W=167U+7VMO44UA25%%45537U557U]+3W-=6
M5MS:UEY:6E73T-14U-5765#<WM%65]'15];5U]/?WE!15=155U=>4-#65597
MT5535E15U%545U-6TMS3UM11T-G2T=76U%?=T-'07%U>7EU3TU9<5%#1V=S1
M4U+4W=C<W]==4]'64]''U5Q47%'0UU71TEA'U5745515U]#>V-?65%-0U]14
M4E5<05%5VL??5EA24-/0U-14T=96TM?65%G7WMS75-164U!'4]/;TEU?7U_5
MT-!45-?1WM+75-'>U5?6T-[6UM;?TE9=7=%77%Q97U/=V]1355%87=76UM%6
M4];`QM%14]?6T-'5559<45'6W=?.VD1&3EA=V=!84-W>W]#6W-K%W55375A4
MT=%14=;:5UI95MW0T-==T=%:7E??V-W=TU16T]37U%Q$4E5=U%76WMC=WU37
MWUA055Y$6-;4TL=57M;0W<'64%I.0='`V='7UMW4U-/64$-9T\;875A7Q\_9
M4%Y14T%)4][%P=1=75?%PMA=15A=V=9=4]W?UM#1UEY'1%E1Q,;9Q5=0U570
MUME67E'6T-U01UA:5L?%75Y=T,?15U'4T]344=?<U-174=W'V%=?6$92V=S5
M4%Q6TE1?U\?64U13T-O>5%M165_?P,1925%5T<;<U='775[8S-='3]'.WEU"
M0ES;W-W8TUU&35S&Q,154-C7U%?5U5+7UE;3VE!/0EW&SME76%#1U]U615[5
MUM'%U%]>V\-=05_2V==015O$RL9575-?U=C57E30WU-;6EW&TE717];75M/2
MT5=?U-_$W4))7E5;5\OT]<)%2%C0T$-'6E#3]/%634Q-5MW;VM766=?7UL_)
MQUA&7M+.Q4QV6-G/VEQ`0-/:UE=5U%U25,7%WU-0T5U55U+17UI"6MG,R,30
M4]%57T9"4-/T\-E;4%U'5-)55L'3UU5045M97,'#V$QT7%E=1%7:P?/-T==;
M1TE;QO7:T4595-C-Q%!S0\39Q-]>55U=TL;$54%$4]S8T5!(=D#8P,'674I2
MP<;"U,'/TE-W=]_/Q-901EE%5]S=Q-/?7]764=]75EI#T,/24=145\3=7T=>
M5<?.TE--U</<3D-7T-['QE9>0%Q0V\W4W=#UR4US>,3/3T%TU]O"]5'`P_?"
M35U;0D57559#6<G90D3-PL')4'1V15?4VMQ4V=O.]-1=U=_9<4M/7=A;7%_!
M\_3-T49`U=U:55E*4]_UR-G:6T)965=`U=W>Q-?345!<24U$T\?=TE??]?;#
MQ5!V0T92QO7,TT-]=TOW^]!/='70\?)1=$!9^_Y?=G5&7U[=U,?&V-_(R\E>
M2$!(W<333DI&7=C37L/<6]Q5P??P_T-:5$A:?'Q!6M13WO3VPM[8SU)$7=C)
MQ])T=D1#4\+-UW1U7<3`_?#31U]?2=3T]E!3=7Q2PO%76'-)3=#_P5-Y=]?1
MPL#QX?;'TU!96U#-T75%4DQ:S$90U7-524Q/7/A8T_'.P=C-1'=!4,#(]\!T
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
M?7QW7\7UR\774UY4VLKVRM!/<G!<^961E^+981<6%614\/#93F5G?D'<P-I2
M=7)W4,KYY?GWV%%<5\7T]LK#VM)574-T2D34VL/;4TYV=4?5P\K-V=5%3474
MP<KUP]-21D)=S^7CX/G==F=A9'=2W=!%<7Y^<$33VMO35EU1T=G#S\_-Q=+0
MT=;1W]O9W=1=6%E=5=W9V=G?W=%0141=U=/<W]/6U570W]S75U]:6U#;]/+\
M\\)32GU_=DU85E126D-/3T)!15+4W-O:V,7%V-C>T]'65533V=C%V-W74UM'
M7-/&P=O2U5-<4E'1V\79TM'1UM177D%,1UU4TL?/R,W9UU915U%<6T5;7UU9
M6D5`3TE(3%A4UM'1UM;1UM31TMS>V\#U\?;UR,S`Q=_3T-#3T];45U]'049&
M1$=`04187U-15%54U=_!PLC,W%)$1%I>5]/=UU-81T!!0$U`6U+5T-+655=7
MT<7U\/?)P=K9V\#/RLO!W-=75E37U%Q-='%Q=G5`7]71UU54U-;6UM/9Q,?:
MV-+6U5=75]74559=6D9&1D-"1EA=5-?6T-S9VMK8VL;`PL/'V]O%Q\78V-G0
M55%<7U!<1T5>7UQ>1T!:7EY<4U?45U-1U=/>WM#6T-W<T-#=T]'055%4U5=5
MU5174EY96UE35='=WM[;V=S2T=?0W=#3W=_9WMW1T==45%%>7%)?6%A;6U-4
M5E?55U;55E-4U=76T=31TMW=TM;4UM=5U=74U5=7U];6T='1T='55E=14U%6
M4%=55=555E;7UM?1T='0UM;6U]575E975%175=;75%114%=545945U555]32
MW=;6UM70T];6T]/0TM?7T-5755!3U-=5U5165E-?7UQ05U=7U=36T-?5U]#3
MT-;4T=#6TM+0TM/45%575E905E965E-<75)15U74T=+<W-+0T-#6U%755=54
M5E915-75U-15U-175E=75%75U];4U-;6U]35U-?455555=755%965U965%90
M5=?5U-?4U]?4U=;6UM+0UM'45%=75U=65E=65]555-?0UM'7U=745U%65M?7
MU-;4U-'2T=;1UM36UU55559645%75U545E95UU575=37UM115=;7U5515]14
M5E555='75=;75=?65=155M70T-+<T=77U576U%7455554%!445!65%15U597
MU575U-34UM34UM'0TM/1U]5455%65U755U%15%915554U514U=545%55U]'6
MT=/1U-75U='0U]37U-;1U5355=355U745%914U975='5U-;75=755=;75=55
M5%555%34U]?6UM?7UM15U%555U!15E%4U=34T=;0TM/1UM34UM1555545554
M5E%75534U-77U%=555?4U%77T=;0T];6T-#755=65%114%!045%04%%75-?5
MU=?6T-#7U];2T]#0W=/0T];4U=1445)=4U=75E%15=544%-5U=74U-?7UM54
MU-36TM35UM;6U-?7T==55U%75U%24U95U535UM#7U-;7U-?75U?4U]37U]#3
MT]!55%=74E)7U=76U]?1T-545%145U%05U155=77T]'5U%54U5=<4E=7U5=4
MU]#1TM/0W-W1UM?4U-175U145%565]77U=754=775%934%!75E76UM'0T-#3
MT=;4U-355=175U=145565-545]?5U-'5U])45-%55]114=54U]%75]175E17
M5]745554U=#6UM?7T-W0U-77UM=55E37U5534U155U=35]?55E=4U]/0U-71
MT-=75U74U]14U=#3U]345=154%555U174U!75-74U-36U]35U%75U-?7U%55
MUM;6UU55U-555%=5U]?5U-14UU905U165E=4U-155-75U-37U]/2T]'3T-/6
M5%965%11453755114U%15E=1U-'55-37T=W6U];0T-'55-75U5=05-145%96
M5=145E=4U=;6U-'1UM;7U]'6U]34U%545U5555355%145%15U=555]715594
M5=?1U5=4U-'3T='3W=#755=05E915U175]74U-755E345U%65E?4U]77UM?0
MT-#7U]'75%14U-554%!5U=35U=;3T='45=?75]155U7455945=575%145=56
M5E=55U915=;1T='6UM?5U577U]54U=355%57U]'6U='1U-145E=65U%05]75
MUM'5U]#7U=175E545==4U]/6U=75U-145E34T-%45%55U=534%15U5145=?7
MUM35U%145%14U]?7UM=7U=?7U=55U-355%%655545-74UM35UU55U5914515
MU=75T=35U=74UM75T-+4U]74U%975U35UM15U-?4U5175U=65U=7U=355-76
MT]#1T-'6UM=5U-?4U-145U115U%275)25-74U=35T=#7U]?7U]17U=?7T=#1
MW=W54-555=5445=55%!24U;5U594U=;1T=?2TMW0T=30T]95U-77U-54U557
M5E-05-545%975U965-755-'0T=;6U=55U5?45%545534U=71T-W055544%%4
M5=75U=?6U]37U]'0T-77UM545U%75-565E%74%-15574U]75U-;7U]36T-'1
MT-;7UU165%=5U557U5=14534UM?75-75U%345%76U%77UM95U554U==55575
MU=75UE575]575574U]555U=455945=76T-;6UM#7UU54U=;5U5?4U]'555=5
M55165E%65=545]77T=94U=75UM15U]#4U=;5U=9555165]=7U=515=;5U-54
MU-'55-74UM#55E=5U5514]?4U]35U-/6U-945%114%=65=?7U]#1UM#0UM=7
MU=9755965%=35%=1U==4U-34T=;7U]?6T=;4U=175E%45E1645555]74U]'3
MU-;1U]345U75U%74U-;1T=?5U=31U=?5U=755E9045-345755=345517U==4
MU-75U]=4U]30T-#4T='1U-=5U-=55%965=9455=5U-145E975%575%75U]15
MU]/2T]#7T-/755575=565E74U=75UM;7U]37U]5445)<4E%05M74U=37UM;6
MU-?0U-;4U=30UM#05=?45%%14%904E!7U='45='3U-34U-775E345537U=71
MU];7U5775%=75E=74%!5U]775=;0UM/3T='3UU=7U5544%)35]755U77UM;6
MU='0U];4U=30U=1555755]545E=645!74U)14%955U?7TM+=T]'3T];6UM;1
MT575U-74U5%75E544EU15E?4U]77UM'6U%?5U=74U5%75574U594U-77U%=7
MUU755535T=;1U%54U%14U-;4UM#55%16U==75E57U5134=?4U-56U-55U=94
MU]'3UM35U]155E57U=545M35U-145-36T=;4UM'7U]15U5565]15U-164575
M5]345=345%555]175U575U17U=;1T]W=TM/1U%515-74U-34UU915%!05517
M5%165%575U74U]?5UM;3UM37T=#1UU55551045%75-74U-55U=77T=34U%35
MU-75U-74UM945%1455=65];7UM74U]?45%97U%575%1555945%36UM77UU35
MU-?55=37U577U-36U-36U-77U-77U-74UU3555=75=37U5945=7755?5U5%1
M45!75U%4U=;3T-/2T-34U5=7U515UM;6T=5755575E!24%955U15UM/1U-;1
MT='65U15U=?6U=31UM5745?55E575M375=755-375%775=?45-71U%565E76
M5%955-745U34U-?55U;4UM;7U-;3T]?55=5555145=5445)05M55U577T-'7
M5-74UM74U-37U-74U57555=75537U]=45%74U]75U-?1UM35U-?7U%574=34
M5E!7U=545U?5UM75U=375596U=155%?5T=545=?7UM;7UM#1T=?6U]37U-36
MU=555%164%)645=645=55-34U-30UM35U];6T='3W=+3U5155E!=4E%54%!1
M5E1445%5U-77U-'3T-'0W=+7U-?7U]?45-?555=14%=64%!75%15U575U5=4
M5]?6UM'0T=#1T='1T=;4U=175E155%%75U9755165%=5U=?4U-?6U]?5T='7
MU%14U5555%=45U965E=55575UM#3T-'7T-#6U55755575]7455=75U755U%6
M5E975]77UM?7UM'3W='6T]#1U]755%114E%65U965E%45E?5U]#6U]37U-37
MU=375=?755155U555%37U]=5U-55U=57U=?55==5U=55U-37U=545=5445?4
MT]945==45U975=;1T-34U-575E=65U=75%15U-77U]35UM?6UM;4U]545%15
MU=?6U-755U%145!4U5175535U=;6T-W=T]#0U]545E175E!15]145]74U=54
M5=745=36T-#3T]/3T]'6UM?45E975%%145975U945U165=74U55555555577
MUM;7UM#3T-'7UM'1U=545U904%97U=34U-?55E=45-355575U=555=76UM=5
M5%755575U];7UM?7U]?55=755575U]75U57555=5U-55U5545%55U=555516
M5-75U555U=?1T=;6UM;7U-?6U=775%1555555%15U5165E%15U=45=75U=?6
MT='0T-/1T='6U-3455545U155%545U145%14U-355=55U=37U]'1UM'7U-54
M5E%24E-145-4U-74UM#1T=?4U-34U-34UM;6T=;6T=155U165E!045965%14
M5555U-;6T]#0T]'4U-?55-755555553555145%=45%=45%975U=4U-;2W-;7
MT=?7U-555=3555145-74U%545%155U145%155%75U-;3TM+3T-#6U5155575
M55965U=65U=45%155-75U=555-74U]?1T=#1UE5555=15=34U]'0T=;45574
M5U%04U)65U=65-77U577TM+2V=G=U5=65%135%115%54U=;6U]145U9075Q3
M45?7T]#0T]S?V=+0W-!555%075Y35E7>S$U\5<588&SDZEU4^]K<Y5-K<>N<
M=1)N]I7B>A][__-?T^!#;VY6Z.'DVV50_L1E8&3>[^#\V5[7Y<-]64QP4-):
M<GME0%[1\_[?0EM6SO/!VE;(\?/UT]=;<7)R9DK+V4=7V/;W5TY50-'TWMY8
MS<'?Q5'565QS3\#-S59\?%;/__7$=756U<-84<7"VDU=UM590DU(1,W#WMW$
MS?3(6M7WTDUT=4!34U#6WU%3P\761=S015Y!T\W;T'54S,_&1M34U5Q=TUE7
M6%?UQ]996UI2U5U;W<725U%?4\_WQ4!!V-/05DW/]=!.2=E75%Q8U%+275M;
M5_7=T=16U]G:55926=G)VE%%4%%35--764U<R<S61%W=T==44=;;TUC6W-72
M545$U][>T45%5MC?U]97T]5>1T511%3?T\?8Q,3:V5-'4]O06E997=;9V%U2
M5U%<V=M74EW5W=Q75-O>T5]:TL311D%=W,+<7D55Q-]<1$!0T]#=U%56U-O6
M4%/?VM%17E'0W%-7W-G=5U104%U<T%'<T%C1W-U17UY945#0UE39TM+4U=3>
MTU3=U514UM/45D53W=W;5EY24UU2UM77U]_275]5WM596E?;WM/7T]?54%72
M55Q=U%75UM#4V=-4T=/?45Q87=71TU764-7?UE9=7U%4U]3>WM+=4%-4UU98
M7%=75M;45E71T=?4U]?44%74T][2T=?2T%565E-?7%975-=54-70T%5=4M'0
MU%?=VME8<75`6%;1W-O%Q\?'Q,7:V=[=TM#6U-545U914%-34U)24E-34%!1
M45965U=45575U-34U]?7U]?6U]?7U]?7U]34U-34U=75U=75U=75U5555555
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M__________________________________________________________\`
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
:````````````````````````````````````
`
end

View File

@ -1,369 +0,0 @@
# $FreeBSD$
begin 644 5.al
MU];7U-35U=75U=75U=?4U];6UM355%=555=5U5145%145=37UM?7U-34U=55
M55175%15U]?6T='6UM35U5145U=64594U=55U-?6U]34U5545%755=75U-?6
MT=;6U]545%145%7555%35E97U=?6UM'6T='6UM'6U]?7U5555%=75U=64591
M5E=5U=74U]?7U]?1T=;6UM;4U=3555=75%15555555175%555555U=555=77
MUM?7TMW6UM=55%=75U145%=7U=34U-35U5165E=45=75U-355=74U-?7U]75
MU=74U-?7U%555=75U=34U=35U]?4U-34U=75U=34U-75U-1555565E575U15
M5=7555155U15U-?4U]'1UM;1T=?55555U=37U-755%175E%04%-05E15U=36
MT='1UM?6UM?7U];7U]?7U-34U5145U%145965-755U74U-;1T='7U]55U555
M55145%55U=?4U-74U]34U=555%145515U-?6UM?55514U=75U5545%=45%75
MU=36U]34U5555%15U=35U-375%77U=74U-?7U];4U5555%75U=75U=34U-35
M555555545%15U=34U=74U-145U=455555=74U-55U=545=75U555U];7UM;6
MU-74U=755577U%145%965U355=34U-75U=?7UM?4U-34U-75U=55U=74U-55
M5%=45=7555175E975-74U]?6T='7U]=55%5555555=74UM?4U-555%=645-6
MU534T='1T=?4U-34U=37U-155=545=7555175U=5555555545U=5U=37UM;6
MUM?7UM3555555=555%=65U=75%=75-75U=37U];7U]37T]'7UM;7U]75U557
M5E904%%65U=45575U=34U]?4U-?7U];1T=/0UM?4U51645!045%75U=45%74
MU-?7U]?7U]37U-?5U555U=75U]35U%5145%05E=75=?7U];7U];7U]?6T='1
MUM;7U5545U914594U=36U]?4U-75U5145575U=35U-355534U-7555=65U15
MU=37U]?7U]575E975=;6U]#1UM;7U5545U=455545%1555165U145=74UM?7
MU]35U=77UM;7U]?6T-#0UM?7U51145%14%!65%55U=34U]34U-37U]?7U]35
MU=555E77U-34U-555%=75U=75U155=74UM;7UM'1UM;7U-545%75U-755%14
M5U175575U=75U-37UM;7U-355=55U=75U=55U-?6U]37U-555=76U-755517
M45%145965U15U-?7U]37U]?1UM'6UM;5U5555%=65E=65E975U=55=36U]?6
MT=;1T]#1T=;6U]355%=65E%15E=75U=75U=55%94U534U];0T=#2TMW2T=14
M5U965E=65E945%145%145%55U=55U=74U-31UM;6U]34U-34U%545=355%57
M5U975%74U]74U]?4U-34U]37T-;6T==55U975E=45U965U965U35U]?7UM?4
MU]34U=755=77UM'1UM?55%145%=75U=45%74U-75U=36T-#1T=;7U5155=55
M5%=65U=5U%575=545=55U]37U]75U-36T=#1T=?5557555=645!34%%7U555
M55555=75U]34U-?7U-?7U]?4U]?5U575555445975%145=37UM;6U]15U==5
M5U55U=?6UM?7U]34U-35551455175%=65U=45U1455755575U-36T='6UM#3
MTM#6U]545U=45U=75U9045-15%35U-74U-34U-34UM'7U=;6U-?7U=755554
M5%=65E965U55U-?7UM'0T='1UM?55=545%145%175%145%=65U945U975-75
MU-;1TM/2T]/0U]155%175U975%555%7755155%155%55U=35U=34U]34U-;6
MUM;7U-545%145%15U-3455545%55U-5555545=75U];7U-?7U-35U5555%14
MU=36U5#4U%_4TE-7UE#5T-74T=15UM95U]+1T]/455165E=45U755=74U%54
MU5555=75U-37U-555=74U-575U=45%175%545%155575UM#3T]#1T=34U-75
MU574T=34U-555%965E%145965E=45U15U-77T=#0T='1T=;6T=35U5545=55
M5%74U5555U145%9645%65=37U];6U]?5U=74UM;4U-?4U-34U%115U175E%1
M45%65U74UM#3T-#0T=#0UM?7U]545U975-5555175E915U=65%75U=76T='6
MU]?7UM?4U]15U=555U=75E945515U-?7U-75UM#4U-;4U=3455175%75U=75
M5U=75E145%555=75UM;1UM;6T=;7T=;5U=74U-?4U]155U%15E=455=75U54
M5%14U-37U]55U=?6U]?7U]=55-?7U-;6U]?55%=65U145U=45%145%35U]?6
MU]?4U-35U-?7U-75551455555%145%975U=55=74U];6T=;1TM/3T='7U=54
M5E%75%555-3155175U=75U355=34U]34U];6UM;7U-155%175E975U=75U35
MU-?7UM;7U%55U=37UM?6UM345=555U=75U=75%145%5555155=34U]?75=76
MUM;1T=;1UM?7U]?7U]155E%04U!045965%15U=37U];6UM?55=75U-37U]?7
MUM?6T=;1UM355U%34E-045975=37U]?7U];7U-35U=70T-;0T=?6UM345517
M5U905E%65E965U=45-74U]?7U]?6UM;1T=;6UM?4U=545U975E%15E=75U=6
M5=36UM'1UM?5U=75U=34U-35U575U%=15U975%35U-?6U]?7U-?7U];6U]?7
MU]?4U5175%145U=75U145%175U=75U=75U74T=+=W=W3T]#0T=?55%915E%1
M5E=45U904%!05E35T-#7T=#3TM+3T-'1UM;7U]355%%045%04E-15U=5U=36
MUM?1T=;6T-#1U]3555165E=75%175=355%=75E=45-37U-31T=36T=;7U556
M5U=24-555=?4U-?4UM?4U]755-745=37UM;7U];7U%=745915U155=37U-?6
MUM;4U-555-75U-55U5165U!6U574U=;6T=#7UM55U5145U=45-?6U55445-0
M4E-75E965=36W=W=W=+2T]/1UM;6U-35559645%15E=745-34%%45-37T=/1
MT-'6T-#0T-;455175E%65E965U=75%75U-;75U36U];6U-?4U=35U-?6U-37
MU-54U=555U%145%75-55U=;7UM;7U]?7U-37U-34U]?4U]35U-555U=75E96
M5U145574U]'1UM'0T=?55=71U]74U55555145E!34UU24U%65-37UM#3T]W<
MW-+3T-;7UM35551645975U175U=64%!15E155555U=;0T]/2W=W2T]#1U]14
M5U%14U-145-6551455145%74UM?4U];6U-?6U]34UM;6U]15U55645!15-75
M5=75U=55U=35U]35U=?4U576UM?5U=545%15U5145U=45575U];7U555UM15
MU-34U-75U-15U];6U]34U-555U=74%!15E965%74U=37UM'1T=;6U]74U]'1
MU=77U]555=75U5=645!15U=64574U]?5U-'0UM?7T=%45=145%175]76UM37
MU-575E965E=5U-?4U];0T]'7U]355%94U=555U=5551145965E=55=?4U=34
MU]37UM?6U]?7U]?7U-545-?05515U==74E!7U5175-77U]155=37UM'6T=/0
MT-#655144U-34%%6U=145=36UM75U=?45574U]=45-?6U]37UM'455907%#5
M5E;55E75U-'3T-W15-;7U=;4U==55%14U]95U517U-174%57459655=65=?0
MT--75M#3T];6UM=4U]=15E?4U5975555W=)%7%9455+4U=?7U531T=;4U];1
MT='0T=?55U355-95U%545%36UU=575!5UM505%?1U]33UM?2T]=15%75U%;7
MU=745=74U%104=155U-05576W-S0T-;3TM?55E%275%1U5-4U%;4UU=755?6
MU%945M#1U]/2W-W64%33UM;<T%%15=9=6%9=4E345]=5U]?7TM=4W=)44574
M5]?05537U551W-E46=50UE%975305%=4T-#0T-57TM/4W%14T5U15]-77M;=
MTU-5U-;8U5U05U;5T-'6U=W6U]525E?175915-)65%;4U]#=55325U!11U77
M4]38T==4UM+2TE57UM?6T5=>5U#55=374-37UU375-)34EU04%I6UM_1UM_7
MQ=U0UMC35E-5TE=96=3=TUU=W-Y77ES7T=%54M15U-W1U%)1W-_15E!0TM]=
M65974%-5U]955E?>WU=17-31WM575=C$S]!/45E:4%75UM79W,/R765W2EM!
M3U_%],?;R?':T]?9Q=!$3E[=PM[<5D)2U-U52$#4U%975-?6UE=6V]G>T5+6
MV=%/3=70UE[4P-U45E/?UMU94%U8Q=745U=7Q-U575C24];94U774E_:QU?4
M7=/0UU71UW76W=575]]55-#'WU%7153745E(VLK(UT501-34UMK*U4%%1-=>
M44U=S,'$0UA=TL32QE]85M+T]--615W?TE%'6-;!UD9.1]W5VM-24]/?5D5'
MT]#675/2V])3V=ST55'`T=165T-025C0W%)7]]!W6=%03$#1S_W$4U[)4-]4
MU-E.6$O!S$5.2=[+T]?$T,U<35%&WE-0W5?5V\1#U=U2V%[UTEI>T-A`2U+$
MT%E*Q>37=W+,\=]90=-5SEA65$347?U46U?;W=[-0]AV=5_3PEE#V-W>45)1
MV=;8WM744-';1UG,3-Y-3<51QMY>U\KPUE%U6<9+1'%9]<E6=/3U4T;5U=73
MU<_#TEI;PD).145%4<G?W\!85L!65E?<7=O6T$92TU?00$/!QM9-5/!=W-M=
MP=Q#6UQ=75C=U-K`7DI6WD/,VE'W5==/<T79\=U?157']UI"7]_,4D547M%8
M4?=>6]32WM;&WDC5UL[#=$]35_;"74C2\E172UC<7\G66E)144?25DQ>V?79
M45I4T=G05U?7T]]0W<9>44C84$905MSU6%++5UY54]C"6=O(7$9S0_1!3=?\
MV%G94M_5U]17P-5:<7U;V<?%V=K1RLI6U$5.TM)<6%K;WT--\-A%Q]Y53E?U
M0']$V<+UUE!6T]C8U]G47]=91M!"0O7?7T!5Q%7,6UO<741!TD?5]L/U]]+4
M1T9>5]Y$5\5"1ES$P%U7UEI0PLW;6M-44-%:0]?PVU%0<$155,#?1];45\Q<
M7T3#]MU<=%+?<%+;4?3/V754P%%65M#?6-CR5UG04%I'149715/>S_;3T'Q5
M75W%U<%3UEIUV/3;ULC!3-3:2G5Q6O?UQMQ'=5'TS\37UUQS<]796717XO!%
M471\W_71Q,-:4\;8S---1$7#T4Q-3%G?TE#<1$]0VL')P5U%5,;WUD!<WL;9
MUE3`05;>U<5;2W55W=W.W5I(<D_05UY4R_?!R-3<4D%>4]S4VM[<UM)$4U10
MU-%8T-C1WEY`U<??6T'6P]IVW\1<4$%>WM[635M$R\1!4M!5WL_3WU5&5L[)
MUT)=U==#6=+%WU+6]-K614;65=)5P_79=GIR=%74UL;+\<W-U$=,3%QW6E?;
M],]06?WTVE1R1M/;5,S2U_'<7$E-27-P0]?15-G;S,/(R-/!Q,7"7TE+1%Q8
M75Y05-;57%M4W=?1SO/T4DE,0%U6T]?7T%3=U%+0W\_Q\-YS?W=`7-_5W<[Q
M]%5%4UA"5E)<4M3=T]901U'?V--=5-#7U]=<1EG6VLG#WM_6U--16D195==0
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
M1=;3U532P-[4T-C2T=)6T]-<6M78W]'1V]Y74%75TU=?4M=6553455]87MW7
M6%U675+6T]?>V-[?V=_1S=]34=_67EE05%-&0=51TU)5V=%5U-_=5E!57499
M5%76557=T-#1U=[<75+0T-#0T-G<UM?5U=-65%!7V%Q945=37]=64-W16%3$
M5413Q-I35L3355;0T5Y4UM96U-=<UM#47=+&64-;4E545M+;V]16T]33UU]7
MU5]4T5U5V%Q3WM-3U\Y15MS=55]61%;24\?2UU-5V%)=6-E115=3T53<5]'U
MP-O1V%5314]05MA30]75547>P='37='2TU]#5E_=75S=U]I4T]7?W5S0T-U1
M4-)1WMW15E+40EI15M'&UEE54]?=W=C:WD%%5E357-G!Q-W0TD=>W5=7UE9>
M5==?T=+3U=1>1UU`U<#>U=_)TU]5W-E>4%=044Y&4=+1UMC)Q]C.T45U3EI9
M0%Y3TL7$UM?#V%Q7ULGWP]-;65E$2E%5WL/5U=[84D!91U15<$'#]_?!U578
M0G5?R=Q,4U/64%7=W=_9Q]O4P=5W==Q62%+%QM7'W%M8T51`7,[,1%S9T%!7
M4EU<T\701%/,5-W'T%91T%Q17%+`W]U0VUU`5UM=6\;96];;QU[1TU+7V<;=
M441(6$)TP?#UT=Q`<5'/WEOVR]9&=TM?VU#9]<_,PE!&<'!U7M'3U\?;VMY6
MWM3=6U_05-305=W%7M_>4M3;7D720UE2TEG5VU3<V--5U=U4UEQ>P=-5W%=>
MW59:6U#3W%]5T5)7Q-1:U<3%443<UU32T%?$TM!<5-)87];74M!10U/7TU!1
M55=?W<=$UL/04,W;4MW07%-45U1175??V%;5TT%:WU734EU9W=!175[3T-U4
MWM!7V<S?4,!4459!6]C875304M937E!85,/<7MQ24-99V_7%5%51=$925U15
M5MC#6]S0P\=-5=?:W$-:5=)&5-E*UL?U5%G$4]M675Y5Q-501]O4=<_93$'5
MQES=U578WMA?V=-9W=;4UE-04=#475[<QUQ>TU%-U=I85,725L3<6]%15=!4
M5EU<5E1$U<O"UD79QE!24DM?TE;=5]17TMW7WUW7T%9?5M'5T%]5UU3%V<?!
MQ%U$5UM5T75T4=M65\'$U=/%5UM77]3375U44M/>5]'0TU?15MC9T-G7T=)3
M4D],64=-6\7=U,+U45#UP];?UUU0Q<Q$=%W74EI43%G;V4=&S]_'TE?'T51>
M45)37%39T<W=5,'27$5=U5=004-?4=;?5='4W,_8U<7&15_55TM?R\S45-!>
MT=E43%Y24]];6-S64U7?4M-86==8U%?<V<;$T,W$U-Y6T59`1M?65MU;6M_%
M5DS=Q=/27%!?U5/57%/:TM756%C8VE97TMK&V%'6W%U=05;775=75%!15-7=
MUM/6T55=W]U555]4UMG=0%?04%G3V538U5!94E54R,1'5\'+4$]$05A7UE?<
MUMS?T5%=Q<7%UE514E5-6M'5T5=5UU;0U%S6V,G<4U94UU541US9W5->7U[0
MW-145M#24U)<6-'6WMS0V=K95]514%125E!2W\345=[77M=17EW45EM5WU%9
MTMQ05<3>U]'<UU?74-#=UM%94U%24%?9U5565-U>75756%W67E;<W]+2W]3?
MVM147]?<T=96W-=3TUU24D594-3>T%165U!7TU)>WL_17=S3U%'0TEY7U-12
MUE10W='47E3>45E=U]O?U%#6W-W15=U45]72TUE?4=77U%->UM=5U]?76U#1
M7E)05M+=UM/9VU70V]955U?2W-52U59%0%Q74=77W57<W-[$7U;=V-1?U-92
M6592U-O0W=!64E/2UU-75EE1W%=1U514T-)1U-#45-33TMQ5V-_655Q4U]16
M5%U;4T!<UE97U-I4TL7<VE]275'775)<V=G?T5=45-O57E57U]S24E+0U-/1
MU597T-38T%%5W==96UM14E#6W]-7T-?274?7TM11T]G3WE9<1T!65==2U-+7
MV-G%V]Q75,73U=_=55=44UA36%%45UY945U7U%76W-S1V</=U51445Y14U%6
M5=[0U%;7W]W1UM787%C55%!:7%/3W]93T,'1T=[05D]/24Y94-CT_?W]]-A0
M0'5^97AP05#3S??W]_?"TM964%=4V<7,S<;:TMU90$M+2W5V<GU]=UC$R,S/
M_?O\SMA31$5?4-'-R_WVS]C04DIP<G-W=G=W3$5:75?=R_#Y_O'W]_;:UUA&
M6$=!2UQ45-1=U]335%]:3T]$64=#653>VM[:R<O*R\#&S<W;T59<75Q&3W5,
M05Y905/1V\;&V]+&Q-W05EQ=4U];7%)>7U]24%35U][9Q=G8WM/>V=G2U%14
M5U-6U5)97%!44%-24557U5=15M79W]75U-+45]34U-/9T=31UU36TU73W553
M4=575E%34U-=7UU75U!4U=;;Q-]6U-/7W=S>T=#25U=555]87EE<7%)34M74
MTMS2WM_>W=W0U]574%!15E;5UM36T=115=;455)?5E345%U24U71W=C<T]/0
MU%=64%945555U=?4UM;4U];4U5755%755E%745)=75U65=34T=/=W-'7UM=5
MU=#1T]S<TM#3UU544EQ24U)=4%U>4U%5UM?7T=+0T=35U]'65%?4T-_8W];5
MUM=55%!=7%)=4E=04%;4T=/2U%74UM;0T]?7W-S445-24%%14%74U=155M76
MU%74UU75U5%3T-_3W=%5U=945]?5U=;=T]545=#055Q>4EU=4U;5UM/2W='7
MUM=55%75U5114=30UM?6UU565E!1U=55U-;7U=?45]73T5575=33T-=55]?5
M5U!05-515E=75]755=?2W]S15%955%-2U=/3W=W2UM=74E-05U175E=55%17
M5]?3T=;55-70T]#0UM?75595U5%655=5U5%25E915-575M75U-#6U]#2T]W=
MT-#655%04U?55E;4T-=55%=55E!4U-?6U]76TU16U=575=35UM'6T=#75E17
M4%945U=75U37U]75U%105M35U=34U-#<T=31T='7557555574%U15%975U35
MU=355%=15-?1T='3TM'7U514UM#7UM'1TM!74%114%164%955U-05U75U=?1
MT]+1U]'0U%345571U%-7U5=4U%35U%%6UU57U575T=11U=975-36U]35U=57
M5-74UM=45=?45%114%36U];3UM;1U%34U%1555915%145U%6U]/7U-#=T]'4
MU-?55U)145%55%37UM;0U%34U5%755=7U5=1U=575=74T='4U-;5U]104-;7
MU=#2U=?3UU145E?55U%5U-545U%455!25E175]31UM'3TM/1U-34TMW0T-#6
M5%%75E%=75174=5445955E37U];6UM'1U%755515UM+6U]355%545]?44577
M5E955%?7UM'1U534U5=75E?4T=37U]30T-?4T-/555==4U934=74U]?5U=54
MU==5U=?4U]=55%9655515-?7T-;5U==5U-;5U-955U545U155-36U-375=74
M5U!4U5=4U=55U-?7U];6U];5453455%5T=?6T=;6T]=5U]35UU565-165=%1
M5-'55=564%754U=45M375=;3T-;7U5745=575U75U=36UE555%565-545]36
M5=755U355576U];0U]37U=3455975%=75U?5U-55U-;1T%55T=/75=37U]95
M5=74UM145-77U%164%?55U)35%175U%4U-'6UM;1T='6U];3T-'1T-/15U!4
M5U%15U=145=05E905]34U=31T=#0T]S<T-/3UM17U=3455=65%==7%!=4E=7
M5M77T=#1T-/3T-/3T-?1U5!75E-05E!0U-56U=15U-;7T=35U-15U=;5U='1
MU-7455555-555-575%565-'75-74U-974=35U]'75=;65=555M755%144575
M4%;55=;0U-33T-'7U=755%355%37UU54U-34U%555%37UM;75E775%945E;5
M5%%755155%%6U]?6T-;5U]#7U]?4UM#1U]'1U=355E%15%97U%=7U=?7U=34
MU-=45%175E=14%;5T-96U]/45-555U=75U15U-?7UM?0UM77T=?7UU54U]57
M55=4T==5U=355%57U574T=75U534U575U];55U555%%14U=45E965-54U='1
MU5534-=55-73W=+>W]#=W]/6UM7555%04UQ34U!05E74U=34U5574U-55577
MT]/2W=/0T-#1UM95U==75]355%=04E-145!145'5T==4U-;6UM+3U];7UM;4
MU]'6U%575U=15M755%34UM?4U5=6U517U=;455145595U]?4U]'0U]34U=77
MU-555%164U#4UM70W=;5T5515%575=?1T-/65M7655745%355U'7U]74U535
MUU575%%75-7455%7U]55UM?1T]=45]5455175%175U145M745-?7U]?1U]36
MU];6UM;6U]145U%75E955=76UM3655?55%945514U]#1UM145-7455955%16
M45%5U=76U]?6T];7UU55U-14U-%55=?4U%505M574U!05E155=?6UMW<T-'0
MT-;55U=55U-7U-37U-76UE514%=04U%75U=4U-'7UM'6U-?7U-#1U-;1U-34
MU];7U5=25]=445775%355U775E=45%5545?55-77U-+<T-'0UU94U5=5T=;7
MUU565U!34%%45535U=;0TMS=W]S3T-?555164%=65=545=15U5=05E=145=1
M5-?6U]?7UM'6U=34U-355U34U5=15=?5U];1T-'4U556U=145-31UU?4U%71
MUE;5UM545U35U%165%96U=75UM'65536U574U515U5545E76U%77T=;0T%75
M55=145%65=155U74U=575-70T=35U]+0U]?7UM;455155E345U!045%75%35
MU]?5U=?75U34UM;0T-'=W=;4U-=55=545]545]575E=64U-15%915M77T-;4
MU]?4U-57U-;4UM'7U=;6U=75UM?4U%555U!65=34U-?7U%545E955%975U35
MU595T='2TM#6U];55E%75595U-?6U]55U-355%=5U%5555=4U-54U=75U-16
M5]365535UM14U=77U]35U-76U]?5U]?455=45%965E%7U%17U=?7UU75U-75
MUM'4U-'0U]37UM75U575U%175=545=35U555U%54U=155U=555?4U577UM/7
MU==5U5555%155U975]355E76U]34U];6UM;55%165E15U=?5U=76T-'55-?5
M5E%15E355-31U];4U5545=36U%77UU75U-37T-15U%1655165E14U=755%15
MU=?6U-76T574T=77U%=5U-54U575UU57U%515E%05]75UM#1TMW3T=+75=57
M5=155%555%5555=5U%97UU9<5E=05U11U-#6T]/3TMS=T=#0UE75U%574%!6
M5=5555155517U575U=36U515U5555%;5UU575-'6U5745=545E745-74U=77
MUM?7U=75UM94U=175514U=345=77UM35UM15U%165=355-75U=55U=?7U%15
MU=77UE?5U%17U51755155E%75%76U]34T=;0U-375=375=?0U]34U=154U54
M7U'15U945U;7U%77U-?7U]35UM'1UM;0T=355E!45%=455?5U5=4U=365%94
MU535U]36U574U]31UM;6UU755U=65-77U57555975-?1U=?6U]145%165%=6
M5]74UM;1T-;6T='45U7755%45]745-70U]74U5=745-645;5U%35U]'1U]31
MUE165=55U-74U%7555=4U=?1T=;45E;65U36UM34U%=4U%5645!34U-055?4
MT=;0T-;0T=;1T='1UM?7U]71T-175%575E!65U=15E=14%915=555]37UM#0
MT]/1T=%45E555M70T=37UM'6U]75U=545%=55%545E3455145=37U]76UM35
M5%94U5555=75U-54U=15U5555%34U=77U];1T=;6T=55U%575U%05E=65E77
MU]54U%74U]34U=77UM55U=?1T=;7U]15551745%65U=6U='7U-;655145535
MU=36UM#0T]#0T-=45U9045965E155E9455=75%75UM75UM55T='5T-15UM?4
MUM;4UM145557U=545%=655565=?7UM'4T=#75=545U545E75U5545]75U=74
MU-;6U=76UM37U]'0UM?75=755E945E%45%=74535U=74UU74U=71U]37U]#1
MU];7U-55U534U5175U35U514U=7555145-?6U];1U];65535U=74U-355514
M5%5445914%-24%%75-77T=W2UM+0T=;45-37U=34U]'1U]?7U5545E965E97
M5=77U=74U-575U15U-75U534U%35U]54U%56U5545=37T='4U];7U-34U-74
MU%74U]'0U-3655355%?5U5%65U965E94U5575%=4U-77UM?755'5T]'7UM'1
MUM?6UM?4UU=045-14U)65U74UM?5U]15U-;0W=W=W]W7U%564%U34E/1UU%7
MU=;65%965=#-4WM3RM%(:W.6YEO"ULCYSF-H5)F3%AQOYY+-$1'0Z^#1UTY[
M<'+SY^7G2G-;6W=[?W'Y[>_G<&3`Y=/24G==1E],8&ET]<WP^?3%T4]6\L50
M5<[(V\/75=%:=79E?='81]'7V_+$6,%01O/UT$96PL347EA;4DE+T_?(U71]
M4\7S\<1;=U51W5Q8TMC`7%S66T5?5U=9V]S7T-C-QL!34<S26W1W34755%31
M5U3%V-G7T\?$5DW7PMW42EC0W<]?4M;745]115-1U<_'V51?1E_9V41:W=O9
M5%Q>U_7+1G;5W5'61E3&WE-:T5#8Q-7<55=14D=$QM[=W5!<5<724%A$T,W9
M55I07U+?V5!44=?%Q\1?6-=45E=;6-/26E#=T=C?64!<WMI415E6W]O1T%_3
MQM=96=1>U=)7TU?>Q-/25%]3VL'54%]=4-'07%U145'9Q%1=75+7W=%5T]S3
M5%A6TM9<7-30VMA06E_9P]=:0UE5T=-14-=5Q=A17=+!T]=26=3=5U%4U=96
M5EQ'7U/>5=?$5M/?VM-25-564='?5-'0T]=74E514]964E?1TU154%_0TMQ5
M7%964U;7U='<Q-)075'=U%)27];:V-%47M?75=!55E_6UE745U30UM944514
M4UA<U-_;T-W4U=+455)94E?75=30U]-15=75TE53U=914=537=;0T571TM+5
M5%36TM+65-?7UU%75%U05U'5UE51U=;1UU1%=TM'7U30W]O%Q\?'Q,7;V=[=
MTM#6U-545U914%!34U-34U!04%!145975U155=75U=34U-?7U]?7U]?7U]34
MU-34U-34U-34U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M________________````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
$````````
`
end

View File

@ -1,278 +0,0 @@
# $FreeBSD$
begin 644 6.al
MU=74U-74U=755U965U=65U=45575U-?6T=;6U-34U-155=75U-1555545U=4
M5%155555U=75U=37U%755=55U=56UM#2W=/0UM955=74U-36UM1555545U!3
M4E)05E=45-?0T]#6U%54U];7U-15U=37UM145U77U%=0451455575U34UM?6
MUM'1T=/3T]'4U]/45E!0459645=55=77UM=55E155%97U=;0TM#75=36T556
M5=37551645=45555U=34U-355U15U=?6U]75U-3455=75U145=74U-34U=35
M5-755=34U-?7U5145555U=?6T=;6U]?4U=545%965E975U15U=74U]?4U=55
M5%145=75U-?7T-/1UM?5U%575%545E%145%15U175E34U];2T='3T=?7U-55
MU=37U]5555=645=45%114%95U575UM'7U];6UM?6UM;6U]75U=74UM;455=1
M4%!34%975=34U];6T=;4U5175U?4UM'6U5355%=5U5175U=75577U-?7U]?4
MUM;6UM?6UM;7U-37U]575E%14%975555U-355%=5U=555=75U=?7UM'6U]34
MU-?4551455175%555U=5U5=4U-34U535U%555=36T=#1UM?7U-7555175%=7
M5U=55=7555175U35U%74U]?6T=;4U-?7U514U=34U=34U5575E975575U-?7
MU-77T==4U-7555=75U75U-34U]?4U574U=555%=75U=5U=74U];7U-545%14
M5U35U-34U-36T=#0T=;455555%%15E975%555%35U-15U=?7UM35UM#45=74
MU-35U-7555165E1645%65U755=77U]37UM;7U];7U%55U=34U=555=755514
MU=;7U-555=74U-31T]/1UM?55U965E914%%45=174%145%555=36U];1T]/3
MT-;7U]?7U-34U-5745%145!045975U75U-34U-355=74U]?7UM'1T='1T-'0
MU]5555165E!045%645=5U-34UM+<T-#1U%5645915E?5UM#1UM;7U%545E%1
M4594U=?4UM'1T-'6U]555U9645!15U545%55U-34U=77U-555=74U]37T='1
MUM?7U]=55%3545-65U355555U=75U=74U-34U]?7UM;7U]?4U-?455545%91
M4%%75U=75=75U-36UM?4U]155%=75%75U-34U-74U-355575U=74U-34U=76
MT575U-555%34U5555%145%=75=75U=37U];7U]355%=45U145=34U-?55517
M5U35U-75U]?5U=74U]'7U-75551555145-37U-?7U]?4U597U]?7UM?4U=37
MU-3555145%975U55U5545%14U=36T=?7U-;6UM?6T=;4U%575U=75%555%17
M45%145=5U=74U-36T]/1UM?7U]555%75U-145-55U=545%975574U=745554
M5=36T='6U];7U-?55=545%75555555555%175%145=74U]?7U=74UM;7UM;6
MU%555%=65E=65E15U5565-15U-;6UM34U575U=?7U-34U]34U-555%1645%1
M45=5U=74U-?7U]'3T];4U];4U-75U55445965U175%175U145=77U]?7U-37
MU]?5U='1U-'1UM545E9145%65E155=35U=35U-?6U]545=31T]/0T=;455=7
M5%555%=14594U=77U];7U];7U]?6T=?5U-?7U-?4U515U=75U5577%U04%35
MU-;7U]34U-34U-7555145=37U]?4U=545514557555155535U-34U-34U-35
MU=75U=34U-34U-75U=37U];6UU545%145%755576UU155%=45%145=75U=75
MU=74U-34U-35U5164%%15E145575U];1T-'0T=;7U]155U=75=75U-75U575
MU-34U-545U=65U74U]?6T=;6UU35UM74U-555-75U-?4U]3555145U965U17
M5%=75U155=75U=?7UM;6T=;1T=;755914%!15E3555575U54U=37UM?7T=#0
MT-'6UM'75517U5=05E%65%75U%75U555U5555=75U=?6UM'6UM;7U5914%%7
M5U965U=45-77T=/2TM'4U-37U]34U=75U=755%=45%145%75U%555555U-57
M5=35U-?555555555U=74U-37U]?7U-?7U]35U-555%=65E%65U=45575U-34
MU]?7U-34U-34U%75U5755555U=555U915E=45-74UM;6T-S3T]/1T=;45514
M55545=555%=645965E=75U=5U=?1T-#1T='6U]35U5575E%65%555=755%75
MU=34U-35U-75U5555574U-34U]?6T='45U=75U145U=75%74U-?6UM?55555
MU=34U-37UM;7U-555U=455545%175-55U=34U]?7U=74U]?7U%545%15U=74
MU];7U%575U%145%14576U];1T='6U]35U=?6UM?4U=74U-75U=555%555=75
M55145U=75U15U-?7UM'6UM;7U-75U-35U574U]?6UM?55U=65E!15U15U-37
MUM?7U5?7U]37U]155U=65E=75=34U]?7U]34U5575E975-74U]?1T=;7U]35
M55555=755=75U=55U=74U=755%35U574UM;1U]34U=34U-355595U%75U-74
MU%545U=14%%65U155=74U];0T-'0UM?555165U=5U=37UM?55U=45U15U=;1
MU]34U-575U175=74U]'1U]37U-75U%545%15UU11U-=45=555%=45%=5U-;6
MUM'1T=#1U%15U5925M7655?4U-544U'55515UM;7T='0UM'6UM#1U594U516
M5==74E%75=355535U5=4U=15U]/1T=;5U-?7U]155E!045-15=355=55U=?1
MT-?6U-77T=55UU55U]?7U]175%=14U%45E;5U%555%37U]'2T=?5U]#75=#0
MT]W=T=575U=34E934U975%165E75U%15U514UM95U=31U]'2U]'6T-%4U='7
M55%75%!05-514%345536U]#0T==55=75U-34U-77U577UU745575UE504%?7
M5U95U-74U];0UM77U5?555=4U]'7U=?5U535U]345]75U=1755575U375=?7
MU]75UM%75=?55U745514U%34U5?5U%=55U91U=;4TU545M775=;0U]'3T]?5
MU]575]37UM%04M37U-55U5=045)4UU14U-#3UM?4T-34U5%645!75U94U];6
MU%76T=144594U%74T=?1T]'5T-'4U=75U=5745!745!44%'75=37U='7T=+7
MU]#35%?1UM=4UM%05%=45U144U174%=45E545=30W-W7UM'445;6U]1455?3
MW=73T-757%U35%9<5-125E=5TM#7TM/0U5315M?45=?655!4T=345U74U5=5
MU%%4U=555-;1UM+0U-71U]77U=76T5535%9645U>5%)75=;95]+1T51=5]74
MU]?0W=S4T=%4W=15UUU745=54E)=UU]1T5'6T%'0U-W4U=?1UM'9T-77W]=<
M4%=64]765=-645-6557255)64=)44E32UM76T]525MS=U]/?UE=25U=55U77
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
M5U145U175U34U51555=75U=75U74U]37U-?4U]355=30T];1UM;65%=75U=4
M5U9755=65-75U-;6U%35U5545554U=34U]#3T]'6U]?45%=45%=65%545U14
M5E975515U=37U]?7UM;7U]'0T-'0T%175%965E965E904%955-77UM;1UM;0
MT]/1UM174%!14594U575U=755=5555555575U574U];0T]#6U]?55U145U=6
M5U55U=77U]?5U555UM?5U5145555U=36T=#6U=555U145U35U]75U-555%17
M5U155=75U=74U];6T=/1U]34U-545U945%=455545%175U175%555=36T=;0
MT-=4U-'7UM'6UM3555145%904%-15U=4U=34U=3455155555U-37U]?6T=;4
MU=75U57555145%15U=34U-34U=75U5555%35U-75U-35U=545=;45=155=34
MU=75U=36UM;7U-75U5175E=75575U]?6U-7555145=35U=34U5155U155=76
MT=34U-34U];3P?')67Q[<$=4U5=4T\3"QMG0UMW?UU=755565-/=T-77T-#1
MUU545%9145!145-?653SXN1:8VQ]W=M`?'-3\?S,T]SU\O3;U]767D5&6UU9
M45165]+9W=W1W]!645?655A?U-1865?4UU-045/2T-S2T\?$5U_<VEA:5M15
M5%!755A=T-75U-7#T]'7WM/7WE/7UU5415G64UU55M!=4MO4UE_2Q]!?7\;<
M5%/3Q]!<4-?8U$!6U%-=6U9<5==<UMS1TM/45-W1U5W2W]%5U-O95$;4VUQ8
M5%+5T59?4M947E;3VMW5UM/5T]#65]+8UU%;4-567EQ5TE%04MW?7=#15-37
MW%9>T=+14%'1T%]1TE36UM;0T554T5!;45'5U-'=U];54]/14=34UU365%;5
M4M?44=!5TE=1U5W4U='15]+3U]954E?54M/45M%55U155]375%;5U]!55-70
MU]'6U=73T5U0U%935%30T-/44==7T%=?U5-3UU?6U=;0U=?6W==75]=25M95
MT=76WU374=;4U-11U]55UM=14%715=Y55M=5T%)355=075#655?5U]U=W=_3
MW-55T]_44%745UY5W555U]'4U%9445547U91UM%6UE70U5104=#=T-31UE/6
MTU145E305U3=UE105=_175G4UUY=4]70UMC>TMQ6T%!?5%%65=?05U35U=;5
MTU]7T%354M?65=95TE%4U%%24=_0W-#4T]%47UW7UE-24-71TM16T=%44]/7
MU%;7TM;7UM%4U===5M1?U%!4UU344-?0TE]0V-U45]S55%355-%44=#155/5
M5-765U?5U]36U594U5=45E'0T%50UM%6UE71T=105=;=UU/1UUW2TE56UM35
M5E!44%74U=#04]365=73U%/1UU%77=Y35%77W5934=W2U595U=315U#2UM%6
M4U77T]/75=#74%;65%_55ES0UU=1TU?4W=55T-S55%?7WM514%'45-37T=71
MUE!04=;655?6UU9=U]-6T=974%705U'44=;14595T-7655?0U]31U5135%-5
MU--44E34U%%6T=;7UM;?U-55U-15U%75U5175-!?5=915=;44U/6UM31W=/5
MUM985U124]/35=/65M;<W%91T];145]=4E144]37U5+65=3<T]+2U5+7UM;5
MUU74U]?64M5545505575TEU?4=%4T=%55M74U554T='?UM?2W-54U535UM75
MUU355%117=577UA6T]?6U='2U]%7U-;05=;65=#<4E+645=65E505%514-/1
M5]75UE36U-#1TM%44%!75=555=!65E%545)5W]!35M;>5]?2T-/1T=135%#7
MUU50T<;365[7T5]<4U;74%30U]56WM=4T=75T51?5=+1U%36W=+=5]945E92
M4EQ3U-/4U=70U]'44]364=?75-;1UU915-/245+1U]=25M30TU/65E14U5!2
MT=?35=31T]!4T-;35-?54-5455)65]-74-S1UE76U]?57=164E755%'7T-W3
M5%?6U5-=4514UU77UM364=?4T-W755;5UU165=?4TM[=4]307E547UU0UE57
M4='35-94W-/54-79T5=5U];54%/5UU10U='45-507U?0T-36T=;74E-6U%14
M5U555%16TU30TM15T=[5U=?6T%3155;4U5)6U5]675!65M95U='1U]'?T=?3
MUU12TU9=5E705=?6UM/15]31TE96U]574U-5U=535]/0T]?45-K245U445]2
M5=?0T-W0UE!;65A91D525U15W-O&PL'&Q</&V-?455%54U]>5M5045I>7U)2
M65Q?5E%6U531T=+9WMO;VMG>WM+6U5=14U!27%-65U=55U975E%14%-45537
MT-/<W=+0TM/3T-#0T-=445904U!75E=5U%565U1755545575U-?1T=#1UU16
M5-74U]'1UM555U=75]77U]'6U5175U355537UM35U]'0UE5555=14%!34597
M5=75U=;6U]?1UE74UM?7UM#6U]175E175%545U145-77U5145U14U='0T=;6
MU]?6U]37UM3555=45%=45=36T==45E914U-04U%4U=36T=/3T-#<W]W2T=54
M5U%24U975U165U575E!05]355=355=;6U]/<W]G9W='0U%155E!655=65E%6
M5%905]54U=575E15U=?4U]W<T];1T-;55%1445%64%95U5=45%%15-76T=;1
MT]#6T=?5U=145-74U=755%=55%%65=555575U]37U%74T-#555175%175=;3
MW-/5U-'545964534U=74U%=04U-15E35U]#3T-W=T=76UM345%!655915E%1
M5U96U-;5U-?5U-;4U-'7U]#0U];45%554U!55%?7T=;0T-;45%)245!34%-1
MU]'6T]+6T-W3T=/1UM=675-14%-4U-'0U=72UE=75E;55%965]76U535U5=5
M5=74U]37U%14U-54U='1UM34T-/6U5514U!=4E355-'<W=S?T]#2T55555=5
M4%Y24EY<5U15TMW6U]54U5905E=4U-?5UM+1T=+1UM/6U-355U144=745E34
M5E=54U-65U;4T=?6TM;4T=;4UM#6UM'455=145!24U145%74U]?7UM'655=6
M5-;4U='1UM34U-145-54U=?1UM545E!24E)25M75T=+6T=#4U=;7U]#0U-;5
M5M7655155U?55%9555%55%975U;5U%37TM;4T-/6T=?5U-=74E?5U]#1U-'0
MU%755U!745U15%37UU35UE57U=75U574U]75U]?4UM?5UM145%75UM;7U]?4
MU%57555645-05%175-35UMS2UM'2T-15U=#3U%75UM%55U1445U=4%-15U16
M5-?1U]?1T='1T-'1UM145E1555175U965%17U='7U-?45=?7U5145=75UM+2
MT];1T-;555574%-15U175%35U=?7U-?7U]555%7555=75=35U-55U-?5U]'7
MU];555755%555=355E%45%165]77U]34U-#0UM75U]37U]35U=37U577U%55
M5E!645U0U555U]55T=%55U55U-15U-74T-#1UM;6UM?4U-;55=755U=44%;5
M5%3455=45U=75577UU74T-35T=#55='1UM'6U-5745975%=45=7455!15517
MU-355=355577T=;4UM;6UM'7T=955U=04E!75%14UM'4U-'65575U=75U-?4
MU-35U577UM74UU5755915E915E15U535U-37T='6T]#7T=95U=74U]35U%17
M5U%15%=7U=55U%575554U-;7U];4UM;4U-;455165E175U7555=65=155%34
MU]77T]'6T='0UM37UU1345915E1645=4U-55UM95U=34U]?4U=75U-74UM/6
MU]'0U5=64%U345=5U=74U-?55%545-5645145=345=?0T]S=T=+?T];6U]31
M55%74%)045!65E345%?5U571UE=5U594U]34UM?6T=?7U-345555U-?5U5=0
M5E965%55U-15U-;5U]'7U-=45]15U=;45-375=355=34U-=5U='6U-?7U-'1
M5E!45U914E%64%-75]74U]'1UM;1T=;1T-;7U]155%1555165E975%=15E55
M5U=7U-'1UM'3T-#7U574551455755575U-?7U=77U%545E'4UU;5T=37U%=4
MU517U554U555U-15U517U-;6T=34UM;4UM75U%115U9045975-74U]74UM?5
MU555U-;7U]+=TM/1U]?7U]155%904%!04%)15%75U]'6U-37T=+0U]#1U-?4
M5%745U=45%=14U%15E?55=36U];1U]?7U%5145%74597U=77T-+0UM;7U]?7
M55=65E945=;3T]/3UM;1TMW4U5564U-24E'55574U]'1UU515E=64%9455=4
MT-'4U]#7U]'5U=;7U-37551455565-=5U5575%55U=15U=;4U=?4U=?45%75
MU%=7U-565=95U-'6U-?4UM;5U]945=575E=75=35U=3555145%=645%65U77
MUM+3T='6U]?4U]155%145%=45=36T=?4551645=75U55U-'65=555=;45=;1
MU];7U-?7U=?755155%55U=75U=75U5755%555U155%=55%145%77U5545%75
M5=?1UM/2T=?4U5555%75U%155=55U=?7U-74U]1445955E=45=;6U-?55535
MU]'0U]?75%164594U5545U=45=37U]?6UM145U14U=75UM?5U-75U-37U%54
M5-575U55U-74U]=55%145555U-?1U5355U945575U-?7U]35U=?7UM?4U-?5
M5=77UM34U]34U55455175U965E945]76T='6U=3755355577U-76T-;6U554
M5E!345965U31UE74T=;1T=;6T=#0UM;1UM355%145U%14U-3459145%65=35
MU=?1T-#6U]?6T='6UM36UM?6U-37U5145U)15U%65%=4U514U=355554U=37
MT]'7T-=45%545%545=74U-;55=?5U=555=755=74UM#1U-?555%045914597
M5U75U]34U]?1T='6UM;4U]?7U-?4U-34U=35U575U51645)<5M54U-;4U];5
MU=?4U];6U-?6U-?6U]?455565E%65U975U975U=4U-34U];6U]#0UM;0U]54
M5U=75U1555145-5555555=74U-;7UM'7T=W0UM'55U%04U)045945=555=37
MU-75U=34U]34U]?6U%75U]?6UU5455555%=455555=555555U-55U5155515
MU554U=355=34U=?1T=#75=36U-155U545U=45%35U-545U94557555555=36
MU]?6T='0T-'7U%555U155U545U=455555%1455145=74U-;1UM#3T=;6UM54
M5%=65E34U=74U]15U=7555=455555=37U]?5U574U]34U-35U=545%555517
M5U145%=4U-?7T=;7U-545U=75%=45575U-34U]'7U-555%=45%7555?4U-36
MUM;0T-'6UM;6U]34U-34U=75U=555%=745!24%%65U74UM'1UM?7U-35U=35
MU=35U=37U-?4U-355%1745965U15U-34U-?7U-36T]?7UU575U145=75U=?6
MUM'6U]?4U51745!75U%04%?55%74UM#0T=W=T=77U5%04%35U='3UM;5U]=5
M5U!14%537E'4T]W>TM%5U,_*<'[^TQ<3\9#:TO[I[-5L%DC@D95D!1.2F',2
M>.';0$;T^VX4;>R9D.P5%7A<3Q053I6=D>=W=\+'7$!WW<EW9W5"9WQ;T?GB
MYU1D9D7ZP$=;W^3]R5/&_\EW:6=YQLI)?];B^M!\W%;?_]5$=-?<]5!(],%,
M9G_)XOU#>V55P/;)SM5W1E[>U5C#RMS7S\5!0=9,='%9Q,3$T_#V5-C'SU1'
M?&5T35%3V\W=RL+&Q%'555)^<-;*V-?7U/7PP%C5T%-?2TQ`14'0__;PU79"
M7,991U#7QUM56E[)VL#20-;=0'1'\,M47E?"T<7;UL]%T5]P2$'"U=?34MK2
MW=)11$'0P-Y3459:7MG"S-9+4]/.W%Q17=-<6D/>S%!15MG8QM%,0E_>W]5?
M1U['VL7:T\??64Q:6EE25MG$T,7$Q=A?0EA4U5=115[2V]C>VM9=75/>Q4=V
M4]S=WU/;R]A?3%;35UE:1-7!QUM'U-GTWEY&7E95QM!?5%7$Q=?7V,#16$-2
M55A-7-_`T5]75E74U5;4P=S1W=?:V%990EC44%36W-71TUY=4=73UEU?U]+<
MT-9<5-G;WE924E9?4]#3UM''T%]%4-_=7DQ9W\//T%;6U-==U=1=65C45='2
MV<31T]+>545'0D96Q<?:V=[9TM'45$="1EA3U]/<Q]#0WMW74U!?74504U+4
MU]S0U='=UE]%7=#2W-S=V=_<U-%14E]85-33T%14T-S64E/4T%Q%5E145=55
MTMQ45-_<5%935]/75M'%Q=)015]6T=%74-345U-4T]506E36U=94T-77W-+6
MU5%<5]?75E?4U-74W]C54U)044%W2452U-W8Q,;!P<;'Q-K8WMW3T=;555=6
M45!34U)24E)24U-34%!15E975U155=75U-37U]?7U];7U]?7U]?4U-34U-35
MU=75U=75U=7555555575U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=7_________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M_____________P``````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
#````
`
end

View File

@ -1,232 +0,0 @@
# $FreeBSD$
begin 644 7.al
MUU565E!05E=145=45=36T=;6U]3555755-74U];1T-/0UM155U9145%15E=4
M5U14U=75U-74U-34U]?4U-34UM;555555U14U=?4U555U%565U55U-35U=37
MU-37U]755515U=545%=75%=4U=36UM?4U]?7U]?4U555U=37UM?7U%575U96
M5E=45U965%74U]?6U]34U=755555U=54U-+0T='45=555%155%545U=75U97
M55545=75U=75U=74U-34UM'0TMW2T]#7U=75U51445!14%!15E945575U-55
M5%74U-?6T=;6UM36T='75U544%%15E=45%155575U=77UM?6T=#6UM;7U555
M5%145=75U5545U145%175%=75-75U=34U];6U]?5U-34U]34U=34U=?45517
M5U155=?2T-?755145E965U15U=755574U574U];6U];7U]75U=555%=75E91
M5U15U=?1UM;0T-#1UM;7U-575%=65E=5U=75U5555U%15E965U34U536W=W=
MTM/1UM1555165E%65U=75-75U-5555545%75U=74U];7U-34U-34U]34U-34
MU=75U=75U=75U5545%175U155=75U=355=75U=37T-;7T=?7U]?455155554
M55545U=45-75U=75U=75U=74551555=75U=65U75U=74U-?6UM;6U]?7UM;7
MU]155=75U-?4U-75551555=75U%25E14U=34U]?6UM'1UM?5U555U=555=75
MU=7555145U=75%155575U5555575U-?7UM37U]?4U5555%545U15U=34U-?4
MU=34U]=55=54U-'4U-;4U=555%=45=75U-?4U-?55574U5175U=455755=?6
MT]+3T-;4U%7555145E=75E975U=75%965U145=37U-?6UM'0T=#0T=;6UM95
M5U175E945%555U=75U=7U=34U]?1T='7U-?7U-155%=75%555%=755575E=6
M5%155=37UM?6U-34U-35U=34U%5555545=75U575U-155-?1U=74U=74U-34
MU55455=55%75U=35U=5555555%75U-155=755555U-355574U-36T-/1T=?4
MU=155%=75%35U=3455175E965U9645?4U537UM;1T='3T]'7UM=55%=45U14
M5=37U];455165U=65U94U-;0T-/0T='6U%=14U-15E=45%755555U555U-?6
MU-37UM?6UM?45=355U94U%?5U5=455175E175-74T=;0T-'6T-35UU74U=34
MU-?65=54U5575U=75U9655?5U=?5U5555E17U=15U-'7U-31T=#3T-'6U=75
M5%975%!245!35E95U-55U];3TM/1UM?6U]35U-;6U-55U5544U9145!345?7
MU%37T=;3T=;6TM#6UM31UM57U=564UU04=545U%5UM15U]375%;4UMC1U]/0
MTE545-7745!34%915E965%?7UM?6UM=5U=;6T];7T-#1U575U=?545%555=6
M5]=45U-6U-;6U=76U574U5545=75U-?0T-/1U]945U%65=74U5155=5645%7
M5E145-55U];1UM74U=55U-;5U];4U%555=555]555U55U5=045775=74T=S3
MUM?6UU35U-564E165%=4UM?4U-?15-?6U594U%75U-34UM37T=?4UU555E=6
M45=05596U5145]75UM=4U%54U-'0T=31U-;55-?7U=37U-?6U5555U=45557
M55145U=45-=445;4T=#2UM'=U%74U]?555755U555]964%11U=515=7445?7
M5M;4T-S6WU35WU-25-+74]'545#4U5/44%-55M;0T%%5V-/5U-'0UE?0U%Y7
MT-35UM525U5?4]5>U-;55%3<UM;55]31WM31U53>5E954=;0UU%3U%!<4-77
M4%'4T510U5?5UE;0T=/=UM?7UUW5UE32T%575M;6U5!7U]554U%545165M'7
MT%15W]#3U-33TM54UE915%?54=37U=?44%#04UU7UM%24=74UU;0TMG1U]=0
MUE175U%45M72U%U2U-%=5M14W-[4UM#555;=V=+54M/05-11UUQ355!15M92
M4]%24U34T=#2U-W1V=G1T=354='74E16T-%<5M;2U%-05=196U7<U]?7T-Q4
M5-545-52U=Q55=14W=Q04=S1U%905M#55E915%115]314%#15-'05=_=5-=4
MUM36U-5=4]=4U-;4W]C04U%?U]505=;75%Q?U-/<553<UM364%935M%5T-S3
M4U+4U]U64%+475Y=45=4U]#1U]G9W5!3P=)3UE'24E-5U\51U%9?U%554E35
M4E335U71UM72VM71W%30U%%07E7<UEQ=55)7W--74E74T=535=_47U/0W=%1
M5=S64=7355?1UM+=4EA$5-)25-W14E?76E;%U-S05-=04-?67='>WMW44%I0
MUM)05]/>V=%=7U/5U-W54=_>5E%15-125U?0U5S6UE;?U5==5=)7U5Y7TE]6
MT--6T]-1VMC2T])46-35UU575E71T5S15U)6TE1%UM]61%5=55+5V%37P-##
MTM%67]17W%325EA64-C25-%7V4E*55765M71T=%6U5965L78W]-9VU36W%Q>
M7U-77-;'T]W64=927===5=177=+3UL#55-+27='3T%E>Q-1!0EC05%S15MK%
MU\'`7U-24493W-+8TM/4TM+1WM'7TE;70UE76M5<4U;26$;2V%U7VE_>W5[7
MQM5!55/?W%72W<[64=952U7=U554UE-0T]_85MK15]944%/44-?6557<65=2
MW%)655%555%855=<5-U2Q-C;T5%3T]5>TE'2P\;6UM==U=%;UL)47]900%A3
M7E#55U'6UE?<V%_5Q-Y>7];9TU53UMI57%?&WU%35M955%%55=9155=15EU;
M65%74=;<T='9V=#3W]O3T5965=_15]G$W5!25E!?65I>5]5065-365A25%%0
M4E-14%)4T-5=U<7&QLKQ]/?P],S#VM_3UE=4U-W6741"3G1]?GY]<'%W2D)!
M3G=W3UM<4='8]?WR]O+Y^?CX_/;EG(*!ZOGE5!`'`@`%'1P0=^'KZNKI[^#"
M?V9[9VEO?=#T\O+[X>?.1G9R?WYY?4?.^N;N@;&WF.CHT@4)-#4`'AX6_IF%
MF)^7YO1\%AT3$11C0_#C[^+D\]Y)9&-@?DQ'1=GE[Y69M+V)E^WY$P@W-@D9
M%Q3>FH:%G.C8>&D?&A)O9'3V[.KO^=!837MC87Q"U,#W\/WEX92-L[:?Y^9D
M`C0W-05K;G:3@8><[M!A:QT$'&1'1LKNE>SU=GAP>6U@2M#$]?WR\OWX[(:P
MLX3DX4P&-#8T!FQG=):!AIS@=&L1'`0;9OSGY^Z4Z/QX%&AD9V-PS^7F^<C&
MR_#EG[>]CN+ZW1@U-C<":'='[H:`F>UW%QP>&AAL_>[KE)7C]'\4%&!D9W3-
M_?O^R,##V<N2M;*UE^7*$`@V-P\72U/BA8";[7T7'1\>'F_#XNGI[^3T=V@5
M8')U4,7*^O_16U;6[HF]MIWAX&(/-C$*'4)0YX6"AY1($1X>'AD4T.^4E>GF
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
M;V@5;65\3E7:]_+-UM[`S?7P]O_E\,;#S,;!S</-SL103'1W=W=T2TQ!37%S
M=TU-0-OOE?KLDI;FY/Q7749F8F%M:&YI:&!^<475T,WTW5S2QL')\?'R^/W)
MP\W-R,C"Q-O<4$%(2$]"1EM;1$=`3TM-6UQ;7?CJY,KJD>/\\M!%7']M869B
M8F-L8'YQ3%-4W,O"5U38V\3,R_;^_/;W]_3*S,;&Q]U57$1&1DQU3T%#04U)
M0D=$05I17D;>X>/TX9:4X?KVUE="969D9F!C;&]A97Q)1%/'S-%0T-_9P/7S
M_OO\\_/P\??U]?3.WE=80DAT<'!*2'5W<79*3TQ"65577MOB[O#AD)?CY//=
MUT!D86=@8V!O;F!D?DM$7MG`5$56T]W%S_3YY_OR_OKY_?#W]O7;4$=,2G9\
M?G-V=G!P=DY&1T=95=!45_WIYOWHENGD_-M45G%G9V%C8&)O8F1Y=5I:4-C<
M7UG7V,//]/S[^_O[^^7E^/+VR,540'9P<'Q[>WY]<W-Q3EE1U=;0W\7%TU?9
MY.[[_>F5X/_U55!??61D9F!@;6]@97]U15C4VM%?4=S"]??P^^;G_O_EY?GS
MR\#'UD9W<G)R?WA^<W=*3D]`7%%05M?0TM/7TOSLY_SLE>_E\-Y54W9E9&%@
M8&)L8&1X=T=;5]K85%3<P/7P]O/[Y?[Q]O/]\<[`Q-Q11DIW=W=P<W!T275U
M0%A<4-75T=O8U-79\^'Z_>/HXOCTTE=2=WME9V9F8&UA>'UU15S4V=U45=S'
MSO?Q\_[[_O/Q\//QR<?>UUQ`2W5T='9S=G5(2$Y-05E15U31V\;;WM[/^^?_
M_^#BY//"T59$<'YX9&=G86%D>7)+1D12W=-4T,7-R/7T\?S_\O/R\O#WS\'%
MTU-'3$AU=W%Q=W5+2$A-1EA25E72WMS>WMS:\.3X_^;BYOGUWM9<='QX9&=F
M86!G97YW0%A4TM!5W<?-]/'T\/[\\/#Q\?'TS<'%T%!80$U,2W=T=71*2TM.
M0$5;7E'4TM_8Q,'#]/_Y__[EY?_UV]==0G=P?'AE97IX?GUW345<5-?1TMO'
MPLK)RO#P]_'Q]/7(S<'%TU9?1TU/24M+24Q#3$E,1UE?7U;=V][?V\?!S/#Y
M\OWZY?W(V%1=0'9R?'AE961E>7-T0EE0U]W=W-['R??T]/#]\_'Q]/7UPMK9
MTU!;0$Y)24IU2TA(3$U-1EM=5-'=VL'&P<'!P,'$Q\_W]\K*]<G&T%9<04AW
M<7-R?7UR<W%U341>5]S:Q,')]/7T]_3*SL#$WM+<W=#7U5137%A%6UM:14='
M6EY<75'7T-/<WMC:V]G?W=[9T];3V]O<W=G$V-975U!91TU(2TM*=4I+0D18
M75;1V,'`Q,;,S<3>V=G;V=[;Q]K?W-+0U%924E!=6D9&15A86%Q0U=;1T=;2
MW-S=UM+9WM/7U]36UU=5W-G>W-+2TM=64U-=7%Y:04=%6D1$6EE<7U]05%55
MU]#=V=O%Q,7'PL;8Q,'%V-S0T-/44U-75E%07%E97UQ96EE=4E)05M71T=?1
MT]W?W-/2W=+=W-#6T]+65EU?7%E$1T5;65A;6%Q=4E?4UM+?WMC%Q,7$P<'%
MQ=G=W][2T=#755517%Y<7UE96UA96%A<4E)6U=?0W=W1T-W0U-76U]36T-'0
MTM'7T]W0T=;1T==45E%24E-=75)=7U]>7U)34%?5UM+=TMS9VMK;VMO:V]S2
MW=%45=507%U24E)=4E%04E)34EQ>7EU75%37W=[?W]C;Q=C2T]W355174%%6
M4%-35E555U%6U=564%37UM145=;75=36UM+05%%455914536UM;1T-'0TM#7
MT=;6T=5555=04%-=4E=45E34U]34U-77UM15U5175U34U-31T-#7U-54U555
MU];6T=#65%145U%37E]65E%75=37U-37T='1UM;7U]'3T-34U];55%555514
M5-555U=55%345%!045!15U75T-#7T-W3T-/3T-34U]145E=75E975%174534
M5U'4UM555U77U]34UM/6U-77U]?4U57555=75U77UM175=555596U=164U%4
MU=34U-'3T]'7U]37UM36T=;4U-37U%1145145U=75%555%145%975=77UM?1
MT=?7U]545%75U574U515U]545U355%=55=74U];0T-?4U]145U=75U94U557
M5E175=75U=37U575U]'6UMW<UM?1U5?5U575T==55%!045-15E%7U]?7T=;7
MUM955%155%14U=155=?6U-37U-345%7755975=555%=4U-31T]#0T=?0T-57
M551645!75517U=155=3555115]57U=37T='7U-'0UU34UM145]745%175=74
M55155U945%975=55U=36T]#6T='1T='455117%U34%;55=77UM34U%565%17
M4534UM;1TMG<TMS2T-;755555U%34U-34%%75534T=;455=65U55U=36T='7
MU-34U];4U517U=175M355=36U];6U]#1U];155=45%=04U-15E965%755E?4
MU=?55=?0T=;1T=?6T];7U-77T-95U];55=5445%34U=65E544%%45U95U=31
MT=?6U]74U-?6UM;6T=?4U-37U%54U5575%145U=75M745U945E?5U=?1UM#3
MT-'7557455355%355%76T-155%=645%75575U]?5U];1T-'7T]/7U]15U-16
M5]545-?45-;1U5175]174U-15E375%#6T]36T=37T-=55=35U5915=555%=4
MU=555=36T-/45=375%%455155%71T=34U]?6UM575E97U574UM;75%34T-'4
MU];4U%515M555E94UM1555=745!34%975-74U];3TM#0T=#0UE155535U515
MUM14U-37U%=7U%565E115E=4U=?5U-;7T=#7U]#1U%545U=75E;5U=37U%15
MU%=34516U=75UM/2T=#0T-?5U5755=145%175%545-3455=65E=65U=75%%0
M5-75U-?7T=#0T]/0T]/1U-?0U%555%975U%65E!34%!15M75UMW<T-'3TM?5
MU514U5165%=75E965U75U-;1T-?4U5545554U];6UM?6T==45%=145!045=4
M5U145=77U-?1W=+3TM+6UM'4U=175U165U9175%74%155]31U];6U-31T='0
MT=#1UM;6UU5745%75U=65U145U=75]555=?0U%75U-31U]30T=?6UU14U5%=
M4%!25]35UM#1T-/1UM'45=?1U5554%%45U?7UM37U]545U=45515U-?7U];7
MU-?55U145U15U575U%145%=5U-?7U-545%975U755515U-?7UM;1T]'55=75
M5%35U]'1U595U576U]36U]1545!045965%34U-35U-;0T=?4U5555U%65U=5
MU5=4U]15U-;7UM95U=?55%965-;65534U51555=5U]35U=75U];7U=74T-57
MU=75U]?4U%565E514U36U-745=71UM33TM;655965U155=77T-;5U%575E96
M5U=5U=75U];6T=?7U]'6U-7555=65U145%95U554U5=6U575U]15U]?4UM#0
MT]#1T=15U55645%15U=65-545-34U=?55=345%15U-;7U-;0UM'0T=?7U%55
M5U%15E%15E175-755=545=35U=37UM#7UM/6U-36UE575%1455545=545U=7
MU=37T=155575U555U-?7U]?5U=34U];55U915E914U%45=;1T-#0T-#1UM?6
MT=;6U515U554U=564E!15E915]75U=545%755=31T=#0UM?6UM;7U55645%3
M4U95U574UM'0T-'6U-34U%115-35U=?6UM?4U=755%=14%%15U15U=?6UM?5
M5=?2U]775514U-15U=555%545%175-74U-?6U];6U=75U-35U]155%=65U17
M5]55U575U=;7U-?7U%75U577UM?7U]?5U5=15U55U=37U]?75U!45574U];6
MU];4557555%15E934U945-36T='6UM?5U=755%74U]34UM'1T==55%1145%0
M4E945E%75=31UM;3T]#0T-'1T=?4UM145%94U%575U%65E175%545%555555
MU=77T=#3T-'6UM545U975%175=37U=3455555U=45U945554U-;1U]77U]?4
M5%77U]?6U]55U5175%75U%=1U=35U555U-?7U]#0T=#45%=45U=75U155U?5
MU5145514U554U=?5U=555=37U-?7U-;1U-34U=555%155%145-36UM?45=34
MU]?4U-35U-?5U=?55U945%=75%75U=7555=75%=75-74U]'1UM;1T=;7U-35
M55=455=4U-?7U]=45%1645975E975]71U];0T-?5U-355574U-36T='55=?5
M5=755%965E%145965%74U]36T-#1T='6T='7U575U=?5U=34U5175E%14U-2
M4U%65U75U=;0T-#3TM+0T=;7U=545E=75U35U=745=765=345%1555=45-77
MU]?6UM#0UU75U5175E%15%545-?6T=;7U-7555145]34U-'6UM?7UM=55554
M5%=14%%65U14U=37U]55U%35U%555U?5U555U=75U=34U]'3T='1UM35U=54
M5U545%745555U=155E945U945%75U577U]36UM?7U%165U54U=37T=#0T=?5
M5=355%545%=45%77UU755%9745!75%15U-?7T='1T-'0T-;6U];6U]545U96
M45%65%=65E175U545=74U=75U=77T=;6T=#0T]/0UM?555575E%15E37UM?6
MT5565%=45%=45%5555745=77U]?6U]?7U5175%975=74U-35U5175E=75%74
MU=?5U-?6T]/3T-'6U=74U5545U%05E975U34U-55U=74U575UM'4U-37U]37
MU575U51455=65U%15E95U=75U-'3T]/2TM/6U%575E%65E=5U5545U155%75
M55555U34UM?1U]?6UM?6UM?7U]35U-5455105E545=?45=55U=75U-75U-75
M5575U=75U5175%=75-75U-?7UM;6UM?4U-75U-77U]35U=54U5575U545557
M5%35U-?7U5164%%75-74UM/3U];6U]37U]545=77U]'0T]'4U5545E%14%!0
M45=75%75U]?7U-545%155=74U-75U-?6UM'1UM;6U5175U975U=5U]'1T=#1
MUM34U=345E!375)04%;5U]?4UM;1T=#3T]?55%=04E96U='0TM/1U-355E=7
M4E]<4U;5U]?6T=+<U%955555U=?1W-%4U5545]365U)05]?0U57555?5UM?2
MV<S1?4O2V==E8?_N45E41>;A=6)-[95D%';GE=9H%WWBY4%%SL1Q>TCW_N7=
M9='T0WEZ?<OO_.7DW%?U54A?<'14W$)E9GY7V,?W_?#87T/2P5)#T/7R\\'5
MU%I$7WYP7U10U-=$P<I'5]M?V,#"7EG*WLK93$]=1G-,T_7#77=7Q<3)W%5/
M5=M=TE;=VLW91=_015I/14!:W573QL+)SM-$WMI`=71:5-555]+'UM+>T%->
M55324EO?P,1=1MK'V]!=T-)07%Q%6==?TLG84U976%/85D92U=-64U%4P,W7
M65W$V--21,?!T4!&W=]57U?;45Y=1%I0W]70U5?1TM]7U%%5Q\';4UU4U='1
M4%-44-+'PU5:T5507UY95-Q?7]_2T-Q57%;2TM9;6E32V571T%3<T5!%5-5?
MT='<V]#>TM324T!?W51;75;1WMY14E544E?<UE#44]'9U5'0V=W<5US1T%%&
M7M;3T-596-_!TU!07-S34594T]55TM534]'?TM535-S04U%5T%%97%!17=76
M5<32UMG3UE)=4%9>4=#7T]/4U-944516U])7T][<W-177537U-5=7%-7U597
MT]#4U5!04E?65%=3T<78W]U5U]1155914E;>UM#65];3TU57U=537D535]'7
MU]#5WM-04E)=5='5U=S2U515T=36U%!5UM%655505=?6U%=4U]575570WM/7
MT=+7U5-65E-7U=;4T554UU905U%7U-964];3T5=4U-'25U?0W-115M32UU!0
MU-904%)0U='=UM37T%75UM74U5155555U%575=3755%75=;55E'4UM?7U=#1
MUU54UUIV2T=?5=/>VL3'QL?'Q=O9W]W3T=;5551645!34U)24E)24U-04%%1
M5E975%155=74U-37U]?7U]?7U]?7U]?4U-34U-34U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
9U=75U=75U=75U=75U=75U=75U=75U=75U=75
`
end

View File

@ -1,323 +0,0 @@
# $FreeBSD$
begin 644 8.al
MT]945E=14%975%145%145%15U=75U=555=74U];7U]'1T=?4U-545%=65E97
M5U=45%155-75U-?6UM34U]34U-?7U]?1UM?7U-355%=145%375!14574U];0
MT-#1UM'1T=;7U-3555%25E175U?4U5755=555574U575U=36UM'6UM;7U-15
M5%965E=755155577U]355=?455915-77U=745M76T='7U-77U%165-?4U-?4
MUM?4U514U5=45U945E755%16U-#7UM;7U]7555=55U=45=35U-?1UM?1UU13
M4517U574U-37U]?6UM'1U-77U%545U15U5165E145514U=3555175-37U-;1
MUM;1T-35U5575E975U175E15U=35U-34U-555%74U];6U];4U=34T=;45577
M55175%545%%6U515U-;6U%145=355=37UM575-71T-?45=5445=45=575%14
M5U=5U-36U-77U]?4UM/1T=1555555%35U5555%175U=65U=75%55U]?6W=+6
MT=?4U];7U]?555545-545%145%%05E145=74U]?7U-'2W=/7UM'75%35U554
M5U155%145U=75E!15U75U=?1T='1T-#7U-34U51755504%=645!15]74U];3
MTM#1UM;6U-35U=575%35UM;1UM?6U5355%145%175U=65E945%35U]?4U-34
MU-75U-?7U-74U]?5U-36U]545%175M345=3555545%35U-35U=555=75U=?7
MU-77UM;4U-34U515U5175E=45555U-?6T=;6UM'1U]35U-545%=75U175]55
M5%145%=45%75U=345=31T=/2T=?455545%145575U-?4551555175U175E97
MU=?7UM#3T-'6T='1U%5555175U75U5145%1745%65%55U=35U=37T=#0T-/3
MT=;1UU355%914%!145=45%=45=74UM'1UM?5U=755=77UM;7U=37U]75U557
M5E%65%15U-34U=77UM;6U];7U=75U=75U=77U534U]755%1445)05%=65%77
MT='0T=#1U]345514U=34U-36T=?55%=75E%045=45=34U-34U-37U]37UM'6
MU%75U-3555755=75555745975%75U=345515T-#6T]'7U]155%=65E%65U=5
MU=74U=555%=75%55U=37U];0T]#1T=;4U=75U5575U174%945%15U-?4U=37
MUM?4U-?6UM'3T]/6U5=75%%=4E%05E75U]34U5755555U5545E=5U=77UM;6
MUM?4U-?6U]55U514U=7555545U=75U=555555=75U=74U=74U-?6U]?4U-75
M5=55U=?5U=955M555%15U-74U];755175E1555555=555514U-W%W5-65=%0
M7U!65U)0U='6U576T]#5U=?6U5=4U-?4U=;1UE575E964%!65U=75]?6U=31
MT]/6U=?1UM;7UM;45534UM?4U]?45%965U914U!15E34T]+3T=;45U%15E55
M5574U]?6T=#6U%545U965U35U-34U]'1U-31T-?55-775%%45%965U164595
MU]?1T='6UM355=74U=755=55U=?6U]34U-74U%575U=14%94U=;0T='6T=;7
MU-34U%1145=55=555=555=34UU545U!15%945=36T='0T=/0T-'7U-545%15
M55145=74U5145%114%945%14U=75U-;3TM#0U]34U5175-555%=7U=?7U];4
M55175E=45E975U95T-/3W-+1UM575E=45U=75%15U=?6UM'4U-555%34U514
M5]75U-?6T='4U5545517U=755%=5U-34U-?7U%575E915E=45575U]'0T]/2
MTM=65]545%55U=545%15555555145%55U=?7U]?4U=75U]'1T=1555545U97
M45%15E14U=37UM37UM;0T-#0UM;6U];7U51745%04%!045945='6U-'6U]?7
MU]?7U-?455165U975U=45=77UM'1T='6U%145%5555545%14U=76T-'6U]15
M5%145%75U=75U]?6U]345%965E=55%75U-355-31UM;1U]745575U=555%16
M5U75U5555U!04U!7U=?7U]?7UM#0T-/1UM75U-7555175U=75E965E%15-74
MUM'6U]?6T='1UM;6U]?4U-?1U5=75E-34%975%35U-755=75U-34U-355575
M5574U]?6UM355%=75-55U=34UM?7U]7555175E=75%74U-35U=34U=74U-74
MU]?6UM?7U%94U5145=75U=74U-37UM;1U]155=75U5175%75U5545%145E!1
M5E=75%75U=36T=;6UM;7U]?7U-74U=75U-34U-155U!045%65U35U-76TM/3
MTM#1UM145U=15E965555U575U5145%555-74U-?7UM#6UM?4U]34U]355%17
M5U145U=75U=4U=35U=?7U-75U5555=77UM'1T-#0T-9455575E%145%75U=7
M5-77U]35U=?7U]?7UM?6UM;1UM1555755%=75E=75U=65U145%=45=74U-?7
MUM;7U-37T=#0T=?55%175U=65E%15E545-15U=37UM?6UM?6UM?7U5555=55
M55545%54555555145U75U=?7UM#0T-'1UM;6U-555U%04%!15E=45%555=74
MU]?7U-555=74U-?45=?6U-;7U-5555145=37UM?4U-355%5555555%=75U15
MU=34U]34U-37U-34U-?4U]?7U]155U=75%575E975U945%=45=75U-?7U];6
MU]?0U534U5555U=65E975E15U=37UM?6UM?4U=77U]?6U];7U-7555545U91
M4%-05E?5U];6UM'1UM;6UM;7U]34U-555%=75U145=5555755%975U%45=74
MUM'0T-#75575U-37U5545U=45=5555=75%1555145U155=34U]'0T-#1T='0
MT=;4U5914%945-7555175E975%175U155=31W]W=W=#1U]75U5165E%04%%1
M5E145%14U=34U-?6U]34T=#3T-'6U]?4U5555%114%!045945555U=77UM;6
MUM;7U-34U=34U]?7UM;7UU5045904%975%175U=4U=?6T-'6U-75U=755555
M5=34U]35U-?555145=74U5145%=5U=37U]?7U-34U-74U=545E975=?6U]35
M55=75U=75==55-555=34U]?7U=75U=75U=74UM;6UM35U5175E%65U155%14
M5%75U-37UM;7U]'1UM?7U]3555175E=45=75U-545U=455755=75U-;45=;0
MT-/0U]555%=75E%65%555%75U-355%=75E94U=34U]?7U]?6U]34U-?4U-54
M55175U975U=5U-;7U]?555155=74U-34U];6UM'6U=745U%45%545U=45575
MU]35U=7555545-34U-34U]?4U-?7U5145%555%145%=145975%74U];6T-/0
MT-;4U-74U5555=755%175U965%155%!75535U-?1T=/2T]+0UM145U165E=5
M5575U=74U=555%975U=75-77UM;6UM'1T=?5U=34U=5555=75%15U=74U554
M5%=75%75U=36U]?6T]?4UM35U5545%545%545%145=75U=74U-?7U]34U-?4
MU=34U-34U]?7U-755%=75E=45=5555145U75U5545%14U=?6UM;7U];6T=;1
MT=145=545%=15E9045915E=45=77U];6UM;6UM?7UM;6T='6UM;7U-545U%6
M45%145965U15U-;1T='6U]37U%555%145-55U=34U-7555165]555-75U-?7
MUM'0T=;4U-35U5545U975E=45%555%175U155=77U]?4U]'0T]'6U]34U-55
MU=555%=75U14U=55551555155%545%75U]'6U-;1U]34U=75U-34U5575E96
M5U15U=75U-34U575U5555U=4U=37UM'0T=;4U-555%145U965U15U=74UM'1
MUM74U-555%35U]?7U-355=3655755%=645%15E?5U=3455555=75U];6T=?4
MU];6T=#0U%545E965E=45=55555555555=75U-34U]?6T=#6U]5455545=74
MU575U5555E-145!75%75U=37UM?7U];6UM?4U]355=75U=555=5555175U=7
M5U=4U=?0T]+2T]/6U]545%=45%145%145U=75U145-75U-355=37U]36T]?7
MT-#0T=?6U]75U51145!34%%75U145%34U-?6UM;7U-35U=75U];1T=;45514
M5U175U=645965U55U-;6UM34U-355555U=?1T]+2TM165%934U!65E9145?5
MU=37U]?4U-75U-37UM?1T-'6U%5445%04U%645945555U-355575U-?0T-/3
MT-'6UM;6UU575U9145%15E155=37UM#4U5575%965=36T-/0T='6U]155%=7
M5U=65%1455555U=75E35U=77UM?5U=37U]?6T-?5U=75U5575U355%74U%54
MU-;7U5%7U5915=?45M?1UM?4U]'45=31T=3555145E%5U]15U]!44%174595
M5576U5?4UM?4T-#4U-155%165U14U574U%35U]14U554U]15U-'55-;1UM#0
MT]W1U-?445-745U<4E945E74T=/3TM#0T-545%35U=34U]%45-?55U'45%E?
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
M$!(0%&Y[6]WE[>B4EY3KE9*&E.V`Z_;O\&%K:A@>!@<$!@00%A18\N&0F9*;
MF)&7[L=.>&L7%A`6%&MZ2ES_X.^5EI65ZI.&ZNB`Z/OH^V1B:Q\<!@<%!@83
M$A%SV_V6G9:%F9"2E_G-4&%L%187%Q1F97W.^>7IE>CJZ^Z?FN62A>3G[<MC
M9103'P0%&@0%$!(7?-_WE)26F)R1D)3[_]A^9V(5:VAJ861SU?7SXN[LZY7L
MZ)^1_9*1S?;^6FUD%1<2'A\=&1P4%&ESWL'C[.B6EI64E>?X\%%W<&=@86=\
M=4W0]_/XY^?ZY_O^\_#^^-O!\]E'6E!S>'AE8&!C8F%A97YU3%+=Q<_W\?#R
M]_7URL/`Q]C8W-/<T-73T570T]'1W-S<V]G9W-W=U5914EA%1$5%6EY7U-3?
MV-W1W]'55UU=7D=!14%"0T9'15]15E?1T]+;Q\/#S\[/S,W"QL7>W=-54EU?
M6D5$14584E-05=?7T]S2T]S2T=/1U%164EU<7UY97EY?75-0U='6T]#0TMW=
MW-S<W]+0T==55%=34E975U77U%74T-'6T]_=T=+1U]?55%104E%=7%!04U%4
M5E34UM#1T=#6U]?4U-31U]575E=34%%05U=34557U=#2T-/0U-?7UM?4U-=5
M5-75U=;3T-/3T='1UM?4U5545%545%1455=15E=45%=745974%%4U%75UM;4
MU='1UM375%145%%15]55U-W<T]W=W]S2T-#6U-1445914%965E555%145%97
M5%155%=5U=34U]?4U-355%175E!65%55U-;6UM#2TM+2T-;1U]545E%145!6
M5E945U1545955515U=77UM#3TM+2T]'6U5=14%!345=45-74U]35U-75U]35
MU=555-555-555=55U=77U-355%355575U=37U]?7U]37U-34U]355U;55%%4
M5%74U];0T];455=75U=75%=75U=75E95U]?7UM'6T=#7U]?7UM;6UM?7UM55
M5U%14%-05U965-55U]?4U]?6U]37U]?7UM;7U55455%155=75U%65U15U=35
MU=345=31T=/3T-;7U]?4U575U=74U-345=155%=65U175%915U1455755=?6
MU]'1U]?55U=65U=65U35U=36T=;6T-'4UM;6T='6U]755%=455=45%=64596
M5U145515U=37U-34U-74U]35U=35U-35U-75U=75U-37U]34U5545%175%74
MU=?7U]?7UM?6UM175U165E175-75U%74U]555%904U%75=37T=#3T]/0T-#6
MU%175E%15,7/=$'03,5&W=56TU;>5M;4T]#2UMW1TE77U5%65%%44E565M16
MT=;9UM#=U]%75=345E%74U%345=555345=35U=#0U=17U%54U]365='4U%55
M5-545%97U5!15537T=?8U=S5TM;6TE#14]!155'75%16UM1=W<'EVWYE?G=!
M6L'#V<',\578T]_;WLQ=YL)F6W%!1TO&=-I)T,Q&Q]S$TMC5VE7`653#7\1+
MU=9(Q4S065#56<9&WU[&7-M;\'?_<<E?QUU>R$W(</!+]7;R=<M%W5Q4VDK_
MP.%Q=69^9W%:V?)*X<STRM'TV-Y35][4<-)85U!<5=])UT3;V$K>T=U0U%3"
M4]E1Q=A'45=>V5C1U5[%7UO;6\=<S]_+Q%15>5IE24'>4?7"]?;%]=C<V433
M7-=%6T'364#9=]E%TU#:T=!7S=;8S%[!5]%?T5AUVD#<2,5;4-Q;P%W47<W$
M6]12T%#>V-#64T'<QM7?3L=<PUU1]TI;7%'/7U32W<-Q65#?64W`4<3?3<]1
MSG;+]539=-Y%TDI3VU372\G>R5K0VMU>4$'25]),TLUUUDS9W%[26?-#6--7
M]$-1V=S:=5'+T<Q#]MY06%_274Y$V%9)V%[V6U5<TL%%453;1-)!R%)2U-KV
M7L!0R=;00D'$<$5`W]%&WT3:T5!2]=-/S5W"1])<W,_55%_P3MU$UU55U4_U
M4LY!4-YTPTK>6\E1=_'8T47Q<M7"0T;$SW#<R$/?SE!!U5%P]-!90<I;2,O7
MU=[]5L;.0]W76G#%TDS$5$/44GC`]U19]]%95GW2\?5)7_/>05A4Q-!$4L7&
MVW79T=U,<\1`]$E65,=:3]+!\%+25\U1==K8V%I>W=?1U%7?2-)`7454R55,
MV]M57$'84?%>T,;WUD/'QT)'5-C;07%9S55P6<_8V$;:TMM$?O'7V7+6WMK*
M1L+.P]5>T%O5<W7<\U9'W,W;05=<\%Y7=5S"6%U;Q\%(0=WUT5Q#S%3?3%W/
M4-Y>\%[>1TM57-!;W-S27=+4VM/905??7]'05L715D=3T%G'6]I6]%=9TT7%
M=EUR7%-#S=7_7-S&S<%07];-14W;PMW455C9549?U]-/5]+&W-Q=5-9<14K>
M4U%-P,M0UM7:5-]45-+3U%K-7E;67D!?W5E15=C2S%+;S-=;1M5%5-+2Q5=;
M7]3!U=O>4-G6W$)96$305U11P-57Q\365U1!U=!.0]327=K;V,W%UE?'05]7
MUM965W504%_0T]Y1WEG0Q-G46%1;TE115L?94%=5TE354]#45$=2T%964%/6
MW];5T\36U5-75U35U<?8V-#>W-S56UY#14);7-?2U5?3P=W8TMS25%-<W=19
M6E'5T]%6W]O=4U17U-U104Q27U%5UM+?TM#`S=E265U36D==V\/&TM#<5%Q;
M4%974%-4U-35V<';U==74%!<5U315E=17U!25-?=W=W255%?4%!7T=[%Q=_2
MU];6U5-24EU=6D1<U=#0W=_<W=;54E!55E=14%!35U?0T-[;VM_3TU977UY3
M5U55T=[<U];2T%=375Y<75Q25=7655?4U=/0V=K9TM144UY!6UQ4UM/8WMO<
MT-?55U)65U=7U=14U-37557555;5T-=7455455514EU55U;1W]S3TM'1T=51
M5-=445'6T]S3UM;0T5-?65U?7%=4T=+0UU555%35TM#0U-#=UU924U?55%%5
MTMQ54U/4T%507=7=TU55W-[15E!4T-#55-7755%=75Q=4UU65-75U]/<V]+4
M5%577%]?5-W8W-S9WMS?T]74U59?7EQ25%1555=45E74UM?4U-154%'5U-?7
MU-36T=;0W=9545!34E!25-?6T]/15%74UE==4U!45%74U]'0W-+0T='6U];4
MU515U=755%%65%=04E-05]944E32W=;4UM?6U536T='55=175E=55=345=37
MUM955E945E!14515U=15U=77UM?6U-37U-?7UM?6UU=4U5755=75U-175=51
M45745%76U-31T-'6UM?55U!75E%7U5165%?5T='0T]W3W=S65E964U!04U?4
MU-77UU75U574UM=45U114%%34E94U-#0T=+?W=#3T=/=T5165U%14%U=5U55
M5='1T=15555745945%575E?4T=;1T-#=TM/<W=/0U5%24U-?75%4U=34U=?7
MU=355%=5U-?455155515U-?0TM'6U]155=35U=545U904U!65E76T-#1T-'3
MT]?4U=75U5145514U5545EU25U75U]'4U-955]345-74U=345=30T=/=T]#1
MU%174%!04E)24E%4U=31T='1UM?4U-34U=37UM75U]?4U-755%175U=45517
M55575U14UM'6T-'7U=755%755=?7U574U%14U-?4U]?5U-555U=75U75U=37
MT='455545U%65U%75E=4U=?7U-?6UM?4U-;6UM?6U-755U15U=?4U-565%=6
M5E965U=55=36U574U575U-75U555U-77T]+0T]/0T=;455145U165E104%14
M5E%64%%65%155%36T-/3T]+=T];4U-36U]345515U-=55U164%%14%!15E=4
MU-77T='6U]?7U=?6T='6T=#0T=?55E%65E%045945%555%755%155575UM;1
MT-#0UM355%=75E=75U355575U-?45E37U=545U37UM?0TM'1UM54U5=75%91
M5E965%545%145575U];1T-#1T-'6UM;6U=37U5575U9645!04%%645!75%74
MU-?7UM;1T-/0UM#=T=37U]?7U%175%545U975%545=555U9145!15=37UM#3
MT='6U-555%=65U55U=36UM36UM35U=55U=?6T-/1T=;555=145!145975]75
M5U95U574U-77UM;4U-;1T=?5U=74U=75U-37U-575%555%35U-74U%55U]'5
MU=555%155=74U-75U-37U=77U-35U-75U-545%=65E%65]77UM37T-;7U-37
MUM'6U]75U%15U5555%9145%045!15U=4U=?1TMW<W-+3T-;6U5=45%%045=5
M555455=14597U=37UM#6UM#1UM#1U]=55U%35E=65%5555555=35U=35U-?7
MU-7555545-74U-34U]?4U=5555145%15U=755=77U%55U5545%175%555575
MUM;6U]?1UM?7U]155554U=;7U-5455165E%05U15U575U]?4U=75U-;7T='4
MU5575E%65%165U545-77U]?5U=37U];1T=#0T='6U%555U=65E=75%175=55
M5-74U-155E77U-;6UM'6UM=55=355%34557555155=555U=55%=75%155=36
MU]?7U-?7U555U-34U]15U554U-?6U-545=545U145=75U=?1T-;45=?3UM37
MU=?7U%545-55U5545U!24%%75=74U-?6U]37UM#3TM/1UM175E914U-045?5
M5575U-74U-75U=75U-37UM#0T-?7U=35U-545E=64U)75U955535U=77U575
MU-74U];1T-'6UM;1UM575U1455545%145=555515U5175%35U%55U=?4U]?7
MU]?555175E=5U55555155U355576TM'1T-;4U]34U-34U-74U]?6U]555556
M45%045%15E=45=77T-+2T-#6U]?4U=545U965U=5U-?7U-3555555%965-75
MU-?6T=;7U%75UU115%175=55U=34U-;6U]?4U5545%14U=77U-?7U-?7U-35
M55145%9145%65E965U35U];6UM;4U-?7U-74U-34U]?7UM'6UM?4U%5145%1
M5-?555545=7555555%=75%75U];6T-+2T]'1UM155U=75%=65E965U=45=74
MU]35U-34U=37UM'6UM?4U]?555555575U-355U975%=14%904E=4U=;6T=#1
MT=#0T=;6U-?4U5145555U=74UU575U15U=75U=34U-37U]?4U5555%155515
MU=34U-555%155=75U=35U=74U-?7U]?7U=3655555U15U=75U=5555555535
MU-755=755=55U=;4UM'55-?6U=30UU115]565E=45E355%77U]355%975=75
MU=;1T='0T]/3T==55U=64E]04U-7U=77T=#1UU155=75U];6UM;7U5555=75
M5%545E%15E=75%35U=77UM;6UM?5U=755%555=75U-34U5545U975U555-74
MU-74U=;1TM;4UM3555555%555%175U145%75U-75U-37U]?7U-75U-34U]?5
M55575%75U55555555%74U]'1T='1UM1455175E=65E=5U=36T=/0T557U=34
MU]5555145=75U=155%=65E=45575U-34U]?6UM;7U]5555555%75U=755=55
M55545=555%145U35U]?6UM?7UM;6U]75U-34U-54U==45=545=5555=75%97
M5%15U];7U-755=74U];7U]?7U]34U-75U-34U-555%1555555%=65%145555
M5=75U5545%555555U=?7U-?7U]=55E545U74UM'1UM'0T-'6U]35U5155U15
M5%175U914%%7U=36UM?4U=37UM;0T-'755=75E=4U=35U-145U145%=65E14
M5=74U-;0T=;6U]'3U-?6U-34U-555%555%155=555=555-555%145=77T=;6
MU]355U915E=45=34U-35U=34U=74U=?55=555555U=74U];0T=?555175U75
M5U%55535U]?7U-545U155%965U14U=?6T-+2T]#1UU5745%75U=65E%75U55
M5=77T='1T='7U-37UM?7U]145%=75%=75E975%545%555%?4T=37UM?4U-35
MU=74U-155%=45%3455545-74UM'0T-;75517U=37U%545E945=75U=?6UM?7
MU-37U-5555545%=45%165-74U=?7U-35U5=155545515U=34U];6UM;1UM?4
M55575E965%75U]'0T-/0T=;555164%!045=75=75U=?7U-555%545U975%74
MUM'0T-/0T=?5U=75U=54U-955%=145%15U145%15U-37U]'6U]?4U]34U]34
MU=55U=155=37U-37U-5555175%=45%145=75U-?7U]?7U-?75574U555U=34
MU]35U];55=?455755%145%=75%=75%74UM'0T-?555%04U)05E74U]?1T-#1
MT=;7U=75U-355%35U5545=75U-34U55555555%75U-?6UM?7U-355=365=74
M55755%=65E=75U145U7555555=76UM#0UM?6U]?6UM?4U5575U%045975U15
M5=74U];1T==55U=45=77T='0T=;6U]5555545%1745%55%35U]35U=355515
M5%555555U=55U=74U];6U-755%5555=45U975%145-75U=36UM;6U]34U];6
MU]?4U=75U5555%175U=75%914%'5T=;0TM#1UM?7U-37U-54557555555514
M5U=65U975574U]37UM?7U]?7U]34U5145U15U=75U-35U=555=34U]?7U=75
MU=75U=;6UM;7UU115U%15E955%=45%55U-37UM?6U%55U575U-34U]37U]37
MU];7U]3555=75U=45U=75U74U5555=545%=45%74U]'1T-/3T]'455545%=1
M5-575-35U=555575U=74U=74U-75U-555575U=34U5545%145%77UM'6U]'6
MU-74U%75U=77U-?7U%75U-7555545%145575U555U=34U-;55-15U=75U555
M5%=45U975-36T=#1T='7U%545U=65E=4U=35U]?6T=#0T=;6U]555U965E35
MU=74U-34U5555U915E%15E15U-?7U]?6T=/2U]?1U-555554U=55U5=45%=4
M5-75U=555-37UM'1T=;6UM34U=75551555545U15U=755=74U=545U=45%75
MU];1T-'1UM35U5175E=445!45%74U];6UM;6U-745575U-75U=75U-355514
M5U965E9645=4U-?7T='3TM#0T=35U5555555U%555515U5545U=75U155=55
M55545U?6T-;1T-'1UM355%=75E=55=74U]555%145%75U-555%945%74U-;6
MT='7UM;6UM?455175E=45%75U=7555545%15U=75U]?7U-?6U];7UU115%=6
M5%34UM'1UM155=5555175U15U=?4U-155U975U=4U=3455555%145-37U]'1
MT-/1T=;7U-755%=45U=555555=75U];6U-75559155565E155=74U];7U]75
M55=65U=4U=37T='1T=;6UM?7U]=55%=745%14%975=36U]355575U-;6U]?4
MU-34U-?1UM155U975U=45%5555565M34UM'6U]37UM'1T='7U%5645%15E96
M5U5555555=75U-55U=37UM'6U]155-555%145%145=74UM?5U5545575U]35
MU=75U-?6T-#6U]'65U96459645965577T=#3T-#6U-545%175U=75U=45=77
MUM;6U%755%=75U=75575U=555555U=74U]'1T=#0T='6U5=65%15U-355U97
M4U#5U-;0T-'6UM;6U]574%)=4EU05U965-35U=;0W=S0TMW=T-'755=65555
MU-;1U-#6U5114%!24%Y:7%7`RTUURL1C$E#KPOSCX]_UQ&UA\)SJ%AIODI-,
M'Q'R^N)`]<9M;F3LEY3A8&+2\607%GSCE)'G1%'R_5=Q<'?3S<!Q8F]F6=O\
MY^#(>&-SS_721-CAX^3]S]C>3V`5;5U<<WC2YN[!0LY2_>7#?&9<P?'7TMO9
M0V1^4OOW765@7LK@]-/=5OG9VDQ^S<K*7D-1<=77?4MWTMQ=R</]S,S"T<]2
M6GYE2%/%7E[9P/7/P=585-#<<'-7R<[95%+*],U=35Q>UEES=DY%S__X^=Q.
M=%_;1TA>TM=1T$Y?]/#+U4M6TT-/=<S$P-=.QMG]R5?>3<)9<G!*SU31T-?8
M5,?77D5-4=C=4%744%3.P\376]S2W-!?7%I04UE(T<_>4U'%TMK73$)<Q=I0
M6T!2S\O%TM'.QUE#3TQ:6-78QL/'V]W:U$)86%-?14]"Q<G$W][=7=79V-U&
M3E#655=8W<W;W5I2W55?3$30P<='0E'&]]I425[6Q=E:05[2P-K5U=_;W%=8
M4E)?7M';S-Q7U%]7UU-$0]_26%+4P]I045A2W=7=U-W2WM9<4%S6TE1?7==5
MT5127E#9Q-K54=%64E%27%;?S-Q>65?%WU)-6=G!QM934U;04-%37$53U]31
M4=;;V-O9W]906$A-7M/15571V=_<T-=?6%35U=#>V-E15=+3U%-065A'6%E?
MT=[:W-30Q=#57T535=/4UMW%V-'74%9175!15-505M73UU77TMK55U!05E?3
MUM'645+6TU574UU6T=76W-K;55A=5=+>5%#5T5135U974UE74534U=#6T]_>
MW=_54%;45UQ=4EQ35-;65515U]'1T='0T]#7U]W?T%105D=Q=4%>5]'<V\7$
MQ\3$VMO>W]W3T=;455175E%04%-34U-34U!04%%15E=75%15U=74U-34U]?7
MU]?7U]?7U]?4U-34U-34U-75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U?______________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
:____________________________________
`
end

View File

@ -1,232 +0,0 @@
# $FreeBSD$
begin 644 9.al
M5U145-75U=75U574U-145E=5U-?1T-35UU55U5=5U-;6U5165E75U]355U%6
M5U15U5555U;6W]1<4U545=31W=[?W=#4T=#1U]545U=04U-15U1455545U14
M5=74U]=55%55U-;6T]+0T-'7U]35U5=14EU=4E!15U155-75U]'1T='1T='1
MU];1UM;7U-555%145U965U=455555%74U];1T='6UM?4U-555U975U=75=74
MUM=75M7555545%74U%555%74U-?6T=;6UM?4U5545E=75%=4555555555=35
MU5175-75U=74U]37UM?7U];4U555U=75U]?6U-75U55555145='6U=?7U]?4
MU555U5555%175U=75U=75%5555545%75U];7UM3555155=37U]'1UM?6U]75
M5%145U=45U=75U=45=?0T-/3T]#6U]155%144U-75E35U=74U-3555=15E=4
M5=37T=#1T-#6U-555%145%145%145514555555155-74U-?1T-'6UM'7U-55
M55145%555U945%555555U=30T=37U5155U15U-35U-?6T=;1U-15U=355%15
M55175E965-75U-3455145%=4U-;7U]?7UM'0T=;45%=75E=65%=55=75U=75
MU=34U%75U5=5U]37T=;7UM?6UM?7U-555=545U=75U945575U-34U-?4U554
M5-74U=34U-?7U-75U=555=75U555U5145U155%555=75U]34U]37U];6T-95
M55145575U=34U5175%1455555=35U=55U=36UM?7UM;1UM?4U]3555145%=7
M5U=145975%145=37T=#3T]/0T=?4U=75U=555U15U5124%9045915E34U]'0
MT-#0T=;6U]75U=75U55555=65U=75555U-34U]?7U-34U=75U555U575U]34
MU5545U=75U=75-37U]?6UM;1UM?55=1445145%5555145%355=74U-74U];7
MU]37U]34U]34U-35U5175E965%75T=#0UM?4U5575U%15E=45%=4U=?6T-#6
MU-355=75U=75U-?45]775=755=755=55557555545%15U=?6U]?7U-555%=4
M5%555=74U=7555555=75U=75U=755=74U]?7U]34U-74U-?7U]37U]?6U-75
M5%3455%65E965E965E=4U=;1T]/1U-75U-35U=74U-?6UM;455575U965E=5
M5%75U-?6UM;6T=#3T-'7U-555%175U965E=75U14U554U=745%!4U=36UM'1
MT]/3T-;755175E%045=75%555555U=74U]15U5175-75U-?1UM;6T=;7U=55
M5%=14%%65%35U]?4U-34U=75U=75U]'1T];1TM#4U5145U965U145U=75=55
MU=75U=75U-?7U-355515U=37U]?7UM?555155U=45%175%545=755=77U];6
MUM;4U5145%155=75U=37UM=5U=145%175%14U555U=?7U];7U]?7U-75U515
M5=74U]355555U=75U5175U145=34U=75U-34U=555=75555555545%555=75
MU575U]15U]W0T='55575U=755514557555155%145=75U555U555U-755575
M5=75U-;6U]?4U-35U=7555145U=45E?5U-?7UM;7U]355=75U=34U-?55U75
M5%155%=455545U35U-55U-?7UM?6UM'1UM?455545%55551745!145?5U=34
MU-155515U=37UM;7U]37U]37U-?4U-75U5545U965E?55%?55=77U]35U=74
MU];1UM?6UM;55%=75U15U574U]?6U]?455545U965U=45=36T=#0T==55%17
M5U=455155514U=34UM;7U-15U-37U5%555=4U=34U=555555U=75U-?7U575
MU-?6UM?4U-35U=7555145U175%145%75U];6UM;6U-7555175U145%555515
MU5555=74U-?6U]?1TM;7UU545U=75E%145%15U=4U-;0T]#1UM?4U5545=74
MU];0T-'6UU5645975U35U=55U=34U-37U-555%1455555=75U555U=34U-55
MU5=15=54U=34U-75U555U-37U-74U-155%=45%=755555=74U-?7U]555515
M5575U=35U=36T=#3T]#7U5545E945%74U-3455175E9145%15=;7UM#0T]/6
MU5145%145%545555U555U=75U=74U-355=55U=74U-34U-;7U]?4U-355%17
M5E145%155575U=34UM;6U]37U]3555145=174%=75U155=77UM?7U%74U-37
MU]?7U]5455175%1555555=35U=?4U=75U=74U=75U575U-?4U-34U%545%75
MU=34U-75U=?4U-3555175E775%145%555U14U=74U]?4U=37U]36UM?55554
M5%14U=34U-5555145%=75E14U=34UM'1UM34U=555%145%=45=75U-35U555
M5555U=37U537U]?6UM'1UM3555=145%65E15U-74U]?7U-75U-;7U514U517
M5%35U=75U555U=755575U-74U-75U=755=75U-?5U5545=77UM;1UM36T=74
MU=7555175E975E%15U1455545=?1T-#1UM?4U-74U];1T='55%=14U-345%7
M5U145=74U=34U-37UM;6T-'1T=;4U5555U145U15U5!245=5U=?6U];6UM?7
MUM;0T]'6U-755%965E=75U15U=35U5545%165U555-55U-?7UM'1U]34U=75
MU-75U5145%965U75U=?6T=?4U516U=14U=75U]?4U=755=545%175%=45%14
M55555=37UM'0T-/0T=;6U]?7U]34U555U=555U=75E=65U=65E%65E755=37
MU]?7UM?1T='6U]175]=55%155%=75554U=37T='1T]+3T=;4U554U=155U15
M5%965E975U965E%145!15U15U];1T=;7U]?4U-34U]'1T=/3T-/0T-#3T]#6
MT=+1U=555=555U175E914EU<7%]>6$5:6EI;6%]24%95U-?6TMS<WMG;Q<;!
MP<#"P\/"P,78V=W0W=G<W-C9W]W64UA!27=S?'YY>'AY?W!U3D=0UM[&PL[+
M]/;Q\/#Q]O?T]<K(S\G.P,?%W=#%R_?.PO7%4%MW96=D86-@8FU@9V1_25/:
M]?'R_O[_^.7Z^N?E_O/TP]G0U=5775M!2'5U=W%T=71U=7=W=4]$4];;S<CW
M\/#\Y>?DYN'E__/`445*?'ME86!@8V!G>'UW1%)4T=/0W=_9Q<;`P\[+]?;P
M\OS]\O#V]<S!Q=Q4U_?_Q\?X]-?95GQY?&%B86UI;6!@9'UU4\7/]O_^_^7[
M_?[\]<[)Q=_%V=#9V-35UE9=7T5#0TQ*2DI+0T5;4L7XX/CFZN+ZY?)47T5[
M9V5C:6]O;V!E<UO2VLOVR<'`Q=K"QMO#S\'&Q]K!R\O)SLG/Q-=34EU04%E0
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
M0T=;4='1T-G:W]_8V<3/SLGW\/?)S\'9TU%;1TUW<W)\?GQS<75-1%Q05=/8
MQ\++]/;P\_+\_/#W]\O!V-)17U]:04-,2DI(='9U3$Q,1%]>7UU0U=#3WL?`
MS\G.R_3W]??WR</"VE1814]W<')]<GU\<W1*3UA05]S:Q<W(SL[U]<KU]<C(
MR</$Q-K?TM%55%1?0$%$3W=T24M+0D!%4E=7T\7:VL'&Q<?'VMC9WMW0T=/=
MT=77UE=24%U86UM:6%E:6EA:6E)44U365=7=W]S9VMC9V-[2TM[9W-/=TM;4
MU-34U51455115E=75U%34%!34U%145%5UM515-=74U745E?1T];0W=/=V=W0
MTMS0UM;455164UE?4%927%154U977UU47%A7UE=7T-'6TM+1W]C=T-S?TM+0
MU]/=T='2T]'0U5%4U5!<4%9=6%A>4E-<4-?1U]?1TMW6U=?45U?555975=70
MWM_>V=[?T];45EQ?75U>6%U<7U]?7U#6T='=W]W15%975E34UM;0T]'6T]W=
MW][<TM#45=555%=745!27EQ145-7U-;1T=;0T-'2TM#3W-915=164%)25E17
M4%?455555=76559455965574U];6TM+0T='1UM54U-=55-37U-7455%75%-2
M45165E75U-77T='3W=S<W]S3UU575E915=505E545]545U174U;55%;55535
M55?5UU77TM+0TM#7T=975U56455445755U%45E?5U-?1T]#1T=?7T=?5U-37
MU%5455165-755U945U%04E965%175=?6T=#=W=+0T]'4U]14U=?45%1445!0
M5E545U34U-77U-76U5%6U517U='1T='1T-;5U-'55=3755165U155=31U]37
MU5915E745U=55514U-?4U]=55=545%75U=77U-55U];4U-7455=45-74U]75
MU-75U5575%175U155=74U=755515U574T-#7UM#6UM;1T-'55%574E)64%;5
MU=7555=4U-74U]?45555U]?4UM;555575U=65E=45-77UM?7U=155=77U]34
MU=375%74U574U-74UM;7U];7U%54U=5455165E71UE77U%9045965U74U];6
MU]?7U]?4U-?7U%575%145%=75=75U-;6U]37U]145%545U355]77U575U5=4
MU=75U=35U575U=75U=34U]?4U%57U]55U-75U5575U145U55U=?4U=345575
MU=77UM;1UM;1U%55U5165%=75%?4U]55U=14U-155555555555175%545=75
M5=37U-36U%55T==5U=34U-37U%55U=7555555575UM?4UM?4U=555U175E!0
M4%%75=31T=#1T-#1UM?6U-555%75U=37U]?6UM?5551645=65E=65U=75-54
M5]?4U-?7UM#1T='6U=5555=75-75U5545U155%75U-75U5145-74U=?6UM?7
MU];7U57555=45%1455145U965E%65=36T-'1T='6U-35U=#3U-34U5145U14
M5=7555555%=745965U145%35U=36T=#0UM35U=75U]74U5555=55U-?4U517
M5E965=55U=155-77U];6T=;5U-34U-5545!45E945%155=55U=74U-745=74
MU]'1T-/1U]?45%75U%545%=75%=75-37U]34U%555%145575U-75U=355555
M5555U5175U=75%34U-30UM77U-75U574U-?7U];6U]?4U5175U=645965E96
M5U55U=?1T]#0T='7U]35U=74U-7555155=74U=755575U5555%175U75U-?7
MU-?1U%%=45!6U];7U]?4U-175%?4T-#0U-14U]#5453455%>4%?7U-71U5;7
MTM;6UM#3T=%5U=74U]=54E)<4E=75E-7U-;3TMW2T=15U5504U/4S]1^6,3:
MQGINVNO'V-USY>I;%F?^D.UG%7'C^&040?G]T=7WTWUA3M/YY_Y285U^>41T
MR^'OZ>_;8&1:U]!'>E_QVG]L8$'GX_#34-C;0G75S\O9WMY6U]M41E%<96-?
MS,']\D35_%=TW49&R/)9?<+/V-M?0D=>2D7-],U52TA`U_3WVUO=V5)$7M;%
M\]I"5D1#=D/45L/!W5U4R<G!6%_36UQ;=$[1WMC&P-9=U]167U%9U=]<5=_2
M55#0Q\?>TU134]Q43U+55%+4P\?2U4E%W]Q>7M+9TU=&7$%6]\Y=15165-?>
MQL[?7%127]+15UI%5E9`6U]5S,3345W3T=G27=?;Q5=!T]-<5MW44M76WM'6
M55A265G645'7V==9U-+=W=537-#?U]16T]W=WU-=UM+57UM;1%S7W</%5=[$
MTEE>U5'7UU105];6T5-1UM%07=C:55-?4E94U=/?U-;57EW15E_<W=3<T%Q?
M5=S<W%5<U=74W='7T=55U%=25]/75E!?45905-_:T]765$50TE!2W=G7UMW3
M5U]44UA4TM%7W=-65-5?6='=5U%7U-'1UE=1T-C>W5%<5=1445=5TM[<U5A0
M5U?755%5T=S15]505E94T]115];3U%'5V]_4U-555E9?7EU0UM+45-33U-74
M4594W-+1W=?1T%5=4%-?5M145];55M;0T=/45M'=5%)35U70T]76T-#7UE=2
M75945]545%70UU355M30T%54U]?1UM+7U]?5U=775E=45]'75E34W=-66UU4
MU]!65=95UM16U515U=345-76U=?4UU75UU%65=555E57U=34U]#0U='<UE?6
MUU%25=S6UM#555?45U=5UU55U5-65$1V2D9?5-/>VL3&QL;'Q=K8V=S=T-'4
MU5175E%04%-34E-34U-04%%15E975U155=75U=34U]?7U]?7U]?7U-?4U-34
MU-34U-34U=35U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75
MU=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=75U=7_
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
M____________________________________________________________
9____________________________________
`
end

View File

@ -1,15 +0,0 @@
# @(#)Makefile 8.1 (Berkeley) 6/8/93
# $FreeBSD$
FILES= 0.al 1.al 2.al 3.al 4.al 5.al 6.al 7.al 8.al 9.al beep.al msg.al
CLEANFILES+= ${FILES}
.SUFFIXES: .uu
.uu:
uudecode < ${.IMPSRC}
FILESDIR= ${BINDIR}/isdn
.include <bsd.prog.mk>

View File

@ -1,107 +0,0 @@
# $FreeBSD$
begin 644 beep.al
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
2L(T&)"8PF;BYB6<'<YN6`SD[
`
end

File diff suppressed because it is too large Load Diff

View File

@ -36,7 +36,7 @@
.\" $Whistle: netgraph.4,v 1.7 1999/01/28 23:54:52 julian Exp $
.\" $FreeBSD$
.\"
.Dd July 1, 2004
.Dd May 25, 2008
.Dt NETGRAPH 4
.Os
.Sh NAME
@ -689,19 +689,6 @@ The message may have travelled from
.Dq Li Frame1:
to B
as a synchronous reply, saving time and cycles.
.Pp
A similar graph might be used to represent multi-link PPP running
over an ISDN line:
.Bd -literal
[ type BRI ](B1)<--->(link1)[ type MPP ]
[ "ISDN1" ](B2)<--->(link2)[ (no name) ]
[ ](D) <-+
|
+----------------+
|
+->(switch)[ type Q.921 ](term1)<---->(datalink)[ type Q.931 ]
[ (no name) ] [ (no name) ]
.Ed
.Ss Netgraph Structures
Structures are defined in
.In netgraph/netgraph.h

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd December 30, 2001
.Dd May 25, 2008
.Dt SPPP 4
.Os
.Sh NAME
@ -91,7 +91,7 @@ will cause the interface to operate in
.Em dial-on-demand
mode.
This is also only useful if the lower layer supports the notion
of a carrier (like with an ISDN line).
of a carrier.
Upon configuring the
respective interface, it will delay the administrative
.Em Open

View File

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd April 9, 2008
.Dd May 25, 2008
.Dt RC.CONF 5
.Os
.Sh NAME
@ -3530,75 +3530,6 @@ to be used within a jail.
If set to
.Dq Li YES ,
allow applications within a jail to use System V IPC.
.\" ----- ISDN settings ---------------------------------
.It Va isdn_enable
.Pq Vt bool
Set to
.Dq Li NO
by default.
When set to
.Dq Li YES ,
starts the
.Xr isdnd 8
daemon
at system boot time.
.It Va isdn_flags
.Pq Vt str
Set to
.Dq Fl d Ns Cm n Fl d Ns Li 0x1f9
by default.
Additional flags to pass to
.Xr isdnd 8
(but see
.Va isdn_fsdev
and
.Va isdn_ttype
for certain tunable parameters).
.It Va isdn_ttype
.Pq Vt str
Set to
.Dq Li cons25
by default.
The terminal type of the output device when
.Xr isdnd 8
operates in full-screen mode.
.It Va isdn_screenflags
.Pq Vt str
Set to
.Dq Li NO
by default.
The video mode for full-screen mode (only for
.Xr syscons 4
console driver, see
.Xr vidcontrol 1
for valid modes).
.It Va isdn_fsdev
.Pq Vt str
Set to
.Dq Li NO
by default.
The output device for
.Xr isdnd 8
in full-screen mode (or
.Dq Li NO
for daemon mode).
.It Va isdn_trace
.Pq Vt bool
Set to
.Dq Li NO
by default.
When set to
.Dq Li YES ,
enables the ISDN protocol trace utility
.Xr isdntrace 8
at system boot time.
.It Va isdn_traceflags
.Pq Vt str
Set to
.Dq Fl f Pa /var/tmp/isdntrace0
by default.
Flags for
.Xr isdntrace 8 .
.\" -----------------------------------------------------
.It Va harvest_interrupt
.Pq Vt bool
@ -4061,8 +3992,6 @@ Default
.Xr ipf 8 ,
.Xr ipfw 8 ,
.Xr ipnat 8 ,
.Xr isdnd 8 ,
.Xr isdntrace 8 ,
.Xr jail 8 ,
.Xr kldxref 8 ,
.Xr lpd 8 ,

View File

@ -1,7 +1,7 @@
.\" DO NOT EDIT-- this file is automatically generated.
.\" from FreeBSD: src/tools/build/options/makeman,v 1.8 2007/12/12 16:39:31 ru Exp
.\" $FreeBSD$
.Dd March 29, 2008
.Dd May 25, 2008
.Dt SRC.CONF 5
.Os
.Sh NAME
@ -300,9 +300,6 @@ Set to build Hesiod support.
.It Va WITHOUT_HTML
.\" from FreeBSD: src/tools/build/options/WITHOUT_HTML,v 1.1 2006/03/21 07:50:49 ru Exp
Set to not build HTML docs.
.It Va WITHOUT_I4B
.\" from FreeBSD: src/tools/build/options/WITHOUT_I4B,v 1.1 2006/03/21 07:50:50 ru Exp
Set to not build isdn4bsd package.
.It Va WITH_IDEA
.\" from FreeBSD: src/tools/build/options/WITH_IDEA,v 1.1 2006/03/21 07:50:50 ru Exp
Set to build the IDEA encryption code.

View File

@ -32,7 +32,7 @@
.\" @(#)hier.7 8.1 (Berkeley) 6/5/93
.\" $FreeBSD$
.\"
.Dd June 28, 2007
.Dd May 25, 2008
.Dt HIER 7
.Os
.Sh NAME
@ -101,10 +101,6 @@ bluetooth configuration files
gnats configuration files;
see
.Xr send-pr 1
.It Pa isdn/
isdn4bsd configuration files;
see
.Xr isdnd 8
.It Pa localtime
local timezone information;
see
@ -548,8 +544,6 @@ ASCII text files used by various games
device description file for device name
.It Pa info/
GNU Info hypertext system
.It Pa isdn/
ISDN
.It Pa locale/
localization files;
see

View File

@ -229,7 +229,6 @@ WITHOUT_${var}=
GPIB \
GROFF \
HTML \
I4B \
INET6 \
INFO \
IPFILTER \
@ -316,7 +315,6 @@ WITH_IDEA=
GPIB \
GROFF \
HTML \
I4B \
INET6 \
INFO \
INSTALLLIB \

View File

@ -9,7 +9,7 @@ SUBDIR= boot
# Directories to include in cscope name file and TAGS.
CSCOPEDIRS= boot bsm cam compat conf contrib crypto ddb dev fs gdb geom \
gnu i4b isa kern libkern modules net net80211 netatalk \
gnu isa kern libkern modules net net80211 netatalk \
netgraph netinet netinet6 netipsec netipx netnatm netncp \
netsmb nfs nfs4client nfsclient nfsserver opencrypto pccard \
pci rpc security sys ufs vm ${ARCHDIR}

View File

@ -451,120 +451,6 @@ device ichwd
device coretemp
device k8temp
#---------------------------------------------------------------------------
# ISDN4BSD
#
# See /usr/share/examples/isdn/ROADMAP for an introduction to isdn4bsd.
#
# i4b passive ISDN cards support contains the following hardware drivers:
#
# isic - Siemens/Infineon ISDN ISAC/HSCX/IPAC chipset driver
# iwic - Winbond W6692 PCI bus ISDN S/T interface controller
# ifpi - AVM Fritz!Card PCI driver
# ifpi2 - AVM Fritz!Card PCI version 2 driver
# itjc - Siemens ISAC / TJNet Tiger300/320 chipset
#
# i4b active ISDN cards support contains the following hardware drivers:
#
# iavc - AVM B1 PCI, AVM B1 ISA, AVM T1
#
# Note that the ``options'' (if given) and ``device'' lines must BOTH
# be uncommented to enable support for a given card !
#
# In addition to a hardware driver (and probably an option) the mandatory
# ISDN protocol stack devices and the mandatory support device must be
# enabled as well as one or more devices from the optional devices section.
#
#---------------------------------------------------------------------------
# isic driver (Siemens/Infineon chipsets)
#
#XXX#device isic
#
# PCI bus Cards:
# --------------
#
# ELSA MicroLink ISDN/PCI (same as ELSA QuickStep 1000pro PCI)
options ELSA_QS1PCI
#
#---------------------------------------------------------------------------
# ifpi2 driver for AVM Fritz!Card PCI version 2
#
# AVM Fritz!Card PCI version 2
#XXX#device ifpi2
#
#---------------------------------------------------------------------------
# iwic driver for Winbond W6692 chipset
#
# ASUSCOM P-IN100-ST-D (and other Winbond W6692 based cards)
#XXX#device iwic
#
#---------------------------------------------------------------------------
# itjc driver for Siemens ISAC / TJNet Tiger300/320 chipset
#
# Traverse Technologies NETjet-S
# Teles PCI-TJ
#XXX#device itjc
#
#---------------------------------------------------------------------------
# iavc driver (AVM active cards, needs i4bcapi driver!)
#
#XXX#device iavc
#
#---------------------------------------------------------------------------
# ISDN Protocol Stack - mandatory for all hardware drivers
#
# Q.921 / layer 2 - i4b passive cards D channel handling
#XXX#device i4bq921
#
# Q.931 / layer 3 - i4b passive cards D channel handling
#XXX#device i4bq931
#
# layer 4 - i4b common passive and active card handling
#XXX#device i4b
#
#---------------------------------------------------------------------------
# ISDN devices - mandatory for all hardware drivers
#
# userland driver to do ISDN tracing (for passive cards only)
#XXX#device i4btrc
#XXX#options NI4BTRC=4
#
# userland driver to control the whole thing
#XXX#device i4bctl
#
#---------------------------------------------------------------------------
# ISDN devices - optional
#
# userland driver for access to raw B channel
#XXX#device i4brbch
#XXX#options NI4BRBCH=4
#
# userland driver for telephony
#XXX#device i4btel
#XXX#options NI4BTEL=2
#
# network driver for IP over raw HDLC ISDN
#XXX#device i4bipr
#XXX#options NI4BIPR=4
# enable VJ header compression detection for ipr i/f
#XXX#options IPR_VJ
# enable logging of the first n IP packets to isdnd (n=32 here)
#XXX#options IPR_LOG=32
#
# network driver for sync PPP over ISDN; requires an equivalent
# number of sppp device to be configured
#XXX#device i4bisppp
#XXX#options NI4BISPPP=4
#
# B-channel interface to the netgraph subsystem
#XXX#device i4bing
#XXX#options NI4BING=2
#
# CAPI driver needed for active ISDN cards (see iavc driver above)
#XXX#device i4bcapi
#
#---------------------------------------------------------------------------
#
# System Management Bus (SMB)
#

View File

@ -1511,62 +1511,6 @@ gnu/fs/reiserfs/reiserfs_stree.c optional reiserfs
gnu/fs/reiserfs/reiserfs_vfsops.c optional reiserfs
gnu/fs/reiserfs/reiserfs_vnops.c optional reiserfs
#
# isdn4bsd device drivers
#
i4b/driver/i4b_trace.c optional i4btrc
i4b/driver/i4b_rbch.c optional i4brbch
i4b/driver/i4b_tel.c optional i4btel
#XXXBZ#i4b/driver/i4b_ipr.c optional i4bipr
net/slcompress.c optional i4bipr | i4bisppp
i4b/driver/i4b_ctl.c optional i4bctl
#XXXBZ#i4b/driver/i4b_ing.c optional i4bing
#XXXBZ#i4b/driver/i4b_isppp.c optional i4bisppp
#
# isdn4bsd CAPI driver
#
i4b/capi/capi_l4if.c optional i4bcapi
i4b/capi/capi_llif.c optional i4bcapi
i4b/capi/capi_msgs.c optional i4bcapi
#
# isdn4bsd AVM B1/T1 CAPI driver
#
i4b/capi/iavc/iavc_pci.c optional iavc i4bcapi pci
i4b/capi/iavc/iavc_isa.c optional iavc i4bcapi isa
i4b/capi/iavc/iavc_lli.c optional iavc i4bcapi
i4b/capi/iavc/iavc_card.c optional iavc i4bcapi
#
# isdn4bsd support
#
i4b/layer2/i4b_mbuf.c optional i4btrc
#
# isdn4bsd Q.921 handler
#
i4b/layer2/i4b_l2.c optional i4bq921
i4b/layer2/i4b_l2fsm.c optional i4bq921
i4b/layer2/i4b_uframe.c optional i4bq921
i4b/layer2/i4b_tei.c optional i4bq921
i4b/layer2/i4b_sframe.c optional i4bq921
i4b/layer2/i4b_iframe.c optional i4bq921
i4b/layer2/i4b_l2timer.c optional i4bq921
i4b/layer2/i4b_util.c optional i4bq921
i4b/layer2/i4b_lme.c optional i4bq921
#
# isdn4bsd Q.931 handler
#
i4b/layer3/i4b_q931.c optional i4bq931
i4b/layer3/i4b_l3fsm.c optional i4bq931
i4b/layer3/i4b_l3timer.c optional i4bq931
i4b/layer3/i4b_l2if.c optional i4bq931
i4b/layer3/i4b_l4if.c optional i4bq931
i4b/layer3/i4b_q932fac.c optional i4bq931
#
# isdn4bsd control device driver, interface to isdnd
#
i4b/layer4/i4b_i4bdrv.c optional i4b
i4b/layer4/i4b_l4.c optional i4b
i4b/layer4/i4b_l4mgmt.c optional i4b
i4b/layer4/i4b_l4timer.c optional i4b
#
isa/isa_if.m standard
isa/isa_common.c optional isa
isa/isahint.c optional isa
@ -1814,8 +1758,8 @@ net/if_media.c standard
net/if_mib.c standard
net/if_ppp.c optional ppp
net/if_sl.c optional sl
net/if_spppfr.c optional i4bisppp | sppp | netgraph_sppp
net/if_spppsubr.c optional i4bisppp | sppp | netgraph_sppp
net/if_spppfr.c optional sppp | netgraph_sppp
net/if_spppsubr.c optional sppp | netgraph_sppp
net/if_stf.c optional stf
net/if_tun.c optional tun
net/if_tap.c optional tap

View File

@ -366,83 +366,6 @@ i386/svr4/svr4_locore.s optional compat_svr4 \
warning "COMPAT_SVR4 is broken and should be avoided"
i386/svr4/svr4_machdep.c optional compat_svr4
#
# isdn4bsd, needed for isic | iwic | ifpi | ifpi2 | ihfc | ifpnp | itjc
#
i4b/layer1/i4b_hdlc.c optional ihfc | itjc
i4b/layer1/i4b_l1dmux.c optional ifpi | ifpi2 | ifpnp | \
ihfc | isic | itjc | iwic
i4b/layer1/i4b_l1lib.c optional ifpi | ifpi2 | ifpnp | \
ihfc | isic | itjc | iwic
#
# isdn4bsd, isic
#
i4b/layer1/isic/i4b_asuscom_ipac.c optional isic
i4b/layer1/isic/i4b_avm_a1.c optional isic
i4b/layer1/isic/i4b_bchan.c optional isic
i4b/layer1/isic/i4b_ctx_s0P.c optional isic
i4b/layer1/isic/i4b_drn_ngo.c optional isic
i4b/layer1/isic/i4b_dynalink.c optional isic
i4b/layer1/isic/i4b_elsa_qs1i.c optional isic
i4b/layer1/isic/i4b_elsa_qs1p.c optional isic pci
i4b/layer1/isic/i4b_elsa_pcc16.c optional isic
i4b/layer1/isic/i4b_hscx.c optional isic
i4b/layer1/isic/i4b_isac.c optional isic
i4b/layer1/isic/i4b_isic.c optional isic
i4b/layer1/isic/i4b_isic_isa.c optional isic
i4b/layer1/isic/i4b_isic_pnp.c optional isic
i4b/layer1/isic/i4b_itk_ix1.c optional isic
i4b/layer1/isic/i4b_l1.c optional isic
i4b/layer1/isic/i4b_l1fsm.c optional isic
i4b/layer1/isic/i4b_siemens_isurf.c optional isic
i4b/layer1/isic/i4b_sws.c optional isic
i4b/layer1/isic/i4b_tel_s016.c optional isic
i4b/layer1/isic/i4b_tel_s0163.c optional isic
i4b/layer1/isic/i4b_tel_s08.c optional isic
i4b/layer1/isic/i4b_usr_sti.c optional isic
i4b/layer1/isic/i4b_diva.c optional isic
#
# isdn4bsd, iwic
#
i4b/layer1/iwic/i4b_iwic_pci.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_dchan.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_bchan.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_fsm.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_l1if.c optional iwic pci
#
# isdn4bsd, ifpi
#
i4b/layer1/ifpi/i4b_ifpi_pci.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_isac.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_l1.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_l1fsm.c optional ifpi pci
#
# isdn4bsd, ifpi2
#
i4b/layer1/ifpi2/i4b_ifpi2_pci.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_isacsx.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_l1.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_l1fsm.c optional ifpi2 pci
#
# isdn4bsd, ifpnp
#
i4b/layer1/ifpnp/i4b_ifpnp_avm.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_isac.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_l1.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_l1fsm.c optional ifpnp
#
# isdn4bsd, ihfc
#
i4b/layer1/ihfc/i4b_ihfc_l1if.c optional ihfc
i4b/layer1/ihfc/i4b_ihfc_pnp.c optional ihfc
i4b/layer1/ihfc/i4b_ihfc_drv.c optional ihfc
#
# isdn4bsd, itjc
#
i4b/layer1/itjc/i4b_itjc_pci.c optional itjc
i4b/layer1/itjc/i4b_itjc_isac.c optional itjc
i4b/layer1/itjc/i4b_itjc_l1.c optional itjc
i4b/layer1/itjc/i4b_itjc_l1fsm.c optional itjc
#
isa/atrtc.c standard
isa/syscons_isa.c optional sc
isa/vga_isa.c optional vga

View File

@ -237,83 +237,6 @@ i386/svr4/svr4_locore.s optional compat_svr4 \
warning "COMPAT_SVR4 is broken and should be avoided"
i386/svr4/svr4_machdep.c optional compat_svr4
#
# isdn4bsd, needed for isic | iwic | ifpi | ifpi2 | ihfc | ifpnp | itjc
#
i4b/layer1/i4b_hdlc.c optional ihfc | itjc
i4b/layer1/i4b_l1dmux.c optional ifpi | ifpi2 | ifpnp | \
ihfc | isic | itjc | iwic
i4b/layer1/i4b_l1lib.c optional ifpi | ifpi2 | ifpnp | \
ihfc | isic | itjc | iwic
#
# isdn4bsd, isic
#
i4b/layer1/isic/i4b_asuscom_ipac.c optional isic
i4b/layer1/isic/i4b_avm_a1.c optional isic
i4b/layer1/isic/i4b_bchan.c optional isic
i4b/layer1/isic/i4b_ctx_s0P.c optional isic
i4b/layer1/isic/i4b_drn_ngo.c optional isic
i4b/layer1/isic/i4b_dynalink.c optional isic
i4b/layer1/isic/i4b_elsa_qs1i.c optional isic
i4b/layer1/isic/i4b_elsa_qs1p.c optional isic pci
i4b/layer1/isic/i4b_elsa_pcc16.c optional isic
i4b/layer1/isic/i4b_hscx.c optional isic
i4b/layer1/isic/i4b_isac.c optional isic
i4b/layer1/isic/i4b_isic.c optional isic
i4b/layer1/isic/i4b_isic_isa.c optional isic
i4b/layer1/isic/i4b_isic_pnp.c optional isic
i4b/layer1/isic/i4b_itk_ix1.c optional isic
i4b/layer1/isic/i4b_l1.c optional isic
i4b/layer1/isic/i4b_l1fsm.c optional isic
i4b/layer1/isic/i4b_siemens_isurf.c optional isic
i4b/layer1/isic/i4b_sws.c optional isic
i4b/layer1/isic/i4b_tel_s016.c optional isic
i4b/layer1/isic/i4b_tel_s0163.c optional isic
i4b/layer1/isic/i4b_tel_s08.c optional isic
i4b/layer1/isic/i4b_usr_sti.c optional isic
i4b/layer1/isic/i4b_diva.c optional isic
#
# isdn4bsd, iwic
#
i4b/layer1/iwic/i4b_iwic_pci.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_dchan.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_bchan.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_fsm.c optional iwic pci
i4b/layer1/iwic/i4b_iwic_l1if.c optional iwic pci
#
# isdn4bsd, ifpi
#
i4b/layer1/ifpi/i4b_ifpi_pci.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_isac.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_l1.c optional ifpi pci
i4b/layer1/ifpi/i4b_ifpi_l1fsm.c optional ifpi pci
#
# isdn4bsd, ifpi2
#
i4b/layer1/ifpi2/i4b_ifpi2_pci.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_isacsx.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_l1.c optional ifpi2 pci
i4b/layer1/ifpi2/i4b_ifpi2_l1fsm.c optional ifpi2 pci
#
# isdn4bsd, ifpnp
#
i4b/layer1/ifpnp/i4b_ifpnp_avm.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_isac.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_l1.c optional ifpnp
i4b/layer1/ifpnp/i4b_ifpnp_l1fsm.c optional ifpnp
#
# isdn4bsd, ihfc
#
i4b/layer1/ihfc/i4b_ihfc_l1if.c optional ihfc
i4b/layer1/ihfc/i4b_ihfc_pnp.c optional ihfc
i4b/layer1/ihfc/i4b_ihfc_drv.c optional ihfc
#
# isdn4bsd, itjc
#
i4b/layer1/itjc/i4b_itjc_pci.c optional itjc
i4b/layer1/itjc/i4b_itjc_isac.c optional itjc
i4b/layer1/itjc/i4b_itjc_l1.c optional itjc
i4b/layer1/itjc/i4b_itjc_l1fsm.c optional itjc
#
kern/imgact_aout.c optional compat_aout
kern/imgact_gzip.c optional gzip
libkern/divdi3.c standard

View File

@ -743,14 +743,6 @@ DCONS_POLL_HZ opt_dcons.h
DCONS_FORCE_CONSOLE opt_dcons.h
DCONS_FORCE_GDB opt_dcons.h
# Static unit counts
NI4BTRC opt_i4b.h
NI4BRBCH opt_i4b.h
NI4BTEL opt_i4b.h
#XXXBZ#NI4BIPR opt_i4b.h
#XXXBZ#NI4BING opt_i4b.h
#XXXBZ#NI4BISPPP opt_i4b.h
# VFS options
LOOKUP_SHARED opt_vfs.h

View File

@ -39,19 +39,6 @@ VGA_WIDTH90 opt_vga.h
ATKBD_DFLT_KEYMAP opt_atkbd.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
ELSA_QS1PCI opt_i4b.h
# -------------------------------
# isdn4bsd: misc options
# -------------------------------
# temporary workaround for SMP machines
I4B_SMP_WORKAROUND opt_i4b.h
# enable VJ compression code for ipr i/f
#XXXBZ#IPR_VJ opt_i4b.h
#XXXBZ#IPR_LOG opt_i4b.h
# -------------------------------
# EOF
# -------------------------------

View File

@ -102,42 +102,6 @@ SPIGOT_UNSECURE opt_spigot.h
# Enables NETGRAPH support for Cronyx adapters
NETGRAPH_CRONYX opt_ng_cronyx.h
# -------------------------------
# isdn4bsd: passive ISA cards
# -------------------------------
TEL_S0_8 opt_i4b.h
TEL_S0_16 opt_i4b.h
TEL_S0_16_3 opt_i4b.h
AVM_A1 opt_i4b.h
USR_STI opt_i4b.h
ITKIX1 opt_i4b.h
ELSA_PCC16 opt_i4b.h
# -------------------------------
# isdn4bsd: passive ISA PnP cards
# -------------------------------
CRTX_S0_P opt_i4b.h
DRN_NGO opt_i4b.h
TEL_S0_16_3_P opt_i4b.h
SEDLBAUER opt_i4b.h
DYNALINK opt_i4b.h
ASUSCOM_IPAC opt_i4b.h
ELSA_QS1ISA opt_i4b.h
SIEMENS_ISURF2 opt_i4b.h
EICON_DIVA opt_i4b.h
COMPAQ_M610 opt_i4b.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
ELSA_QS1PCI opt_i4b.h
# -------------------------------
# isdn4bsd: misc options
# -------------------------------
# temporary workaround for SMP machines
I4B_SMP_WORKAROUND opt_i4b.h
# enable VJ compression code for ipr i/f
#XXXBZ#IPR_VJ opt_i4b.h
#XXXBZ#IPR_LOG opt_i4b.h
# Device options
DEV_APIC opt_apic.h
DEV_NPX opt_npx.h

View File

@ -77,19 +77,6 @@ SPIGOT_UNSECURE opt_spigot.h
# Enables NETGRAPH support for Cronyx adapters
NETGRAPH_CRONYX opt_ng_cronyx.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
ELSA_QS1PCI opt_i4b.h
# -------------------------------
# isdn4bsd: misc options
# -------------------------------
# temporary workaround for SMP machines
I4B_SMP_WORKAROUND opt_i4b.h
# enable VJ compression code for ipr i/f
#XXXBZ#IPR_VJ opt_i4b.h
#XXXBZ#IPR_LOG opt_i4b.h
# ct driver options
CT_BUS_WEIGHT opt_ct.h
CT_USE_RELOCATE_OFFSET opt_ct.h

View File

@ -856,235 +856,6 @@ device ichwd
#
device coretemp
#---------------------------------------------------------------------------
# ISDN4BSD
#
# See /usr/share/examples/isdn/ROADMAP for an introduction to isdn4bsd.
#
# i4b passive ISDN cards support contains the following hardware drivers:
#
# isic - Siemens/Infineon ISDN ISAC/HSCX/IPAC chipset driver
# iwic - Winbond W6692 PCI bus ISDN S/T interface controller
# ifpi - AVM Fritz!Card PCI driver
# ifpi2 - AVM Fritz!Card PCI version 2 driver
# ihfc - Cologne Chip HFC ISA/ISA-PnP chipset driver
# ifpnp - AVM Fritz!Card PnP driver
# itjc - Siemens ISAC / TJNet Tiger300/320 chipset
#
# i4b active ISDN cards support contains the following hardware drivers:
#
# iavc - AVM B1 PCI, AVM B1 ISA, AVM T1
#
# Note that the ``options'' (if given) and ``device'' lines must BOTH
# be uncommented to enable support for a given card !
#
# In addition to a hardware driver (and probably an option) the mandatory
# ISDN protocol stack devices and the mandatory support device must be
# enabled as well as one or more devices from the optional devices section.
#
#---------------------------------------------------------------------------
# isic driver (Siemens/Infineon chipsets)
#
device isic
#
# ISA bus non-PnP Cards:
# ----------------------
#
# Teles S0/8 or Niccy 1008
options TEL_S0_8
hint.isic.0.at="isa"
hint.isic.0.maddr="0xd0000"
hint.isic.0.irq="5"
hint.isic.0.flags="1"
#
# Teles S0/16 or Creatix ISDN-S0 or Niccy 1016
options TEL_S0_16
hint.isic.0.at="isa"
hint.isic.0.port="0xd80"
hint.isic.0.maddr="0xd0000"
hint.isic.0.irq="5"
hint.isic.0.flags="2"
#
# Teles S0/16.3
options TEL_S0_16_3
hint.isic.0.at="isa"
hint.isic.0.port="0xd80"
hint.isic.0.irq="5"
hint.isic.0.flags="3"
#
# AVM A1 or AVM Fritz!Card
options AVM_A1
hint.isic.0.at="isa"
hint.isic.0.port="0x340"
hint.isic.0.irq="5"
hint.isic.0.flags="4"
#
# USRobotics Sportster ISDN TA intern
options USR_STI
hint.isic.0.at="isa"
hint.isic.0.port="0x268"
hint.isic.0.irq="5"
hint.isic.0.flags="7"
#
# ITK ix1 Micro ( < V.3, non-PnP version )
options ITKIX1
hint.isic.0.at="isa"
hint.isic.0.port="0x398"
hint.isic.0.irq="10"
hint.isic.0.flags="18"
#
# ELSA PCC-16
options ELSA_PCC16
hint.isic.0.at="isa"
hint.isic.0.port="0x360"
hint.isic.0.irq="10"
hint.isic.0.flags="20"
#
# ISA bus PnP Cards:
# ------------------
#
# Teles S0/16.3 PnP
options TEL_S0_16_3_P
#
# Creatix ISDN-S0 P&P
options CRTX_S0_P
#
# Dr. Neuhaus Niccy Go@
options DRN_NGO
#
# Sedlbauer Win Speed
options SEDLBAUER
#
# Dynalink IS64PH
options DYNALINK
#
# ELSA QuickStep 1000pro ISA
options ELSA_QS1ISA
#
# Siemens I-Surf 2.0
options SIEMENS_ISURF2
#
# Asuscom ISDNlink 128K ISA
options ASUSCOM_IPAC
#
# Eicon Diehl DIVA 2.0 and 2.02
options EICON_DIVA
#
# Compaq Microcom 610 ISDN card (Compaq series PSB2222I)
options COMPAQ_M610
#
# PCI bus Cards:
# --------------
#
# ELSA MicroLink ISDN/PCI (same as ELSA QuickStep 1000pro PCI)
options ELSA_QS1PCI
#
#---------------------------------------------------------------------------
# ifpnp driver for AVM Fritz!Card PnP
#
# AVM Fritz!Card PnP
device ifpnp
#
#---------------------------------------------------------------------------
# ihfc driver for Cologne Chip ISA chipsets (experimental!)
#
# Teles 16.3c ISA PnP
# AcerISDN P10 ISA PnP
# TELEINT ISDN SPEED No.1
device ihfc
#
#---------------------------------------------------------------------------
# ifpi driver for AVM Fritz!Card PCI
#
# AVM Fritz!Card PCI
device ifpi
#
#---------------------------------------------------------------------------
# ifpi2 driver for AVM Fritz!Card PCI version 2
#
# AVM Fritz!Card PCI version 2
device ifpi2
#
#---------------------------------------------------------------------------
# iwic driver for Winbond W6692 chipset
#
# ASUSCOM P-IN100-ST-D (and other Winbond W6692 based cards)
device iwic
#
#---------------------------------------------------------------------------
# itjc driver for Siemens ISAC / TJNet Tiger300/320 chipset
#
# Traverse Technologies NETjet-S
# Teles PCI-TJ
device itjc
#
#---------------------------------------------------------------------------
# iavc driver (AVM active cards, needs i4bcapi driver!)
#
device iavc
#
# AVM B1 ISA bus (PnP mode not supported!)
# ----------------------------------------
hint.iavc.0.at="isa"
hint.iavc.0.port="0x150"
hint.iavc.0.irq="5"
#
#---------------------------------------------------------------------------
# ISDN Protocol Stack - mandatory for all hardware drivers
#
# Q.921 / layer 2 - i4b passive cards D channel handling
device i4bq921
#
# Q.931 / layer 3 - i4b passive cards D channel handling
device i4bq931
#
# layer 4 - i4b common passive and active card handling
device i4b
#
#---------------------------------------------------------------------------
# ISDN devices - mandatory for all hardware drivers
#
# userland driver to do ISDN tracing (for passive cards only)
device i4btrc
options NI4BTRC=4
#
# userland driver to control the whole thing
device i4bctl
#
#---------------------------------------------------------------------------
# ISDN devices - optional
#
# userland driver for access to raw B channel
device i4brbch
options NI4BRBCH=4
#
# userland driver for telephony
device i4btel
options NI4BTEL=2
#
#XXXBZ# IPR and ISPPP are not usable until I4B is locked.
# network driver for IP over raw HDLC ISDN
#XXXBZ#device i4bipr
#XXXBZ#options NI4BIPR=4
# enable VJ header compression detection for ipr i/f
#XXXBZ#options IPR_VJ
# enable logging of the first n IP packets to isdnd (n=32 here)
#XXXBZ#options IPR_LOG=32
#
# network driver for sync PPP over ISDN; requires an equivalent
# number of sppp device to be configured
#XXXBZ#device i4bisppp
#XXXBZ#options NI4BISPPP=4
#
# B-channel interface to the netgraph subsystem
#XXXBZ#device i4bing
#XXXBZ#options NI4BING=2
#
# CAPI driver needed for active ISDN cards (see iavc driver above)
device i4bcapi
#
#---------------------------------------------------------------------------
#
# System Management Bus (SMB)
#
@ -1200,7 +971,6 @@ options FB_INSTALL_CDEV # install a CDEV entry in /dev
options PECOFF_SUPPORT
options PECOFF_DEBUG
options I4B_SMP_WORKAROUND
options I586_PMC_GUPROF=0x70000
options KBDIO_DEBUG=2
options KBD_MAXRETRY=4

View File

@ -1,150 +0,0 @@
$FreeBSD$
Message-ID: <3AF56886.7D92609A@cubical.fi>
Date: Sun, 06 May 2001 18:06:47 +0300
From: Juha-Matti Liukkonen <jml@cubical.fi>
Organization: Cubical Solutions Ltd
Please find the attached diff and tarball for our support software for
CAPI 2.0 and AVM's active T1 and T1-B (primary rate) and B1 (basic rate)
ISDN adapters for isdn4bsd. The implementation has been made from
scratch by us, based on reverse engineering of the Linux driver provided
by AVM GmbH and available in ftp.avm.de. Cubical Solutions Ltd offers
this implementation for the BSD community free of charge and assuming
absolutely no liabilities whatsoever. Feel free to modify the
implementation any way you see fit, but please retain our one-liner
copyright statement somewhere in the comment headers in the capi and
iavc driver modules.
That said, the attached tarball is i4b-00.96.00-beta with our
modifications integrated, and the diff contains all modifications we
have made to the original (including the new capi files). Our mods add
pseudo-device i4bcapi, which attaches to i4b layer 4, and device iavc0,
which implements a link layer driver for AVM's active B1 and T1 adapters
for i4bcapi. There are also a couple of related improvements to isdnd,
and a number of modifications to isdnd and layer 4 to implement support
for up to 30 channels per adapter (for primary rate use).
We have developed the software explicitly for our telephony application,
to be used with AVM's T1 adapters, and the implementation has been
tested primarily with this functionality in mind. There may be
interesting side effects with eg. the ipr and isppp drivers; we do not
use them and therefore their testing has been cursory at best. The
i4btel driver works well with the T1 (our primary use), and the i4brbch
driver has been verified to work with T1, T1-B and B1 adapters (ftp'd
some files over a dialup PPP connection with each adapter). Only the PCI
versions of the adapters (equipped with the AMCC DMA controller) are
supported, although the basics (PIO mode communication) for the older
ISA model support is in place, so only the bus attachment modules should
be required to support the older hardware.
All of the AVM active adapters use downloadable firmware, which is not
included in the attached package. The firmware files (t1.t4, t1b.t4,
b1.t4) can be found from ftp.avm.de in adapter specific subdirectories,
or from the CDs provided with the adapters (in directory
'cardware/firmware').
Our primary development platform is our own embedded build (we call it
'ebsd') based on FreeBSD 4.2-RELEASE. The implementation has also been
tested on standard FreeBSD 4.2-RELEASE system. The implementation should
not contain any FreeBSD (or even FreeBSD release) specific issues, but
it has not been tested or even compiled on any other platforms;
specifically, only the FreeBSD overinstall.sh script is modified to
install the capi/iavc support in the kernel source tree.
This code is not under active development here since the functionality
we use (i4btel, T1) has been working since the beginning of March. We
are also not planning on any further development (no need seen at this
point), but I am naturally interested on whatever bugs and development
ideas pop up on the community and will keep a keen eye on the isdn
mailing list. I personally may be available for consultation, debugging
and possibly development projects, but with notable reservations on my
time (the current IT industry recession seems to be pushing even more
work for us, which tends to keep us pretty busy these days).
Here are some specific technical notes:
* isdnd supports new keyword 'firmware=</path/to/file>' in section
'controller'. This keyword is supported for all controller types, and
causes I4B_CTRL_DOWNLOAD ioctl to be invoked with the specified file as
an argument. In systems equipped with both active and passive adapters,
and the passive cards being detected first, dummy 'controller' entries
are required for the passive cards to get the correct firmwares to
correct adapters. (I hope you did not have other uses for this ioctl in
mind?)
* isdnd supports new keyword 'clone=<entry name>' in section 'entry'.
This causes the entry to be copied from the existing named entry. At
least entry specific 'name' and 'usrdeviceunit' values should be
specified after a 'clone'. (Makes configuring 30 or 60 entries way much
easier.)
* a bug in i4btel driver read routine corrected. The conditions in the
while() clause caused the receive queue to be referenced before checking
if a channel is connected, leading to kernel panic (do a 'dd
if=/dev/i4btel0 of=/dev/null' on an unconnected tel device, panic will
follow). Correction was to reorder the while clause conditions to check
for connectedness first.
* isdnd and i4b layer 4 support up to CHANNELS_MAX (=30) channels per
adapter. The msg_ctrl_info_req_t message reports the number of channels
provided by the adapter, the number is stored in the nbchan field of the
controller state structure. The fixed stateb1 and stateb2 entries in
controller state stuctures are replaced with an array, and all fixed
references there are replaced with loops up to nbchan. Passive stack
layer 1 and 2 are not modified, layer 3 sets this field to fixed value 2
for all adapters (but it could be delegated to the layer 1 driver's
attach request).
* the i4bcapi driver maps i4b channels to logical channels identified
with PLCI/NCCI values in the CAPI protocol using the sc_bchan[] array.
The PLCI/NCCI handling is merged in the channel mapping and is greatly
simplified from the reference state machine model, because in practice
there can be only one PLCI/NCCI per channel active at any given time.
* the i4bcapi driver does not provide any kind of user level interface
(such as the /dev/capi20 interface provided by the linux driver), but
could relatively easily be extended to do so (and if done, interface
compatibility with the linux implementation would probably be a good
goal).
* there are some gritty details in the iavc driver, inherited from the
linux code. Despite us being a legitimate company in the telecom
business, AVM failed to produce any programming reference material for
us (at least in a reasonable time frame), so some guesswork remains due
to classic reverse engineering process (particularly there are a few
magic numbers in the card initialization sequence whose meaning I do not
know).
* pseudo-devices i4bq931, i4bq921 and some passive stack layer 1 driver
(such as iwic) are required to compile, as the required ctrl_desc[]
array is in layer 3, which requires layer 2, which requires layer 1.
Some architectural cleanup would come in handy here, but we did not want
to start making any major changes (and we use iwic in test setups
anyway, so we simply always compile it in).
To summarize: unpack, overinstall, add the following lines (with the
usual passive stack configuration including at least one L1 driver) to
your kernel configuration file:
pseudo-device "i4bcapi"
device iavc0
...and the following to your isdnd.rc:
controller
firmware = /usr/lib/isdn/b1.t4
...compile your new kernel, make sure the firmware file is in
/usr/lib/isdn, and your B1 adapter should boot up and Just Work (tm). If
you have multiple adapters, you need a 'controller' section for each to
have them loaded and booted on isdnd startup.
Have fun -- and let me know if there are any complications, or if I can
be of further assistance,
- Juha
--
Juha-Matti Liukkonen, Cubical Solutions Ltd
Phone: +358(0)405280142
Email: jml@cubical.fi

View File

@ -1,130 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/capi.h The CAPI device interface.
*
* $FreeBSD$
*/
#ifndef _I4B_CAPI_H_
#define _I4B_CAPI_H_
/*
// CAPI driver context: B channels and controller softcs.
*/
#define INVALID -1
enum capi_b_state {
B_FREE, /* channel free, ncci invalid */
B_CONNECT_CONF, /* wait for CONNECT_CONF */
B_CONNECT_IND, /* IND got, wait for appl RESP */
B_CONNECT_ACTIVE_IND, /* wait for CONNECT_ACTIVE_IND */
B_CONNECT_B3_CONF, /* wait for CONNECT_B3_CONF */
B_CONNECT_B3_IND, /* wait for CONNECT_B3_IND */
B_CONNECT_B3_ACTIVE_IND, /* wait for CONNECT_B3_ACTIVE_IND */
B_CONNECTED, /* channel connected & in use */
B_DISCONNECT_CONF, /* wait for DISCONNECT_CONF */
B_DISCONNECT_B3_CONF, /* wait for DISCONNECT_B3_CONF */
B_DISCONNECT_IND, /* wait for DISCONNECT_IND */
};
typedef struct capi_bchan
{
/* Channel state */
int ncci;
#define CAPI_CTRL_MASK 0x000000ff
#define CAPI_PLCI_MASK 0x0000ffff
#define CAPI_NCCI_MASK 0xffff0000
u_int16_t msgid;
int busy;
enum capi_b_state state;
struct ifqueue tx_queue;
struct ifqueue rx_queue;
int rxcount;
int txcount;
/* The rest is needed for i4b integration */
int bprot;
int cdid;
struct mbuf *in_mbuf;
isdn_link_t capi_isdn_linktab;
drvr_link_t *capi_drvr_linktab;
} capi_bchan_t;
enum capi_c_state {
C_DOWN, /* controller uninitialized */
C_READY, /* controller initialized but not listening */
C_UP, /* controller listening */
};
typedef struct capi_softc {
int sc_unit; /* index in capi_sc[] */
int ctrl_unit; /* index in isdn_ctrl_tab[] */
int card_type; /* CARD_TYPEC_xxx, filled by ll driver */
int sc_nbch; /* number of b channels on this controller */
int sc_enabled; /* is daemon connected TRUE/FALSE */
int sc_msgid; /* next CAPI message id */
char sc_profile[64];/* CAPI profile data */
enum capi_c_state sc_state;
capi_bchan_t sc_bchan[MAX_BCHAN];
/* Link layer driver context holder and methods */
void *ctx;
int (*load)(struct capi_softc *, int, u_int8_t *);
int (*reg_appl)(struct capi_softc *, int, int);
int (*rel_appl)(struct capi_softc *, int);
int (*send)(struct capi_softc *, struct mbuf *);
} capi_softc_t;
extern capi_softc_t *capi_sc[];
extern int ncapi;
/*
// CAPI upcalls for the link layer.
*/
#define I4BCAPI_APPLID 1
extern int capi_ll_attach(capi_softc_t *);
extern int capi_ll_control(capi_softc_t *, int op, int arg);
#define CAPI_CTRL_READY 0 /* ctrl ready, value=TRUE/FALSE */
#define CAPI_CTRL_PROFILE 1 /* set CAPI profile */
#define CAPI_CTRL_NEW_NCCI 2 /* new ncci value, assign bchan */
#define CAPI_CTRL_FREE_NCCI 3 /* free ncci value, clear bchan */
extern int capi_ll_receive(capi_softc_t *, struct mbuf *);
extern int capi_start_tx(capi_softc_t *, int bchan);
#endif /* _I4B_CAPI_H_ */

View File

@ -1,447 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/capi_l4if.c The CAPI i4b L4/device interface.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#include <i4b/include/i4b_debug.h>
#include <i4b/include/i4b_ioctl.h>
#include <i4b/include/i4b_cause.h>
#include <i4b/include/i4b_l3l4.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/include/i4b_global.h>
#include <i4b/layer4/i4b_l4.h>
#include <i4b/capi/capi.h>
#include <i4b/capi/capi_msgs.h>
static void n_connect_request(u_int cdid);
static void n_connect_response(u_int cdid, int response, int cause);
static void n_disconnect_request(u_int cdid, int cause);
static void n_alert_request(u_int cdid);
static void n_mgmt_command(int unit, int cmd, void *parm);
static int n_download(int unit, int, struct isdn_dr_prot *);
capi_softc_t *capi_sc[MAX_CONTROLLERS] = { NULL, };
int ncapi = 0;
/*
// i4b_capi_{ret,set}_linktab
// i4b driver glue.
//
// i4b_capi_bch_config
// Called by i4b driver to flush + {en,dis}able a channel.
//
// i4b_capi_bch_start_tx
// Called by i4b driver to transmit a queued mbuf.
//
// i4b_capi_bch_stat
// Called by i4b driver to obtain statistics information.
*/
static isdn_link_t *
i4b_capi_ret_linktab(int unit, int channel)
{
capi_softc_t *sc = capi_sc[unit];
return &sc->sc_bchan[channel].capi_isdn_linktab;
}
static void
i4b_capi_set_linktab(int unit, int channel, drvr_link_t *dlt)
{
capi_softc_t *sc = capi_sc[unit];
sc->sc_bchan[channel].capi_drvr_linktab = dlt;
}
static void
i4b_capi_bch_config(int unit, int chan, int bprot, int activate)
{
capi_softc_t *sc = capi_sc[unit];
i4b_Bcleanifq(&sc->sc_bchan[chan].tx_queue);
sc->sc_bchan[chan].tx_queue.ifq_maxlen = IFQ_MAXLEN;
sc->sc_bchan[chan].txcount = 0;
/* The telephony drivers use rx_queue for receive. */
i4b_Bcleanifq(&sc->sc_bchan[chan].rx_queue);
sc->sc_bchan[chan].rx_queue.ifq_maxlen = IFQ_MAXLEN;
sc->sc_bchan[chan].rxcount = 0;
/* HDLC frames are put to in_mbuf */
i4b_Bfreembuf(sc->sc_bchan[chan].in_mbuf);
sc->sc_bchan[chan].in_mbuf = NULL;
/* Because of the difference, we need to remember the protocol. */
sc->sc_bchan[chan].bprot = bprot;
sc->sc_bchan[chan].busy = 0;
}
static void
i4b_capi_bch_start_tx(int unit, int chan)
{
capi_softc_t *sc = capi_sc[unit];
int s;
s = SPLI4B();
if (sc->sc_bchan[chan].state != B_CONNECTED) {
splx(s);
printf("capi%d: start_tx on unconnected channel\n", sc->sc_unit);
return;
}
if (sc->sc_bchan[chan].busy) {
splx(s);
return;
}
capi_start_tx(sc, chan);
splx(s);
}
static void
i4b_capi_bch_stat(int unit, int chan, bchan_statistics_t *bsp)
{
capi_softc_t *sc = capi_sc[unit];
int s = SPLI4B();
bsp->outbytes = sc->sc_bchan[chan].txcount;
bsp->inbytes = sc->sc_bchan[chan].rxcount;
sc->sc_bchan[chan].txcount = 0;
sc->sc_bchan[chan].rxcount = 0;
splx(s);
}
int capi_start_tx(capi_softc_t *sc, int chan)
{
struct mbuf *m_b3;
int sent = 0;
_IF_DEQUEUE(&sc->sc_bchan[chan].tx_queue, m_b3);
while (m_b3) {
struct mbuf *m = m_b3->m_next;
sc->sc_bchan[chan].txcount += m_b3->m_len;
capi_data_b3_req(sc, chan, m_b3);
sent++;
m_b3 = m;
}
if (sc->sc_bchan[chan].capi_drvr_linktab) {
/* Notify i4b driver of activity, and if the queue is drained. */
if (sent)
(*sc->sc_bchan[chan].capi_drvr_linktab->bch_activity)(
sc->sc_bchan[chan].capi_drvr_linktab->unit, ACT_TX);
if (IF_QEMPTY(&sc->sc_bchan[chan].tx_queue))
(*sc->sc_bchan[chan].capi_drvr_linktab->bch_tx_queue_empty)(
sc->sc_bchan[chan].capi_drvr_linktab->unit);
}
return sent;
}
/*
// capi_ll_attach
// Called by a link layer driver at boot time.
*/
int
capi_ll_attach(capi_softc_t *sc)
{
int i;
if (ncapi == (sizeof(capi_sc) / sizeof(capi_sc[0]))) {
printf("capi%d: too many units, increase MAX_CONTROLLERS\n", ncapi);
return (ENXIO);
}
/* Unit type and subtype; sc is partly filled by ll driver */
ctrl_desc[nctrl].unit = ncapi;
ctrl_desc[nctrl].ctrl_type = CTRL_CAPI;
ctrl_desc[nctrl].card_type = sc->card_type;
/* L4 callbacks */
ctrl_types[CTRL_CAPI].get_linktab = i4b_capi_ret_linktab;
ctrl_types[CTRL_CAPI].set_linktab = i4b_capi_set_linktab;
ctrl_desc[nctrl].N_CONNECT_REQUEST = n_connect_request;
ctrl_desc[nctrl].N_CONNECT_RESPONSE = n_connect_response;
ctrl_desc[nctrl].N_DISCONNECT_REQUEST = n_disconnect_request;
ctrl_desc[nctrl].N_ALERT_REQUEST = n_alert_request;
ctrl_desc[nctrl].N_DOWNLOAD = n_download;
ctrl_desc[nctrl].N_DIAGNOSTICS = NULL; /* XXX todo */
ctrl_desc[nctrl].N_MGMT_COMMAND = n_mgmt_command;
/* Unit state */
sc->sc_enabled = FALSE;
sc->sc_state = C_DOWN;
sc->sc_msgid = 0;
ctrl_desc[nctrl].dl_est = DL_DOWN;
ctrl_desc[nctrl].nbch = sc->sc_nbch;
for (i = 0; i < sc->sc_nbch; i++) {
ctrl_desc[nctrl].bch_state[i] = BCH_ST_FREE;
sc->sc_bchan[i].ncci = INVALID;
sc->sc_bchan[i].msgid = 0;
sc->sc_bchan[i].busy = 0;
sc->sc_bchan[i].state = B_FREE;
memset(&sc->sc_bchan[i].tx_queue, 0, sizeof(struct ifqueue));
memset(&sc->sc_bchan[i].rx_queue, 0, sizeof(struct ifqueue));
sc->sc_bchan[i].tx_queue.ifq_maxlen = IFQ_MAXLEN;
sc->sc_bchan[i].rx_queue.ifq_maxlen = IFQ_MAXLEN;
if(!mtx_initialized(&sc->sc_bchan[i].tx_queue.ifq_mtx))
mtx_init(&sc->sc_bchan[i].tx_queue.ifq_mtx, "i4b_capi_tx", NULL, MTX_DEF);
if(!mtx_initialized(&sc->sc_bchan[i].rx_queue.ifq_mtx))
mtx_init(&sc->sc_bchan[i].rx_queue.ifq_mtx, "i4b_capi_rx", NULL, MTX_DEF);
sc->sc_bchan[i].txcount = 0;
sc->sc_bchan[i].rxcount = 0;
sc->sc_bchan[i].cdid = CDID_UNUSED;
sc->sc_bchan[i].bprot = BPROT_NONE;
sc->sc_bchan[i].in_mbuf = NULL;
sc->sc_bchan[i].capi_drvr_linktab = NULL;
sc->sc_bchan[i].capi_isdn_linktab.unit = ncapi;
sc->sc_bchan[i].capi_isdn_linktab.channel = i;
sc->sc_bchan[i].capi_isdn_linktab.bch_config = i4b_capi_bch_config;
sc->sc_bchan[i].capi_isdn_linktab.bch_tx_start = i4b_capi_bch_start_tx;
sc->sc_bchan[i].capi_isdn_linktab.bch_stat = i4b_capi_bch_stat;
sc->sc_bchan[i].capi_isdn_linktab.tx_queue = &sc->sc_bchan[i].tx_queue;
sc->sc_bchan[i].capi_isdn_linktab.rx_queue = &sc->sc_bchan[i].rx_queue;
sc->sc_bchan[i].capi_isdn_linktab.rx_mbuf = &sc->sc_bchan[i].in_mbuf;
}
ctrl_desc[nctrl].tei = -1;
/* Up the controller index and store the softc */
sc->sc_unit = ncapi;
capi_sc[ncapi++] = sc;
sc->ctrl_unit = nctrl++;
printf("capi%d: card type %d attached\n", sc->sc_unit, sc->card_type);
return(0);
}
/*
// n_mgmt_command
// i4b L4 management command.
*/
static void
n_mgmt_command(int unit, int op, void *arg)
{
capi_softc_t *sc = capi_sc[unit];
printf("capi%d: mgmt command %d\n", sc->sc_unit, op);
switch(op) {
case CMR_DOPEN:
sc->sc_enabled = TRUE;
break;
case CMR_DCLOSE:
sc->sc_enabled = FALSE;
break;
case CMR_SETTRACE:
break;
default:
break;
}
}
/*
// n_connect_request
// i4b L4 wants to connect. We assign a B channel to the call,
// send a CAPI_CONNECT_REQ, and set the channel to B_CONNECT_CONF.
*/
static void
n_connect_request(u_int cdid)
{
call_desc_t *cd = cd_by_cdid(cdid);
capi_softc_t *sc;
int bch, s;
if (!cd) {
printf("capi?: invalid cdid %d\n", cdid);
return;
}
sc = capi_sc[ctrl_desc[cd->controller].unit];
bch = cd->channelid;
s = SPLI4B();
if ((bch < 0) || (bch >= sc->sc_nbch))
for (bch = 0; bch < sc->sc_nbch; bch++)
if (sc->sc_bchan[bch].state == B_FREE)
break;
if (bch == sc->sc_nbch) {
splx(s);
printf("capi%d: no free B channel\n", sc->sc_unit);
return;
}
cd->channelid = bch;
capi_connect_req(sc, cd);
splx(s);
}
/*
// n_connect_response
// i4b L4 answers a call. We send a CONNECT_RESP with the proper
// Reject code, and set the channel to B_CONNECT_B3_IND or B_FREE,
// depending whether we answer or not.
*/
static void
n_connect_response(u_int cdid, int response, int cause)
{
call_desc_t *cd = cd_by_cdid(cdid);
capi_softc_t *sc;
int bch, s;
if (!cd) {
printf("capi?: invalid cdid %d\n", cdid);
return;
}
sc = capi_sc[ctrl_desc[cd->controller].unit];
bch = cd->channelid;
T400_stop(cd);
cd->response = response;
cd->cause_out = cause;
s = SPLI4B();
capi_connect_resp(sc, cd);
splx(s);
}
/*
// n_disconnect_request
// i4b L4 wants to disconnect. We send a DISCONNECT_REQ and
// set the channel to B_DISCONNECT_CONF.
*/
static void
n_disconnect_request(u_int cdid, int cause)
{
call_desc_t *cd = cd_by_cdid(cdid);
capi_softc_t *sc;
int bch, s;
if (!cd) {
printf("capi?: invalid cdid %d\n", cdid);
return;
}
sc = capi_sc[ctrl_desc[cd->controller].unit];
bch = cd->channelid;
cd->cause_out = cause;
s = SPLI4B();
capi_disconnect_req(sc, cd);
splx(s);
}
/*
// n_alert_request
// i4b L4 wants to alert an incoming call. We send ALERT_REQ.
*/
static void
n_alert_request(u_int cdid)
{
call_desc_t *cd = cd_by_cdid(cdid);
capi_softc_t *sc;
int s;
if (!cd) {
printf("capi?: invalid cdid %d\n", cdid);
return;
}
sc = capi_sc[ctrl_desc[cd->controller].unit];
s = SPLI4B();
capi_alert_req(sc, cd);
splx(s);
}
/*
// n_download
// L4 -> firmware download
*/
static int
n_download(int unit, int numprotos, struct isdn_dr_prot *protocols)
{
capi_softc_t *sc = capi_sc[unit];
if (sc->load) {
(*capi_sc[unit]->load)(sc, protocols[0].bytecount,
protocols[0].microcode);
}
return(0);
}

View File

@ -1,163 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/capi_llif.c The i4b CAPI link layer interface.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#include <i4b/include/i4b_debug.h>
#include <i4b/include/i4b_ioctl.h>
#include <i4b/include/i4b_cause.h>
#include <i4b/include/i4b_l3l4.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/include/i4b_global.h>
#include <i4b/layer4/i4b_l4.h>
#include <i4b/capi/capi.h>
#include <i4b/capi/capi_msgs.h>
/*
// capi_ll_control
// CAPI link layer control routine. Called by a link layer
// driver when its state changes.
*/
int
capi_ll_control(capi_softc_t *sc, int op, int arg)
{
switch (op) {
case CAPI_CTRL_READY:
if (arg) {
sc->sc_state = C_READY;
/*
* Register our CAPI ApplId and send CAPI_LISTEN_REQ
* with CIP Mask value 1 (match all).
*/
sc->reg_appl(sc, I4BCAPI_APPLID, sc->sc_nbch);
capi_listen_req(sc, 0x10007);
} else {
sc->sc_state = C_DOWN;
/* XXX go through cds and notify L4 of pdeact? XXX */
}
break;
case CAPI_CTRL_PROFILE:
bcopy((char*) arg, &sc->sc_profile, sizeof(sc->sc_profile));
break;
case CAPI_CTRL_NEW_NCCI:
case CAPI_CTRL_FREE_NCCI:
/* We ignore the controller's NCCI notifications. */
break;
default:
printf("capi%d: unknown control %d\n", sc->sc_unit, op);
}
return 0;
}
/*
// i4b_capi_handlers
// Array of message-handler pairs used to dispatch CAPI
// messages sent to I4BCAPI_APPLID.
*/
static struct capi_cmdtab {
u_int16_t cmd;
void (*handler)(capi_softc_t *, struct mbuf *);
} i4b_capi_handlers[] = {
{ CAPI_LISTEN_CONF, capi_listen_conf },
{ CAPI_INFO_IND, capi_info_ind },
{ CAPI_ALERT_CONF, capi_alert_conf },
{ CAPI_CONNECT_CONF, capi_connect_conf },
{ CAPI_CONNECT_IND, capi_connect_ind },
{ CAPI_CONNECT_ACTIVE_IND, capi_connect_active_ind },
{ CAPI_CONNECT_B3_CONF, capi_connect_b3_conf },
{ CAPI_CONNECT_B3_IND, capi_connect_b3_ind },
{ CAPI_CONNECT_B3_ACTIVE_IND, capi_connect_b3_active_ind },
{ CAPI_DATA_B3_CONF, capi_data_b3_conf },
{ CAPI_DATA_B3_IND, capi_data_b3_ind },
{ CAPI_DISCONNECT_B3_IND, capi_disconnect_b3_ind },
{ CAPI_DISCONNECT_CONF, capi_disconnect_conf },
{ CAPI_DISCONNECT_IND, capi_disconnect_ind },
{ 0, 0 }
};
/*
// capi_ll_receive
// CAPI link layer receive upcall. Called by a link layer
// driver to dispatch incoming CAPI messages.
*/
int
capi_ll_receive(capi_softc_t *sc, struct mbuf *m)
{
u_int8_t *p = mtod(m, u_int8_t*);
u_int16_t len, applid, msgid, cmd;
capimsg_getu16(p + 0, &len);
capimsg_getu16(p + 2, &applid);
capimsg_getu16(p + 4, &cmd);
capimsg_getu16(p + 6, &msgid);
#if 0
printf("capi%d: ll_receive hdr %04x %04x %04x %04x\n", sc->sc_unit,
len, applid, cmd, msgid);
#endif
if (applid == I4BCAPI_APPLID) {
struct capi_cmdtab *e;
for (e = i4b_capi_handlers; e->cmd && e->cmd != cmd; e++);
if (e->cmd) (*e->handler)(sc, m);
else printf("capi%d: unknown message %04x\n", sc->sc_unit, cmd);
} else {
/* XXX we could handle arbitrary ApplIds here XXX */
printf("capi%d: message %04x for unknown applid %d\n", sc->sc_unit,
cmd, applid);
}
if (m->m_next) {
i4b_Bfreembuf(m->m_next);
m->m_next = NULL;
}
i4b_Dfreembuf(m);
return(0);
}

View File

@ -1,950 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/capi_msgs.c The CAPI i4b message handlers.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#include <i4b/include/i4b_debug.h>
#include <i4b/include/i4b_ioctl.h>
#include <i4b/include/i4b_cause.h>
#include <i4b/include/i4b_l3l4.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/include/i4b_global.h>
#include <i4b/layer4/i4b_l4.h>
#include <i4b/capi/capi.h>
#include <i4b/capi/capi_msgs.h>
/*
// Administrative messages:
// ------------------------
*/
void capi_listen_req(capi_softc_t *sc, u_int32_t CIP)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 18);
u_int8_t *msg;
u_int16_t msgid;
if (!m) {
printf("capi%d: can't get mbuf for listen_req\n", sc->sc_unit);
return;
}
msgid = sc->sc_msgid++;
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_LISTEN_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, 1); /* Controller */
msg = capimsg_setu32(msg, 0); /* Info mask */
msg = capimsg_setu32(msg, CIP);
msg = capimsg_setu32(msg, 0);
msg = capimsg_setu8(msg, 0);
msg = capimsg_setu8(msg, 0);
sc->send(sc, m);
}
void capi_listen_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t Info;
capimsg_getu16(msg + 12, &Info);
if (Info == 0) {
/* We are now listening. */
sc->sc_state = C_UP;
ctrl_desc[sc->ctrl_unit].dl_est = DL_UP;
i4b_l4_l12stat(sc->ctrl_unit, 1, 1);
i4b_l4_l12stat(sc->ctrl_unit, 2, 1);
} else {
/* XXX sc->sc_state = C_DOWN ? XXX */
printf("capi%d: can't listen, info=%04x\n", sc->sc_unit, Info);
}
}
void capi_info_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 4);
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t applid, msgid;
u_int32_t PLCI;
if (!m) {
printf("capi%d: can't get mbuf for info_resp\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &PLCI);
/* i4b_l4_info_ind() */
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, applid);
msg = capimsg_setu16(msg, CAPI_INFO_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
sc->send(sc, m);
}
void capi_alert_req(capi_softc_t *sc, call_desc_t *cd)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 5);
u_int8_t *msg;
u_int16_t msgid;
u_int32_t PLCI;
if (!m) {
printf("capi%d: can't get mbuf for alert_req\n", sc->sc_unit);
return;
}
msgid = sc->sc_bchan[cd->channelid].msgid = sc->sc_msgid++;
PLCI = (sc->sc_bchan[cd->channelid].ncci & CAPI_PLCI_MASK);
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_ALERT_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
msg = capimsg_setu8(msg, 0);
sc->send(sc, m);
}
void capi_alert_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t Info;
msg = capimsg_getu16(msg + 12, &Info);
if (Info) {
printf("capi%d: can't alert, info=%04x\n", sc->sc_unit, Info);
}
}
/*
// Outgoing call setup:
// --------------------
//
// CAPI_CONNECT_REQ -->
// <-- CAPI_CONNECT_CONF
// (notify Layer 4)
// <-- CAPI_CONNECT_ACTIVE_IND
// CAPI_CONNECT_ACTIVE_RESP -->
// CAPI_CONNECT_B3_REQ -->
// <-- CAPI_CONNECT_B3_CONF
// <-- CAPI_CONNECT_B3_ACTIVE_IND
// CAPI_CONNECT_B3_ACTIVE_RESP -->
// (notify Layer 4)
*/
void capi_connect_req(capi_softc_t *sc, call_desc_t *cd)
{
struct mbuf *m;
u_int8_t *msg;
u_int16_t msgid;
int slen = strlen(cd->src_telno);
int dlen = strlen(cd->dst_telno);
m = i4b_Dgetmbuf(8 + 27 + slen + dlen);
if (!m) {
printf("capi%d: can't get mbuf for connect_req\n", sc->sc_unit);
return;
}
cd->crflag = CRF_ORIG;
sc->sc_bchan[cd->channelid].cdid = cd->cdid;
sc->sc_bchan[cd->channelid].bprot = cd->bprot;
sc->sc_bchan[cd->channelid].state = B_CONNECT_CONF;
msgid = sc->sc_bchan[cd->channelid].msgid = sc->sc_msgid++;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_RSVD;
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_CONNECT_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, 1); /* Controller */
switch (cd->bprot) {
case BPROT_NONE:
msg = capimsg_setu16(msg, 0x0010); /* Telephony */
break;
case BPROT_RHDLC:
msg = capimsg_setu16(msg, 0x0002); /* Unrestricted digital */
break;
default:
msg = capimsg_setu16(msg, 0x0002); /* Unrestricted digital */
}
msg = capimsg_setu8(msg, 1 + dlen);
msg = capimsg_setu8(msg, 0x80);
strncpy(msg, cd->dst_telno, dlen);
msg = capimsg_setu8(msg + dlen, 2 + slen);
msg = capimsg_setu8(msg, 0x00);
msg = capimsg_setu8(msg, 0x80); /* Presentation and screening indicator */
strncpy(msg, cd->src_telno, slen);
msg = capimsg_setu8(msg + slen, 0); /* Called & */
msg = capimsg_setu8(msg, 0); /* Calling party subaddress */
msg = capimsg_setu8(msg, 15); /* B protocol */
if (cd->bprot == BPROT_NONE)
msg = capimsg_setu16(msg, 1); /* B1 protocol = transparent */
else
msg = capimsg_setu16(msg, 0); /* B1 protocol = HDLC */
msg = capimsg_setu16(msg, 1); /* B2 protocol = transparent */
msg = capimsg_setu16(msg, 0); /* B3 protocol = transparent */
msg = capimsg_setu8(msg, 0); /* B1 parameters */
msg = capimsg_setu8(msg, 0); /* B2 parameters */
msg = capimsg_setu8(msg, 0); /* B3 parameters */
msg = capimsg_setu8(msg, 0); /* Bearer Capability */
msg = capimsg_setu8(msg, 0); /* Low Layer Compatibility */
msg = capimsg_setu8(msg, 0); /* High Layer Compatibility */
msg = capimsg_setu8(msg, 0); /* Additional Info */
sc->send(sc, m);
}
void capi_connect_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t msgid;
u_int32_t PLCI;
u_int16_t Info;
int bch;
msg = capimsg_getu16(msg + 6, &msgid);
msg = capimsg_getu32(msg, &PLCI);
msg = capimsg_getu16(msg, &Info);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECT_CONF) &&
(sc->sc_bchan[bch].msgid == msgid))
break;
if ((bch == sc->sc_nbch) ||
(cd = cd_by_cdid(sc->sc_bchan[bch].cdid)) == NULL) {
printf("capi%d: can't find channel for connect_conf PLCI %x\n",
sc->sc_unit, PLCI);
return;
}
if (Info == 0) {
sc->sc_bchan[bch].state = B_CONNECT_ACTIVE_IND;
sc->sc_bchan[bch].ncci = PLCI;
i4b_l4_proceeding_ind(cd);
} else {
SET_CAUSE_TV(cd->cause_out, CAUSET_I4B, CAUSE_I4B_L1ERROR);
i4b_l4_disconnect_ind(cd);
freecd_by_cd(cd);
sc->sc_bchan[bch].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[bch] = BCH_ST_FREE;
printf("capi%d: can't connect out, info=%04x\n", sc->sc_unit, Info);
}
}
void capi_connect_active_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 4);
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t applid, msgid;
u_int32_t PLCI;
int bch;
if (!m) {
printf("capi%d: can't get mbuf for active_ind\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &PLCI);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECT_ACTIVE_IND) &&
(sc->sc_bchan[bch].ncci == PLCI))
break;
if ((bch == sc->sc_nbch) ||
(cd = cd_by_cdid(sc->sc_bchan[bch].cdid)) == NULL) {
printf("capi%d: can't find channel for active_resp, PLCI %x\n",
sc->sc_unit, PLCI);
return;
}
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, applid);
msg = capimsg_setu16(msg, CAPI_CONNECT_ACTIVE_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
sc->send(sc, m);
if (cd->crflag == CRF_ORIG) {
capi_connect_b3_req(sc, cd);
} else {
sc->sc_bchan[bch].state = B_CONNECT_B3_IND;
}
}
void capi_connect_b3_req(capi_softc_t *sc, call_desc_t *cd)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 5);
u_int8_t *msg;
u_int16_t msgid;
u_int32_t PLCI;
if (!m) {
printf("capi%d: can't get mbuf for connect_b3_req\n", sc->sc_unit);
return;
}
sc->sc_bchan[cd->channelid].state = B_CONNECT_B3_CONF;
msgid = sc->sc_bchan[cd->channelid].msgid = sc->sc_msgid++;
PLCI = (sc->sc_bchan[cd->channelid].ncci & CAPI_PLCI_MASK);
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_CONNECT_B3_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
msg = capimsg_setu8(msg, 0); /* NCPI */
sc->send(sc, m);
}
void capi_connect_b3_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t msgid;
u_int32_t NCCI;
u_int16_t Info;
int bch;
msg = capimsg_getu16(msg + 6, &msgid);
msg = capimsg_getu32(msg, &NCCI);
msg = capimsg_getu16(msg, &Info);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECT_B3_CONF) &&
(sc->sc_bchan[bch].ncci == (NCCI & CAPI_PLCI_MASK)))
break;
if ((bch == sc->sc_nbch) ||
(cd = cd_by_cdid(sc->sc_bchan[bch].cdid)) == NULL) {
printf("capi%d: can't find channel for connect_b3_conf NCCI %x\n",
sc->sc_unit, NCCI);
return;
}
if (Info == 0) {
sc->sc_bchan[bch].ncci = NCCI;
sc->sc_bchan[bch].state = B_CONNECT_B3_ACTIVE_IND;
} else {
SET_CAUSE_TV(cd->cause_in, CAUSET_I4B, CAUSE_I4B_OOO); /* XXX */
i4b_l4_disconnect_ind(cd);
freecd_by_cd(cd);
ctrl_desc[sc->ctrl_unit].bch_state[bch] = BCH_ST_RSVD;
printf("capi%d: can't connect_b3 out, info=%04x\n", sc->sc_unit, Info);
capi_disconnect_req(sc, cd);
}
}
void capi_connect_b3_active_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 4);
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t applid, msgid;
u_int32_t NCCI;
int bch;
if (!m) {
printf("capi%d: can't get mbuf for b3_active_ind\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &NCCI);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECT_B3_ACTIVE_IND) &&
(sc->sc_bchan[bch].ncci == NCCI))
break;
if ((bch == sc->sc_nbch) ||
(cd = cd_by_cdid(sc->sc_bchan[bch].cdid)) == NULL) {
printf("capi%d: can't find channel for b3_active_resp NCCI %x\n",
sc->sc_unit, NCCI);
return;
}
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_CONNECT_B3_ACTIVE_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, NCCI);
sc->send(sc, m);
sc->sc_bchan[bch].state = B_CONNECTED;
i4b_l4_connect_active_ind(cd);
}
/*
// Incoming call setup:
// --------------------
//
// <-- CAPI_CONNECT_IND
// (consult Layer 4)
// CAPI_CONNECT_RESP -->
// <-- CAPI_CONNECT_ACTIVE_IND
// CAPI_CONNECT_ACTIVE_RESP -->
// <-- CAPI_CONNECT_B3_IND
// CAPI_CONNECT_B3_RESP -->
// <-- CAPI_CONNECT_B3_ACTIVE_IND
// CAPI_CONNECT_B3_ACTIVE_RESP -->
// (notify Layer 4)
*/
void capi_connect_ind(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t applid, msgid;
u_int32_t PLCI;
u_int16_t CIP;
u_int8_t x, y, z;
int bch;
if ((cd = reserve_cd()) == NULL) {
printf("capi%d: can't get cd for connect_ind\n", sc->sc_unit);
return;
}
cd->controller = sc->ctrl_unit;
cd->channelexcl = FALSE;
for (bch = 0; bch < sc->sc_nbch; bch++)
if (sc->sc_bchan[bch].state == B_FREE) break;
sc->sc_bchan[bch].state = B_CONNECT_IND;
cd->channelid = bch; /* XXX CHAN_ANY XXX */
cd->crflag = CRF_DEST;
cd->cr = get_rand_cr(sc->sc_unit);
cd->scr_ind = SCR_NONE;
cd->prs_ind = PRS_NONE;
cd->bprot = BPROT_NONE;
cd->ilt = NULL;
cd->dlt = NULL;
cd->display[0] = '\0';
cd->datetime[0] = '\0';
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &PLCI);
msg = capimsg_getu16(msg, &CIP);
cd->event = (int) msgid; /* XXX overload */
cd->Q931state = (int) PLCI; /* XXX overload */
switch (CIP) {
case 0x0010:
case 0x0001: cd->bprot = BPROT_NONE; break;
case 0x0002: cd->bprot = BPROT_RHDLC; break;
default:
NDBGL4(L4_CAPIDBG, "capi%d: unknown CIP = %d", sc->sc_unit, CIP);
cd->bprot = BPROT_NONE;
}
msg = capimsg_getu8(msg, &x); /* Called party struct len */
if (x) {
msg = capimsg_getu8(msg, &y); /* Numbering plan */
z = x - 1;
if (z >= TELNO_MAX) z = (TELNO_MAX-1);
strncpy(cd->dst_telno, msg, z);
msg += x;
x = z;
}
cd->dst_telno[x] = '\0';
msg = capimsg_getu8(msg, &x); /* Calling party struct len */
if (x) {
msg = capimsg_getu8(msg, &y); /* Numbering plan */
msg = capimsg_getu8(msg, &y); /* Screening/Presentation */
if ((y & 0x80) == 0) { /* screening used */
cd->scr_ind = (y & 3) + SCR_USR_NOSC;
cd->prs_ind = ((y >> 5) & 3) + PRS_ALLOWED;
}
z = x - 2;
if (z >= TELNO_MAX) z = (TELNO_MAX-1);
strncpy(cd->src_telno, msg, z);
msg += x;
x = z;
}
cd->src_telno[x] = '\0';
i4b_l4_connect_ind(cd);
}
void capi_connect_resp(capi_softc_t *sc, call_desc_t *cd)
{
struct mbuf *m;
u_int8_t *msg;
u_int16_t msgid;
u_int32_t PLCI;
int dlen = strlen(cd->dst_telno);
m = i4b_Dgetmbuf(8 + 21 + dlen);
if (!m) {
printf("capi%d: can't get mbuf for connect_resp\n", sc->sc_unit);
return;
}
msgid = (u_int16_t) cd->event;
PLCI = (u_int32_t) cd->Q931state;
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_CONNECT_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
switch (cd->response) {
case SETUP_RESP_ACCEPT:
sc->sc_bchan[cd->channelid].cdid = cd->cdid;
sc->sc_bchan[cd->channelid].ncci = PLCI;
sc->sc_bchan[cd->channelid].state = B_CONNECT_ACTIVE_IND;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_USED;
msg = capimsg_setu16(msg, 0); /* Accept the call */
break;
case SETUP_RESP_REJECT:
sc->sc_bchan[cd->channelid].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_FREE;
msg = capimsg_setu16(msg, 2); /* Reject, normal call clearing */
break;
case SETUP_RESP_DNTCRE:
sc->sc_bchan[cd->channelid].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_FREE;
if (sc->sc_nbch == 30) {
/* With PRI, we can't really ignore calls -- normal clearing */
msg = capimsg_setu16(msg, (0x3480|CAUSE_Q850_NCCLR));
} else {
msg = capimsg_setu16(msg, 1); /* Ignore */
}
break;
default:
sc->sc_bchan[cd->channelid].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_FREE;
msg = capimsg_setu16(msg, (0x3480|CAUSE_Q850_CALLREJ));
}
msg = capimsg_setu8(msg, 15); /* B protocol */
if (cd->bprot == BPROT_NONE)
msg = capimsg_setu16(msg, 1); /* B1 protocol = transparent */
else
msg = capimsg_setu16(msg, 0); /* B1 protocol = HDLC */
msg = capimsg_setu16(msg, 1); /* B2 protocol = transparent */
msg = capimsg_setu16(msg, 0); /* B3 protocol = transparent */
msg = capimsg_setu8(msg, 0); /* B1 parameters */
msg = capimsg_setu8(msg, 0); /* B2 parameters */
msg = capimsg_setu8(msg, 0); /* B3 parameters */
msg = capimsg_setu8(msg, 1 + dlen);
msg = capimsg_setu8(msg, 0x80); /* Numbering plan */
strncpy(msg, cd->dst_telno, dlen);
msg = capimsg_setu8(msg + dlen, 0); /* Connected subaddress */
msg = capimsg_setu8(msg, 0); /* Low Layer Compatibility */
msg = capimsg_setu8(msg, 0); /* Additional Info */
sc->send(sc, m);
}
void capi_connect_b3_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 7);
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t applid, msgid;
u_int32_t NCCI;
int bch;
if (!m) {
printf("capi%d: can't get mbuf for connect_b3_resp\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &NCCI);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECT_B3_IND) &&
(sc->sc_bchan[bch].ncci == (NCCI & CAPI_PLCI_MASK)))
break;
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, applid);
msg = capimsg_setu16(msg, CAPI_CONNECT_B3_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, NCCI);
if (bch == sc->sc_nbch) {
printf("capi%d: can't get cd for connect_b3_resp NCCI %x\n",
sc->sc_unit, NCCI);
msg = capimsg_setu16(msg, 8); /* Reject, destination OOO */
} else {
sc->sc_bchan[bch].ncci = NCCI;
sc->sc_bchan[bch].state = B_CONNECT_B3_ACTIVE_IND;
msg = capimsg_setu16(msg, 0); /* Accept */
}
msg = capimsg_setu8(msg, 0); /* NCPI */
sc->send(sc, m);
}
/*
// Data transfer:
// --------------
*/
void capi_data_b3_req(capi_softc_t *sc, int chan, struct mbuf *m_b3)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 14);
u_int8_t *msg;
u_int16_t msgid;
if (!m) {
printf("capi%d: can't get mbuf for data_b3_req\n", sc->sc_unit);
return;
}
msgid = sc->sc_bchan[chan].msgid = sc->sc_msgid++;
sc->sc_bchan[chan].busy = 1;
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_DATA_B3_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, sc->sc_bchan[chan].ncci);
msg = capimsg_setu32(msg, (u_int32_t) m_b3->m_data); /* Pointer */
msg = capimsg_setu16(msg, m_b3->m_len);
msg = capimsg_setu16(msg, chan);
msg = capimsg_setu16(msg, 0); /* Flags */
m->m_next = m_b3;
sc->send(sc, m);
}
void capi_data_b3_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int32_t NCCI;
u_int16_t handle;
u_int16_t Info;
msg = capimsg_getu32(msg + 8, &NCCI);
msg = capimsg_getu16(msg, &handle);
msg = capimsg_getu16(msg, &Info);
if (Info == 0) {
sc->sc_bchan[handle].busy = 0;
capi_start_tx(sc, handle);
} else {
printf("capi%d: data_b3_conf NCCI %x handle %x info=%04x\n",
sc->sc_unit, NCCI, handle, Info);
}
}
void capi_data_b3_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 6);
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t applid, msgid;
u_int32_t NCCI;
u_int16_t handle;
int bch;
if (!m) {
printf("capi%d: can't get mbuf for data_b3_resp\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &NCCI);
msg = capimsg_getu16(msg + 6, &handle);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_CONNECTED) &&
(sc->sc_bchan[bch].ncci == NCCI))
break;
if (bch == sc->sc_nbch) {
printf("capi%d: can't find channel for data_b3_ind NCCI %x\n",
sc->sc_unit, NCCI);
} else {
if (sc->sc_bchan[bch].bprot == BPROT_RHDLC) {
/* HDLC drivers use rx_mbuf */
sc->sc_bchan[bch].in_mbuf = m_in->m_next;
sc->sc_bchan[bch].rxcount += m_in->m_next->m_len;
m_in->m_next = NULL; /* driver frees */
(*sc->sc_bchan[bch].capi_drvr_linktab->bch_rx_data_ready)(
sc->sc_bchan[bch].capi_drvr_linktab->unit);
} else {
/* Telephony drivers use rx_queue */
if (!_IF_QFULL(&sc->sc_bchan[bch].rx_queue)) {
_IF_ENQUEUE(&sc->sc_bchan[bch].rx_queue, m_in->m_next);
sc->sc_bchan[bch].rxcount += m_in->m_next->m_len;
m_in->m_next = NULL; /* driver frees */
}
(*sc->sc_bchan[bch].capi_drvr_linktab->bch_rx_data_ready)(
sc->sc_bchan[bch].capi_drvr_linktab->unit);
}
}
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_DATA_B3_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, NCCI);
msg = capimsg_setu16(msg, handle);
sc->send(sc, m);
}
/*
// Connection teardown:
// --------------------
*/
void capi_disconnect_req(capi_softc_t *sc, call_desc_t *cd)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 5);
u_int8_t *msg;
u_int16_t msgid;
u_int32_t PLCI;
if (!m) {
printf("capi%d: can't get mbuf for disconnect_req\n", sc->sc_unit);
return;
}
sc->sc_bchan[cd->channelid].state = B_DISCONNECT_CONF;
ctrl_desc[sc->ctrl_unit].bch_state[cd->channelid] = BCH_ST_RSVD;
msgid = sc->sc_bchan[cd->channelid].msgid = sc->sc_msgid++;
PLCI = (sc->sc_bchan[cd->channelid].ncci & CAPI_PLCI_MASK);
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, I4BCAPI_APPLID);
msg = capimsg_setu16(msg, CAPI_DISCONNECT_REQ);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
msg = capimsg_setu8(msg, 0); /* Additional Info */
sc->send(sc, m);
}
void capi_disconnect_conf(capi_softc_t *sc, struct mbuf *m_in)
{
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int32_t PLCI;
int bch;
msg = capimsg_getu32(msg + 8, &PLCI);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state == B_DISCONNECT_CONF) &&
((sc->sc_bchan[bch].ncci & CAPI_PLCI_MASK) == PLCI))
break;
if (bch == sc->sc_nbch) {
printf("capi%d: can't find channel for disconnect_conf PLCI %x\n",
sc->sc_unit, PLCI);
return;
}
cd = cd_by_cdid(sc->sc_bchan[bch].cdid);
if (!cd) {
printf("capi%d: can't find cd for disconnect_conf PLCI %x\n",
sc->sc_unit, PLCI);
} else {
i4b_l4_disconnect_ind(cd);
freecd_by_cd(cd);
}
sc->sc_bchan[bch].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[bch] = BCH_ST_FREE;
}
void capi_disconnect_b3_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 4);
u_int8_t *msg = mtod(m_in, u_int8_t*);
u_int16_t applid, msgid;
u_int32_t NCCI;
if (!m) {
printf("capi%d: can't get mbuf for disconnect_b3_resp\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &NCCI);
/* XXX update bchan state? XXX */
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, applid);
msg = capimsg_setu16(msg, CAPI_DISCONNECT_B3_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, NCCI);
sc->send(sc, m);
}
void capi_disconnect_ind(capi_softc_t *sc, struct mbuf *m_in)
{
struct mbuf *m = i4b_Dgetmbuf(8 + 4);
u_int8_t *msg = mtod(m_in, u_int8_t*);
call_desc_t *cd;
u_int16_t applid, msgid;
u_int32_t PLCI;
u_int16_t Reason;
int bch;
if (!m) {
printf("capi%d: can't get mbuf for disconnect_resp\n", sc->sc_unit);
return;
}
msg = capimsg_getu16(msg + 2, &applid);
msg = capimsg_getu16(msg + 2, &msgid);
msg = capimsg_getu32(msg, &PLCI);
msg = capimsg_getu16(msg, &Reason);
for (bch = 0; bch < sc->sc_nbch; bch++)
if ((sc->sc_bchan[bch].state != B_FREE) &&
((sc->sc_bchan[bch].ncci & CAPI_PLCI_MASK) == PLCI))
break;
if (bch < sc->sc_nbch) {
/* We may not have a bchan assigned if call was ignored. */
cd = cd_by_cdid(sc->sc_bchan[bch].cdid);
sc->sc_bchan[bch].state = B_DISCONNECT_IND;
} else cd = NULL;
if (cd) {
if ((Reason & 0xff00) == 0x3400) {
SET_CAUSE_TV(cd->cause_in, CAUSET_Q850, (Reason & 0x7f));
} else {
SET_CAUSE_TV(cd->cause_in, CAUSET_I4B, CAUSE_I4B_NORMAL);
}
i4b_l4_disconnect_ind(cd);
freecd_by_cd(cd);
sc->sc_bchan[bch].state = B_FREE;
ctrl_desc[sc->ctrl_unit].bch_state[bch] = BCH_ST_FREE;
}
msg = capimsg_setu16(mtod(m, u_int8_t*), m->m_len);
msg = capimsg_setu16(msg, applid);
msg = capimsg_setu16(msg, CAPI_DISCONNECT_RESP);
msg = capimsg_setu16(msg, msgid);
msg = capimsg_setu32(msg, PLCI);
sc->send(sc, m);
}

View File

@ -1,381 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/capi_msgs.h The CAPI i4b message and handler declarations.
*
* $FreeBSD$
*/
#ifndef _I4B_CAPI_MSGS_H_
#define _I4B_CAPI_MSGS_H_
/* CAPI commands */
#define CAPI_ALERT 0x01
#define CAPI_CONNECT 0x02
#define CAPI_CONNECT_ACTIVE 0x03
#define CAPI_CONNECT_B3 0x82
#define CAPI_CONNECT_B3_ACTIVE 0x83
#define CAPI_CONNECT_B3_T90_ACTIVE 0x88
#define CAPI_DATA_B3 0x86
#define CAPI_DISCONNECT_B3 0x84
#define CAPI_DISCONNECT 0x04
#define CAPI_FACILITY 0x80
#define CAPI_INFO 0x08
#define CAPI_LISTEN 0x05
#define CAPI_MANUFACTURER 0xff
#define CAPI_RESET_B3 0x87
#define CAPI_SELECT_B_PROTOCOL 0x41
/* CAPI subcommands */
#define CAPI_REQ 0x80
#define CAPI_CONF 0x81
#define CAPI_IND 0x82
#define CAPI_RESP 0x83
/* CAPI combined commands */
#define CAPICMD(cmd,subcmd) (((subcmd)<<8)|(cmd))
#define CAPI_DISCONNECT_REQ CAPICMD(CAPI_DISCONNECT,CAPI_REQ)
#define CAPI_DISCONNECT_CONF CAPICMD(CAPI_DISCONNECT,CAPI_CONF)
#define CAPI_DISCONNECT_IND CAPICMD(CAPI_DISCONNECT,CAPI_IND)
#define CAPI_DISCONNECT_RESP CAPICMD(CAPI_DISCONNECT,CAPI_RESP)
#define CAPI_ALERT_REQ CAPICMD(CAPI_ALERT,CAPI_REQ)
#define CAPI_ALERT_CONF CAPICMD(CAPI_ALERT,CAPI_CONF)
#define CAPI_CONNECT_REQ CAPICMD(CAPI_CONNECT,CAPI_REQ)
#define CAPI_CONNECT_CONF CAPICMD(CAPI_CONNECT,CAPI_CONF)
#define CAPI_CONNECT_IND CAPICMD(CAPI_CONNECT,CAPI_IND)
#define CAPI_CONNECT_RESP CAPICMD(CAPI_CONNECT,CAPI_RESP)
#define CAPI_CONNECT_ACTIVE_REQ CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_REQ)
#define CAPI_CONNECT_ACTIVE_CONF CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_CONF)
#define CAPI_CONNECT_ACTIVE_IND CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_IND)
#define CAPI_CONNECT_ACTIVE_RESP CAPICMD(CAPI_CONNECT_ACTIVE,CAPI_RESP)
#define CAPI_SELECT_B_PROTOCOL_REQ CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_REQ)
#define CAPI_SELECT_B_PROTOCOL_CONF CAPICMD(CAPI_SELECT_B_PROTOCOL,CAPI_CONF)
#define CAPI_CONNECT_B3_REQ CAPICMD(CAPI_CONNECT_B3,CAPI_REQ)
#define CAPI_CONNECT_B3_CONF CAPICMD(CAPI_CONNECT_B3,CAPI_CONF)
#define CAPI_CONNECT_B3_IND CAPICMD(CAPI_CONNECT_B3,CAPI_IND)
#define CAPI_CONNECT_B3_RESP CAPICMD(CAPI_CONNECT_B3,CAPI_RESP)
#define CAPI_CONNECT_B3_ACTIVE_REQ CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_REQ)
#define CAPI_CONNECT_B3_ACTIVE_CONF CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_CONF)
#define CAPI_CONNECT_B3_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_IND)
#define CAPI_CONNECT_B3_ACTIVE_RESP CAPICMD(CAPI_CONNECT_B3_ACTIVE,CAPI_RESP)
#define CAPI_CONNECT_B3_T90_ACTIVE_IND CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_IND)
#define CAPI_CONNECT_B3_T90_ACTIVE_RESP CAPICMD(CAPI_CONNECT_B3_T90_ACTIVE,CAPI_RESP)
#define CAPI_DATA_B3_REQ CAPICMD(CAPI_DATA_B3,CAPI_REQ)
#define CAPI_DATA_B3_CONF CAPICMD(CAPI_DATA_B3,CAPI_CONF)
#define CAPI_DATA_B3_IND CAPICMD(CAPI_DATA_B3,CAPI_IND)
#define CAPI_DATA_B3_RESP CAPICMD(CAPI_DATA_B3,CAPI_RESP)
#define CAPI_DISCONNECT_B3_REQ CAPICMD(CAPI_DISCONNECT_B3,CAPI_REQ)
#define CAPI_DISCONNECT_B3_CONF CAPICMD(CAPI_DISCONNECT_B3,CAPI_CONF)
#define CAPI_DISCONNECT_B3_IND CAPICMD(CAPI_DISCONNECT_B3,CAPI_IND)
#define CAPI_DISCONNECT_B3_RESP CAPICMD(CAPI_DISCONNECT_B3,CAPI_RESP)
#define CAPI_RESET_B3_REQ CAPICMD(CAPI_RESET_B3,CAPI_REQ)
#define CAPI_RESET_B3_CONF CAPICMD(CAPI_RESET_B3,CAPI_CONF)
#define CAPI_RESET_B3_IND CAPICMD(CAPI_RESET_B3,CAPI_IND)
#define CAPI_RESET_B3_RESP CAPICMD(CAPI_RESET_B3,CAPI_RESP)
#define CAPI_LISTEN_REQ CAPICMD(CAPI_LISTEN,CAPI_REQ)
#define CAPI_LISTEN_CONF CAPICMD(CAPI_LISTEN,CAPI_CONF)
#define CAPI_MANUFACTURER_REQ CAPICMD(CAPI_MANUFACTURER,CAPI_REQ)
#define CAPI_MANUFACTURER_CONF CAPICMD(CAPI_MANUFACTURER,CAPI_CONF)
#define CAPI_MANUFACTURER_IND CAPICMD(CAPI_MANUFACTURER,CAPI_IND)
#define CAPI_MANUFACTURER_RESP CAPICMD(CAPI_MANUFACTURER,CAPI_RESP)
#define CAPI_FACILITY_REQ CAPICMD(CAPI_FACILITY,CAPI_REQ)
#define CAPI_FACILITY_CONF CAPICMD(CAPI_FACILITY,CAPI_CONF)
#define CAPI_FACILITY_IND CAPICMD(CAPI_FACILITY,CAPI_IND)
#define CAPI_FACILITY_RESP CAPICMD(CAPI_FACILITY,CAPI_RESP)
#define CAPI_INFO_REQ CAPICMD(CAPI_INFO,CAPI_REQ)
#define CAPI_INFO_CONF CAPICMD(CAPI_INFO,CAPI_CONF)
#define CAPI_INFO_IND CAPICMD(CAPI_INFO,CAPI_IND)
#define CAPI_INFO_RESP CAPICMD(CAPI_INFO,CAPI_RESP)
/* CAPI message access helpers */
/*
* CAPI message header:
* word Length
* word ApplId
* byte Command
* byte Subcommand
* word MsgId
*
* Note that in the following, Controller/PLCI/NCCI is coded as follows:
* bits 0..6 = controller, bit 7 = ext/int, bits 8..15 = PLCI, and
* bits 16..31 = NCCI value.
*
* ALERT_REQ, 01 80:
* dword PLCI
* struct Additional Info
*
* ALERT_CONF, 01 81:
* dword PLCI
* word Info (0 = OK, other = cause)
*
* CONNECT_REQ, 02 80:
* dword controller
* word CIP
* struct Called party number
* struct Calling party number
* struct Called party subaddress
* struct Calling party subaddress
* struct Bearer Capability
* struct Low Layer Compatibility
* struct High Layer Compatibility
* struct Additional Info
*
* CONNECT_CONF, 02 81:
* dword PLCI
* word Info (0 = OK, other = cause)
*
* CONNECT_IND, 02 82:
* dword PLCI
* word CIP
* struct Called party number
* struct Calling party number
* struct Called party subaddress
* struct Calling party subaddress
* struct Bearer Capability
* struct Low Layer Compatibility
* struct High Layer Compatibility
* struct Additional Info
* struct Second Calling party number
*
* CONNECT_RESP, 02 83:
* dword PLCI
* word Reject (0 = accept, 1 = ignore, 2 = reject/normal clearing)
* struct B protocol
* struct Connected number
* struct Connected subaddress
* struct Low Layer Compatibility
* struct Additional Info
*
* CONNECT_ACTIVE_IND, 03 82:
* dword PLCI
* struct Connected number
* struct Connected subaddress
* struct Low Layer Compatibility
*
* CONNECT_ACTIVE_RESP, 03 83:
* dword PLCI
*
* CONNECT_B3_REQ, 82 80:
* dword PLCI
* struct NCPI
*
* CONNECT_B3_CONF, 82 81:
* dword NCCI
* word Info (0 = connected, other = cause)
*
* CONNECT_B3_IND, 82 82:
* dword NCCI
* struct NCPI
*
* CONNECT_B3_RESP, 82 83:
* dword NCCI
* word Reject (0 = accept, 2 = reject/normal clearing)
* struct NCPI
*
* CONNECT_B3_ACTIVE_IND, 83 82:
* dword NCCI
* struct NCPI
*
* CONNECT_B3_ACTIVE_RESP, 83 83:
* dword NCCI
*
* DATA_B3_REQ, 86 80:
* dword NCCI
* dword Data pointer
* word Data length
* word Data handle (packet id)
* word Flags (02 = more)
*
* DATA_B3_CONF, 86 81:
* dword NCCI
* word Data handle (packet id)
* word Info (0 = OK, other = cause)
*
* DATA_B3_IND, 86 82:
* dword NCCI
* dword Data pointer
* word Data length
* word Data handle (packet id)
* word Flags (02 = more)
*
* DATA_B3_RESP, 86 83:
* dword NCCI
* word Data handle (packet id)
*
* DISCONNECT_B3_REQ, 84 80:
* dword NCCI
* struct NCPI
*
* DISCONNECT_B3_CONF, 84 81:
* dword NCCI
* word Info (0 = OK, other = cause)
*
* DISCONNECT_B3_IND, 84 82:
* dword NCCI
* word Reason
* struct NCPI
*
* DISCONNECT_B3_RESP, 84 83:
* dword NCCI
*
* DISCONNECT_REQ, 04 80:
* dword PLCI
* struct Additional Info
*
* DISCONNECT_CONF, 04 81:
* dword PLCI
* word Info (0 = OK, other = cause)
*
* DISCONNECT_IND, 04 82:
* dword PLCI
* word Reason
*
* DISCONNECT_RESP, 04 83:
* dword PLCI
*
* LISTEN_REQ, 05 80:
* dword Controller
* dword Info mask (bits 0..9 used)
* dword CIP Mask (bit 0 = any match)
* dword CIP Mask 2 (bit 0 = any match)
* struct Calling party number
* struct Calling party subaddress
*
* LISTEN_CONF, 05 81:
* dword Controller
* word Info (0 = OK, other = cause)
*
* INFO_REQ, 08 80:
* dword Controller/PLCI
* struct Called party number
* struct Additional Info
*
* INFO_CONF, 08 81:
* dword Controller/PLCI
* word Info (0 = OK, other = cause)
*
* INFO_IND, 08 82:
* dword Controller/PLCI
* word Info number
* struct Info element
*
* INFO_RESP, 08 83:
* dword Controller/PLCI
*/
#define CAPIMSG_LEN(msg) (msg[0]|(msg[1]<<8))
#define CAPIMSG_DATALEN(msg) (msg[16]|(msg[17]<<8))
static __inline u_int8_t* capimsg_getu8(u_int8_t *msg, u_int8_t *val)
{
*val = *msg;
return (msg + 1);
}
static __inline u_int8_t* capimsg_getu16(u_int8_t *msg, u_int16_t *val)
{
*val = (msg[0]|(msg[1]<<8));
return (msg + 2);
}
static __inline u_int8_t* capimsg_getu32(u_int8_t *msg, u_int32_t *val)
{
*val = (msg[0]|(msg[1]<<8)|(msg[2]<<16)|(msg[3]<<24));
return (msg + 4);
}
static __inline u_int8_t* capimsg_setu8(u_int8_t *msg, u_int8_t val)
{
msg[0] = val;
return (msg + 1);
}
static __inline u_int8_t* capimsg_setu16(u_int8_t *msg, u_int16_t val)
{
msg[0] = (val & 0xff);
msg[1] = (val >> 8) & 0xff;
return (msg + 2);
}
static __inline u_int8_t* capimsg_setu32(u_int8_t *msg, u_int32_t val)
{
msg[0] = (val & 0xff);
msg[1] = (val >> 8) & 0xff;
msg[2] = (val >> 16) & 0xff;
msg[3] = (val >> 24) & 0xff;
return (msg + 4);
}
/*
// CAPI message handlers called by higher layers
*/
extern void capi_listen_req(capi_softc_t *sc, u_int32_t CIP);
extern void capi_alert_req(capi_softc_t *sc, call_desc_t *cd);
extern void capi_connect_req(capi_softc_t *sc, call_desc_t *cd);
extern void capi_connect_b3_req(capi_softc_t *sc, call_desc_t *cd);
extern void capi_connect_resp(capi_softc_t *sc, call_desc_t *cd);
extern void capi_data_b3_req(capi_softc_t *sc, int chan, struct mbuf *m);
extern void capi_disconnect_req(capi_softc_t *sc, call_desc_t *cd);
/*
// CAPI message handlers called by the receive routine
*/
extern void capi_listen_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_info_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_alert_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_active_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_b3_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_b3_active_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_connect_b3_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_data_b3_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_data_b3_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_disconnect_conf(capi_softc_t *sc, struct mbuf *m);
extern void capi_disconnect_b3_ind(capi_softc_t *sc, struct mbuf *m);
extern void capi_disconnect_ind(capi_softc_t *sc, struct mbuf *m);
#endif /* _I4B_CAPI_MSGS_H_ */

View File

@ -1,446 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/iavc/iavc.h The AVM ISDN controllers' common declarations.
*
* $FreeBSD$
*/
#ifndef _CAPI_IAVC_H_
#define _CAPI_IAVC_H_
/* max 4 units supported per machine */
#define IAVC_MAXUNIT 4
/*
// iavc_softc_t
// The software context of one AVM T1 controller.
*/
#define IAVC_IO_BASES 1
typedef struct i4b_info {
struct resource * io_base[IAVC_IO_BASES];
int io_rid [IAVC_IO_BASES];
struct resource * irq;
int irq_rid;
struct resource * mem;
int mem_rid;
} i4b_info_t;
typedef struct iavc_softc {
capi_softc_t sc_capi;
int sc_unit;
int sc_cardtyp;
u_int32_t sc_membase;
bus_space_handle_t sc_mem_bh;
bus_space_tag_t sc_mem_bt;
u_int32_t sc_iobase;
bus_space_handle_t sc_io_bh;
bus_space_tag_t sc_io_bt;
int sc_state;
#define IAVC_DOWN 0
#define IAVC_POLL 1
#define IAVC_INIT 2
#define IAVC_UP 3
int sc_blocked;
int sc_dma;
int sc_t1;
int sc_intr;
u_int32_t sc_csr;
char sc_sendbuf[128+2048];
char sc_recvbuf[128+2048];
int sc_recvlen;
struct ifqueue sc_txq;
i4b_info_t sc_resources;
} iavc_softc_t;
extern iavc_softc_t iavc_sc[];
#define iavc_find_sc(unit) (&iavc_sc[(unit)])
/*
// {b1,b1dma,t1}_{detect,reset}
// Routines to detect and manage the specific type of card.
*/
extern int b1_detect(iavc_softc_t *sc);
extern void b1_disable_irq(iavc_softc_t *sc);
extern void b1_reset(iavc_softc_t *sc);
extern int b1dma_detect(iavc_softc_t *sc);
extern void b1dma_reset(iavc_softc_t *sc);
extern int t1_detect(iavc_softc_t *sc);
extern void t1_disable_irq(iavc_softc_t *sc);
extern void t1_reset(iavc_softc_t *sc);
/*
// AMCC_{READ,WRITE}
// Routines to access the memory mapped registers of the
// S5933 DMA controller.
*/
static __inline u_int32_t AMCC_READ(iavc_softc_t *sc, int off)
{
return bus_space_read_4(sc->sc_mem_bt, sc->sc_mem_bh, off);
}
static __inline void AMCC_WRITE(iavc_softc_t *sc, int off, u_int32_t value)
{
bus_space_write_4(sc->sc_mem_bt, sc->sc_mem_bh, off, value);
}
/*
// amcc_{put,get}_{byte,word}
// Routines to access the DMA buffers byte- or wordwise.
*/
static __inline u_int8_t* amcc_put_byte(u_int8_t *buf, u_int8_t value)
{
*buf++ = value;
return buf;
}
static __inline u_int8_t* amcc_get_byte(u_int8_t *buf, u_int8_t *value)
{
*value = *buf++;
return buf;
}
static __inline u_int8_t* amcc_put_word(u_int8_t *buf, u_int32_t value)
{
*buf++ = (value & 0xff);
*buf++ = (value >> 8) & 0xff;
*buf++ = (value >> 16) & 0xff;
*buf++ = (value >> 24) & 0xff;
return buf;
}
static __inline u_int8_t* amcc_get_word(u_int8_t *buf, u_int32_t *value)
{
*value = *buf++;
*value |= (*buf++ << 8);
*value |= (*buf++ << 16);
*value |= (*buf++ << 24);
return buf;
}
/*
// Controller LLI message numbers.
*/
#define SEND_POLL 0x72
#define SEND_INIT 0x11
#define SEND_REGISTER 0x12
#define SEND_DATA_B3_REQ 0x13
#define SEND_RELEASE 0x14
#define SEND_MESSAGE 0x15
#define SEND_CONFIG 0x71
#define SEND_POLLACK 0x73
#define RECEIVE_POLL 0x32
#define RECEIVE_INIT 0x27
#define RECEIVE_MESSAGE 0x21
#define RECEIVE_DATA_B3_IND 0x22
#define RECEIVE_START 0x23
#define RECEIVE_STOP 0x24
#define RECEIVE_NEW_NCCI 0x25
#define RECEIVE_FREE_NCCI 0x26
#define RECEIVE_RELEASE 0x26
#define RECEIVE_TASK_READY 0x31
#define RECEIVE_DEBUGMSG 0x71
#define RECEIVE_POLLDWORD 0x75
/* Operation constants */
#define WRITE_REGISTER 0x00
#define READ_REGISTER 0x01
/* Port offsets in I/O space */
#define B1_READ 0x00
#define B1_WRITE 0x01
#define B1_INSTAT 0x02
#define B1_OUTSTAT 0x03
#define B1_ANALYSE 0x04
#define B1_REVISION 0x05
#define B1_RESET 0x10
#define T1_FASTLINK 0x00
#define T1_SLOWLINK 0x08
#define T1_READ B1_READ
#define T1_WRITE B1_WRITE
#define T1_INSTAT B1_INSTAT
#define T1_OUTSTAT B1_OUTSTAT
#define T1_IRQENABLE 0x05
#define T1_FIFOSTAT 0x06
#define T1_RESETLINK 0x10
#define T1_ANALYSE 0x11
#define T1_IRQMASTER 0x12
#define T1_IDENT 0x17
#define T1_RESETBOARD 0x1f
#define T1F_IREADY 0x01
#define T1F_IHALF 0x02
#define T1F_IFULL 0x04
#define T1F_IEMPTY 0x08
#define T1F_IFLAGS 0xf0
#define T1F_OREADY 0x10
#define T1F_OHALF 0x20
#define T1F_OEMPTY 0x40
#define T1F_OFULL 0x80
#define T1F_OFLAGS 0xf0
#define FIFO_OUTBSIZE 256
#define FIFO_INPBSIZE 512
#define HEMA_VERSION_ID 0
#define HEMA_PAL_ID 0
/*
// S5933 DMA controller register offsets in memory, and bitmasks.
*/
#define AMCC_RXPTR 0x24
#define AMCC_RXLEN 0x28
#define AMCC_TXPTR 0x2c
#define AMCC_TXLEN 0x30
#define AMCC_INTCSR 0x38
#define EN_READ_TC_INT 0x00008000
#define EN_WRITE_TC_INT 0x00004000
#define EN_TX_TC_INT EN_READ_TC_INT
#define EN_RX_TC_INT EN_WRITE_TC_INT
#define AVM_FLAG 0x30000000
#define ANY_S5933_INT 0x00800000
#define READ_TC_INT 0x00080000
#define WRITE_TC_INT 0x00040000
#define TX_TC_INT READ_TC_INT
#define RX_TC_INT WRITE_TC_INT
#define MASTER_ABORT_INT 0x00100000
#define TARGET_ABORT_INT 0x00200000
#define BUS_MASTER_INT 0x00200000
#define ALL_INT 0x000c0000
#define AMCC_MCSR 0x3c
#define A2P_HI_PRIORITY 0x00000100
#define EN_A2P_TRANSFERS 0x00000400
#define P2A_HI_PRIORITY 0x00001000
#define EN_P2A_TRANSFERS 0x00004000
#define RESET_A2P_FLAGS 0x04000000
#define RESET_P2A_FLAGS 0x02000000
/*
// (B1IO_WAIT_MAX * B1IO_WAIT_DLY) is the max wait in us for the card
// to become ready after an I/O operation. The default is 1 ms.
*/
#define B1IO_WAIT_MAX 1000
#define B1IO_WAIT_DLY 1
/*
// b1io_outp
// Diagnostic output routine, returns the written value via
// the device's analysis register.
//
// b1io_rx_full
// Returns nonzero if data is readable from the card via the
// I/O ports.
//
// b1io_tx_empty
// Returns nonzero if data can be written to the card via the
// I/O ports.
*/
static __inline u_int8_t b1io_outp(iavc_softc_t *sc, int off, u_int8_t val)
{
bus_space_write_1(sc->sc_io_bt, sc->sc_io_bh, off, val);
DELAY(1);
return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, B1_ANALYSE);
}
static __inline int b1io_rx_full(iavc_softc_t *sc)
{
u_int8_t val = bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, B1_INSTAT);
return (val & 0x01);
}
static __inline int b1io_tx_empty(iavc_softc_t *sc)
{
u_int8_t val = bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, B1_OUTSTAT);
return (val & 0x01);
}
/*
// b1io_{get,put}_{byte,word}
// Routines to read and write the device I/O registers byte- or
// wordwise.
//
// b1io_{get,put}_slice
// Routines to read and write sequential bytes to the device
// I/O registers.
*/
u_int8_t b1io_get_byte(iavc_softc_t *sc);
int b1io_put_byte(iavc_softc_t *sc, u_int8_t val);
int b1io_save_put_byte(iavc_softc_t *sc, u_int8_t val);
u_int32_t b1io_get_word(iavc_softc_t *sc);
void b1io_put_word(iavc_softc_t *sc, u_int32_t val);
int b1io_get_slice(iavc_softc_t *sc, u_int8_t *dp);
void b1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len);
/*
// b1io_{read,write}_reg
// Routines to read and write the device registers via the I/O
// ports.
*/
u_int32_t b1io_read_reg(iavc_softc_t *sc, int reg);
u_int32_t b1io_write_reg(iavc_softc_t *sc, int reg, u_int32_t val);
/*
// t1io_outp
// I/O port write operation for the T1, which does not seem
// to have the analysis port.
*/
static __inline void t1io_outp(iavc_softc_t *sc, int off, u_int8_t val)
{
bus_space_write_1(sc->sc_io_bt, sc->sc_io_bh, off, val);
}
static __inline u_int8_t t1io_inp(iavc_softc_t *sc, int off)
{
return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, off);
}
static __inline int t1io_isfastlink(iavc_softc_t *sc)
{
return ((bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, T1_IDENT) & ~0x82) == 1);
}
static __inline u_int8_t t1io_fifostatus(iavc_softc_t *sc)
{
return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, T1_FIFOSTAT);
}
int t1io_get_slice(iavc_softc_t *sc, u_int8_t *dp);
void t1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len);
/*
// An attempt to bring it all together:
// ------------------------------------
//
// iavc_{read,write}_reg
// Routines to access the device registers via the I/O port.
//
// iavc_{read,write}_port
// Routines to access the device I/O ports.
//
// iavc_tx_empty, iavc_rx_full
// Routines to check when the device has drained the last written
// byte, or produced a full byte to read.
//
// iavc_{get,put}_byte
// Routines to read/write byte values to the device via the I/O port.
//
// iavc_{get,put}_word
// Routines to read/write 32-bit words to the device via the I/O port.
//
// iavc_{get,put}_slice
// Routines to read/write {length, data} pairs to the device via the
// ubiquituous I/O port. Uses the HEMA FIFO on a T1.
*/
#define iavc_read_reg(sc, reg) b1io_read_reg(sc, reg)
#define iavc_write_reg(sc, reg, val) b1io_write_reg(sc, reg, val)
#define iavc_read_port(sc, port) \
bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, (port))
#define iavc_write_port(sc, port, val) \
bus_space_write_1(sc->sc_io_bt, sc->sc_io_bh, (port), (val))
#define iavc_tx_empty(sc) b1io_tx_empty(sc)
#define iavc_rx_full(sc) b1io_rx_full(sc)
#define iavc_get_byte(sc) b1io_get_byte(sc)
#define iavc_put_byte(sc, val) b1io_put_byte(sc, val)
#define iavc_get_word(sc) b1io_get_word(sc)
#define iavc_put_word(sc, val) b1io_put_word(sc, val)
static __inline u_int32_t iavc_get_slice(iavc_softc_t *sc, u_int8_t *dp)
{
if (sc->sc_t1) return t1io_get_slice(sc, dp);
else return b1io_get_slice(sc, dp);
}
static __inline void iavc_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len)
{
if (sc->sc_t1) t1io_put_slice(sc, dp, len);
else b1io_put_slice(sc, dp, len);
}
/*
// iavc_handle_intr
// Interrupt handler, called by the bus specific interrupt routine
// in iavc_<bustype>.c module.
//
// iavc_load
// CAPI callback. Resets device and loads firmware.
//
// iavc_register
// CAPI callback. Registers an application id.
//
// iavc_release
// CAPI callback. Releases an application id.
//
// iavc_send
// CAPI callback. Sends a CAPI message. A B3_DATA_REQ message has
// m_next point to a data mbuf.
*/
extern void iavc_handle_intr(iavc_softc_t *);
extern int iavc_load(capi_softc_t *, int, u_int8_t *);
extern int iavc_register(capi_softc_t *, int, int);
extern int iavc_release(capi_softc_t *, int);
extern int iavc_send(capi_softc_t *, struct mbuf *);
extern void b1isa_setup_irq(struct iavc_softc *sc);
#endif /* _CAPI_IAVC_H_ */

View File

@ -1,285 +0,0 @@
/*-
* Copyright (c) 2001 Cubical Solutions Ltd. 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.
*/
/* capi/iavc/iavc_card.c
* The AVM ISDN controllers' card specific support routines.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#include <machine/bus.h>
#include <machine/resource.h>
#include <sys/bus.h>
#include <sys/rman.h>
#include <i4b/include/i4b_debug.h>
#include <i4b/include/i4b_ioctl.h>
#include <i4b/include/i4b_trace.h>
#include <i4b/include/i4b_global.h>
#include <i4b/include/i4b_l3l4.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/capi/capi.h>
#include <i4b/capi/iavc/iavc.h>
/*
// AVM B1 (active BRI, PIO mode)
*/
int b1_detect(iavc_softc_t *sc)
{
if ((iavc_read_port(sc, B1_INSTAT) & 0xfc) ||
(iavc_read_port(sc, B1_OUTSTAT) & 0xfc))
return (1);
b1io_outp(sc, B1_INSTAT, 0x02);
b1io_outp(sc, B1_OUTSTAT, 0x02);
if ((iavc_read_port(sc, B1_INSTAT) & 0xfe) != 2 ||
(iavc_read_port(sc, B1_OUTSTAT) & 0xfe) != 2)
return (2);
b1io_outp(sc, B1_INSTAT, 0x00);
b1io_outp(sc, B1_OUTSTAT, 0x00);
if ((iavc_read_port(sc, B1_INSTAT) & 0xfe) ||
(iavc_read_port(sc, B1_OUTSTAT) & 0xfe))
return (3);
return (0); /* found */
}
void b1_disable_irq(iavc_softc_t *sc)
{
b1io_outp(sc, B1_INSTAT, 0x00);
}
void b1_reset(iavc_softc_t *sc)
{
b1io_outp(sc, B1_RESET, 0);
DELAY(55*2*1000);
b1io_outp(sc, B1_RESET, 1);
DELAY(55*2*1000);
b1io_outp(sc, B1_RESET, 0);
DELAY(55*2*1000);
}
/*
// Newer PCI-based B1's, and T1's, supports DMA
*/
int b1dma_detect(iavc_softc_t *sc)
{
AMCC_WRITE(sc, AMCC_MCSR, 0);
DELAY(10*1000);
AMCC_WRITE(sc, AMCC_MCSR, 0x0f000000);
DELAY(10*1000);
AMCC_WRITE(sc, AMCC_MCSR, 0);
DELAY(42*1000);
AMCC_WRITE(sc, AMCC_RXLEN, 0);
AMCC_WRITE(sc, AMCC_TXLEN, 0);
sc->sc_csr = 0;
AMCC_WRITE(sc, AMCC_INTCSR, sc->sc_csr);
if (AMCC_READ(sc, AMCC_INTCSR) != 0)
return 1;
AMCC_WRITE(sc, AMCC_RXPTR, 0xffffffff);
AMCC_WRITE(sc, AMCC_TXPTR, 0xffffffff);
if ((AMCC_READ(sc, AMCC_RXPTR) != 0xfffffffc) ||
(AMCC_READ(sc, AMCC_TXPTR) != 0xfffffffc))
return 2;
AMCC_WRITE(sc, AMCC_RXPTR, 0);
AMCC_WRITE(sc, AMCC_TXPTR, 0);
if ((AMCC_READ(sc, AMCC_RXPTR) != 0) ||
(AMCC_READ(sc, AMCC_TXPTR) != 0))
return 3;
iavc_write_port(sc, 0x10, 0x00);
iavc_write_port(sc, 0x07, 0x00);
iavc_write_port(sc, 0x02, 0x02);
iavc_write_port(sc, 0x03, 0x02);
if (((iavc_read_port(sc, 0x02) & 0xfe) != 0x02) ||
(iavc_read_port(sc, 0x03) != 0x03))
return 4;
iavc_write_port(sc, 0x02, 0x00);
iavc_write_port(sc, 0x03, 0x00);
if (((iavc_read_port(sc, 0x02) & 0xfe) != 0x00) ||
(iavc_read_port(sc, 0x03) != 0x01))
return 5;
return (0); /* found */
}
void b1dma_reset(iavc_softc_t *sc)
{
int s = SPLI4B();
sc->sc_csr = 0;
AMCC_WRITE(sc, AMCC_INTCSR, sc->sc_csr);
AMCC_WRITE(sc, AMCC_MCSR, 0);
AMCC_WRITE(sc, AMCC_RXLEN, 0);
AMCC_WRITE(sc, AMCC_TXLEN, 0);
iavc_write_port(sc, 0x10, 0x00); /* XXX magic numbers from */
iavc_write_port(sc, 0x07, 0x00); /* XXX the linux driver */
splx(s);
AMCC_WRITE(sc, AMCC_MCSR, 0);
DELAY(10 * 1000);
AMCC_WRITE(sc, AMCC_MCSR, 0x0f000000);
DELAY(10 * 1000);
AMCC_WRITE(sc, AMCC_MCSR, 0);
DELAY(42 * 1000);
}
/*
// AVM T1 (active PRI)
*/
/* XXX how do these differ from b1io_{read,write}_reg()? XXX */
static int b1dma_tx_empty(int iobase)
{ return inb(iobase + 3) & 1; }
static int b1dma_rx_full(int iobase)
{ return inb(iobase + 2) & 1; }
static int b1dma_tolink(iavc_softc_t *sc, void *buf, int len)
{
volatile int spin;
char *s = (char*) buf;
while (len--) {
spin = 0;
while (!b1dma_tx_empty(sc->sc_iobase) && spin < 100000)
spin++;
if (!b1dma_tx_empty(sc->sc_iobase))
return -1;
t1io_outp(sc, 1, *s++);
}
return 0;
}
static int b1dma_fromlink(iavc_softc_t *sc, void *buf, int len)
{
volatile int spin;
char *s = (char*) buf;
while (len--) {
spin = 0;
while (!b1dma_rx_full(sc->sc_iobase) && spin < 100000)
spin++;
if (!b1dma_rx_full(sc->sc_iobase))
return -1;
*s++ = t1io_inp(sc, 0);
}
return 0;
}
static int WriteReg(iavc_softc_t *sc, u_int32_t reg, u_int8_t val)
{
u_int8_t cmd = 0;
if (b1dma_tolink(sc, &cmd, 1) == 0 &&
b1dma_tolink(sc, &reg, 4) == 0) {
u_int32_t tmp = val;
return b1dma_tolink(sc, &tmp, 4);
}
return -1;
}
static u_int8_t ReadReg(iavc_softc_t *sc, u_int32_t reg)
{
u_int8_t cmd = 1;
if (b1dma_tolink(sc, &cmd, 1) == 0 &&
b1dma_tolink(sc, &reg, 4) == 0) {
u_int32_t tmp;
if (b1dma_fromlink(sc, &tmp, 4) == 0)
return (u_int8_t) tmp;
}
return 0xff;
}
int t1_detect(iavc_softc_t *sc)
{
int ret = b1dma_detect(sc);
if (ret) return ret;
if ((WriteReg(sc, 0x80001000, 0x11) != 0) ||
(WriteReg(sc, 0x80101000, 0x22) != 0) ||
(WriteReg(sc, 0x80201000, 0x33) != 0) ||
(WriteReg(sc, 0x80301000, 0x44) != 0))
return 6;
if ((ReadReg(sc, 0x80001000) != 0x11) ||
(ReadReg(sc, 0x80101000) != 0x22) ||
(ReadReg(sc, 0x80201000) != 0x33) ||
(ReadReg(sc, 0x80301000) != 0x44))
return 7;
if ((WriteReg(sc, 0x80001000, 0x55) != 0) ||
(WriteReg(sc, 0x80101000, 0x66) != 0) ||
(WriteReg(sc, 0x80201000, 0x77) != 0) ||
(WriteReg(sc, 0x80301000, 0x88) != 0))
return 8;
if ((ReadReg(sc, 0x80001000) != 0x55) ||
(ReadReg(sc, 0x80101000) != 0x66) ||
(ReadReg(sc, 0x80201000) != 0x77) ||
(ReadReg(sc, 0x80301000) != 0x88))
return 9;
return 0; /* found */
}
void t1_disable_irq(iavc_softc_t *sc)
{
iavc_write_port(sc, T1_IRQMASTER, 0x00);
}
void t1_reset(iavc_softc_t *sc)
{
b1_reset(sc);
iavc_write_port(sc, B1_INSTAT, 0x00);
iavc_write_port(sc, B1_OUTSTAT, 0x00);
iavc_write_port(sc, T1_IRQMASTER, 0x00);
iavc_write_port(sc, T1_RESETBOARD, 0x0f);
}

View File

@ -1,289 +0,0 @@
/*-
* Copyright (c) 2001, 2002 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.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#include <machine/bus.h>
#include <machine/resource.h>
#include <sys/bus.h>
#include <sys/rman.h>
#include <vm/vm.h>
#include <vm/pmap.h>
#include <isa/isavar.h>
#include <i4b/include/i4b_debug.h>
#include <i4b/include/i4b_ioctl.h>
#include <i4b/include/i4b_trace.h>
#include <i4b/include/i4b_global.h>
#include <i4b/include/i4b_l3l4.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/capi/capi.h>
#include <i4b/capi/iavc/iavc.h>
/* ISA driver linkage */
static void iavc_isa_intr(iavc_softc_t *sc);
static int iavc_isa_probe(device_t dev);
static int iavc_isa_attach(device_t dev);
static device_method_t iavc_isa_methods[] =
{
DEVMETHOD(device_probe, iavc_isa_probe),
DEVMETHOD(device_attach, iavc_isa_attach),
{ 0, 0 }
};
static driver_t iavc_isa_driver =
{
"iavc",
iavc_isa_methods,
0
};
static devclass_t iavc_isa_devclass;
DRIVER_MODULE(iavc, isa, iavc_isa_driver, iavc_isa_devclass, 0, 0);
#define B1_IOLENGTH 0x20
static int b1_irq_table[] =
{0, 0, 0, 192, 32, 160, 96, 224, 0, 64, 80, 208, 48, 0, 0, 112};
/* 3 4 5 6 7 9 10 11 12 15 */
/*---------------------------------------------------------------------------*
* device probe
*---------------------------------------------------------------------------*/
static int
iavc_isa_probe(device_t dev)
{
struct iavc_softc *sc;
int ret = ENXIO;
int unit = device_get_unit(dev);
if(isa_get_vendorid(dev)) /* no PnP probes here */
return ENXIO;
/* check max unit range */
if (unit >= IAVC_MAXUNIT)
{
printf("iavc%d: too many units\n", unit);
return(ENXIO);
}
sc = iavc_find_sc(unit); /* get softc */
sc->sc_unit = unit;
if (!(sc->sc_resources.io_base[0] =
bus_alloc_resource(dev, SYS_RES_IOPORT,
&sc->sc_resources.io_rid[0],
0UL, ~0UL, B1_IOLENGTH, RF_ACTIVE)))
{
printf("iavc%d: can't allocate io region\n", unit);
return(ENXIO);
}
sc->sc_iobase = rman_get_start(sc->sc_resources.io_base[0]);
switch(sc->sc_iobase)
{
case 0x150:
case 0x250:
case 0x300:
case 0x340:
break;
default:
printf("iavc%d: ERROR, invalid i/o base addr 0x%x configured!\n", sc->sc_unit, sc->sc_iobase);
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
return(ENXIO);
}
sc->sc_io_bt = rman_get_bustag(sc->sc_resources.io_base[0]);
sc->sc_io_bh = rman_get_bushandle(sc->sc_resources.io_base[0]);
/* setup characteristics */
sc->sc_t1 = FALSE;
sc->sc_dma = FALSE;
sc->sc_capi.card_type = CARD_TYPEC_AVM_B1_ISA;
sc->sc_capi.sc_nbch = 2;
b1_reset(sc);
DELAY(100);
ret = b1_detect(sc);
if(ret)
{
printf("iavc%d: no card ? b1_detect returns %0x02x\n",
sc->sc_unit, ret);
return(ENXIO);
}
DELAY(100);
b1_reset(sc);
DELAY(100);
if(bootverbose)
{
printf("iavc%d: class = 0x%02x, rev = 0x%02x\n", sc->sc_unit,
iavc_read_port(sc, B1_ANALYSE),
iavc_read_port(sc, B1_REVISION));
}
device_set_desc(dev, "AVM B1 ISA");
return(0);
}
/*---------------------------------------------------------------------------*
* attach
*---------------------------------------------------------------------------*/
static int
iavc_isa_attach(device_t dev)
{
struct iavc_softc *sc;
void *ih = 0;
int unit = device_get_unit(dev);
int irq;
sc = iavc_find_sc(unit); /* get softc */
sc->sc_resources.irq_rid = 0;
if(!(sc->sc_resources.irq =
bus_alloc_resource_any(dev, SYS_RES_IRQ,
&sc->sc_resources.irq_rid, RF_ACTIVE)))
{
printf("iavc%d: can't allocate irq\n",unit);
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
return(ENXIO);
}
irq = rman_get_start(sc->sc_resources.irq);
if(b1_irq_table[irq] == 0)
{
printf("iavc%d: ERROR, illegal irq %d configured!\n",unit, irq);
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
bus_release_resource(dev, SYS_RES_IRQ,
sc->sc_resources.irq_rid,
sc->sc_resources.irq);
return(ENXIO);
}
memset(&sc->sc_txq, 0, sizeof(struct ifqueue));
sc->sc_txq.ifq_maxlen = sc->sc_capi.sc_nbch * 4;
if(!mtx_initialized(&sc->sc_txq.ifq_mtx))
mtx_init(&sc->sc_txq.ifq_mtx, "i4b_ivac_isa", NULL, MTX_DEF);
sc->sc_intr = FALSE;
sc->sc_state = IAVC_DOWN;
sc->sc_blocked = FALSE;
/* setup capi link */
sc->sc_capi.load = iavc_load;
sc->sc_capi.reg_appl = iavc_register;
sc->sc_capi.rel_appl = iavc_release;
sc->sc_capi.send = iavc_send;
sc->sc_capi.ctx = (void*) sc;
if (capi_ll_attach(&sc->sc_capi))
{
printf("iavc%d: capi attach failed\n", unit);
return(ENXIO);
}
/* setup the interrupt */
if(bus_setup_intr(dev, sc->sc_resources.irq, INTR_TYPE_NET,
NULL, (void(*)(void*))iavc_isa_intr,
sc, &ih))
{
printf("iavc%d: irq setup failed\n", unit);
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
bus_release_resource(dev, SYS_RES_IRQ,
sc->sc_resources.irq_rid,
sc->sc_resources.irq);
return(ENXIO);
}
/* the board is now ready to be loaded */
return(0);
}
/*---------------------------------------------------------------------------*
* setup interrupt
*---------------------------------------------------------------------------*/
void
b1isa_setup_irq(struct iavc_softc *sc)
{
int irq = rman_get_start(sc->sc_resources.irq);
if(bootverbose)
printf("iavc%d: using irq %d\n", sc->sc_unit, irq);
/* enable the interrupt */
b1io_outp(sc, B1_INSTAT, 0x00);
b1io_outp(sc, B1_RESET, b1_irq_table[irq]);
b1io_outp(sc, B1_INSTAT, 0x02);
}
/*---------------------------------------------------------------------------*
* IRQ handler
*---------------------------------------------------------------------------*/
static void
iavc_isa_intr(struct iavc_softc *sc)
{
iavc_handle_intr(sc);
}

Some files were not shown because too many files have changed in this diff Show More