ISDN lines can transfer 64 kbits/second.
And unlike analog lines, they can achieve this speed all the
time, because their transmission does not depend on the
vagaries of analog transmission with interference by various
kinds of noise. A newer protocol called ADSL (Asymmetric
Digital Subscriber Line) is upping the ante for fast data
access over phone lines, but ISDN still has a bigger market
right now.
In this section, we describe how to configure dial-up access to
your Internet provider over an ISDN
line. We'll cover only the most common style of connection,
synchronous PPP, not the special mode called
Raw IP over ISDN.
Furthermore, this section discusses just internal
ISDN boards, which require a very
different kind of setup from the dial-up access covered in
the previous section. To set up external
ISDN devices, or the so-called
ISDN modems (a term that is an oxymoron, because
there is no modulation and demodulation), you can use
commands similar to those in the previous section,
because these devices present themselves to the computer and the
operating system like a normal modem that offers some additional
commands, faster connection setup, and higher throughput.
In a way, setting up ISDN connections is much easier than
setting up analog connections, because many of the problems
(bad lines, long connection setup times, and so on) simply cannot
occur with digital lines. Once you dial the number, the
connection is set up within milliseconds. But this can lead to
problems. Since the connections are set up and shut down so fast,
a misconfigured system that dials out again and again can cost
you a fortune. This is even more so because with internal
ISDN cards, you hear no clicking and whistling like with modems,
and there are no lights that inform you that a connection has
been made. You can check the status of your ISDN line with some
simple programs, though.
Setting up dial-up PPP over ISDN is done in two
steps:
Configure your ISDN hardware.
Configure and start the PPP daemon and change the
routing table to use your ISDN line.
We will cover those steps in the next sections.
15.3.1. Configuring Your ISDN Hardware
The first step involves making your ISDN board
accessible to the kernel. Like with any other hardware board,
you need a device driver that must be configured with the
correct parameters for your board.
Linux supports a large number of ISDN hardware
boards. We cannot cover every single board here, but the
procedure is more or less the same for each one. Reading the documentation
for your specific card in the directory
Documentation/isdn in the Linux kernel
sources will help you a lot if your board is not covered
here.
We will concentrate here on boards that use the so-called
HiSax driver. This device driver works
with most cards that use the Siemens HSCX chipset. That
includes, for instance, the USR Sportster internal TA and the well-known
Teles, ELSA, and Fritz boards. Other boards are similarly
configured.
The first thing you need to do is configure the kernel
so that it includes ISDN support. It is very
advisable to compile everything ISDN-related as
modules, especially while you are
experimenting with setting it up.
You will need the following
modules:
ISDN support.
Support for synchronous PPP.
One device driver module for your hardware. If you
pick the HiSax driver, you will also have to specify which
specific brand of ISDN card you have and which ISDN
protocol you want to use. The latter is almost certainly
EURO/DSS1, unless you live in Germany
and have had your ISDN for a long time in which case
it might be 1TR6. When in doubt, ask
your phone company.
Compile and install the modules as described in Chapter 7, "Upgrading Software and the Kernel". Now you are ready to
configure your ISDN hardware. Some distributions
like SuSE make setting up ISDN lines very easy and
comfortable. We cover the hard way here in case your
distribution is not so user friendly, the automatic
configuration does not work, or you simply want to know what is
going on behind the scenes.
Now you need to load the device driver module
using modprobe. This will
automatically load the other modules as well. All the device
driver modules accept a number of module parameters; the
hisax modules accepts, among others, the
following:
- id=boardid
Sets an identifier for the ISDN board. You can
pick any name you like here, but you cannot have the
same identifier for more than one board in your
system.
- type=boardtype
Specifies the exact board brand and type. For
example, a value of 16 for
boardtype selects the support
for the USR Sportster internal TA. See
Documentation/isdn/README.hisax in
the kernel sources for the full list of board types.
- protocol=protocoltype
Selects an ISDN subprotocol. Valid values for
protocoltype are 1 for the
old German 1TR6 protocol, 2 for the
common EDSS1 (so-called Euro ISDN)
and 3 for leased lines.
- irq=irqno
Specifies the interrupt line to use. Not all
boards need this.
- io=addr
Specifies the I/O address to use. Not all boards need this. Some
boards need two I/O addresses. In this
case, the parameters to use are
io0 and
io1.
For example, the following command loads the HiSax
driver for use with a Teles 16.3 board, Euro ISDN, IO address
0x280, and IRQ line 10 (a very common case):
tigger # modprobe hisax type=3 protocol=2 io=0x280 irq=10
Please see
Documentation/isdn/README.HiSax or the
equivalent file for your hardware for more information.
This module is not much of a talker; if there is no
output from the modprobe command, it is
likely that everything went well. You might also want to check
your system log at /var/log/messages. You
should see a few lines starting with HiSax:
(or the name of the driver you are using), ending with:
HiSax: module installed
If the module did not load, you will most likely find the
answer also in /var/log/messages. The most
common problem is that the IRQ or I/O address was wrong or that
you selected the wrong card type. If all else fails, and you
have Windows installed on the same machine, boot up Windows
and check what it reports for the IRQ and I/O address
lines.
You should do one more check before you jump to the next
section, and this check involves calling yourself. This can
work because, with ISDN, you always have two phone lines at
your disposition. Thus one line will be used for the outgoing
"phone call" and the other line will be used for
the incoming one.
In order to have the ISDN subsystem report what is going
on with your phone lines, you will need to configure it to be
more verbose than it is by default. You do this by means of
three utility programs that are all part of the
isdn4k-utils package that you can find at
your friendly Linux FTP server around the
corner.
The isdn4k-utils contain, among other
things, the three utilities hisaxctrl for
configuring the device driver, isdnctrl for
configuring the higher levels of the ISDN subsystem, and
isdnlog, a very useful tool that logs
everything happening on your ISDN lines. While you can use
hisactrl and isdnctrl
without any configuration, you will need to provide a small
configuration file for isdnlog. For now, we
will content ourselves with a quick solution, but once your
ISDN connection is up and running, you will want to configure
isdnlog to see where your money is going. So for now, copy one
of the sample configuration files contained in the
isdnlog package to
/etc/isdn/isdn.conf. You will at least
need to edit the following lines:
- COUNTRYCODE=
Add your phone country code here, for example, 1 for the
United States and Canada, 44 for the United Kingdom, 46
for Sweden, and so on.
- AREAPREFIX=
If the area codes in your country are prefixed by
a fixed digit, put this in here. The prefix is
0 for most European
countries, 9 for Finland, and nothing
for the United States, Denmark, and Norway.
- AREACODE=
Put your area code in here. If you have specified
an AREAPREFIX in the last step, don't repeat that
here. For example, Stockholm, Sweden, has the area code
08. You put 0 into AREAPREFIX and 8 into AREACODE.
Once you have set this up, execute the following
commands to make your ISDN system more verbose:
tigger # /sbin/hisaxctrl boardid 1 4
tigger # /sbin/isdnctrl verbose 3
tigger # /sbin/lsdnlog /dev/isdnctrl0 &
If you need to use a different driver from HiSax, you
might need to use a different command. For example, for the
PCBit driver, the command pcbitctl is
available in the isdn4k-utils
package.
Now you can go ahead and phone yourself. You should try
all your MSNs (multiple subscriber numbers, which are your ISDN phone
numbers) to see that the board can detect all of them. During
or after each call, check
/var/log/messages. You should see lines
like the following:
Mar 16 18:34:22 tigger kernel: isdn_net: call from 4107123455,1,0 -> 123456
Mar 16 18:34:33 tigger kernel: isdn_net: Service-Indicator not 7, ignored
This shows that the kernel has detected voice call (the
service indicator is 0) from the phone number 123455 in the
area with the area code (0)4107 to the MSN 123456.
Note how the number called is specified,
because you will need this information later. The number is
sent with the area code in some phone networks, but
without the area code in others.
Anyway, congratulations if you have come this far.
Your ISDN hardware is now correctly configured.