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 or The CBQ code is based on SUN/LBNL CBQ v2.0. You can get the original code from or . 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 Please don't ask me questions regarding RSVP. There's a mailing-list on RSVP implementation issues . 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 written by Chuck Cranor of Washington University . 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 . Our verion of RED experimentally supports ECN (Explicit Congestion Notification) over IPv4. ECN infomation is available at . 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. */