Using BT's Home Highway with Linux

Using BT's Home Highway with Linux is a tutorial about how to make BT's Home Highway play with Linux.

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!
send us
an update
GPL (GNU General Public License) 
2.9/5 23
Paul Warren
ROOT \ Documentation
Using BT's Home Highway with Linux is a tutorial about how to make BT's Home Highway play with Linux. It's not hard, but most of the docs are geared towards the German setup.

A tutorial by Paul Warren:

Please note that I have not used ISDN since 2001, and I'm afraid I do not know how to make BT's nasty new USB modems work under Linux. I do know that you can get cheap external ISDN modems on eBay.

I have had Home Highway installed recently, and I noticed a lack of straight forward HOWTO style documentation for setting up ISDN under Linux, especially for the UK, so I decided to write up my experiences here.

What is Home Highway, and why bother?

Home Highway is BT's name for their home user ISDN offering. ISDN gives you two 64k lines, which can be bundled together to give a single 128k connection, if your ISP supports it and you don't mind all your phone lines being engaged.

64k (or even 128k) may seem pitiful in comparison to ADSL and cable modem, but in my area neither are available at the moment and this isn't going to change in the near future. With unmetered internet phonecalls becoming more readily available, it is possible to simulate the always-on service of ADSL and cable modem by using dial-on-demand.

On the face of it, 64k doesn't look much more than the 56k modems offer. In fact it is a great improvement, for several reasons. 56k is the maximum possible speed for a modem, but this is rarely achieved. In reality you're lucky if you see more than 40k. With ISDN you will actually see the full bandwidth (unless the bottleneck is elsewhere). ISDN also offers much lower latency than modems - around 40ms as opposed to 200ms. This makes a very big difference to the speed of many services, especially games and remote shell access.

Getting a card

As always, buying hardware that you know will work with Linux is a bit of a challenge. I bought an Asuscom internal card for 25 from Insight and it works great, once you know that it uses the HiSax driver, and is type 35 (for the PCI version). The ISA version also works, apparently. Update: I have found my Asuscom to be slightly flaky. It will sometimes fail to dial up and will continue to do so until the hisax module is reloaded. I have now switched to using a TigerJet card, and have had no further problems.


I found the setup non-trivial, especially as a lot of the configuration is country-specific, although this page was a great help. Here is the setup script that I use. Save this as /etc/rc.d/init.d/isdn and make appropriate links to get it started at boot time. This setup is designed to work with dynamic IPs, and provides "dial on demand". ISDN takes only a couple of seconds at most to connect so it is feasible to only bring the line up when something tries to use it.

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
echo -n "Starting isdn: "

# install the module
/sbin/modprobe hisax type=35 protocol=2

/usr/sbin/isdnctrl verbose 1 > /dev/null
/usr/sbin/isdnctrl system on > /dev/null
/usr/sbin/isdnctrl addif ippp0 > /dev/null

# Set the phone number for this line. This should be
# the ISDN line number, without the first "0"
/usr/sbin/isdnctrl eaz ippp0 1234567 > /dev/null

# Set the phone number used for outgoing calls.
# This should be you ISP's number.
/usr/sbin/isdnctrl addphone ippp0 out 16164208452402620 > /dev/null

# Idle time after which the connection is dropped, in seconds.
/usr/sbin/isdnctrl huptimeout ippp0 450 > /dev/null

/usr/sbin/isdnctrl l2_prot ippp0 hdlc > /dev/null
/usr/sbin/isdnctrl l3_prot ippp0 trans > /dev/null
/usr/sbin/isdnctrl encap ippp0 syncppp > /dev/null
/usr/sbin/isdnctrl status ippp0 on > /dev/null

# set dialmode to auto (dial on demand)
/usr/sbin/isdnctrl dialmode ippp0 auto > /dev/null

# set up a "fake" interface to detect outgoing packets.
/sbin/ifconfig ippp0 pointopoint

# make the interface the default route
/sbin/route add default netmask 0 ippp0

# don't allow arp or broadcast traffic
/sbin/ifconfig ippp0 -arp -broadcast

# start the ipppd daemon.
daemon /usr/sbin/ipppd user $USERNAME
noipdefault ipcp-accept-local ipcp-accept-remote
mru 1500 mtu 1500 lcp-restart 1 /dev/ippp0

touch /var/lock/subsys/isdn
echo -n "Shutting down isdn: "
/sbin/ifconfig ippp0 down
/usr/sbin/isdnctrl delif ippp0
killproc ipppd
rm -f /var/lock/subsys/isdn
rm -f /var/run/
$0 stop
$0 start
echo "Usage: $0 {start|stop|restart}"
exit 1

exit 0

You will need to create a file called /etc/ppp/pap-secrets which contains your ISP password.

Which ISP?

Most ISPs offer some sort of support for ISDN. I currently use FreeServe, as their unmetered services also work with 64k ISDN. Some ISPs require you to use a different access number for ISDN.

Last updated on April 30th, 2008

#Home Highway #USB modem #ISDN modem #ISDN #USB #modem #network

Add your review!