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 <> 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 <> 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.