Voice-Over IP for Linux

Make your long-distance calls over the Internet using this new technology for Linux.

Many Linux folks may criticize Quicknet because their device driver is not Open Source. Quicknet has made a carefully reasoned business decision to keep their device driver binary-only and not reveal the source code. A full API will be published to detail how to use the device driver, but the source code will be closed. To their credit, Quicknet realizes the tremendous opportunities with Linux and has made the investments needed to get the Linux drivers written. Quicknet has also continued to invest in this area by hiring Linux developers to work in-house.

However, the sample code accompanying the device driver is released under the Lesser GNU Public License (LGPL). While there may be some who demand the drivers be released Open Source, Quicknet believes strongly that having stable, reliable binary-only drivers is good enough for most users, and Quicknet is committed to supporting such a driver.


The device driver for the cards requires a 2.2-series kernel, because some of the low-level features take advantage of changes in the new kernel. The latest modules are compiled with MODVERSIONS support, so assuming your kernel is, the kernel will load the module if the symbol tables are compatible between the module and the kernel. At the time of this writing, we are using 2.2.10 kernels for development.

Our modules have a dedicated “major number” so they can be used with the normal module tools such as insmod and modprobe. All you have to do is add a few lines to your conf.modules file, and the normal modules tools work with our device driver. See below for more information on how to perform the initial configuration.

You will need at least one Internet PhoneJACK/LineJACK card on each end of the connection. Note that the initial release of the Linux driver supports only the Internet PhoneJACK card, though by the time you read this, the Internet LineJACK will be supported as well. These cards are ISA bus devices that use Plug-n-Play for configuration and use no IRQs. The driver will support up to 16 cards in any one system, of any mix between the two types.

Since the Quicknet cards are Plug-n-Play devices, you will need the isapnp tools package to configure the cards. This package probably came with your Linux distribution. Documentation is available on-line at metalab.unc.edu/LDP/HOWTO/Plug-and-Play-HOWTO.html.


The Internet PhoneJACK has only one configuration register that requires 16 I/O ports. The Internet LineJACK card has two configuration registers. Isapnp reports that I/O 0 requires 16 I/O ports and I/O 1 requires 8. The Quicknet driver assumes these registers are configured to be contiguous, i.e., if I/O 0 is set to 0x340, then I/O 1 should be set to 0x350.

If you are new to the isapnp tools, you can jump-start yourself by doing the following:

  • Run pnpdump to get a blank isapnp.conf file

        pnpdump > /etc/isapnp.conf
  • Edit the /etc/isapnp.conf file to set the register I/O addresses.

  • If you have multiple Quicknet cards, make sure you do not have any overlaps. Be especially careful if you are mixing Internet PhoneJACK and Internet LineJACK cards in the same system.

Use of the Driver

To install and load the driver, perform the following:

  • Unpack the distribution file using tar.

  • Run the included ixj_dev_create script to create the device files in the /dev directory. This script will create /dev/ixj0 through ixj16.

  • Run the isapnp configuration utility to configure the cards properly.

  • Edit the /etc/conf.modules file to add a line that specifies the I/O (input/output) port(s) for the cards you just configured with isapnp, and a line to map the device number to the name of our device. You will need to add the following two lines:

        options ixj io=0x300 ixjdebug=a0
        alias char-major-159 ixj

This example assumes you have one card at I/O address 0x300; you will need to modify that value if you assigned card(s) to different ports.

  • Load the module with insmod or modprobe, as you would for any other module.

  • Verify the module loaded by running lsmod.

  • Execute an application that uses the module (tpjack or tpjackd).