STATUS:
Tested on a Sun3/60 and a Sun4/260 running SunOS4.1.1, using a PacComm
Tiny-2 TNC, and talking with other NOS sites in Calgary, Alberta.

INSTALL:
0. Substitute the name 'KERNEL_CONFIG_FILE' in the following steps with the
   kernel configuration file for your new kernel (If in doubt, make a copy
   of GENERIC, and use it).
   Also, substitute 'sun3' with whatever the command 'arch -k' says
   your kernel architecture is.

1.  First, you need to add the device driver to the kernel. Add this line to
    /usr/sys/sun3/conf/KERNEL_CONFIG_FILE.
	pseudo-device   ax1             init ax_attach
			  ^ this number determines how many TNCs you can hook up.

2.  splice these sections in the appropriate (fairly obvious) places in
    /usr/sys/sun/str_conf.c
	#include "ax.h"

	#if     NAX > 0
	extern struct streamtab axinfo;
	#endif

	#if     NAX > 0
	        { "ax25",       &axinfo },
	#endif

3.  add this line to /usr/sys/conf.common/files.cmn
	os/tty_ax.c             optional ax

4.  Install the needed files in the kernel sys tree
	# cp tty_ax.c /usr/sys/os
	# cp if_ax.h /usr/include/sys
	# cp if_ax.h /usr/sys/sys

5.  Build the kernel
	# cd /usr/sys/sun3/conf
	# config KERNEL_CONFIG_FILE
	# cd ../KERNEL_CONFIG_FILE
	# make
	# mv /vmunix /vmunix.save
	# cp vmunix /vmunix

6.  Reboot your machine to start up the new kernel.

7.  Now, build the two user level programs: ax25ether and ax25, and give
    it a try.
	# make

8. Put your hostname in /etc/hosts with the correct IP address.
	44.135.145.28	ve6uug-0

9.  Ensure that the netmask for network #44 is correct. Ussually it should
    be 0xffffff00. Put that in /etc/netmasks, like this.
	44	255.255.255.0
   (If you are running YP, you may need to rebuild the databases.
	# (cd /var/yp; make)
   )

10. Ensure your TNC is in KISS mode, with the proper KISS timing parameters
    already set. Now we can start up the interface.

	# ./ax25 -v ve6uug-0 ve6uug-0 /dev/ttyb
	popping module: ttcompat
	popping module: ldterm
	pushing module: ax25
	network device: ax0
	addresses: ax25 ac.8a.6c.aa.aa.8e.60 'VE6UUG-0' = ether 99:da:55:b5:d6:70
	execute: ifconfig ax0 ve6uug-0 netmask + broadcast + up
	Setting netmask of ax0 to 255.255.255.0

    The first instance of your callsign is resolved according to /etc/hosts
    to generate an IP address. The second instance of your callsign determines
    what your AX25 hardware address is, which is what other parties use to
    actually send a packet to your hardware.

11. Check to see if the interface has come up.
	# netstat -in
	Name  Mtu  Net/Dest      Address        Ipkts  Ierrs Opkts  Oerrs Collis Queue
	le0   1500 136.159.222.0 136.159.222.1  3871    0    1847    0    0      0
	lo0   1536 127.0.0.0     127.0.0.1      339     0    339     0    0      0
	ax0   1000 44.135.145.0  44.135.145.28  0       0    0       0    0      0

12. Try to talk to a few other hosts, ie. telnet, finger, etc.

BUGS:
Generally, etherfind seems to work, but only on the second and successive
attempts. The first attempt fails with an NIOCBIND error. No idea why.

Packets with digipeater addresses in their header are dropped on the floor
immediately. Proper digipeater support cannot be easily added. (My opinion:
digipeating is a dumb idea).

DTR behaviour: M_HANGUP and M_UNHANGUP streams messages are not handled
correctly. Currently, it's best to <snip> your TNC's DTR line.

OTHER NOTES:
The kernel ARP routines can only deal with 6 byte ethernet addresses. A
bizzare encoding scheme is used to encode AX25 7-byte addresses into these
6-byte addresses. When AX25 addresses are converted, the resulting ethernet
addresses always have their upper byte set to 0x99. The program ax25ether
will convert between AX25 addresses and ethernet addresses as shown using
the arp command.
