This is the 6pack-mini-HOWTO, written by

Andreas Knsgen DG3KQ
Internet: ajk@ccac.rwth-aachen.de
AMPR-net: dg3kq@db0pra.ampr.org
AX.25:    dg3kq@db0ach.#nrw.deu.eu

Last update: August 15, 1999

1. What is 6pack, and what are the advantages to KISS?

6pack is a transmission protocol for data exchange between the PC and
the TNC over a serial line. It can be used as an alternative to KISS.

6pack has three major advantages:
- The PC is given full control over the radio
  channel. Special control data is exchanged between the PC and the TNC so
  that the PC knows at any time if the TNC is receiving data, if a TNC
  buffer underrun or overrun has occurred, if the PTT is
  set and so on. This control data is processed at a higher priority than
  normal data, so a data stream can be interrupted at any time to issue an
  important event. This helps to improve the channel access and timing 
  algorithms as everything is computed in the PC. It would even be possible 
  to experiment with something completely different from the known CSMA and 
  DAMA channel access methods.
  This kind of real-time control is especially important to supply several
  TNCs that are connected between each other and the PC by a daisy chain
  (however, this feature is not supported yet by the Linux 6pack driver).

- Each packet transferred over the serial line is supplied with a checksum,
  so it is easy to detect errors due to problems on the serial line.
  Received packets that are corrupt are not passed on to the AX.25 layer.
  Damaged packets that the TNC has received from the PC are not transmitted.

- 6pack exchanges watchdog packets between the TNC and the PC, so TNC failures
  can be easily detected. The driver then periodically tries to resync the
  TNC. This is transparent to running AX.25 connections, i.e. from the
  connection's view, it just seems as if the digipeater would not respond.
  When the TNC is back again, the transfer of packets between the PC
  and the digipeater is continued without having to reset the AX.25
  connection.

More details about 6pack are described in the file 6pack.ps that is located
in the doc directory of the AX.25 utilities package.

2. Who has developed the 6pack protocol?

The 6pack protocol has been developed by Ekki Plicht DF4OR, Henning Rech
DF9IC and Gunter Jost DK7WJ. A driver for 6pack, written by Gunter Jost and
Matthias Welwarsky DG2FEF, comes along with the PC version of FlexNet.
They have also written a firmware for TNCs to perform the 6pack
protocol (see section 3 below).

3. Preparing the TNC for 6pack operation

To be able to use 6pack, a special firmware for the TNC is needed. The EPROM
of a newly bought TNC does not contain 6pack, so you will have to
program an EPROM yourself. The image file for 6pack EPROMs should be
available on any packet radio box where PC/FlexNet can be found. The name of
the file is 6pack.bin. This file is copyrighted and maintained by the FlexNet
team. It can be used under the terms of the license that comes along
with PC/FlexNet. Please do not ask me about the internals of this file as I
don't know anything about it. I used a textual description of the 6pack
protocol to program the Linux driver.

TNCs contain a 64kByte EPROM, the lower half of which is used for
the firmware/KISS. The upper half is either empty or is sometimes
programmed with software called TAPR. In the latter case, the TNC
is supplied with a DIP switch so you can easily change between the
two systems. When programming a new EPROM, one of the systems is replaced
by 6pack. It is useful to replace TAPR, as this software is rarely used
nowadays. If your TNC is not equipped with the switch mentioned above, you
can build in one yourself that switches over the highest address pin
of the EPROM between HIGH and LOW level. After having inserted the new EPROM
and switched to 6pack, apply power to the TNC for a first test. The connect
and the status LED are lit for about a second if the firmware initialises
the TNC correctly.

4. Building and installing the 6pack driver

How to turn on 6pack support:

- In the linux kernel configuration program, select the amateur radio
  support menu and turn on the serial port 6pack driver.

- Compile and install the kernel and the modules.

To use the driver, the kissattach program delivered with the AX.25 utilities
has to be modified.

- Do a cd to the directory that holds the kissattach sources.
  In the line
   
  int disc = N_AX25;

  replace N_AX25 by N_6PACK.

- Recompile kissattach. Rename it to spattach to avoid confusions.

Installing the driver:

- If you have complied the driver as a module, do an insmod 6pack. Look
  at your /var/log/messages file to check if the module has printed its
  initialization message.

- Do a spattach as you would launch kissattach when starting a KISS port.
  Check if the kernel prints the message '6pack: TNC found'. 

- From here, everything should work as if you were setting up a KISS port.
  The only difference is that the network device that represents
  the 6pack port is called sp instead of ax. So, sp0 would be the
  first 6pack port.

Note that the connect and status LEDs of the TNC are controlled in a
different way than they are when the TNC is used with PC/FlexNet. When using
FlexNet, the connect LED is on if there is a connection; the status LED is
on if there is data in the buffer of the PC's AX.25 engine that has to be
transmitted. Under Linux, the 6pack layer is beyond the AX.25 layer,
so the 6pack driver doesn't know anything about connects or data that
has not yet been transmitted. Therefore the LEDs are controlled
as they are in KISS mode: The connect LED is turned on if data is transferred
from the PC to the TNC over the serial line, the status LED if data is
sent to the PC.

5. Known problems

On 2.0.3x kernels and operating with data rates on the radio channel
of 9600 Baud or higher, the driver, on certain systems, sometimes printed
the message '6pack: bad checksum', which is due to data loss if the other
station sends two or more subsequent packets. I have been told that this was
due to a problem with the serial driver of 2.0.3x kernels. I don't know yet
if the problem still exists with 2.2.x kernels, as I have heard that the
serial driver code has been changed with 2.2.x.

When killing the sp interface with killall spattach or ifconfig sp0 down,
the kernel panics if there is still an AX.25 connection left over which
an IP connection was running, no matter if the IP connection is still active
or has already been closed. The problem does not occur when there is a
bare AX.25 connection still running. I don't know if this is a problem of
the 6pack driver or something else in the kernel; however, the problem also
exists with the mkiss driver.

The driver has been tested as a module, not yet as a kernel-builtin driver.

The 6pack protocol supports daisy-chaining of TNCs in a token ring, which is
connected to one serial port of the PC. This feature is implemented
partially, as I have taken the kernel interface code from the mkiss driver
which is designed for multiple-device support. I still have to check what has
to be changed in the 6pack-specfic parts of the code. However, I will not
be able to test this feature because I only have one TNC.

If you encounter a bug or if you have a question or suggestion concerning the
driver, feel free to mail me, using the addresses given at the beginning of
this file.

Have fun!

Andreas
