                       Release Notes
                       Version it25-0.78e
                       24 October 2001

This is a bugfix release that corrects some problems that were
introduced in the new LC management of release it25-0.78d and the
fair queuing of it25-0.78a.  The it25-0.78d release contained
some fairly substantial bugs relating to inconsistent use of
vci and lcndx in accessing some tables.  The original fair
queueing logic had a couple of non-fatal problems.  First it
permitted a single greedy VCC in the absence of competition
to grab all the hardware queue space.  Under certain situations
it also could violate FCFS service because it didn't check
for empty queue before seeing if hardware resources for
scheduling the frame were available.  ACKs to the graduate
students in CPSC 826 for helping to shake these out.

                       Release Notes
                       Version it25-0.78d
                       17 September 2001

Rework Logic Channel (LC) management to support larger vci address
spaces.. Default is now 1..128 and can be made much larger IF you
wish to reduce the number of concurrently open VCCs (now set at 64).
(This stuff is constrained by default onboard RAM which is sized at
only 16K)


                       Release Notes
                       Version it25-0.78c
                       18 August 2001

Disarmed the potentially fatal atm_recvdump() call in atmrecv.c

                       Release Notes
                       Version it25-0.78b
                        4 June  2001

Added support for

   /sbin/insmod atm.o "interface=1"


                       Release Notes
                       Version it25-0.78a
                       13 March 2001

Linux kernel level        2.4.x
Linux ATM Protocol level: 0.78

This version adds a fair queuing algorithm to the transmit
logic, theoretically eliminating packets being dropped by
the driver prior to transmission.  The constant MAX_XBCOUNT
in atmxmit.c limits the number of AAL5 frames that can be
queued on the board by a single VCC.  The servicing of the
software queues is strict priority by VCI for vcis < 32.
vci's > 32 are scheduled round robin after the High-p vcis.

The pci interface has also been moderately cleaned up.

This version will NOT work with 2.2.x kernels.


                       Release Notes
                       Version it25-0.77a
                       11 June 2000

Linux kernel level        2.3.99-pre6
Linux ATM Protocol level: 0.77

This is the first version for 2.3.99 kernels.  SMP support
doesn't work reliably. I don't think that the problem
is necessarily in THIS driver.  (The problem occurs running
the SMP kernel even when this driver is NOT loaded.)

This version will NOT work with 2.2.x kernels.

The only new "feature" is an ioctl driven mechanism for
limiting the transmit queue length and inducing random
drops.. This is certainly NOT USEFUL for production networks
but can be useful in network research activities.

                       Release Notes
                       Version it25-0.59c
                       11 Oct  1999

Linux kernel level        2.2.9
Linux ATM Protocol level: 0.59

Found and fixed a number of SMP problems. In the process,
the old "testvci" logic at the start of the transmit function
was elminated. This function caused a minor performance problem
and a major reliability problem in the SMP version.

If you plan to build for an SMP enabled kernel you <<must>>
have __SMP__ to the DEFS line in the makefile (even if the
SMP enabled kernel is running on a uni-processor.)  If you
are building for a NON-SMP kernel then you <<must not>> have
__SMP__ in the DEFS line.

Reworked transmit and receive queues giving vci's 0-31
higher priority than 32-63 for more likely delivery of
signalling messages under extreme loads.


                       Release Notes
                       Version it25-0.59b
                        5 Aug  1999

Linux kernel level        2.2.9
Linux ATM Protocol level: 0.59

Replaced old, obsolete method of obtaining PCI config data.

Inserted some spin locks in places that will (he said hopefully)
make the driver SMP safe.

Fixed broken file_struct initialization.

New web site with additional documentation now functional at
http://www.cs.clemson.edu/~westall/atm/atm.html


                       Release Notes
                       Version it25-0.59
                       12 June 1999

Linux kernel level        2.2.9
Linux ATM Protocol level: 0.59

Only one trivial change was made to this release.
The switch to the "new skb" structure was made.
(See line 460 area in atmrecv.c )

This driver supports only vpi=0 vci=0..63. If you use
SVC's you MAY have configure your SWITCH so that it will
not generate (vpi,vci) addresses outside the supported
range... Normally this is done by ilmi and the current
ilmi does this properly with our switch at least! (an
IBM 8285).

                       Release Notes
                       Version cdc16
                       16 December 1998

WARNING: This code is NOT multiprocessor safe!!!

Linux kernel level        2.1.117
Linux ATM Protocol level: 0.43
or
Linux kernel level        2.1.126
Linux ATM Protocol level: 0.51

Numerous improvements to the handling of one-side closes
while the other side continues to transmit. Thanks to
Vitaly Lavrov for testing, suggestions,  and fixes here.

                       Release Notes
                       Version cdb09
                       9 November 1998

Linux kernel level        2.1.117
Linux ATM Protocol level: 0.43
or
Linux kernel level        2.1.126
Linux ATM Protocol level: 0.51

Support for 2.1.126 + 0.51 tested.
Race condition in atm_send5skb fixed.

Some new sample initialization scripts added.

This version will build and run when the kernel sources
identified above are installed AND atm patched on a
RedHat 5.1 base distribution.  The build procedure has
NOT been tested on any other configuration.


                       Release Notes
                       Version cda14
                       14 October 1998

Linux kernel level        2.1.117
Linux ATM Protocol level: 0.43

Found and fixed the failure to call the new "atm_charge()"
function.

Better (hopefully) handling of broken AAL5 input frames.

Added asvcsend.c and asvcrecv.c -- sample programs for
using "native" ATM SVCS (as opposed to IP over ATM).

                       Release Notes
                       Version cd827
                       27 August 1998

