
	      ETHRAX25 - Ethernet to AX.25 Packet Driver
			     Version 1.04
			     19 Sept 1996

			    Gary L. Grebus
			  glg@k8lt.ampr.org



ETHRAX25 is a packet driver which provides an Ethernet (Class 1)
interface to the application, and produces AX.25 UI frames,
encapsulated in KISS, on a serial port.  It was created by modifying
the ETHERSL packet driver from the Crynwr collection (http://www.crynwr.com).

Outgoing Ethernet frames are converted into AX.25 Unnumbered
Information (UI) frames.  The application sees pseudo-Ethernet
addresses which are an encoded representation of the AX.25 address.
The AX.25 frame is encapsulated in KISS framing and sent on the
specified serial port to a KISS-mode TNC.

The reverse is done for incoming KISS frames, which are converted to
pseudo-Ethernet frames for the application.

If the frame contains an ARP packet, the driver translates the hardware
addresses between AX.25 address and pseudo-Ethernet addresses as
needed.  Thus ARP works transparently.  The Ethernet broadcast address
ff-ff-ff-ff-ff-ff is converted to the AX.25 broadcast address QST-0 and vice
versa.

Usage:

The driver is loaded in the same fashion as other packet drivers.
The parameters are:

ETHRAX25 <packet_int_no>  [-h] [hardware_irq] [io_addr] [baud_rate] 
	[send_buf_size] [recv_buf_size]

-h enables hardware handshaking on the serial port.

Since the application believes it is talking to an Ethernet, there are
some AX.25 and TNC parameters which must be set before the application
is started.  These are set using the AX25CONF utility:

AX25CONF <packet_int_no> [-stat] [-mycall <ax25 addr>] [-port n] 
			 [-promisc|-nopromisc]
			 [-txdelay n] [-persist n] [-slottime n] [-txtail n]

Where:
	<packet_int_no>  -- the interrupt number for the packet driver
	-stat		 -- reports driver statistics
	-mycall ax25addr -- sets the AX.25 address (callsign with
			    optional SSID)
	-port n		 -- binds the driver to port n on a multi-port KISS
			    TNC.
	-promisc|nopromisc -- Set or unset promiscuous mode (receives 
			    all packets).  Note this confuses some
			    TCP/IP stacks.
	-txdelay n	 -- sets the TNC's txdelay (10 msec units)
	-persist n	 -- sets the TNC's p-persistence
	-slottime n	 -- sets the TNC's slottime (10 msec units)
	-txtail n	 -- sets the TNC's txtail (10 msec units)


If the driver is being used with a MS Windows application, remember to
load the WINPKT driver after loading ETHRAX25.

Caveats:

The current version of the driver has been tested with a small set of
DOS and Windows applications.

Under DOS, the driver has been tested with WATTCP (7/16/93 vintage)
and Kermit 3.13 at 9600 baud.  However, since both of these IP stacks are
tuned for Ethernet or fast serial links, they are not useable over
1200 baud radio links.  The driver was tested by connecting the serial
line to a system running KA9Q NOS, which was configured as if
connected to a KISS TNC.  Ping, telnet, ftp, and DNS seem to work.

Under Windows, the driver has been tested with the Trumpet Winsock TCP
stack, Version 1.0A, 2.1f, and 3.0.  Occasional packet loss was 
noticed when running the serial line at 9600 baud.  This can probably be 
fixed by using a serial port with a 16550 UART.

ETHRAX25 also works under Windows 95 (using the Trumpet stack).  You may
have to disable any other Winsock stack that might be running.

The driver was tested running the Trumpet newsreader, the ping,
hopcheck, telnet, and ftp utilities that come with Trumpet Winsock, and
WS_FTP, and Netscape.  All of these "worked" over a 1200 baud radio link.
I put "worked" in quotes because, while there don't appear any
driver-related problems, Trumpet Winsock TCP stack appears to have
some quirks which surface when running over something that slow.

The WS_PING utility (931003) always gets a fatal error if ARP tracing is
turned on in TCPMAN.  That sometimes happens when running over Ethernet as 
well.

Note that ETHRAX25 does not work with the native Microsoft TCP/IP stacks
on WFWG or Windows 95.  These stacks require a driver with the NDIS interface,
not a Packet Driver.

Other protocols which pass hardware addresses (like BOOTP) probably
won't work without explicit support in the driver.

The assembler code was assembled with Borland TASM 2.0.  The C code was
compiled with Borland C++ V4.0.

Revision history:

19 Sept 1996 - Version 1.04 - (Driver version: 960919)
	Fixed a stack corruption bug in the receive path.

1 Sept 1996 - Version 1.03 - (Driver version: 960901)
	Changed encoding for pseudo-ethernet addresses.
	Handle Windows Startup Complete notification in order to reinit
	the UART under the Windows COMM driver.
	Still need to find a way to prevent the driver from terminating
	when we don't think it is safe.

18 August 1996 - Version 1.02 - (Driver version: 960818)
	Reworked the new parameter passing mechanism, as overloading
	SET_ADDRESS was totally broken.
	Added promiscuous mode.
	Fixed a bug in which incoming broadcast packets (like ARP) were
	being discarded.

22 July 1996 - Version 1.01 - (Driver version: 960722)
	Added support for multi-port KISS TNC's.
	Created new method for passing parameters from AX25CONF to the driver 
	by overloading the packet driver SET_ADDRESS function.

30 May 1994 - Version 1.00 - (Driver version: 940530)
	Original release.


