mauli kernel: isdn_net: isdn0 connected
That is true. RedHat 6.x has some form of ISDN support. Older versions don't have ISDN support, and even the ISDN support for the 6.x versions looks like an afterthought. If you know other Linux distributions, you will notice that it has a close resemblance to that of SuSE Linux. Now, if you know that RedHat aquired DELIX, a german Linux distributor and competitor of SuSE, if you add the fact that ISDN support appeared closely after that, and if you know that a distribution without ISDN support will not sell here in Germany, you may assume that the ISDN support was done by the former DELIX people, and you're probably right with that.
DLD was a competitor of SuSE, and SuSE is more a distribution targeted to the desktop and to former windows users. This explains why the current ISDN support is more targeted to users, and not to servers. They speak about "providers" and not "network connections". This makes a big difference if you are a network admin and not some Windows user.
I'm using RedHat since about version 4.0. At that time there was no ISDN support, so I had to write my own. Because I'm using ISDN mostly as a communication between servers, my solution is much more network centric than the ISDN support in the current RedHat versions. It handles an ISDN line as a network connection, and configuration is simliar to that of the ethernet devices.
Let me repeat this in more depth: RedHat has had all necessary hooks for adding other network devices in their scripts since at least version 4.0. The additional scripts do not need any changes in the existing network configuration. This means that the old network stuff was really well designed. I don't know why they choose to add another solution with a completely different interface for version 6.x. I assume that the ISDN support did not come from the RedHat people, but from the former DELIX staff, that did not know or not care about the existing things.
My solution will add two network startup script for ISDN network devices. The
interfaces are configured similar to ethernet devices using configuration
scripts named ifcfg-xxxx
where xxxx
is the name of
the device. You don't need any changes to other scripts (but you have to
configure your ISDN card using other configuration files of course).
The scripts runs since version 4.0 of RedHat Linux with only minor changes. I did recently upgrade two machines from RedHat 4.1 to 6.1 and both came up with the ISDN devices configured (dialout was disabled, but this was caused by a change of the default setting in the kernal ISDN support).
Yes, there are some disadvantages. Here is a list:
On the other side, if you have a matching card and don't need PPP, the solution is almost perfect (in my eyes, of course).
ifup-isdn
and
ifdown-isdn
from
ftp://ftp.musoftware.de/pub/uz/howto/, and copy them into
/etc/sysconfig/network-scripts
. You may notice that there are
other scripts with similar names already in that directory.
/etc/conf.modules
. You
may have to add a line like
options hisax type=27 protocol=2
You must be able to say
modprobe hisax.o
and have all modules loaded correctly without errors. Otherwise something is wrong and the scripts will not work.
isdnx
, where x
is
a number. You may have as many network devices as the kernal permits. For each
device needed, you have to create a file named ifcfg-isdnx
(replace n
by the number of the device - just start counting from
zero). The file must be placed into the
/etc/sysconfig/network-scripts
directory. If you have one or more
ethernet cards, you may notice that there are other files with similar names
already in this directory.
Edit the file. Here are the possible settings:
Parameter | Description | Example |
DEVICE | Specify the device. Be sure to use the same device name that is used in the file name. | DEVICE=isdn0 |
IPADDR | Specify the IP address of the interface. | IPADDR=192.168.0.1 |
EAZ | Specify the EAZ for this ISDN device. | EAZ=1234567 |
POINTOPOINT | Specify the remote IP if this is a point to point connection. | POINTOPOINT=192.168.0.2 |
NETWORK | Specify a remote network. If you specify both, a point to point connection and a network, a pointopoint connection will be established and a network route will be setup for this interface. If you do only specify a network, this will be a network connection. In most cases you do not need the NETWORK parameter. | NETWORK=192.168.1.0 |
NETMASK | Specify the net mask for the remote network. This parameter does only make sense together with the NETWORK parameter. | NETMASK=255.255.255.0 |
INPHONE |
Specify the phone numbers that are allowed to call in. You may use
wildcards here, as with isdnctrl .
| INPHONE=897672398 |
OUTPHONE | Specify the phone number to dial to establish the connection. This is often the same phone number as INPHONE, but with a 0 prepended. | OUTPHONE=0897672398 |
CALLBACK | If specified, may be "in" or "out". Enables callback for the connection. Beware: You must configure both interfaces to do callback, one using the "in" setting, and the other with the "out" setting. | CALLBACK=out |
CBDELAY | Gives the callback delay (how log should the called party wait before calling back). The default is 5 seconds. A good value for most cases is 2 seconds. Must not be specified if callback is not enabled. | CBDELAY=2 |
HUPTIMEOUT | Specify the hangup timeout for incoming calls in seconds. The connectio is terminated if there is no data for this period of time. | HUPTIMEOUT=90 |
ONBOOT | This option was added by the RedHat upgrade routine. It specifies if the device is activated when booting the machine. You would usually say "yes" here. | ONBOOT=yes |
BOOTPROTO | Specifies if you want to use bootp or dhcp with this interface. Set to "none". | BOOTPROTO=none |
A sample configuration file would be:
DEVICE=isdn0 IPADDR=192.168.0.1 EAZ=1234567 POINTOPOINT=192.168.0.2 INPHONE=897672398 OUTPHONE=0897672398 ONBOOT=yes BOOTPROTO=none
/sbin/ifup isdnx
to do this (be sure to replace the x
above).
To bring the device down, use
/sbin/ifdown isdnx
ifconfig
will show the new device together with the ethernet
interfaces.
If things do not work as expected, /var/log/messages
is your
friend. The ifup-isdn
script enables some debug messages, so just
have a look into your log files.
First, make sure that your modules are loaded, that the interface is up (use
ifconfig
), and that the hisax driver is configured correctly.
Second, ping
the remote destination. Is the kernal calling out? If
it does not, go back to step one.
Third, does the log of the remote host show an incoming call? If so, is it accepted or ignored? If the call is ignored check the setup of the INPHONE parameter at the destination. If the remote host is never called, your OUTPHONE parameter for the calling host may be wrong.
Last, if the call is accepted, but you cannot get packets through, your routing is probably messed up. Check if the IP addresses for both interfaces are configured correctly, and that you don't have any route collisions.
I did, but they did not care. I sent mail to several addresses at RedHat but I got not even a reply. Maybe they are too busy supporting Linux developers:-)
That's it! If you think there are important things missing from this article, feel free to contact me. Remember: If you don't share your information with others, it looses it's value (of course, this is the reason, why I did this web page). Other feedback is also appreciated! If you think, this page sucks, please tell me about it.