
		ALTQ -- Version 1.0.1

				April 4, 1998

This is a release of Alternate Queueing for BSD Unix.
The release has become fairly stable but still it is a research prototype.
So use it at your own risk!
All interfaces are likely to change in the future release.

The release includes:
	alternate queueing support for FreeBSD-2.2.[1256]R kernel.
	CBQ, WFQ, RED, and FIFOQ implementations
	tools for CBQ
	RSVP stubs for CBQ
	ECN (for IPv4) support in RED and TCP

but lacks some of necessary documentation and functions.  Some
functions are implemented poorly. 

What's New since version 0.4.3:
	- FreeBSD-2.2.6 based.
	- rsvp rel4.2a3 support and several fixes are added.
	- RED parameters are adjusted when a slow link is used.
	- integration of RED into CBQ.  
	  RED (and ECN) can be used on a class queue basis.
	- CBQ supports more flexible filters.
	  (TOS based queueing, IPsec, IPv6)
	- tx and lnc driver support.
	- fix the performance problem of the de driver

We have made many changes and code cleanup since 0.4.3.  The changes
include:
	file names: ("altq_" prefix is added to the kernel files.)
	style changes: (indentations, etc)
	removal of unuded code: (#ifdef for the original code became
				too messy and they are removed.)
So, don't forget to recompile the related tools.
IPv6 and IPsec support is under development, and it is only for IPv6 
developpers at this point.

