ISDN
Setup using RedHat Linux 9.0
Introduction
|
Contents of the
5 page series:
Introduction
Configuration
files
Execution
& options files
Password
files
"Bells,
whistles" & Troubleshooting
Understanding
your debug file
|
These pages describe setting
up the Parameters: RedHat Linux 9.0, Asuscom ISDN Link
(P-IN100-ST-D)PCI card with HFC chip, AMD Athlon Microprocessor and I am
living in Germany using Deutsche Telekom. This card uses the hisax
driver. If you are using a different card, you may need a different
driver. If you have a BT Speedway (AVM Fritz PCI) card or Eicon Diva
2.01 internal PCI card or another card, try this site: http://www.thennion.demon.co.uk/ISDN.html.
For Teledat 100 (= Sedlbauer speed card) try this site: http://leising.freeshell.org/isdn.html.
Once you have installed the driver for your card, then I think the
scripts below should be useful for any card.
|
Thank you's and kudos
Much of what I have written comes from the following sites (http://www.thennion.demon.co.uk/ISDN.html
and http://leising.freeshell.org/isdn.html)
and without them, my
penguin would be dead in the water. Although I couldn't get my
penguin to talk without their help, neither one had all what I need.
I've cut and pasted a lot from their pages, changing things as I
troubleshot. A hearty thanks goes out to these software geniuses.
I've spent nearly a hundred hours customizing this to my
situation, and I'm probably the most educated idiot on the subject. |
First try this.
It may be
possible to achieve an ISDN connection directly from the Network Device
Control (NDC). Before getting into the following scripts, try this
and see if it works.
- In the RedHat "Start Applications"
menu, select "System Tools" and "Network Device Control." You may
find NDC under another submenu, but that is where I have mine.
This will bring up a dialog box.
- Click on the "Configure..." button.
Type in the root password and hit "OK". This brings up
another dialog box.
- Insure your hardware configuration
is right under the "Hardware"
tab or else hit "New" and configure it.
- Under the "hosts" tab, I have been very
specific and told my computer exactly where my ISDN card is. I
clicked on "new" and typed in an IP address (e.g., 198.168.1.1), put in
the name "ipppd" and an alias of "isdncard". You may not have to
do this.
- Select the "Devices" tab and click on the "New" button.
- Select "ISDN Connection" and click
on "Forward".
- Select your Internet provider (ISP)
under the country flags or type in the information for your ISP and
click on "Forward".
- Most likely, you don't need to
change any information in this window, so click on "Forward" again.
- Click on "Apply".
Now you should see your
connection come up as an "ippp"X (e.g. ippp0, ippp1, etc.) device.
If it comes up as "isdn"X connection, then do what is listed
in the box to the right.
Try out the connection. If it doesn't work, sorry, but you are
going to have to try the script approach. Continue reading.
|
There seems to be a bug in RedHat 9.0. For
ISDN connections, isdnX is supposed to be assigned to "raw IP"
encapsulation modes and ipppX should be assigned to "sync PPP" modes.
When I try to set up a new ISDN account with Network Device Control
(NDC), instead of making device ippp0, it set the connection up as
isdn0 despite reading "sync PPP" mode.
This was resolved by going back into NDC
under the "Advanced" tab and changing Encapsulation Mode to "raw IP",
closing it, saving the configuration, opening the NDC configuration
again, changing it back to "sync PPP" and then saving it again.
|
The long way to resolve an ISDN connection, with scripts.
Kernel
versions 2.2.12 and up have ISDN driver support built in. On earlier
versions you have to download some mods and patch the kernel - all good
fun. Definite Linux 7.0 comes with kernel 2.2.12, so no problems in that
area. These pre-compiled kernels load ISDN as a module. You will also
need the isdn4k-utils package. These are available as RPM's.
I also show how
to set up a dial-in link via ISDN. This requires the option files to be
set up in a particular way.
Make sure you have installed isdn4k-utils.
To check do 'rpm -q isdn4k-utils'. It is provided on the Definite Linux
or RedHat CDROM. It is usually necessary to be logged in as root to
install an rpm package.
Running this on
my machine yielded: isdn4k-utils-3.1-62
NOTE: It is not
necessary to have an 'isdn' script run from /etc/rc.d/init.d with this
method. The 'isdn4k-utils' package provides the executable files that
are called by these scripts as required.
"Quick aside" - you need a directory where you can keep
any scripts you create that is also in your path. Type 'echo $PATH' and
you will see that /root/bin is already in your path statement, but the
directory is not always created. Therefore, type 'mkdir /root/bin'. All
the scripts I refer to will be stored in this directory.
|
To load the hisax driver module I use the following script, saved as a
file loadhisax in /root/bin.
# /root/bin/loadhisax - script to load the hisax module
for ISDN.
# The hisax module is given an id - HiSax. This is required as we need
to use the hisaxctrl command.
# Protocol=2 is the Euro ISDN protocol used in the UK, Germany, Italy
etc.
modprobe hisax id=HiSax type=35 protocol=2
# Use type=35 for the Asuscom ISDN Link (P-IN100-ST-D)PCI card
|
The other Hisax card 'types' are as below
1 Teles 16.0
2 Teles 8.0
3 Teles 16.3 (non PnP)
4 Creatix/Teles PnP
5 AVM A1 (Fritz)
6 ELSA PCC/PCF cards
7 ELSA Quickstep 1000
8 Teles 16.3 PCMCIA
9 ITK ix1-micro Rev.2
10 ELSA PCMCIA
11 Eicon.Diehl Diva ISA PnP
11 Eicon.Diehl Diva PCI
12 ASUS COM ISDNLink
13 HFC-2BS0 based cards
14 Teles 16.3c PnP
15 Sedlbauer Speed Card
15 Sedlbauer PC/104
15 Sedlbauer Speed PCI
16 USR Sportster internal
17 MIC card
18 ELSA Quickstep 1000PCI
19 Compaq ISDN S0 ISA card
20 NETjet PCI card
21 Teles PCI
22 Sedlbauer Speed Star (PCMCIA)
24 Dr. Neuhaus Niccy PnP
24 Dr. Neuhaus Niccy PCI
25 Teles S0Box
26 AVM A1 PCMCIA (Fritz!)
27 AVM PnP (Fritz!PnP)
27 AVM PCI (Fritz!PCI)
28 Sedlbauer Speed Fax+
29 Siemens I-Surf 1.0
30 ACER P10
31 HST Saphir
32 Telekom A4T
33 Scitel Quadro
34 Gazel ISDN cards (ISA)
34 Gazel ISDN cards (PCI)
35 HFC 2BDS0 PCI
36 W6692 based PCI cards
37 HFC 2BDS0 S+, SP/PCMCIA
Make this script executable by 'chmod 700 loadhisax'.
Run this script to load the hisax driver - 'loadhisax'.
Look in the syslog to see if it has loaded correctly - 'tail -30
/var/log/messages'
"Quick aside" Create an alias for this command as you
will use it frequently.
Edit /root/.bashrc and add "alias tailsys='tail -30 /var/log/messages'
" (without the double quotes).
This won't have any affect until you start a new terminal, so type the
whole 'alias...' line at the command prompt to activate it now.
Now typing 'tailsys' will display the last 30 lines of the syslog.
You can add other short form aliases for common commands in the same
way.
|
You should see in the syslog a number of
lines regarding the hisax driver. The last few should be
......
Dec 19 14:47:43 weber kernel: HiSax: 2 channels added
Dec 19 14:47:43 weber kernel: HiSax: MAX_WAITING_CALLS added
Dec 19 14:47:43 weber kernel: isdn: Verbose-Level is 2
The driver has
been loaded!
If you use
'lsmod' you can see the modules that are loaded. There should be
'hisax', 'isdn' and 'slhc' among others. Mine reads:
Module Size Used by Not tainted
hisax 542020 0
(unused)
isdn 136288 0
[hisax]
slhc 6644
0 [isdn]
...
Edit /etc/isdn/isdn.conf. This file
comes as part of isdn4k-utils. Enter the country code - Germany is 49,
Italy 39, UK is 44; the area prefix should be 0, and enter your own area
code without the leading 0.
Now edit /etc/ppp/pap-secrets.
Add a line -
'client' 'server' 'secret'
where
'client' is your account or login name with your ISP
'server' - just use *
'secret' is the password for your ISP account. Don't include the quote
marks.
/etc/isdn/isdn.conf:
|
# example of /etc/isdn/isdn.conf # copy this file to
/etc/isdn/isdn.conf and edit # # More information:
/usr/doc/packages/i4l/isdnlog/README [GLOBAL] COUNTRYPREFIX =
+ COUNTRYCODE = 49 AREAPREFIX = 0 # EDIT THIS LINE: (note: no leading zero [=
areaprefix] !)
AREACODE = 8258
[VARIABLES]
[ISDNLOG]
LOGFILE = /var/log/isdn.log
ILABEL = %b %e %T %ICall to tei %t from %N2 on %n2
OLABEL = %b %e %T %Itei %t calling %N2 with %n2
REPFMTWWW = "%X %D %17.17H %T %-17.17F %-20.20l
SI: %S %9u %U %I %O"
REPFMTSHORT = "%X%D %8.8H %T %-14.14F%U%I %O"
REPFMT = " %X %D %15.15H %T %-15.15F %7u %U %I %O"
CHARGEMAX = 50.00
CURRENCY = 0.062,EUR
COUNTRYFILE = /usr/lib/isdn/country.dat
RATECONF= /etc/isdn/rate.conf
RATEFILE= /usr/lib/isdn/rate-de.dat
HOLIDAYS= /usr/lib/isdn/holiday-de.dat
ZONEFILE=
/usr/lib/isdn/zone-de-%s.cdb
DESTFILE=
/usr/lib/isdn/dest.cdb [ISDNLOG] LOGFILE = /var/log/isdn.log ILABEL
= %b %e %T %ICall to tei %t from %N2 on %n2 OLABEL = %b %e %T %Itei %t
calling %N2 with %n2 REPFMTWWW = "%X %D %17.17H %T %-17.17F %-20.20l
SI: %S %9u %U %I %O" REPFMTSHORT = "%X%D %8.8H %T %-14.14F%U%I
%O" REPFMT = " %X %D %15.15H %T %-15.15F %7u %U %I %O" CHARGEMAX
= 50.00 CURRENCY = 0.062,EUR COUNTRYFILE =
/usr/lib/isdn/country.dat RATECONF= /etc/isdn/rate.conf RATEFILE=
/usr/lib/isdn/rate-de.dat HOLIDAYS=
/usr/lib/isdn/holiday-de.dat ZONEFILE=
/usr/lib/isdn/zone-de-%s.cdb DESTFILE= /usr/lib/isdn/dest.cdb
|
Using
ISDN and a dynamic IP
NOTE: If you
wish to use a firewall with a dynamic IP, add the firewall rules to the
ip-up.local file. See http://www.thennion.demon.co.uk/firewall.html for more details.
Also if you need to use CHAP authentication, which I understand is
required by BTInternet, change the 'user xxx' above to 'name xxx' .
/usr/local/sbin/isdn-on-exec
|
#!/bin/sh ########################################################## #Kernel
preparation: Loading modules... (Hardware layer)
# ########################################################## echo echo
"INTERFACE=$INTERFACE" echo "INTERFACE_NUMBER=$INTERFACE_NUMBER" echo
"PROVIDER=$PROVIDER" echo "OUTGOING_NUMBER=$OUTGOING_NUMBER" echo
"DEFAULT_LOCAL_IP=$DEFAULT_LOCAL_IP" echo "NETMASK=$NETMASK" echo
"DEFAULT_REMOTE_IP=$DEFAULT_REMOTE_IP" echo echo 7 >
/proc/sys/net/ipv4/ip_dynaddr /sbin/ifconfig | grep ippp | awk '{print $1}'
| wc -w > /tmp/datei.$$ variable=$(cat /tmp/datei.$$) rm -f
/tmp/datei.$$ if [ $variable = 1 ] ; then echo "An ippp-interface has
already been set up - stop." exit 1 fi ### When you have a Teledat
100 you must configure it: ### /sbin/isapnp /etc/isapnp.conf # slhc: in
case of compiling as a module ###/sbin/lsmod | grep slhc | awk '{print $1}'
| wc -w > /tmp/datei.$$ ###variable=$(cat /tmp/datei.$$) ###rm -f
/tmp/datei.$$ ###if [ $variable = 0 ] ; then /sbin/insmod
slhc ###fi # isdn: in case of compiling as a module ###/sbin/lsmod |
grep isdn | awk '{print $1}' | wc -w > /tmp/datei.$$ ###variable=$(cat
/tmp/datei.$$) ###rm -f /tmp/datei.$$ ###if [ $variable = 0 ] ; then
/sbin/insmod isdn ###fi /sbin/insmod isdn_bsdcomp /sbin/insmod
isdn_lzscomp comp=8 debug=2 ######################### Teledat 100
####################### ### /sbin/insmod hisax irq=12 io=0x100 protocol=2
id=HiSax type=15 ###################### Elsa Quickstep 1000
################## #/sbin/insmod hisax type=18 protocol=2
id=HiSax ######################### Asuscom HFC
###################### /sbin/insmod hisax type=35 protocol=2 id=HiSax
# YOU MUST CHANGE THIS TO THE APPROPRIATE TYPE
CARD #
SEE TABLE
ABOVE. ########################################################### #
Configuration of interfaces - link level
# ########################################################### /sbin/isdnctrl
verbose 15 i=0 while [[ $i -le $INTERFACE_NUMBER ]] ; do
/sbin/isdnctrl addif ippp$i i=$(( $i + 1
)) done /sbin/isdnctrl addphone $INTERFACE out $PROVIDER ######## for
dial in: ################## #/sbin/isdnctrl addphone ippp1 in 8258928084
# inclusive area code, #
even inside the same LOCAL
# area, # but without
preceding zero /sbin/isdnctrl dialmode $INTERFACE auto /sbin/isdnctrl
eaz $INTERFACE $OUTGOING_NUMBER /sbin/isdnctrl l2_prot $INTERFACE
hdlc /sbin/isdnctrl l3_prot $INTERFACE trans /sbin/isdnctrl encap
$INTERFACE syncppp /sbin/isdnctrl huptimeout $INTERFACE 300 # Fuer eigene,
hinausgehende Pakete /sbin/isdnctrl ihup $INTERFACE off # Für fremde,
hereinkommende Pakete i=0 while [[ $i -le $INTERFACE_NUMBER ]] ; do
/sbin/isdnctrl pppbind ippp$i $i i=$(( $i + 1
)) done i=0 while [[ $i -le $INTERFACE_NUMBER ]] ; do
/sbin/isdnctrl secure ippp$i on i=$(( $i + 1
)) done ############################################################## #
Initialization of interfaces (ifconfig, route, ipppd )
# ############################################################## /sbin/ifconfig
$INTERFACE $DEFAULT_LOCAL_IP netmask $NETMASK pointopoint
$DEFAULT_REMOTE_IP #/sbin/ifconfig ippp1 192.168.22.254 netmask
255.255.255.0 pointopoint 192.168.22.1 # dial in # # Unter 2.1.x nicht
mehr nötig: # #/sbin/route add -net 132.180.0.0 netmask 255.255.0.0
ippp0 /sbin/route add default $INTERFACE /sbin/ipppd file
/etc/ppp/ioptions.$INTERFACE sleep
2 ################################################################# #
Logging, monitoring ...
# ################################################################# # #
Important: In order to get sent- and receive-messages from ipppd you #
have to edit /etc/syslog.conf as follows: #
*.*;mail.none;news.none;authpriv.none /var/log/messages # #####
hisaxctrl ##### # # /sbin/hisaxctrl HiSax 1 0x3ff /sbin/hisaxctrl
HiSax 1 4 ##### isdnlog ##### # -l: # 0x400 Show throughput in
bytes (every -wX seconds) # # /sbin/isdnlog -nsS -v15 -w1 -l0x5f7
/dev/isdnctrl & # Docs # /sbin/isdnlog -nsS -v15 -w1 -l0xFFF
/dev/isdnctrl & # unlesbar ###/sbin/isdnlog -nsS -v0 -w10 -l0x1DF
/dev/isdnctrl & /sbin/isdnlog -nsS -v6 -w30 -l0x1d7 /dev/isdnctrl
& ##### xmonisdn (the tiny tool) ##### #/usr/X11R6/bin/xmonisdn
-display localhost:0.0 -geometry +30+400 & /usr/bin/xmonisdn -display
localhost:0.0 -geometry +30+400 & ##### xisdnload (green-yellow-red)
##### #/usr/X11R6/bin/xisdnload -geometry 200x100+530+15 -display
localhost:0.0 & /usr/bin/xisdnload -geometry 200x100+530+15 -display
localhost:0.0 & ##### imon (shows the 2 channels) ##### xterm
-display localhost:0.0 -geometry 80x11+0+15 -bg blue -fg white -T imon -e
/sbin/imon & ##### data flow via $INTERFACE ##### xterm -display
localhost:0.0 -geometry 100x5+0+190 -bg black -fg green -T $INTERFACE -e
/sbin/ipppstats -i 1 -v $INTERFACE_NUMBER & ##### data flow via ippp6
##### #xterm -display localhost:0.0 -geometry 100x5+0+290 -fg red -bg black
-T ippp6 -e /sbin/ipppstats -i 1 -v 6 & #### netstat: raw, udp, tcp
####### xterm -fg yellow -geometry 105x30+120+140 -bg black -sb -e netstat
--inet -e -c & #### syslog #### xterm -fg white -bg black -geometry
105x15+120+390 -T syslog -e tail -f /var/log/messages & sleep
6
|
Now make executable with 'chmod 700 isdn-on-exec'
/usr/local/bin/isdn-on.ippp0
This
is the file that brings up the connection. Type its name to
activate the connection.
|
#!/bin/sh # Datei: /usr/local/sbin/isdn-on.ippp0
(callando - callisa by night) # http://www.callando.de/ # export
INTERFACE=ippp0 export INTERFACE_NUMBER=0 export PROVIDER=019193131
# this is your ISP provider's phone
number export OUTGOING_NUMBER=928084 # this is YOUR telephone number without area
code ! export DEFAULT_LOCAL_IP=198.168.1.1 #this is the address you assign to your ISDN
port. # It will be replaced by the
provider. export NETMASK=255.255.0.0 export
DEFAULT_REMOTE_IP=62.180.158.14 #This is the address of the provider.
# It will be replaced by the
provider. echo echo
"##################################################" echo " Trying
to set up $INTERFACE ..." echo
"##################################################" exec sudo
/usr/local/sbin/isdn-on-exec
|
Setting up the
`ioptions' files
The daemon
that links to the ISDN card is 'ipppd', and it communicates via
interfaces 'ippp0', 'ippp1' etc. just like 'eth0' communicates with the
Network adaptor. Several instances of ipppd can be running at the same
time. The file /etc/ppp/ioptions is read by ipppd whenever it is loaded.
To be able to dialout to an ISP, and allow external access to this host,
or even dialout to a different host or ISP, you must run an ipppd for
each interface you want active. Since ipppd (see 'man ipppd') always
reads /etc/ppp/ioptions, only common values should be present in
/etc/ppp/ioption. The values specific to an interface will be stored in
/etc/ppp/ioption.ippp0, and /etc/ppp/ioptions.ippp1 etc.
The `ippp0'
interface is added in the script above. Type `ifconfig' and you should
see the interface details.
I will concentrate on the option files necessary to bring up the link
to Demon Internet. Later I will cover accessing an ISP using dynamice
IP's.
Create
`/etc/ppp/ioptions'. It should contain -
#/etc/ppp/ioptions.
# Options file with common parameters.
debug
lock
-vj
-vjccomp
-bsdcomp
noccp
-ac
-pc
|
NOTE: The lines
-vj, -ac -pc, etc disable various compression options. Using no
compression has given the most reliable connection with some versions of
isdn4k-utils, but it is worth checking with newer versions to see if
compression options are now available.
/etc/ppp/ioptions.ippp0
Now create the
/etc/ppp/ioptions.ippp0 file with details for Demon Internet.
# /etc/ppp/ioptions.ippp0 # internet@expressnet.de #
http://www.callando.de/
#
/dev/ippp0
ipcp-accept-local
# With this option, ipppd will accept the peer's idea of our local IP
address.
ipcp-accept-remote
# With this option, ipppd will accept the peer’s idea of its (remote) IP
address.
noipdefault
defaultroute
debug
ms-get-dns
user
"internet@expressnet.de"
name "internet"
kdebug 7
#-chap # because of:
rcvd [0][LCP ConfReq id=0x1 <auth chap md5>
-pap #
#-vjccomp #
rcvd [0][IPCP ConfReq id=0x4 <compress VJ 0f 01>
vj-max-slots 16
#
Unclear because of:
-ac # because of: rcvd [0][LCP ConfRej id=0x1 <pcomp>
<accomp>]
-pc # See above.
#
#
-bsdcomp # because of: rcvd
[0][LCP ProtRej id=0x5 80 fd 01 01 00 07 15 03 2f]
noccp # dto.
|
More details for
these options are available on the ipppd man page (`man ipppd').
/usr/sbin/isdn-off-exec:
|
#!/bin/sh ############ How many ippp's have been set up ?
################# number=$( /sbin/isdnctrl list all 2> /dev/null | \
grep "Current" | awk '{ print $5 }' | wc -l ) echo echo
"################### isdn-off ######################" echo echo "$number
ippp's detected" ########### default route: ########### variable=$(
/sbin/route -n | awk '{print $1} ' | \ grep 0.0.0.0 | wc -w
) if [ $variable != 0 ] ; then /sbin/route del
default else echo "no default route set
up" fi # # Under 2.1.x no longer needed: # #/sbin/route del
-net 132.180.0.0 netmask 255.255.0.0 ippp0 i=0 while [[ $i -lt $number
]] ; do variable=$( /sbin/ifconfig | grep ippp$i | awk '{print $1}'
| wc -w ) if [ $variable != 0 ] ; then echo
"shutting down ippp$i" /sbin/isdnctrl hangup ippp$i
/sbin/isdnctrl pppunbind ippp$i /sbin/ifconfig ippp$i
down fi /sbin/isdnctrl delif ippp$i i=$(( $i
+ 1 )) done ####### ipppd: ############ variable=$( ps auxw | grep
ipppd | grep -v grep | \ awk '{print $2}' | wc -w ) if [
$variable = 0 ] ; then echo "no ipppd present"
else echo "killing ipppd " ; killall ipppd fi ######
isdnlog: ########## variable=$( ps auxw | grep isdnlog | grep -v grep |
\ awk '{print $1}' | wc -w ) if [ $variable = 0 ] ; then
echo "no isdnlog present" else echo "killing
isdnlog " ; killall isdnlog fi ######### xmonisdn:
############ variable=$( ps auxw | grep xmonisdn | grep -v grep | \
awk '{print $1}' | wc -w ) if [ $variable = "0" ] ; then
echo "no xmonisdn present" else echo "killing
xmonisdn " ; killall xmonisdn fi ######### xisdnload:
############## variable=$( ps auxw | grep xisdnload | grep -v grep | \
awk '{print $1}' | wc -w ) if [ $variable = "0" ] ; then
echo "no xisdnload present" else echo "killing
xisdnload " ; killall xisdnload fi ############ imon:
############## variable=$( ps auxw | grep imon | grep -v grep | \
awk '{print $2}' | wc -w ) if [ $variable = 0 ] ; then
echo "imon has already exited " ; else killall
imon fi ########## ipppstats: ########## variable=$( ps auxw | grep
ipppstats | grep -v grep | \ awk '{print $2}' | wc -w ) if [
$variable = 0 ] ; then echo "ipppstats has already exited "
; else killall ipppstats fi ###########
netstat ############# variable=$( ps auxw | grep netstat | grep -v grep |
\ awk '{print $2}' | wc -w ) if [ $variable = 0 ] ; then
echo "netstat has already exited " ; else
killall netstat fi ############# syslog ########## variable=$( ps
auxw | grep tail | grep -v grep | \ awk '{print $2}' | wc -w
) if [
$variable = 0 ] ; then echo "tail -f ... has already exited
" ; else killall tail fi # /sbin/modprobe
-r hisax /sbin/modprobe -r isdn_lzscomp /sbin/modprobe -r
isdn_bsdcomp /sbin/modprobe -r isdn /sbin/modprobe -r
slhc /sbin/rmmod -a
|
Now make executable with 'chmod 700 isdn-off-exec'