ATM on Linux, release 0 (pre-alpha) by Werner Almesberger, EPFL LRC
===================================--- werner.almesberger@lrc.di.epfl.ch

This is experimental software. There are known major bugs and certainly
even many more yet unknown problems. Internal and external interfaces are
far from being stable. In fact, they change daily. Use at your own risk.

This package contains a kernel patch for ATM protocol stacks and for ATM
device drivers, source for management and test tools, and this
description.

The following network devices are supported:
  ATM over TCP pseudo device for "dry runs"
  Efficient Networks ENI155P-MF 155 Mbps ATM adapter

The following connection types are supported:
  constant bit rate (CBR) permanent connections
  best-effort (UBR) permanent connections

The following protocols are supported:
  "raw" unreliable ATM transport without AAL ("AAL0")
  "raw" unreliable ATM transport over AAL5
  IP over ATM (SNAP encapsulation)

The API is loosely based on the Linux ATM API proposed on the linux-atm
mailing list. This implementation is _not_ (yet) a reference but will
change in the future to fully support the final API.


Known bugs and restrictions
---------------------------

 ENI driver
   - doesn't handle priorities on RX yet
   - should use bottom-half interrupt handler
   - didn't test >1 adapter per machine
   - AAL0 is untested
   - AAL0 removes cell header (this will change)
 ATM over TCP
   - ATM over TCP driver is very limited
   - system crashes if atmtcp is killed
   - should support explicit downing
   - doesn't work with IP over ATM
 ATM protocol stack
   - API doesn't conform to Linux API draft
   - AAL0 is untested
   - TX and RX channels can only be allocated together
   - bind/connect don't pass back modified traffic parameters
   - select system call is untested
   - dup and getname aren't implemented yet
   - poor integration with other network code
 IP over ATM
   - UDP crashes badly if MMU hacks are enabled
   - doesn't support InARP
   - RFC1483-conformance of SNAP encapsulation is untested
   - should support explicit downing
 other parts
   - MMU hacks occasionally trip over reserved memory
   - "applications" are ugly
   - MMU hacks must be enabled or compilation will fail


Performance
-----------

Platform:

 Pentium 90 MHz, Neptune PCI board, 32 MB RAM, ENI155P-MF-C
 2048 PDUs, 8192 bytes each, no wait for close
 Directly connected, no switch, max buffers (128kB) allocated on board

Results (average of ten ttcp runs):

 Transport		  MMU hacks  TX Mbps  RX Mbps  Loss (bytes)
 raw AAL5 (unchecksummed) no	       132	   97	    0%
			  yes	      1607	  129	    0%
 UDP, checksummed	  no	       117         51      56%
 UDP, unchecksummed	  no	       118	   72	   39%
 TCP (checksummed)	  no		38	   38	    0%

Because ttcp does not measure the time spent in the close system call for
datagram protocols, the raw AAL5 TX rate reflects the rate at which data
can be enqueued to the device driver.

The performance measurements are only accurate within about +-5%. Even
marginal changes can lead to a systematic change of 2-3%.

The theoretical limits are 135.367 Mbps for raw AAL5 and 134.580 Mbps
for UDP, assuming data is sent in blocks of 8192 bytes each.