This release supports the following network drivers.
Supported network cards are:
	vx: 3Com PCI Ethernet Cards (3C590, 3C595, 3C900, 3C905)
	de: DEC 21040 PCI Ethernet Controller
	fxp:Intel EtherExpress Pro/100B PCI Fast Ethernet
	ep: 3Com 3C509 3C589
	ed: Western Digital and SMC 80xx; Novell NE1000 and NE2000; 3Com 3C503
	tx: SMC 9432TX
	lnc: Lance/PCnet cards (Isolan, Novell NE2100, NE32-VL)
	en: Efficient Network Inc. PCI ATM card.
	    Adaptec 155Mbps PCI ATM card.
	    (Chuck Cranor's driver is included in the ALTQ release.)
	lo: local loop (just for testing)
	sppp (synchronous ppp) devices: (Cisco HDLC supported)
	  sr: RISCom/N2 hdlc sync 1/2 port V.35/X.21
	  ar: Arnet SYNC/570i hdlc sync 2/4 port V.35/X.21
	  cx: Cronyx/Sigma multiport sync/async

The idea behind this package is to provide better queueing schemes
required to realize resource-sharing and quality of service.
Currently, the only queueing scheme implemented in BSD Unix is
the simple tail-drop FIFO queueing.  The BSD Unix systems have no
general method to implement alternate queueing schemes, which is the
main obstacle to implement a new queueing scheme to BSD Unix.

We have designed and implemented a generic alternate queueing
framework for the BSD Unix systems, and ported Sun's CBQ onto this
framework.  The system can be used for resource reservation with the
RSVP implementation from ISI.

The preliminary performance test result is encouraging; our CBQ
implementation is able to handle 100Mbps without noticeable overhead.

The goals of this project are three-fold:
    - to provide a framework to implement better queueing schemes.
    - to provide a link-sharing test-bed for network operators.
    - to provide a traffic control kernel to the RSVP community.

You can get the latest ALTQ release from
	<http://www.csl.sony.co.jp/person/kjc/programs.html>
	or
	<ftp://ftp.csl.sony.co.jp/pub/kjc/altq.tar.gz>


The CBQ code is based on SUN/LBNL CBQ v2.0.  You can get the original 
code from <http://www-nrg.ee.lbl.gov/floyd/cbq.html> or 
<ftp://playground.sun.com/pub/rsvp/>.

For RSVP users:
Note that the rsvp stubs are just a port of Sun's RSVP/CBQ.  So, it
does nothing better than Sun's RSVP.  Also note that currently it
supports only Controlled-Load Service and takes only bandwidth (rate)
parameter to map the flow to a CBQ class.
You can find the original Sun's RSVP/CBQ at
<ftp://playground.sun.com/pub/rsvp/>
Please don't ask me questions regarding RSVP.  There's a mailing-list
on RSVP implementation issues <rsvp-test@isi.edu>.  To subscribe, you
can send mail to "majordomo@isi.edu" with the following command in the
body of your email message: "subscribe rsvp-test".

For ATM users:
The ATM driver is based on bsdatm1.4
<ftp://dworkin.wustl.edu/dist/bsd/bsdatm1.4.tar.gz> written by Chuck
Cranor of Washington University <http://dworkin.wustl.edu/pub/chuck/>.
Please get the original distribution and read the included documents
for how to setup ATM.
Also note that the current ATM driver doesn't support multicast so
that some work is necessary to use with RSVP.
workaround added to altq-0.4.2:
	- pvc shadow interface is introduced to make each pvc looks
	  like a point-to-point interface.
	  see man pages under atm-tools for details.
	  (previous method using atm_flags 5 is no longer available.)

RED:
RED (Random Early Detection) is getting popular for active queue 
management in the Internet community.
More information is available at <http://www-nrg.ee.lbl.gov/floyd/red.html>.
Our verion of RED experimentally supports ECN (Explicit Congestion 
Notification) over IPv4.
ECN infomation is available at <http://www-nrg.ee.lbl.gov/floyd/ecn.html>.
Extensions to TCP to take advantage of ECN are also implemented.
Note that ECN has not standardized yet so that the implementation will
change in the future and the current version will not interoperate with 
other implementations.

WFQ:
A sample WFQ implementation by Hiroshi Kyusojin of Keio University
(kyu@mt.cs.keio.ac.jp).

FIFOQ:
FIFOQ is implemented as a template for those who want to write their
own queueing schemes.

Other Changes to the original FreeBSD:
  experimental ECN support in TCP (see comments in "netinet/tcp_input.c")

  TCP window size problem fix:
    FreeBSD-2.2 has a problem which resets TCP window size to the default
    value even when the user specifies the window size.  To avoid this
    problem, "in_addroute() in netinet/in_rmx.c" is modified.  A side
    effect is that TCP doesn't save its ssthresh value on close, but it's
    what other 4.4BSD derived systems do.

  disabling the packet-drop hack in ip_output():

  disabling ICMP_SOURCEQUENCH generated in ip_forward() when a packet-drop 
  occurs.  (RFC1812 compliant).

  IP_RECVIF support in rsvp_input() (ip_mroute.c) for rsvp rel4.2a1.

  bpf.c to support DLT_ATM_RFC1483.

  the ALTQ kernel config file:  the following field is added to GENERIC:
	# misc
	ident		ALTQ
	options		NMBCLUSTERS=2048
	options		MROUTING		# Multicast routing

	pseudo-device	sppp			#Generic Synchronous PPP
	pseudo-device	bpfilter 10

	# altq related options
	options		ALTQ			#alternate queueing
	options		CBQ			#class based queueing
	options		WFQ			#weighted fair queueing
	options		RED			#random early detection
	options		ALTQ_ACCOUNT		#altq accounting

	# ATM (en*) support
	options		NATM			#native mode atm
	device	en0
	device	en1
	pseudo-device	atm

If you use CBQ with 100baseT, you might need a fine-grained kernel timer.

	options		HZ=1000

Misc future plans:
  - add IPv6 support to CBQ.  (IPv6 stack from INRIA and/or WIDE, but
    ALTQ will remain independent from the IPv6 stack.)
  - rewrite the CBQ related code with a bit restrivtive license term.
  - implement a better wildcard-filter handling in CBQ.

Send bug reports, suggestions, etc. to

	kjc@csl.sony.co.jp

			Kenjiro Cho
			Sony Computer Science Laboratory Inc.
			WIDE Project				


The CBQ related part of the release is derived from the RSVP/CBQ
implementation of Sun Microsystems, Inc.  The CBQ part is known as 
SUN/UCL/LBL-CBQ.  

The README file of the Sun RSVP 0.4.8 release says:

	Major components of this release were contributed by USC
	Information Sciences Institute (ISI), MIT Laboratory for
	Computer Science (LCS), the Xerox Palo Alto Research Center
	(PARC), Lawrence Berkeley Laboratories (LBL), and University
	College, London (UCL).  We are deeply indebted to these groups
	for their kind assistance.

So, I'm also deeply indebted to these groups.  Special thanks to Sally
Floyd of Lawrence Berkeley Laboratories, her papers and notes on CBQ
are most helpful.

COPYRIGHT AND CONDITIONS OF USE
-------------------------------

Many of the components are derived from publicly-available source
codes so that each file has different copyright and conditions of use.
See the copyright notices in the source files for work by other
organizations.

/*
 * Copyright (C) 1997
 *	Sony Computer Science Laboratory Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 */

/****************************************************************************

            RSVPD -- ReSerVation Protocol Daemon

                Written by: Steven Berson (berson@isi.edu)
                USC Information Sciences Institute
                Marina del Rey, California

            Original Version: Shai Herzog, Nov. 1993.
	    Current Version:  Steven Berson, August 1994.


  Copyright (c) 1993 by the University of Southern California
  All rights reserved.

  Permission to use, copy, modify, and distribute this software and its
  documentation in source and binary forms for non-commercial purposes
  and without fee is hereby granted, provided that the above copyright
  notice appear in all copies and that both the copyright notice and
  this permission notice appear in supporting documentation. and that
  any documentation, advertising materials, and other materials related
  to such distribution and use acknowledge that the software was
  developed by the University of Southern California, Information
  Sciences Institute.  The name of the University may not be used to
  endorse or promote products derived from this software without
  specific prior written permission.

  THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about
  the suitability of this software for any purpose.  THIS SOFTWARE IS
  PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
  INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

  Other copyrights might apply to parts of this software and are so
  noted when applicable.

********************************************************************/

/* 
 * Copyright (c) Sun Microsystems, Inc.  1996. All rights reserved. 
 *
 * License is granted to copy, to use, and to make and to use derivative 
 * works for research and evaluation purposes, provided that Sun Microsystems is
 * acknowledged in all documentation pertaining to any such copy or derivative
 * work. Sun Microsystems grants no other licenses expressed or implied. The
 * Sun Microsystems  trade name should not be used in any advertising without
 * its written permission.
 *
 * SUN MICROSYSTEMS MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF
 * THIS SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software is provided "as is"
 * without express or implied warranty of any kind.
 *
 * These notices must be retained in any copies of any part of this software.
 */

/*
 * Copyright (c) 1995 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 * 	This product includes software developed by the Network Research
 * 	Group at Lawrence Berkeley National Laboratory.
 * 4. Neither the name of the University nor of the Laboratory may be used
 *    to endorse or promote products derived from this software without
 *    specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