Linux kernel level        2.117
Linux ATM Protocol level: 0.43

This version has NOT received extensive testing. We would
be interested in hearing of your experiences with it.

ALL sample startup scripts and some (TCP/IP over ATM)
sample test programs have UGLY, HARDCODED ADDRESSES that
will almost certainly have to be modified by someone
knowledgeable in ATM/TCP-IP/Linux networking!

The need to export the symbol pci_devices has been
removed from version cd827.

This driver supports only vpi=0 vci=0..63. If you use
SVC's you must configure your SWITCH so that it will
not generate (vpi,vci) addresses outside the supported
range...

Some switches will try to query the end system for the
supported range with ILMI -- unfortunately the Linux ATM
ILMI doesn't presently seem to support this. We have
found it necessary to MANUALLY CONFIGURE SWITCH PORTS.

If you happen to be using an IBM 8285 switch you must
be at code level 1.52 or above to be able to manually
configure the ports.



                       Release Notes
                       Version cd320
                       20 March 1998

Linux kernel level        2.025 or 2.027
Linux ATM Protocol level: 0.31


Here is a summary of how to install the
software.

---Building and testing the standalone driver----------

This software will NOT presently work on Linux 2.1 or
higher kernels. We will port to that level as soon as
we have a system operational at that level, but at
present we do not.

There are two makefiles. makefile.sad builds a
standalone driver that has an ioctl interface. I would
recommend working with it first. You should copy makefile.sad
to makefile before building (i.e. DON"T try
make -f makefile.sad)

Before you make anything you should create the
character device used by the ioctl interface:

     mknod /dev/ape25 c 15 1

=============== NO LONGER NEEDED AS OF AUGUST 1999 ==========

Next you should go to directory /usr/src/linux/kernel
look in the file ksyms.c and see if the symbol pci_devices
is exported.  If not you will need to either:

  1 - export it and build an new linux kernel
  2 - modify atmbase.c so that it doesn't try to
      dynamically find the adapter. If you do this
      you will need to cat /proc/pci first. There
      you should see:

        Bus  1, device   4, function  0:
        ATM network controller: IBM Unknown device (rev 1).
        Vendor id=1014. Device id=53.

      You can then hardwire the variable "devfn" used
      in atmbase to the proper value which is:
         device << 3 | function
      or in this case 0x20.
=============== ================================== ==========

Doing a "make all" should build and install a driver and
compile a number of test and diagnostic programs. In
order to install the driver you either have to be root
or have setuid on /sbin/insmod and /sbin/rmmod.

The atmtest?.c series of programs are very simple tools
just to see if an app can communicate with the hardware
through the ioctl interface.

The apesend.c and aperecv.c programs can be used to
interactively send and receive messages across an ATM
connection (or on a single system with a loopback plug
installed.) To enable single system testing without a
loopback plug you can go to atmbase.c and change

    WT_CNTLREG(ape, MODE_REG, OS2_MODE);
to
    WT_CNTLREG(ape, MODE_REG, INT_WRAP_MODE);

For high data rate testing you can use the apegen.c and
apegobl.c programs with respectively generate data and
gobble it up as fast as they can.

--- Troubleshooting-------------------------------------

There are some utility programs that can be used to dump
various aspects of the state of the adapter:

   apestat - the main control register set
   aperegs - the interface register set
   apelc   - the state of an LC descriptor
   apexram - dump all of xram.

When simple stuff like apesend and aperecv don't work
its often quite useful to turn on the DEBUG flags that
are commented out in the makefile. They cause "printk"
printing to the system log and console.

--- Socket level programming with Linux ATM -------

There is a second makefile called makefile.stk that
builds a driver that is compatible with Werner
Almesberger's protocol stack and provides a socket type
API. This driver and its utilities are in some cases
mutually incompatible with the standalone set. Thus I
highly recommend maintaining 2 separate directories if
you plan to work in both worlds contemporaneously.
(Because of recursive calls, the makefiles MAY NOT work
properly if you try to invoke them by name from a
common directory).

Needless to say, before you use this driver you must
acquire Werner's stuff and build a Linux system that
contains the stack. As far as I know, no standard
Linux distribution presently includes this atm support.

You can find it at:

http://lrcwww.epfl.ch/linux-atm/dist.html

This driver is compatible with version 0.31 of the
protocol. Version 0.31 of the protocol works with
version 2.025 and 2.027 kernels.

We also provide some test programs for use with this stack.
aasock and aaconn show how to create a socket and connect
to it. aasend and aarecv are the counterparts of apesend
and aperecv as are aagen and aagobl for apegen and apegobl.

(WARNING: Some of the "sample" programs provided with
Werner's distribution will NOT work because they don't
contain some setsockopt() calls that apparently became
mandatory after they were written.)

For testing on a single machine in loopback mode you
must use aatxrx and aagengob rather than those listed
above. This is because it is not possible for two
independent processes to bind a socket to a common vci
on the same system.

The socket interface described here and used by the
aa???? utility family is a raw UDP-like interface in which
the app binds the socket to a vci and receives unreliable
service.  The Linux TCP/IP code is really NOT USED AT ALL.

--- IP over ATM in Linux------------------------

There are 4 ways (ordered by difficulty of getting them
to work at all) of running IP over ATM in Linux.  There
are script files in our distribution that can start and
stop a 2 node network of each type:

        Method                       Script

1 - Classical IP over PVC's         clip.init
2 - Classical IP over SVC's         atm.init
3 - Lane emulation (over SVC's)     lane.init
4 - Both at the same time           net.init

----- Additional documentation ------------------

Our 1998 Linux Expo paper is a good place to start.

