diff options
author | Daniel Robbins <drobbins@gentoo.org> | 2002-08-05 01:13:04 +0000 |
---|---|---|
committer | Daniel Robbins <drobbins@gentoo.org> | 2002-08-05 01:13:04 +0000 |
commit | 7f9f00701303a6dac3158b575f499b1dd6b2ebe2 (patch) | |
tree | 6df96b6af73cc578cc05a8d96fc4e9680961e34f /sys-apps/iproute | |
parent | don't do parallel makes (diff) | |
download | gentoo-2-7f9f00701303a6dac3158b575f499b1dd6b2ebe2.tar.gz gentoo-2-7f9f00701303a6dac3158b575f499b1dd6b2ebe2.tar.bz2 gentoo-2-7f9f00701303a6dac3158b575f499b1dd6b2ebe2.zip |
A week ago, I deprecated the wrong iproute. This fixes my mistake, and also
close bugs #5780, #6018
Diffstat (limited to 'sys-apps/iproute')
-rw-r--r-- | sys-apps/iproute/ChangeLog | 21 | ||||
-rw-r--r-- | sys-apps/iproute/files/digest-iproute-20010824 | 1 | ||||
-rw-r--r-- | sys-apps/iproute/files/iproute-debian-8-htb3.diff | 3022 | ||||
-rw-r--r-- | sys-apps/iproute/iproute-20010824-r1.ebuild | 66 |
4 files changed, 3110 insertions, 0 deletions
diff --git a/sys-apps/iproute/ChangeLog b/sys-apps/iproute/ChangeLog new file mode 100644 index 000000000000..c74a5a3b1d47 --- /dev/null +++ b/sys-apps/iproute/ChangeLog @@ -0,0 +1,21 @@ +# ChangeLog for sys-apps/iproute +# Copyright 2002 Gentoo Technologies, Inc.; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/iproute/ChangeLog,v 1.4 2002/08/05 01:13:04 drobbins Exp $ + +*iproute-20010824-r1 (04 Aug 2002) + + 04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> New ebuild with htb3 + support, which is now always enabled. We include a "pkt_sched.h" Linux + kernel header in our patch that has been htb3-enabled. This allows us to + always be able to compile-in htb3 support, even if the local kernel sources + don't include such support. + + 04 Aug 2002; Daniel Robbins <drobbins@gentoo.org> We now install Debian's man + pages which are strangely absent from Debian's binary package. + +*iproute-20010824 (09 Jul 2002) + + 14 Jul 2002; phoen][x <phoenix@gentoo.org> iproute-20010824.ebuild : Added + KEYWORDS, SLOT. + + 09 Jul 2002; Daniel Ahlberg <aliz@gentoo.org> ChangeLog : Added ChangeLog. diff --git a/sys-apps/iproute/files/digest-iproute-20010824 b/sys-apps/iproute/files/digest-iproute-20010824 new file mode 100644 index 000000000000..fe66f10d26d1 --- /dev/null +++ b/sys-apps/iproute/files/digest-iproute-20010824 @@ -0,0 +1 @@ +MD5 b05a4e375d9468be3a1dd3f0e83daee8 iproute2-2.4.7-now-ss010824.tar.gz 140139 diff --git a/sys-apps/iproute/files/iproute-debian-8-htb3.diff b/sys-apps/iproute/files/iproute-debian-8-htb3.diff new file mode 100644 index 000000000000..f16495a5e54b --- /dev/null +++ b/sys-apps/iproute/files/iproute-debian-8-htb3.diff @@ -0,0 +1,3022 @@ +diff -urN iproute2/Config iproute2-gentoo/Config +--- iproute2/Config Sun Apr 16 11:42:46 2000 ++++ iproute2-gentoo/Config Sun Aug 4 17:36:36 2002 +@@ -1,2 +1,2 @@ +-TC_CONFIG_DIFFSERV=n +-TC_CONFIG_ATM=n ++TC_CONFIG_DIFFSERV=y ++TC_CONFIG_ATM=y +diff -urN iproute2/Makefile iproute2-gentoo/Makefile +--- iproute2/Makefile Thu Aug 2 00:37:03 2001 ++++ iproute2-gentoo/Makefile Sun Aug 4 17:36:36 2002 +@@ -28,8 +28,8 @@ + endif + + CC = gcc +-CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -Werror -g +-CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES) ++CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g ++CFLAGS = $(CCOPTS) -I../include $(GLIBCFIX) -I$(KERNEL_INCLUDE) $(DEFINES) + + LDLIBS += -L../lib -lnetlink -lutil + +diff -urN iproute2/debian/README.Debian iproute2-gentoo/debian/README.Debian +--- iproute2/debian/README.Debian Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/README.Debian Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,7 @@ ++This version of "iproute" includes the HTB Linux queuing discipline ++explained in http://luxik.cdi.cz/~devik/qos/htb/ ++ ++You need to patch your running kernel in order to use it; patches ++can be found in the following URLs: ++ http://luxik.cdi.cz/~devik/qos/htb/v2/htb2_2.2.17.diff ++ http://luxik.cdi.cz/~devik/qos/htb/v2/htb2_2.4.17.diff +diff -urN iproute2/debian/changelog iproute2-gentoo/debian/changelog +--- iproute2/debian/changelog Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/changelog Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,162 @@ ++iproute (20010824-8) unstable; urgency=medium ++ ++ * Added support for HTB queuing discipline (closes: Bug#133381) ++ NOTE: you need a patched kernel in order to use it ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Tue, 2 Apr 2002 20:29:40 +0200 ++ ++iproute (20010824-7) unstable; urgency=medium ++ ++ * Move `ip' binary to /bin to fix FHS violation (closes: Bug#134812) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Mon, 4 Mar 2002 00:20:30 +0100 ++ ++iproute (20010824-6) unstable; urgency=low ++ ++ * Added a couple of #ifdef's to be able to compile with older ++ kernel headers (needed for arm) (closes: Bug#131695) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sat, 16 Feb 2002 19:27:15 +0100 ++ ++iproute (20010824-5) unstable; urgency=low ++ ++ * Really fix Bug#121589 (dead gateway bug); apparently I ++ forgot to include the patch in 20010824-2 ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Tue, 29 Jan 2002 23:22:24 +0100 ++ ++iproute (20010824-4) unstable; urgency=low ++ ++ * Added support for DIFFSERV and ATM in tc ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sun, 13 Jan 2002 03:01:47 +0100 ++ ++iproute (20010824-3) unstable; urgency=low ++ ++ * Updated tc* man pages (thanks to bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>>) ++ * Fixed spurious space in `tc -s qdisc' output (closes: Bug#128501) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Thu, 10 Jan 2002 22:18:25 +0100 ++ ++iproute (20010824-2) unstable; urgency=low ++ ++ * Fixed the following important and serious bugs: ++ + iproute doesn't compile on Alpha (closes: Bug#118113, Bug#123224) ++ + iproute doesn't compile on MIPS (closes: Bug#118424) ++ + iproute doesn't compile on powerpc (closes: Bug#119601) ++ * Added man pages for tc (closes: Bug#124230), tc-cbq, tc-red, tc-tbf, ++ tc-prio and tc-sfq ++ * Removed references to old programs from iproute(7) (closes: Bug#99536) ++ * Fixed bug which presented first hop as dead in equal cost multipath ++ (closes: Bug#121589) ++ * Do not process .ps with through `psnup' (closes: Bug#119820) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Tue, 8 Jan 2002 16:07:27 +0100 ++ ++iproute (20010824-1) unstable; urgency=low ++ ++ * New upstream version ++ * Make ingress qdisc work again with tc (closes: Bug#84444) ++ * Make it compile properly with new include files (closes: Bug#113112) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sun, 28 Oct 2001 16:38:00 +0100 ++ ++iproute (20001007-1) unstable; urgency=low ++ ++ * New upstream version (closes: Bug#63701) ++ * Remove /etc/iproute2 on purge (closes: Bug#72743) ++ * Fixed Lintian warnings (no-priority-field and no-section-field) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sat, 14 Oct 2000 19:27:12 +0200 ++ ++iproute (991023-2) unstable; urgency=low ++ ++ * New Standards-Version (3.1.1) (closes: Bug#47923) ++ * Modified description of package to show which kernel options are ++ necessary to use the package (closes: Bug#47922) ++ * Updated manual page to point at /usr/share/doc/iproute (closes: Bug#47924) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sun, 19 Dec 1999 04:00:21 +0100 ++ ++iproute (991023-1) unstable; urgency=low ++ ++ * New upstream version (closes: Bug#48733) ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Tue, 2 Nov 1999 16:29:37 +0100 ++ ++iproute (990824-1) unstable; urgency=low ++ ++ * New maintainer ++ * New upstream version ++ * New Standards-Version: 3.1.0 ++ * Minor fix in "ip rule list": mask in "from" address was not shown ++ correctly ++ * Removed obsoleted documentation from "debian/" directory ++ ++ -- Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> Sun, 24 Oct 1999 19:02:56 +0200 ++ ++iproute (990630-1) unstable; urgency=low ++ ++ * New upstream version. ++ * FHS and standards 3.0.1.0. ++ ++ -- Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> Tue, 3 Aug 1999 02:49:28 +0200 ++ ++iproute (990530-1) unstable; urgency=low ++ ++ * New upstream version. ++ * Build with 2.2.10 kernel headers. ++ * Install new scripts ip/routef ip/routel, but not ip/ifcfg ip/rtpr by ++ now, I don't know who/what needs rtpr; ifcfg uses arping, and it isn't ++ available in debian for now. ++ ++ -- Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> Tue, 22 Jun 1999 02:28:53 +0200 ++ ++iproute (990329-1) unstable; urgency=low ++ ++ * New upstream version. ++ * Build with 2.2.5 kernel headers. ++ ++ -- Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> Sun, 4 Apr 1999 18:50:39 +0200 ++ ++iproute (980630-1) unstable; urgency=low ++ ++ * New upstream version. ++ * Build with 2.1.112 kernel headers. ++ * Rewrote the rules file. ++ ++ -- Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> Wed, 29 Jul 1998 23:37:52 +0200 ++ ++iproute (980119-1) unstable; urgency=low ++ ++ * Outdated documentation. Upstream docs are scarce. ++ * Non-Maintainer release ++ * This package has no correct copyright file! ++ * Include all the README.* docs from the upstream site. ++ * Modified to build under glibc ++ * Build with 2.1.85 kernel headers. ++ * produce a correct diff. ++ * Reworked the rules file to utilize debmake fully ++ * Newest upstream release ++ * glibc compilation ++ ++ -- Christoph Lameter <christoph@lameter.com <mailto:christoph@lameter.com>> Wed, 4 Feb 1998 13:37:28 -0800 ++ ++iproute (961225-2) unstable frozen; urgency=low ++ ++ * Added a man page for iproute. (Fixes #8080). ++ * Removed out-of-date patches. ++ * Added routing.txt from /usr/src/linux/Documentation/networking/routing.txt ++ * Newer version of debmake. ++ ++ -- Tom Lees <tom@lpsg.demon.co.uk <mailto:tom@lpsg.demon.co.uk>> Mon, 17 Apr 1997 17:00:36 +0100 ++ ++iproute (961225-1) unstable; urgency=low ++ ++ * Initial Release. ++ ++ -- Tom Lees <tom@lpsg.demon.co.uk <mailto:tom@lpsg.demon.co.uk>> Mon, 30 Dec 1996 11:12:23 +0000 ++ ++Local variables: ++mode: debian-changelog ++End: +diff -urN iproute2/debian/conffiles iproute2-gentoo/debian/conffiles +--- iproute2/debian/conffiles Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/conffiles Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,5 @@ ++/etc/iproute2/rt_dsfield ++/etc/iproute2/rt_protos ++/etc/iproute2/rt_realms ++/etc/iproute2/rt_scopes ++/etc/iproute2/rt_tables +diff -urN iproute2/debian/control iproute2-gentoo/debian/control +--- iproute2/debian/control Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/control Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,16 @@ ++Source: iproute ++Section: net ++Priority: extra ++Maintainer: Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> ++Standards-Version: 3.5.5 ++Build-Depends: tetex-bin, atm-dev ++ ++Package: iproute ++Architecture: any ++Depends: ${shlibs:Depends} ++Description: Professional tools to control the networking in Linux kernels ++ This is `iproute', the professional set of tools to control the ++ networking behavior in kernels 2.2.x and later. ++ . ++ At least, the options CONFIG_NETLINK and CONFIG_RTNETLINK must ++ be compiled in the running kernel +diff -urN iproute2/debian/copyright iproute2-gentoo/debian/copyright +--- iproute2/debian/copyright Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/copyright Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,40 @@ ++This is the Debian GNU/Linux's prepackaged version of the ++Linux Traffic Control engine and related utils, "iproute" ++ ++This package was put together from sources obtained from: ++ ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.4.7-now-ss010824.tar.gz ++ ++Changes for Debian: ++ * added Debian GNU/Linux package maintenance system files ++ ++ ++Copyrights ++---------- ++Copyright (C) 1996-2000 Alexey Kuznetsov <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>> ++ ++Modifications for Debian: ++ Copyright (C) 1996 Tom Lees <tom@lpsg.demon.co.uk <mailto:tom@lpsg.demon.co.uk>> ++ Copyright (C) 1998 Christoph Lameter <christoph@lameter.com <mailto:christoph@lameter.com>> ++ Copyright (C) 1998-1999 Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> ++ Copyright (C) 1999-2002 Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> ++ ++ ++License ++------- ++ ++This program is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++This program is distributed in the hope that it will be useful, but ++WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++General Public License for more details. ++ ++A copy of the GNU General Public License is available as ++`/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution ++or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'. ++You can also obtain it by writing to the Free Software Foundation, ++Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ +diff -urN iproute2/debian/iproute.7 iproute2-gentoo/debian/iproute.7 +--- iproute2/debian/iproute.7 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/iproute.7 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,77 @@ ++.\" Hey, Emacs! This is an -*- nroff -*- source file. ++.\" ++.\" Copyright (C) 1996 Erick Branderhorst <branderh@debian.org <mailto:branderh@debian.org>> ++.\" ++.\" This is free software; you can redistribute it and/or modify it under ++.\" the terms of the GNU General Public License as published by the Free ++.\" Software Foundation; either version 2, or (at your option) any later ++.\" version. ++.\" ++.\" This is distributed in the hope that it will be useful, but WITHOUT ++.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++.\" for more details. ++.\" ++.\" A copy of the GNU General Public License is available as ++.\" `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution ++.\" or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'. ++.\" You can also obtain it by writing to the Free Software Foundation, ++.\" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++.\" ++.\" This manpage is created thanks to: ++.\" Kai Henningsen <kai@khms.westfalen.de <mailto:kai@khms.westfalen.de>>, ++.\" Ian Jackson <iwj10@cus.cam.ac.uk <mailto:iwj10@cus.cam.ac.uk>>, ++.\" David H. Silber <dhs@firefly.com <mailto:dhs@firefly.com>> & ++.\" Carl Streeter <streeter@cae.wisc.edu <mailto:streeter@cae.wisc.edu>>. ++.\" ++.TH IPROUTE 8 "June 1999" "Debian Project" "Debian Linux" ++.SH NAME ++ip, rtmon, rtacct, routef, routel \- No manpage available. ++.SH DESCRIPTION ++This program does not have a useful manpage. ++When a manpage becomes available it will be included. ++If you are a competent and accurate writer and are willing to spend ++the time reading the source code and writing good manpages please ++write a better man page than this one. Please ++.B contact ++the ++.B package maintainer ++in order to avoid several people working on the same manpage. ++ ++You can start reading the very good documents ++available in the /usr/share/doc/iproute/ directory, in ++.B .ps, .dvi ++and ++.B .tex ++formats. ++ ++In particular, you can find the ++.B IP command reference manual ++in the ++.B /usr/share/doc/iproute/ip-cref.* ++files. ++ ++To read ++.B ip-cref.dvi ++run ++.B xdvi ip-cref.ps ++and to read ++.B ip-cref.ps ++run ++.B gv ip-cref.ps. ++.SH SEE ALSO ++.BR dvips (1), ++.BR gv (1x), ++.BR latex (1), ++.BR undocumented (7). ++.SH AUTHOR ++This manpage has been written by Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>>, ++using the ++.BR undocumented (7) ++manpage, written by Erick Branderhorst <branderh@debian.org <mailto:branderh@debian.org>>. ++.SH THANKS ++Kai Henningsen, ++Ian Jackson, ++David H. Silber, ++Carl Streeter. ++ +diff -urN iproute2/debian/iproute.8 iproute2-gentoo/debian/iproute.8 +--- iproute2/debian/iproute.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/iproute.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,84 @@ ++.TH iproute 8 "Sat Mar 22 13:02:26 GMT 1997" Kuznetov "Linux iproute manual" ++.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection ++.\" other parms are allowed: see man(7), man(1) ++.SH NAME ++iproute \- program to control policy-based routing tables ++.SH SYNOPSIS ++.B iproute ++.I "[ -c | -r | -l ]" ++.br ++ ++.B iproute ++.I "[ add | del ] [ PREFIX | NET mask MASK ] [ tos TOS ]" ++.I "[ nat NET ] [ class CLASS ] INFO" ++.br ++ ++.B iproute ++.I "[ addrule | delrule ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ]" ++.I "[ dev DEVICE ] [ masq | drop | reject | prohibit | nat NET ]" ++.I "[ pref PREFERENCE ] [ class CLASS | INFO ]" ++.br ++ ++.I PREFIX ++can be a net number, or net number and prefix length, e.g. ++.I 192.168.0.0 ++or ++.I 192.168.0.0/24 ++.br ++ ++.I INFO ++references any combination of the routing parameters "gw [gateway]", ++"dev [device]", "metric [metric]", "mtu [mtu]", "irtt [rtt]", ++"window [window]", and any of ++.I FLAGS ++.br ++ ++.I FLAGS ++can be any of "static", "reject", "throw", "nopmtudisc", "noforward", "local", ++"interface", and "broadcast" (reject and throw cannot be specified together, ++however, as with interface and broadcast). ++ ++.SH "DESCRIPTION" ++This manual page documents briefly the various invocations of the ++.BR iproute ++command. ++This manual page was written for the Debian GNU/Linux distribution ++(but may be used by others), because the original program does not ++have a manual page. ++Instead, it has documentation as part of the Linux source tree. Note that ++this documentation may also be found in /usr/share/doc/iproute on Debian systems. ++ ++.PP ++.B iproute ++will modify or show the current policy-based routing tables. These are held in ++kernel space, so iproute requires root permissions to run. Note that policy ++based routing tables are a feature of kernels 2.1.16 and above, so you will ++not be able to use this program unless you have a specific patch with an ++earlier kernel. ++ ++.SH OPTIONS ++.B iproute ++accepts the following single options on the command line:- ++.TP ++.B \-c ++Shows the current routing cache. ++.TP ++.B \-r ++Shows the current routing classes. ++.TP ++.B \-l ++Shows a long listing of routes. ++.PP ++Invoking the program with no command-line will produce a simple list of ++current routes. ++.SH "SEE ALSO" ++.IR "route(8), ifconfig(8), netstat(8), arp(8)" ++.PP ++The policy-based routing system is documented fully in the file ++.IR "Documentation/networking/policy-routing.txt" ++which can be found in kernels 2.1.16 and above. ++.SH BUGS ++Not very well documented anywhere :) ++.SH AUTHOR ++This manual page was written by Tom Lees <tom@lpsg.demon.co.uk <mailto:tom@lpsg.demon.co.uk>>, ++for the Debian GNU/Linux system. +diff -urN iproute2/debian/postinst iproute2-gentoo/debian/postinst +--- iproute2/debian/postinst Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/postinst Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,6 @@ ++#!/bin/sh -e ++ ++# FHS: ++if [ "$1" = "configure" -a -d /usr/doc -a ! -e /usr/doc/iproute ]; then ++ ln -sf ../share/doc/iproute /usr/doc/iproute ++fi +diff -urN iproute2/debian/postrm iproute2-gentoo/debian/postrm +--- iproute2/debian/postrm Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/postrm Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,6 @@ ++#!/bin/sh ++ ++if [ "$1" = "purge" ] ++then ++ rm -rf /etc/iproute2 ++fi +diff -urN iproute2/debian/prerm iproute2-gentoo/debian/prerm +--- iproute2/debian/prerm Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/prerm Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,5 @@ ++#!/bin/sh -e ++ ++if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/iproute ]; then ++ rm -f /usr/doc/iproute ++fi +diff -urN iproute2/debian/rules iproute2-gentoo/debian/rules +--- iproute2/debian/rules Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/rules Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,86 @@ ++#!/usr/bin/make -f ++# ++# Copyright (C) 1999 Roberto Lumbreras <rover@debian.org <mailto:rover@debian.org>> ++# Copyright (C) 1999-2002 Juan Cespedes <cespedes@debian.org <mailto:cespedes@debian.org>> ++# Copying: GPL ++ ++SHELL = bash ++ ++PACKAGE = $(shell perl -e 'print <> =~ /^(.*) \(.*\)/' debian/changelog) ++PKG_VER = $(shell perl -e 'print <> =~ /\((.*)\)/' debian/changelog) ++PKG_UPVER= $(shell perl -e 'print <> =~ /\((.*)-[^-]*\)/' debian/changelog) ++ ++BINS = ip/ip ++SBINS = ip/rtmon ip/rtacct tc/tc ++SHBINS = ip/routef ip/routel # ip/ifcfg ip/rtpr ++DOCS = README* doc/Plan debian/README.Debian ++MAN7 = debian/iproute.7 ++MAN8 = debian/tc.8 debian/tc-cbq.8 debian/tc-htb.8 ++MAN8 += debian/tc-pbfifo.8 debian/tc-pfifo_fast.8 debian/tc-prio.8 ++MAN8 += debian/tc-red.8 debian/tc-sfq.8 debian/tc-tbf.8 ++MANLINKS= ip rtmon rtacct tc routef routel ++TEXDOCS = ip-cref ip-tunnels api-ip6-flowlabels ++ ++build: stamp-build ++ ++stamp-build: ++ $(MAKE) KERNEL_INCLUDE=/usr/include ++ $(MAKE) -C doc ++ touch stamp-build ++ ++binary: binary-indep binary-arch ++ ++binary-indep: ++ ++binary-arch: checkroot stamp-build ++ $(RM) -r debian/tmp ++ install -d -m0755 debian/tmp/{DEBIAN,bin,sbin,usr/{bin,share/doc/$(PACKAGE),share/man/man{7,8}}} ++ install -s -m0755 $(BINS) debian/tmp/bin/ ++ install -s -m0755 $(SBINS) debian/tmp/sbin/ ++ ln -s /bin/ip debian/tmp/sbin/ip ++ install -m0755 $(SHBINS) debian/tmp/usr/bin/ ++ cp -p $(DOCS) debian/tmp/usr/share/doc/$(PACKAGE)/ ++ cp -rp examples debian/tmp/usr/share/doc/$(PACKAGE)/ ++ find debian/tmp/usr/share/doc/$(PACKAGE)/examples -type f -exec chmod -x {} \; ++ install -m0644 debian/changelog debian/tmp/usr/share/doc/$(PACKAGE)/changelog.Debian ++ cp -p RELNOTES debian/tmp/usr/share/doc/$(PACKAGE)/changelog ++ for i in $(TEXDOCS); do \ ++ install -m0644 doc/$$i.tex debian/tmp/usr/share/doc/$(PACKAGE)/; \ ++ install -m0644 doc/$$i.dvi debian/tmp/usr/share/doc/$(PACKAGE)/; \ ++ install -m0644 doc/$$i.ps debian/tmp/usr/share/doc/$(PACKAGE)/; \ ++ done ++ install -m0644 $(MAN7) debian/tmp/usr/share/man/man7/ ++ install -m0644 $(MAN8) debian/tmp/usr/share/man/man8/ ++ gzip -9fr debian/tmp/usr/share || true ++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-pfifo.8.gz ++ ln -s tc-pbfifo.8.gz debian/tmp/usr/share/man/man8/tc-bfifo.8.gz ++ for i in $(MANLINKS); do \ ++ ln -s ../man7/iproute.7.gz debian/tmp/usr/share/man/man8/$$i.8.gz; \ ++ done ++ cp -p debian/copyright debian/tmp/usr/share/doc/$(PACKAGE)/ ++ cp -rp etc debian/tmp/ ++ install -m0644 debian/conffiles debian/tmp/DEBIAN/ ++ install debian/postinst debian/tmp/DEBIAN/ ++ install debian/prerm debian/tmp/DEBIAN/ ++ install debian/postrm debian/tmp/DEBIAN/ ++ ++ dpkg-shlibdeps $(BINS) ++ dpkg-gencontrol -isp ++ chown -R root.root debian/tmp ++ chmod -R u=rwX,go=rX debian/tmp ++ dpkg --build debian/tmp .. ++ ++checkdir: ++ @test -f debian/rules ++ ++checkroot: checkdir ++ @test 0 = `id -u` || { echo "Error: not super-user"; exit 1; } ++ ++clean: checkdir debian/control ++ $(RM) stamp-build debian/files debian/substvars ++ $(MAKE) clean ++ $(MAKE) -C doc clean ++ $(RM) `find . -name "*~" -o -name core` ++ $(RM) -r debian/tmp ++ ++.PHONY: build binary binary-arch binary-indep checkdir checkroot clean +diff -urN iproute2/debian/tc-cbq.8 iproute2-gentoo/debian/tc-cbq.8 +--- iproute2/debian/tc-cbq.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-cbq.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,353 @@ ++.TH CBQ 8 "16 December 2001" "iproute2" "Linux" ++.SH NAME ++CBQ \- Class Based Queueing ++.SH SYNOPSIS ++.B tc qdisc ... dev ++dev ++.B ( parent ++classid ++.B | root) [ handle ++major: ++.B ] cbq [ allot ++bytes ++.B ] avpkt ++bytes ++.B bandwidth ++rate ++.B [ cell ++bytes ++.B ] [ ewma ++log ++.B ] [ mpu ++bytes ++.B ] ++ ++.B tc class ... dev ++dev ++.B parent ++major:[minor] ++.B [ classid ++major:minor ++.B ] cbq allot ++bytes ++.B [ bandwidth ++rate ++.B ] [ rate ++rate ++.B ] prio ++priority ++.B [ weight ++weight ++.B ] [ minburst ++packets ++.B ] [ maxburst ++packets ++.B ] [ ewma ++log ++.B ] [ cell ++bytes ++.B ] avpkt ++bytes ++.B [ mpu ++bytes ++.B ] [ bounded isolated ] [ split ++handle ++.B & defmap ++defmap ++.B ] [ estimator ++interval timeconstant ++.B ] ++ ++.SH DESCRIPTION ++Class Based Queueing is a classful qdisc that implements a rich ++linksharing hierarchy of classes. It contains shaping elements as ++well as prioritizing capabilities. Shaping is performed using link ++idle time calculations based on the timing of dequeue events and ++underlying link bandwidth. ++ ++.SH SHAPING ALGORITHM ++When shaping a 10mbit/s connection to 1mbit/s, the link will ++be idle 90% of the time. If it isn't, it needs to be throttled so that it ++IS idle 90% of the time. ++ ++During operations, the effective idletime is measured using an ++exponential weighted moving average (EWMA), which considers recent ++packets to be exponentially more important than past ones. The Unix ++loadaverage is calculated in the same way. ++ ++The calculated idle time is subtracted from the EWMA measured one, ++the resulting number is called 'avgidle'. A perfectly loaded link has ++an avgidle of zero: packets arrive exactly at the calculated ++interval. ++ ++An overloaded link has a negative avgidle and if it gets too negative, ++CBQ throttles and is then 'overlimit'. ++ ++Conversely, an idle link might amass a huge avgidle, which would then ++allow infinite bandwidths after a few hours of silence. To prevent ++this, avgidle is capped at ++.B maxidle. ++ ++If overlimit, in theory, the CBQ could throttle itself for exactly the ++amount of time that was calculated to pass between packets, and then ++pass one packet, and throttle again. Due to timer resolution constraints, ++this may not be feasible, see the ++.B minburst ++parameter below. ++ ++.SH CLASSIFICATION ++Within the one CBQ instance many classes may exist. Each of these classes ++contains another qdisc, by default ++.BR tc-pfifo (8). ++ ++When enqueueing a packet, CBQ starts at the root and uses various methods to ++determine which class should receive the data. ++ ++In the absence of uncommon configuration options, the process is rather easy. ++At each node we look for an instruction, and then go to the class the ++instruction refers us to. If the class found is a barren leaf-node (without ++children), we enqueue the packet there. If it is not yet a leaf node, we do ++the whole thing over again starting from that node. ++ ++The following actions are performed, in order at each node we visit, until one ++sends us to another node, or terminates the process. ++.TP ++(i) ++Consult filters attached to the class. If sent to a leafnode, we are done. ++Otherwise, restart. ++.TP ++(ii) ++Consult the defmap for the priority assigned to this packet, which depends ++on the TOS bits. Check if the referral is leafless, otherwise restart. ++.TP ++(iii) ++Ask the defmap for instructions for the 'best effort' priority. Check the ++answer for leafness, otherwise restart. ++.TP ++(iv) ++If none of the above returned with an instruction, enqueue at this node. ++.P ++This algorithm makes sure that a packet always ends up somewhere, even while ++you are busy building your configuration. ++ ++For more details, see ++.BR tc-cbq-details(8). ++ ++.SH LINK SHARING ALGORITHM ++When dequeuing for sending to the network device, CBQ decides which of its ++classes will be allowed to send. It does so with a Weighted Round Robin process ++in which each class with packets gets a chance to send in turn. The WRR process ++starts by asking the highest priority classes (lowest numerically - ++highest semantically) for packets, and will continue to do so until they ++have no more data to offer, in which case the process repeats for lower ++priorities. ++ ++Classes by default borrow bandwidth from their siblings. A class can be ++prevented from doing so by declaring it 'bounded'. A class can also indicate ++its unwillingness to lend out bandwidth by being 'isolated'. ++ ++.SH QDISC ++The root of a CBQ qdisc class tree has the following parameters: ++ ++.TP ++parent major:minor | root ++This mandatory parameter determines the place of the CBQ instance, either at the ++.B root ++of an interface or within an existing class. ++.TP ++handle major: ++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only ++of a major number, followed by a colon. Optional, but very useful if classes ++will be generated within this qdisc. ++.TP ++allot bytes ++This allotment is the 'chunkiness' of link sharing and is used for determining packet ++transmission time tables. The qdisc allot differs slightly from the class allot discussed ++below. Optional. Defaults to a reasonable value, related to avpkt. ++.TP ++avpkt bytes ++The average size of a packet is needed for calculating maxidle, and is also used ++for making sure 'allot' has a safe value. Mandatory. ++.TP ++bandwidth rate ++To determine the idle time, CBQ must know the bandwidth of your underlying ++physical interface, or parent qdisc. This is a vital parameter, more about it ++later. Mandatory. ++.TP ++cell ++The cell size determines he granularity of packet transmission time calculations. Has a sensible default. ++.TP ++mpu ++A zero sized packet may still take time to transmit. This value is the lower ++cap for packet transmission time calculations - packets smaller than this value ++are still deemed to have this size. Defaults to zero. ++.TP ++ewma log ++When CBQ needs to measure the average idle time, it does so using an ++Exponentially Weighted Moving Average which smoothes out measurements into ++a moving average. The EWMA LOG determines how much smoothing occurs. Lower ++values imply greater sensitivity. Must be between 0 and 31. Defaults ++to 5. ++.P ++A CBQ qdisc does not shape out of its own accord. It only needs to know certain ++parameters about the underlying link. Actual shaping is done in classes. ++ ++.SH CLASSES ++Classes have a host of parameters to configure their operation. ++ ++.TP ++parent major:minor ++Place of this class within the hierarchy. If attached directly to a qdisc ++and not to another class, minor can be omitted. Mandatory. ++.TP ++classid major:minor ++Like qdiscs, classes can be named. The major number must be equal to the ++major number of the qdisc to which it belongs. Optional, but needed if this ++class is going to have children. ++.TP ++weight weight ++When dequeuing to the interface, classes are tried for traffic in a ++round-robin fashion. Classes with a higher configured qdisc will generally ++have more traffic to offer during each round, so it makes sense to allow ++it to dequeue more traffic. All weights under a class are normalized, so ++only the ratios matter. Defaults to the configured rate, unless the priority ++of this class is maximal, in which case it is set to 1. ++.TP ++allot bytes ++Allot specifies how many bytes a qdisc can dequeue ++during each round of the process. This parameter is weighted using the ++renormalized class weight described above. Silently capped at a minimum of ++3/2 avpkt. Mandatory. ++ ++.TP ++prio priority ++In the round-robin process, classes with the lowest priority field are tried ++for packets first. Mandatory. ++ ++.TP ++avpkt ++See the QDISC section. ++ ++.TP ++rate rate ++Maximum rate this class and all its children combined can send at. Mandatory. ++ ++.TP ++bandwidth rate ++This is different from the bandwidth specified when creating a CBQ disc! Only ++used to determine maxidle and offtime, which are only calculated when ++specifying maxburst or minburst. Mandatory if specifying maxburst or minburst. ++ ++.TP ++maxburst ++This number of packets is used to calculate maxidle so that when ++avgidle is at maxidle, this number of average packets can be burst ++before avgidle drops to 0. Set it higher to be more tolerant of ++bursts. You can't set maxidle directly, only via this parameter. ++ ++.TP ++minburst ++As mentioned before, CBQ needs to throttle in case of ++overlimit. The ideal solution is to do so for exactly the calculated ++idle time, and pass 1 packet. However, Unix kernels generally have a ++hard time scheduling events shorter than 10ms, so it is better to ++throttle for a longer period, and then pass minburst packets in one ++go, and then sleep minburst times longer. ++ ++The time to wait is called the offtime. Higher values of minburst lead ++to more accurate shaping in the long term, but to bigger bursts at ++millisecond timescales. Optional. ++ ++.TP ++minidle ++If avgidle is below 0, we are overlimits and need to wait until ++avgidle will be big enough to send one packet. To prevent a sudden ++burst from shutting down the link for a prolonged period of time, ++avgidle is reset to minidle if it gets too low. ++ ++Minidle is specified in negative microseconds, so 10 means that ++avgidle is capped at -10us. Optional. ++ ++.TP ++bounded ++Signifies that this class will not borrow bandwidth from its siblings. ++.TP ++isolated ++Means that this class will not borrow bandwidth to its siblings ++ ++.TP ++split major:minor & defmap bitmap[/bitmap] ++If consulting filters attached to a class did not give a verdict, ++CBQ can also classify based on the packet's priority. There are 16 ++priorities available, numbered from 0 to 15. ++ ++The defmap specifies which priorities this class wants to receive, ++specified as a bitmap. The Least Significant Bit corresponds to priority ++zero. The ++.B split ++parameter tells CBQ at which class the decision must be made, which should ++be a (grand)parent of the class you are adding. ++ ++As an example, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0' ++configures class 10:0 to send packets with priorities 6 and 7 to 10:1. ++ ++The complimentary configuration would then ++be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f' ++Which would send all packets 0, 1, 2, 3, 4 and 5 to 10:1. ++.TP ++estimator interval timeconstant ++CBQ can measure how much bandwidth each class is using, which tc filters ++can use to classify packets with. In order to determine the bandwidth ++it uses a very simple estimator that measures once every ++.B interval ++microseconds how much traffic has passed. This again is a EWMA, for which ++the time constant can be specified, also in microseconds. The ++.B time constant ++corresponds to the sluggishness of the measurement or, conversely, to the ++sensitivity of the average to short bursts. Higher values mean less ++sensitivity. ++ ++.SH BUGS ++The actual bandwidth of the underlying link may not be known, for example ++in the case of PPoE or PPTP connections which in fact may send over a ++pipe, instead of over a physical device. CBQ is quite resilient to major ++errors in the configured bandwidth, probably a the cost of coarser shaping. ++ ++Default kernels rely on coarse timing information for making decisions. These ++may make shaping precise in the long term, but inaccurate on second long scales. ++ ++See ++.BR tc-cbq-details(8) ++for hints on how to improve this. ++ ++.SH SOURCES ++.TP ++o ++Sally Floyd and Van Jacobson, "Link-sharing and Resource ++Management Models for Packet Networks", ++IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995 ++ ++.TP ++o ++Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995 ++ ++.TP ++o ++Sally Floyd, "Notes on Class-Based Queueing: Setting ++Parameters", 1996 ++ ++.TP ++o ++Sally Floyd and Michael Speer, "Experimental Results ++for Class-Based Queueing", 1998, not published. ++ ++ ++ ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH AUTHOR ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>>. This manpage maintained by ++bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-htb.8 iproute2-gentoo/debian/tc-htb.8 +--- iproute2/debian/tc-htb.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-htb.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,153 @@ ++.TH HTB 8 "10 January 2002" "iproute2" "Linux" ++.SH NAME ++HTB \- Hierarchy Token Bucket ++.SH SYNOPSIS ++.B tc qdisc ... dev ++dev ++.B ( parent ++classid ++.B | root) [ handle ++major: ++.B ] htb [ default ++minor-id ++.B ] ++ ++.B tc class ... dev ++dev ++.B parent ++major:[minor] ++.B [ classid ++major:minor ++.B ] htb rate ++rate ++.B [ ceil ++rate ++.B ] burst ++bytes ++.B [ cburst ++bytes ++.B ] [ prio ++priority ++.B ] ++ ++.SH DESCRIPTION ++HTB is meant as a more understandable and intuitive replacement for ++the CBQ qdisc in Linux. Both CBQ and HTB help you to control the use ++of the outbound bandwidth on a given link. Both allow you to use one ++physical link to simulate several slower links and to send different ++kinds of traffic on different simulated links. In both cases, you have ++to specify how to divide the physical link into simulated links and ++how to decide which simulated link to use for a given packet to be sent. ++ ++Unlike CBQ, HTB shapes traffic based on the Token Bucket Filter algorithm ++which does not depend on interface characteristics and so does not need to ++know the underlying bandwidth of the outgoing interface. ++ ++.SH SHAPING ALGORITHM ++Shaping works as documented in ++.B tc-tbf (8). ++ ++.SH CLASSIFICATION ++Within the one HRB instance many classes may exist. Each of these classes ++contains another qdisc, by default ++.BR tc-pfifo (8). ++ ++When enqueueing a packet, HTB starts at the root and uses various methods to ++determine which class should receive the data. ++ ++In the absence of uncommon configuration options, the process is rather easy. ++At each node we look for an instruction, and then go to the class the ++instruction refers us to. If the class found is a barren leaf-node (without ++children), we enqueue the packet there. If it is not yet a leaf node, we do ++the whole thing over again starting from that node. ++ ++The following actions are performed, in order at each node we visit, until one ++sends us to another node, or terminates the process. ++.TP ++(i) ++Consult filters attached to the class. If sent to a leafnode, we are done. ++Otherwise, restart. ++.TP ++(ii) ++If none of the above returned with an instruction, enqueue at this node. ++.P ++This algorithm makes sure that a packet always ends up somewhere, even while ++you are busy building your configuration. ++ ++.SH LINK SHARING ALGORITHM ++FIXME ++ ++.SH QDISC ++The root of a CBQ qdisc class tree has the following parameters: ++ ++.TP ++parent major:minor | root ++This mandatory parameter determines the place of the CBQ instance, either at the ++.B root ++of an interface or within an existing class. ++.TP ++handle major: ++Like all other qdiscs, the CBQ can be assigned a handle. Should consist only ++of a major number, followed by a colon. Optional, but very useful if classes ++will be generated within this qdisc. ++.TP ++default minor-id ++Unclassified traffic gets sent to the class with this minor-id. ++ ++.SH CLASSES ++Classes have a host of parameters to configure their operation. ++ ++.TP ++parent major:minor ++Place of this class within the hierarchy. If attached directly to a qdisc ++and not to another class, minor can be omitted. Mandatory. ++.TP ++classid major:minor ++Like qdiscs, classes can be named. The major number must be equal to the ++major number of the qdisc to which it belongs. Optional, but needed if this ++class is going to have children. ++.TP ++prio priority ++In the round-robin process, classes with the lowest priority field are tried ++for packets first. Mandatory. ++ ++.TP ++rate rate ++Maximum rate this class and all its children are guaranteed. Mandatory. ++ ++.TP ++ceil rate ++Maximum rate at which a class can send, if its parent has bandwidth to spare. ++Defaults to the configured rate, which implies no borrowing ++ ++.TP ++burst bytes ++Amount of bytes that can be burst at ++.B ceil ++speed, in excess of the configured ++.B rate. ++Should be at least as high as the highest burst of all children. ++ ++.TP ++cburst bytes ++Amount of bytes that can be burst at 'infinite' speed, in other words, as fast ++as the interface can transmit them. For perfect evening out, should be equal to at most one average ++packet. Should be at least as high as the highest cburst of all children. ++ ++.SH NOTES ++Due to Unix timing constraints, the maximum ceil rate is not infinite and may in fact be quite low. On Intel, ++there are 100 timer events per second, the maximum rate is that rate at which 'burst' bytes are sent each timer tick. ++From this, the mininum burst size for a specified rate can be calculated. For i386, a 10mbit rate requires a 12 kilobyte ++burst as 100*12kb*8 equals 10mbit. ++ ++.SH BUGS ++Not in the stock kernel yet. ++ ++.SH SEE ALSO ++.BR tc (8) ++.P ++HTB website: http://luxik.cdi.cz/~devik/qos/htb/ ++.SH AUTHOR ++Martin Devera <devik@cdi.cz <mailto:devik@cdi.cz>>. This manpage maintained by bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-pbfifo.8 iproute2-gentoo/debian/tc-pbfifo.8 +--- iproute2/debian/tc-pbfifo.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-pbfifo.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,72 @@ ++.TH PBFIFO 8 "10 January 2002" "iproute2" "Linux" ++.SH NAME ++pfifo \- Packet limited First In, First Out queue ++.P ++bfifo \- Byte limited First In, First Out queue ++ ++.SH SYNOPSIS ++.B tc qdisc ... add pfifo ++.B [ limit ++packets ++.B ] ++.P ++.B tc qdisc ... add bfifo ++.B [ limit ++bytes ++.B ] ++ ++.SH DESCRIPTION ++The pfifo and bfifo qdiscs are unadorned First In, First Out queues. They are the ++simplest queues possible and therefore have no overhead. ++.B pfifo ++constrains the queue size as measured in packets. ++.B bfifo ++does so as measured in bytes. ++ ++Like all non-default qdiscs, they maintain statistics. This might be a reason to prefer ++pfifo or bfifo over the default. ++ ++.SH ALGORITHM ++A list of packets is maintained, when a packet is enqueued it gets inserted at the tail of ++a list. When a packet needs to be sent out to the network, it is taken from the head of the list. ++ ++If the list is too long, no further packets are allowed on. This is called 'tail drop'. ++ ++.SH PARAMETERS ++.TP ++limit ++Maximum queue size. Specified in bytes for bfifo, in packets for pfifo. For pfifo, defaults ++to the interface txqueuelen, as specified with ++.BR ifconfig (8) ++or ++.BR ip (8). ++ ++For bfifo, it defaults to the txqueuelen multiplied by the interface MTU. ++ ++.SH OUTPUT ++The output of ++.B tc -s qdisc ls ++contains the limit, either in packets or in bytes, and the number of bytes ++and packets actually sent. An unsent and dropped packet only appears between braces ++and is not counted as 'Sent'. ++ ++In this example, the queue length is 100 packets, 45894 bytes were sent over 681 packets. ++No packets were dropped, and as the pfifo queue does not slow down packets, there were also no ++overlimits: ++.P ++.nf ++# tc -s qdisc ls dev eth0 ++qdisc pfifo 8001: dev eth0 limit 100p ++ Sent 45894 bytes 681 pkts (dropped 0, overlimits 0) ++.fi ++ ++If a backlog occurs, this is displayed as well. ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH AUTHORS ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>> ++ ++This manpage maintained by bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-pfifo_fast.8 iproute2-gentoo/debian/tc-pfifo_fast.8 +--- iproute2/debian/tc-pfifo_fast.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-pfifo_fast.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,59 @@ ++.TH PFIFO_FAST 8 "10 January 2002" "iproute2" "Linux" ++.SH NAME ++pfifo_fast \- three-band first in, first out queue ++ ++.SH DESCRIPTION ++pfifo_fast is the default qdisc of each interface. ++ ++Whenever an interface is created, the pfifo_fast qdisc is automatically used ++as a queue. If another qdisc is attached, it preempts the default ++pfifo_fast, which automatically returns to function when an existing qdisc ++is detached. ++ ++In this sense this qdisc is magic, and unlike other qdiscs. ++ ++.SH ALGORITHM ++The algorithm is very similar to that of the classful ++.BR tc-prio (8) ++qdisc. ++.B pfifo_fast ++is like three ++.BR tc-pfifo (8) ++queues side by side, where packets can be enqueued in any of the three bands ++based on their Type of Service bits or assigned priority. ++ ++Not all three bands are dequeued simultaneously - as long as lower bands ++have traffic, higher bands are never dequeued. This can be used to ++prioritize interactive traffic or penalize 'lowest cost' traffic. ++ ++Each band can be txqueuelen packets long, as configured with ++.BR ifconfig (8) ++or ++.BR ip (8). ++Additional packets coming in are not enqueued but are instead dropped. ++ ++See ++.BR tc-prio (8) ++for complete details on how TOS bits are translated into bands. ++.SH PARAMETERS ++.TP ++txqueuelen ++The length of the three bands depends on the interface txqueuelen, as ++specified with ++.BR ifconfig (8) ++or ++.BR ip (8). ++ ++.SH BUGS ++Does not maintain statistics and does not show up in tc qdisc ls. This is because ++it is the automatic default in the absence of a configured qdisc. ++ ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH AUTHORS ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>> ++ ++This manpage maintained by bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-prio.8 iproute2-gentoo/debian/tc-prio.8 +--- iproute2/debian/tc-prio.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-prio.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,187 @@ ++.TH PRIO 8 "16 December 2001" "iproute2" "Linux" ++.SH NAME ++PRIO \- Priority qdisc ++.SH SYNOPSIS ++.B tc qdisc ... dev ++dev ++.B ( parent ++classid ++.B | root) [ handle ++major: ++.B ] prio [ bands ++bands ++.B ] [ priomap ++band,band,band... ++.B ] [ estimator ++interval timeconstant ++.B ] ++ ++.SH DESCRIPTION ++The PRIO qdisc is a simple classful queueing discipline that contains ++an arbitrary number of classes of differing priority. The classes are ++dequeued in numerical descending order of priority. PRIO is a scheduler ++and never delays packets - it is a work-conserving qdisc, though the qdiscs ++contained in the classes may not be. ++ ++Very useful for lowering latency when there is no need for slowing down ++traffic. ++ ++.SH ALGORITHM ++On creation with 'tc qdisc add', a fixed number of bands is created. Each ++band is a class, although is not possible to add classes with 'tc qdisc ++add', the number of bands to be created must instead be specified on the ++commandline attaching PRIO to its root. ++ ++When dequeueing, band 0 is tried first and only if it did not deliver a ++packet does PRIO try band 1, and so onwards. Maximum reliability packets ++should therefore go to band 0, minimum delay to band 1 and the rest to band ++2. ++ ++As the PRIO qdisc itself will have minor number 0, band 0 is actually ++major:1, band 1 is major:2, etc. For major, substitute the major number ++assigned to the qdisc on 'tc qdisc add' with the ++.B handle ++parameter. ++ ++.SH CLASSIFICATION ++Three methods are available to PRIO to determine in which band a packet will ++be enqueued. ++.TP ++From userspace ++A process with sufficient privileges can encode the destination class ++directly with SO_PRIORITY, see ++.BR tc(7). ++.TP ++with a tc filter ++A tc filter attached to the root qdisc can point traffic directly to a class ++.TP ++with the priomap ++Based on the packet priority, which in turn is derived from the Type of ++Service assigned to the packet. ++.P ++Only the priomap is specific to this qdisc. ++.SH QDISC PARAMETERS ++.TP ++bands ++Number of bands. If changed from the default of 3, ++.B priomap ++must be updated as well. ++.TP ++priomap ++The priomap maps the priority of ++a packet to a class. The priority can either be set directly from userspace, ++or be derived from the Type of Service of the packet. ++ ++Determines how packet priorities, as assigned by the kernel, map to ++bands. Mapping occurs based on the TOS octet of the packet, which looks like ++this: ++ ++.nf ++0 1 2 3 4 5 6 7 +++---+---+---+---+---+---+---+---+ ++| | | | ++|PRECEDENCE | TOS |MBZ| ++| | | | +++---+---+---+---+---+---+---+---+ ++.fi ++ ++The four TOS bits (the 'TOS field') are defined as: ++ ++.nf ++Binary Decimcal Meaning ++----------------------------------------- ++1000 8 Minimize delay (md) ++0100 4 Maximize throughput (mt) ++0010 2 Maximize reliability (mr) ++0001 1 Minimize monetary cost (mmc) ++0000 0 Normal Service ++.fi ++ ++As there is 1 bit to the right of these four bits, the actual value of the ++TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the ++value of the entire TOS field, not just the four bits. It is the value you ++see in the first column of this table: ++ ++.nf ++TOS Bits Means Linux Priority Band ++------------------------------------------------------------ ++0x0 0 Normal Service 0 Best Effort 1 ++0x2 1 Minimize Monetary Cost 1 Filler 2 ++0x4 2 Maximize Reliability 0 Best Effort 1 ++0x6 3 mmc+mr 0 Best Effort 1 ++0x8 4 Maximize Throughput 2 Bulk 2 ++0xa 5 mmc+mt 2 Bulk 2 ++0xc 6 mr+mt 2 Bulk 2 ++0xe 7 mmc+mr+mt 2 Bulk 2 ++0x10 8 Minimize Delay 6 Interactive 0 ++0x12 9 mmc+md 6 Interactive 0 ++0x14 10 mr+md 6 Interactive 0 ++0x16 11 mmc+mr+md 6 Interactive 0 ++0x18 12 mt+md 4 Int. Bulk 1 ++0x1a 13 mmc+mt+md 4 Int. Bulk 1 ++0x1c 14 mr+mt+md 4 Int. Bulk 1 ++0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1 ++.fi ++ ++The second column contains the value of the relevant ++four TOS bits, followed by their translated meaning. For example, 15 stands ++for a packet wanting Minimal Montetary Cost, Maximum Reliability, Maximum ++Throughput AND Minimum Delay. ++ ++The fourth column lists the way the Linux kernel interprets the TOS bits, by ++showing to which Priority they are mapped. ++ ++The last column shows the result of the default priomap. On the commandline, ++the default priomap looks like this: ++ ++ 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1 ++ ++This means that priority 4, for example, gets mapped to band number 1. ++The priomap also allows you to list higher priorities (> 7) which do not ++correspond to TOS mappings, but which are set by other means. ++ ++This table from RFC 1349 (read it for more details) explains how ++applications might very well set their TOS bits: ++ ++.nf ++TELNET 1000 (minimize delay) ++FTP ++ Control 1000 (minimize delay) ++ Data 0100 (maximize throughput) ++ ++TFTP 1000 (minimize delay) ++ ++SMTP ++ Command phase 1000 (minimize delay) ++ DATA phase 0100 (maximize throughput) ++ ++Domain Name Service ++ UDP Query 1000 (minimize delay) ++ TCP Query 0000 ++ Zone Transfer 0100 (maximize throughput) ++ ++NNTP 0001 (minimize monetary cost) ++ ++ICMP ++ Errors 0000 ++ Requests 0000 (mostly) ++ Responses <same as request> (mostly) ++.fi ++ ++ ++.SH CLASSES ++PRIO classes cannot be configured further - they are automatically created ++when the PRIO qdisc is attached. Each class however can contain yet a ++further qdisc. ++ ++.SH BUGS ++Large amounts of traffic in the lower bands can cause starvation of higher ++bands. Can be prevented by attaching a shaper (for example, ++.BR tc-tbf(8) ++to these bands to make sure they cannot dominate the link. ++ ++.SH AUTHORS ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>>, J Hadi Salim ++<hadi@cyberus.ca <mailto:hadi@cyberus.ca>>. This manpage maintained by bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-red.8 iproute2-gentoo/debian/tc-red.8 +--- iproute2/debian/tc-red.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-red.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,131 @@ ++.TH RED 8 "13 December 2001" "iproute2" "Linux" ++.SH NAME ++red \- Random Early Detection ++.SH SYNOPSIS ++.B tc qdisc ... red ++.B limit ++bytes ++.B min ++bytes ++.B max ++bytes ++.B avpkt ++bytes ++.B burst ++packets ++.B [ ecn ] [ bandwidth ++rate ++.B ] probability ++chance ++ ++.SH DESCRIPTION ++Random Early Detection is a classless qdisc which manages its queue size ++smartly. Regular queues simply drop packets from the tail when they are ++full, which may not be the optimal behaviour. RED also performs tail drop, ++but does so in a more gradual way. ++ ++Once the queue hits a certain average length, packets enqueued have a ++configurable chance of being marked (which may mean dropped). This chance ++increases linearly up to a point called the ++.B max ++average queue length, although the queue might get bigger. ++ ++This has a host of benefits over simple taildrop, while not being processor ++intensive. It prevents synchronous retransmits after a burst in traffic, ++which cause further retransmits, etc. ++ ++The goal is the have a small queue size, which is good for interactivity ++while not disturbing TCP/IP traffic with too many sudden drops after a burst ++of traffic. ++ ++Depending on 08 ECN is configured, marking either means dropping or ++purely marking a packet as overlimit. ++.SH ALGORITHM ++The average queue size is used for determining the marking ++probability. This is calculated using an Exponential Weighted Moving ++Average, which can be more or less sensitive to bursts. ++ ++When the average queue size is below ++.B min ++bytes, no packet will ever be marked. When it exceeds ++.B min, ++the probability of doing so climbs linearly up ++to ++.B probability, ++until the average queue size hits ++.B max ++bytes. Because ++.B probability ++is normally not set to 100%, the queue size might ++conceivably rise above ++.B max ++bytes, so the ++.B limit ++parameter is provided to set a hard maximum for the size of the queue. ++ ++.SH PARAMETERS ++.TP ++min ++Average queue size at which marking becomes a possibility. ++.TP ++max ++At this average queue size, the marking probability is maximal. Should be at ++least twice ++.B min ++to prevent synchronous retransmits, higher for low ++.B min. ++.TP ++probability ++Maximum probability for marking, specified as a floating point ++number from 0.0 to 1.0. Suggested values are 0.01 or 0.02 (1 or 2%, ++respectively). ++.TP ++limit ++Hard limit on the real (not average) queue size in bytes. Further packets ++are dropped. Should be set higher than max+burst. It is advised to set this ++a few times higher than ++.B max. ++.TP ++burst ++Used for determining how fast the average queue size is influenced by the ++real queue size. Larger values make the calculation more sluggish, allowing ++longer bursts of traffic before marking starts. Real life experiments ++support the following guideline: (min+min+max)/(3*avpkt). ++.TP ++avpkt ++Specified in bytes. Used with burst to determine the time constant for ++average queue size calculations. 1000 is a good value. ++.TP ++bandwidth ++This rate is used for calculating the average queue size after some ++idle time. Should be set to the bandwidth of your interface. Does not mean ++that RED will shape for you! Optional. ++.TP ++ecn ++As mentioned before, RED can either 'mark' or 'drop'. Explicit Congestion ++Notification allows RED to notify remote hosts that their rate exceeds the ++amount of bandwidth available. Non-ECN capable hosts can only be notified by ++dropping a packet. If this parameter is specified, packets which indicate ++that their hosts honor ECN will only be marked and not dropped, unless the ++queue size hits ++.B limit ++bytes. Needs a tc binary with RED support compiled in. Recommended. ++ ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH SOURCES ++.TP ++o ++Floyd, S., and Jacobson, V., Random Early Detection gateways for ++Congestion Avoidance. http://www.aciri.org/floyd/papers/red/red.html ++.TP ++o ++Some changes to the algorithm by Alexey N. Kuznetsov. ++ ++.SH AUTHORS ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>>, Alexey Makarenko ++<makar@phoenix.kharkov.ua <mailto:makar@phoenix.kharkov.ua>>, J Hadi Salim <hadi@nortelnetworks.com <mailto:hadi@nortelnetworks.com>>. ++This manpage maintained by bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-sfq.8 iproute2-gentoo/debian/tc-sfq.8 +--- iproute2/debian/tc-sfq.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-sfq.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,107 @@ ++.TH TC 8 "8 December 2001" "iproute2" "Linux" ++.SH NAME ++sfq \- Stochastic Fairness Queueing ++.SH SYNOPSIS ++.B tc qdisc ... perturb ++seconds ++.B quantum ++bytes ++ ++.SH DESCRIPTION ++ ++Stochastic Fairness Queueing is a classless queueing discipline available for ++traffic control with the ++.BR tc (8) ++command. ++ ++SFQ does not shape traffic but only schedules the transmission of packets, based on 'flows'. ++The goal is to ensure fairness so that each flow is able to send data in turn, thus preventing ++any single flow from drowning out the rest. ++ ++This may in fact have some effect in mitigating a Denial of Service attempt. ++ ++SFQ is work-conserving and therefore always delivers a packet if it has one available. ++.SH ALGORITHM ++On enqueueing, each packet is assigned to a hash bucket, based on ++.TP ++(i) ++Source address ++.TP ++(ii) ++Destination address ++.TP ++(iii) ++Source port ++.P ++If these are available. SFQ knows about ipv4 and ipv6 and also UDP, TCP and ESP. ++Packets with other protocols are hashed based on the 32bits representation of their ++destination and the socket they belong to. A flow corresponds mostly to a TCP/IP ++connection. ++ ++Each of these buckets should represent a unique flow. Because multiple flows may ++get hashed to the same bucket, the hashing algorithm is perturbed at configurable ++intervals so that the unfairness lasts only for a short while. Perturbation may ++however cause some inadvertent packet reordering to occur. ++ ++When dequeuing, each hashbucket with data is queried in a round robin fashion. ++ ++The compile time maximum length of the SFQ is 128 packets, which can be spread over ++at most 128 buckets of 1024 available. In case of overflow, tail-drop is performed ++on the fullest bucket, thus maintaining fairness. ++ ++.SH PARAMETERS ++.TP ++perturb ++Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that ++no perturbation occurs. Do not set too low for each perturbation may cause some packet ++reordering. Advised value: 10 ++.TP ++quantum ++Amount of bytes a flow is allowed to dequeue during a round of the round robin process. ++Defaults to the MTU of the interface which is also the advised value and the minimum value. ++ ++.SH EXAMPLE & USAGE ++ ++To attach to device ppp0: ++.P ++# tc qdisc add dev ppp0 root sfq perturb 10 ++.P ++Please note that SFQ, like all non-shaping (work-conserving) qdiscs, is only useful ++if it owns the queue. ++This is the case when the link speed equals the actually available bandwidth. This holds ++for regular phone modems, ISDN connections and direct non-switched ethernet links. ++.P ++Most often, cable modems and DSL devices do not fall into this category. The same holds ++for when connected to a switch and trying to send data to a congested segment also ++connected to the switch. ++.P ++In this case, the effective queue does not reside within Linux and is therefore not ++available for scheduling. ++.P ++Embed SFQ in a classful qdisc to make sure it owns the queue. ++ ++.SH SOURCE ++.TP ++o ++Paul E. McKenney "Stochastic Fairness Queuing", ++IEEE INFOCOMM'90 Proceedings, San Francisco, 1990. ++ ++.TP ++o ++Paul E. McKenney "Stochastic Fairness Queuing", ++"Interworking: Research and Experience", v.2, 1991, p.113-131. ++ ++.TP ++o ++See also: ++M. Shreedhar and George Varghese "Efficient Fair ++Queuing using Deficit Round Robin", Proc. SIGCOMM 95. ++ ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH AUTHOR ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>>. This manpage maintained by ++bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc-tbf.8 iproute2-gentoo/debian/tc-tbf.8 +--- iproute2/debian/tc-tbf.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc-tbf.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,138 @@ ++.TH TC 8 "13 December 2001" "iproute2" "Linux" ++.SH NAME ++tbf \- Token Bucket Filter ++.SH SYNOPSIS ++.B tc qdisc ... tbf rate ++rate ++.B burst ++bytes/cell ++.B ( latency ++ms ++.B | limit ++bytes ++.B ) [ mpu ++bytes ++.B [ peakrate ++rate ++.B mtu ++bytes/cell ++.B ] ] ++.P ++burst is also known as buffer and maxburst. mtu is also known as minburst. ++.SH DESCRIPTION ++ ++The Token Bucket Filter is a classless queueing discipline available for ++traffic control with the ++.BR tc (8) ++command. ++ ++TBF is a pure shaper and never schedules traffic. It is non-work-conserving and may throttle ++itself, although packets are available, to ensure that the configured rate is not exceeded. ++On all platforms except for Alpha, ++it is able to shape up to 1mbit/s of normal traffic with ideal minimal burstiness, ++sending out data exactly at the configured rates. ++ ++Much higher rates are possible but at the cost of losing the minimal burstiness. In that ++case, data is on average dequeued at the configured rate but may be sent much faster at millisecond ++timescales. Because of further queues living in network adaptors, this is often not a problem. ++ ++Kernels with a higher 'HZ' can achieve higher rates with perfect burstiness. On Alpha, HZ is ten ++times higher, leading to a 10mbit/s limit to perfection. These calculations hold for packets of on ++average 1000 bytes. ++ ++.SH ALGORITHM ++As the name implies, traffic is filtered based on the expenditure of ++.B tokens. ++Tokens roughly correspond to bytes, with the additional constraint that each packet consumes ++some tokens, no matter how small it is. This reflects the fact that even a zero-sized packet occupies ++the link for some time. ++ ++On creation, the TBF is stocked with tokens which correspond to the amount of traffic that can be burst ++in one go. Tokens arrive at a steady rate, until the bucket is full. ++ ++If no tokens are available, packets are queued, up to a configured limit. The TBF now ++calculates the token deficit, and throttles until the first packet in the queue can be sent. ++ ++If it is not acceptable to burst out packets at maximum speed, a peakrate can be configured ++to limit the speed at which the bucket empties. This peakrate is implemented as a second TBF ++with a very small bucket, so that it doesn't burst. ++ ++To achieve perfection, the second bucket may contain only a single packet, which leads to ++the earlier mentioned 1mbit/s limit. ++ ++This limit is caused by the fact that the kernel can only throttle for at minimum 1 'jiffy', which depends ++on HZ as 1/HZ. For perfect shaping, only a single packet can get sent per jiffy - for HZ=100, this means 100 ++packets of on average 1000 bytes each, which roughly corresponds to 1mbit/s. ++ ++.SH PARAMETERS ++See ++.BR tc (8) ++for how to specify the units of these values. ++.TP ++limit or latency ++Limit is the number of bytes that can be queued waiting for tokens to become ++available. You can also specify this the other way around by setting the ++latency parameter, which specifies the maximum amount of time a packet can ++sit in the TBF. The latter calculation takes into account the size of the ++bucket, the rate and possibly the peakrate (if set). These two parameters ++are mutually exclusive. ++.TP ++burst ++Also known as buffer or maxburst. ++Size of the bucket, in bytes. This is the maximum amount of bytes that tokens can be available for instantaneously. ++In general, larger shaping rates require a larger buffer. For 10mbit/s on Intel, you need at least 10kbyte buffer ++if you want to reach your configured rate! ++ ++If your buffer is too small, packets may be dropped because more tokens arrive per timer tick than fit in your bucket. ++The minimum buffer size can be calculated by dividing the rate by HZ. ++ ++Token usage calculations are performed using a table which by default has a resolution of 8 packets. ++This resolution can be changed by specifying the ++.B cell ++size with the burst. For example, to specify a 6000 byte buffer with a 16 ++byte cell size, set a burst of 6000/16. You will probably never have to set ++this. Must be an integral power of 2. ++.TP ++mpu ++A zero-sized packet does not use zero bandwidth. For ethernet, no packet uses less than 64 bytes. The Minimum Packet Unit ++determines the minimal token usage (specified in bytes) for a packet. Defaults to zero. ++.TP ++rate ++The speed knob. See remarks above about limits! See ++.BR tc (8) ++for units. ++.PP ++Furthermore, if a peakrate is desired, the following parameters are available: ++ ++.TP ++peakrate ++Maximum depletion rate of the bucket. Limited to 1mbit/s on Intel, 10mbit/s on Alpha. The peakrate does ++not need to be set, it is only necessary if perfect millisecond timescale shaping is required. ++ ++.TP ++mtu/minburst ++Specifies the size of the peakrate bucket. For perfect accuracy, should be set to the MTU of the interface. ++If a peakrate is needed, but some burstiness is acceptable, this size can be raised. A 3000 byte minburst ++allows around 3mbit/s of peakrate, given 1000 byte packets. ++ ++Like the regular burstsize you can also specify a ++.B cell ++size. ++.SH EXAMPLE & USAGE ++ ++To attach a TBF with a sustained maximum rate of 0.5mbit/s, a peakrate of 1.0mbit/s, ++a 5kilobyte buffer, with a pre-bucket queue size limit calculated so the TBF causes ++at most 70ms of latency, with perfect peakrate behaviour, issue: ++.P ++# tc qdisc add dev eth0 root tbf rate 0.5mbit \\ ++ burst 5kb latency 70ms peakrate 1mbit \\ ++ minburst 1540 ++ ++.SH SEE ALSO ++.BR tc (8) ++ ++.SH AUTHOR ++Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru <mailto:kuznet@ms2.inr.ac.ru>>. This manpage maintained by ++bert hubert <ahu@ds9a.nl <mailto:ahu@ds9a.nl>> ++ ++ +diff -urN iproute2/debian/tc.8 iproute2-gentoo/debian/tc.8 +--- iproute2/debian/tc.8 Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/debian/tc.8 Sun Aug 4 17:36:36 2002 +@@ -0,0 +1,348 @@ ++.TH TC 8 "16 December 2001" "iproute2" "Linux" ++.SH NAME ++tc \- show / manipulate traffic control settings ++.SH SYNOPSIS ++.B tc qdisc [ add | change | replace | link ] dev ++DEV ++.B ++[ parent ++qdisc-id ++.B | root ] ++.B [ handle ++qdisc-id ] qdisc ++[ qdisc specific parameters ] ++.P ++ ++.B tc class [ add | change | replace ] dev ++DEV ++.B parent ++qdisc-id ++.B [ classid ++class-id ] qdisc ++[ qdisc specific parameters ] ++.P ++ ++.B tc filter [ add | change | replace ] dev ++DEV ++.B [ parent ++qdisc-id ++.B | root ] protocol ++protocol ++.B prio ++priority filtertype ++[ filtertype specific parameters ] ++.B flowid ++flow-id ++ ++.B tc [-s | -d ] qdisc show [ dev ++DEV ++.B ] ++.P ++.B tc [-s | -d ] class show dev ++DEV ++.P ++.B tc filter show dev ++DEV ++ ++.SH DESCRIPTION ++.B Tc ++is used to configure Traffic Control in the Linux kernel. Traffic Control consists ++of the following: ++ ++.TP ++SHAPING ++When traffic is shaped, its rate of transmission is under control. Shaping may ++be more than lowering the available bandwidth - it is also used to smooth out ++bursts in traffic for better network behaviour. Shaping occurs on egress. ++ ++.TP ++SCHEDULING ++By scheduling the transmission of packets it is possible to improve interactivity ++for traffic that needs it while still guaranteeing bandwidth to bulk transfers. Reordering ++is also called prioritizing, and happens only on egress. ++ ++.TP ++POLICING ++Where shaping deals with transmission of traffic, policing pertains to traffic ++arriving. Policing thus occurs on ingress. ++ ++.TP ++DROPPING ++Traffic exceeding a set bandwidth may also be dropped forthwith, both on ++ingress and on egress. ++ ++.P ++Processing of traffic is controlled by three kinds of objects: qdiscs, ++classes and filters. ++ ++.SH QDISCS ++.B qdisc ++is short for 'queueing discipline' and it is elementary to ++understanding traffic control. Whenever the kernel needs to send a ++packet to an interface, it is ++.B enqueued ++to the qdisc configured for that interface. Immediately afterwards, the kernel ++tries to get as many packets as possible from the qdisc, for giving them ++to the network adaptor driver. ++ ++A simple QDISC is the 'pfifo' one, which does no processing at all and is a pure ++First In, First Out queue. It does however store traffic when the network interface ++can't handle it momentarily. ++ ++.SH CLASSES ++Some qdiscs can contain classes, which contain further qdiscs - traffic may ++then be enqueued in any of the inner qdiscs, which are within the ++.B classes. ++When the kernel tries to dequeue a packet from such a ++.B classful qdisc ++it can come from any of the classes. A qdisc may for example prioritize ++certain kinds of traffic by trying to dequeue from certain classes ++before others. ++ ++.SH FILTERS ++A ++.B filter ++is used by a classful qdisc to determine in which class a packet will ++be enqueued. Whenever traffic arrives at a class with subclasses, it needs ++to be classified. Various methods may be employed to do so, one of these ++are the filters. All filters attached to the class are called, until one of ++them returns with a verdict. If no verdict was made, other criteria may be ++available. This differs per qdisc. ++ ++It is important to notice that filters reside ++.B within ++qdiscs - they are not masters of what happens. ++ ++.SH CLASSLESS QDISCS ++The classless qdiscs are: ++.TP ++[p|b]fifo ++Simplest usable qdisc, pure First In, First Out behaviour. Limited in ++packets or in bytes. ++.TP ++pfifo_fast ++Standard qdisc for 'Advanced Router' enabled kernels. Consists of a three-band ++queue which honors Type of Service flags, as well as the priority that may be ++assigned to a packet. ++.TP ++red ++Random Early Detection simulates physical congestion by randomly dropping ++packets when nearing configured bandwidth allocation. Well suited to very ++large bandwidth applications. ++.TP ++sfq ++Stochastic Fairness Queueing reorders queued traffic so each 'session' ++gets to send a packet in turn. ++.TP ++tbf ++The Token Bucket Filter is suited for slowing traffic down to a precisely ++configured rate. Scales well to large bandwidths. ++.SH CONFIGURING CLASSLESS QDISCS ++In the absence of classful qdiscs, classless qdiscs can only be attached at ++the root of a device. Full syntax: ++.P ++.B tc qdisc add dev ++DEV ++.B root ++QDISC QDISC-PARAMETERS ++ ++To remove, issue ++.P ++.B tc qdisc del dev ++DEV ++.B root ++ ++The ++.B pfifo_fast ++qdisc is the automatic default in the absence of a configured qdisc. ++ ++.SH CLASSFUL QDISCS ++The classful qdiscs are: ++.TP ++CBQ ++Class Based Queueing implements a rich linksharing hierarchy of classes. ++It contains shaping elements as well as prioritizing capabilities. Shaping is ++performed using link idle time calculations based on average packet size and ++underlying link bandwidth. The latter may be ill-defined for some interfaces. ++.TP ++HTB ++The Hierarchy Token Bucket implements a rich linksharing hierarchy of ++classes with an emphasis on conforming to existing practices. HTB facilitates ++guaranteeing bandwidth to classes, while also allowing specification of upper ++limits to inter-class sharing. It contains shaping elements, based on TBF and ++can prioritize classes. ++.TP ++PRIO ++The PRIO qdisc is a non-shaping container for a configurable number of ++classes which are dequeued in order. This allows for easy prioritization ++of traffic, where lower classes are only able to send if higher ones have ++no packets available. To facilitate configuration, Type Of Service bits are ++honored by default. ++.SH THEORY OF OPERATION ++Classes form a tree, where each class has a single parent. ++A class may have multiple children. Some qdiscs allow for runtime addition ++of classes (CBQ, HTB) while others (PRIO) are created with a static number of ++children. ++ ++Qdiscs which allow dynamic addition of classes can have zero or more ++subclasses to which traffic may be enqueued. ++ ++Furthermore, each class contains a ++.B leaf qdisc ++which by default has ++.B pfifo ++behaviour though another qdisc can be attached in place. This qdisc may again ++contain classes, but each class can have only one leaf qdisc. ++ ++When a packet enters a classful qdisc it can be ++.B classified ++to one of the classes within. Three criteria are available, although not all ++qdiscs will use all three: ++.TP ++tc filters ++If tc filters are attached to a class, they are consulted first ++for relevant instructions. Filters can match on all fields of a packet header, ++as well as on the firewall mark applied by ipchains or iptables. See ++.BR tc-filters (8). ++.TP ++Type of Service ++Some qdiscs have built in rules for classifying packets based on the TOS field. ++.TP ++skb->priority ++Userspace programs can encode a class-id in the 'skb->priority' field using ++the SO_PRIORITY option. ++.P ++Each node within the tree can have its own filters but higher level filters ++may also point directly to lower classes. ++ ++If classification did not succeed, packets are enqueued to the leaf qdisc ++attached to that class. Check qdisc specific manpages for details, however. ++ ++.SH NAMING ++All qdiscs, classes and filters have IDs, which can either be specified ++or be automatically assigned. ++ ++IDs consist of a major number and a minor number, separated by a colon. ++ ++.TP ++QDISCS ++A qdisc, which potentially can have children, ++gets assigned a major number, called a 'handle', leaving the minor ++number namespace available for classes. The handle is expressed as '10:'. ++It is customary to explicitly assign a handle to qdiscs expected to have ++children. ++ ++.TP ++CLASSES ++Classes residing under a qdisc share their qdisc major number, but each have ++a separate minor number called a 'classid' that has no relation to their ++parent classes, only to their parent qdisc. The same naming custom as for ++qdiscs applies. ++ ++.TP ++FILTERS ++Filters have a three part ID, which is only needed when using a hashed ++filter hierarchy, for which see ++.BR tc-filters (8). ++.SH UNITS ++All parameters accept a floating point number, possibly followed by a unit. ++.P ++Bandwidths or rates can be specified in: ++.TP ++kbps ++Kilobytes per second ++.TP ++mbps ++Megabytes per second ++.TP ++kbit ++Kilobits per second ++.TP ++mbit ++Megabits per second ++.TP ++bps or a bare number ++Bits per second ++.P ++Amounts of data can be specified in: ++.TP ++kb or k ++Kilobytes ++.TP ++mb or m ++Megabytes ++.TP ++mbit ++Megabits ++.TP ++kbit ++Kilobits ++.TP ++b or a bare number ++Bytes. ++.P ++Lengths of time can be specified in: ++.TP ++s, sec or secs ++Whole seconds ++.TP ++ms, msec or msecs ++Milliseconds ++.TP ++us, usec, usecs or a bare number ++Microseconds. ++ ++.SH TC COMMANDS ++The following commands are available for qdiscs, classes and filter: ++.TP ++add ++Add a qdisc, class or filter to a node. For all entities, a ++.B parent ++must be passed, either by passing its ID or by attaching directly to the root of a device. ++When creating a qdisc or a filter, it can be named with the ++.B handle ++parameter. A class is named with the ++.B classid ++parameter. ++ ++.TP ++remove ++A qdisc can be removed by specifying its handle, which may also be 'root'. All subclasses and their leaf qdiscs ++are automatically deleted, as well as any filters attached to them. ++ ++.TP ++change ++Some entities can be modified 'in place'. Shares the syntax of 'add', with the exception ++that the handle cannot be changed and neither can the parent. In other words, ++.B ++change ++cannot move a node. ++ ++.TP ++replace ++Performs a nearly atomic remove/add on an existing node id. If the node does not exist yet ++it is created. ++ ++.TP ++link ++Only available for qdiscs and performs a replace where the node ++must exist already. ++ ++ ++.SH HISTORY ++.B tc ++was written by Alexey N. Kuznetsov and added in Linux 2.2. ++.SH SEE ALSO ++.BR tc-cbq (8), ++.BR tc-htb (8), ++.BR tc-sfq (8), ++.BR tc-red (8), ++.BR tc-tbf (8), ++.BR tc-pfifo (8), ++.BR tc-bfifo (8), ++.BR tc-pfifo_fast (8), ++.BR tc-filters (8) ++ ++.SH AUTHOR ++Manpage maintained by bert hubert (ahu@ds9a.nl <mailto:ahu@ds9a.nl>) ++ +diff -urN iproute2/doc/Makefile iproute2-gentoo/doc/Makefile +--- iproute2/doc/Makefile Sun Apr 16 11:42:46 2000 ++++ iproute2-gentoo/doc/Makefile Sun Aug 4 17:36:36 2002 +@@ -32,9 +32,7 @@ + done + + %.ps: %.dvi +- $(DVIPS) $< -o $@.tmp +- ./do-psnup $@.tmp $@ +- rm -f $@.tmp ++ $(DVIPS) $< -o $@ + + clean: + rm -f *.aux *.log *.toc $(PSFILES) $(DVIFILES) +diff -urN iproute2/include/linux/pkt_sched.h iproute2-gentoo/include/linux/pkt_sched.h +--- iproute2/include/linux/pkt_sched.h Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/include/linux/pkt_sched.h Sun Aug 4 18:55:12 2002 +@@ -0,0 +1,404 @@ ++#ifndef __LINUX_PKT_SCHED_H ++#define __LINUX_PKT_SCHED_H ++ ++/* Logical priority bands not depending on specific packet scheduler. ++ Every scheduler will map them to real traffic classes, if it has ++ no more precise mechanism to classify packets. ++ ++ These numbers have no special meaning, though their coincidence ++ with obsolete IPv6 values is not occasional :-). New IPv6 drafts ++ preferred full anarchy inspired by diffserv group. ++ ++ Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy ++ class, actually, as rule it will be handled with more care than ++ filler or even bulk. ++ */ ++ ++#define TC_PRIO_BESTEFFORT 0 ++#define TC_PRIO_FILLER 1 ++#define TC_PRIO_BULK 2 ++#define TC_PRIO_INTERACTIVE_BULK 4 ++#define TC_PRIO_INTERACTIVE 6 ++#define TC_PRIO_CONTROL 7 ++ ++#define TC_PRIO_MAX 15 ++ ++/* Generic queue statistics, available for all the elements. ++ Particular schedulers may have also their private records. ++ */ ++ ++struct tc_stats ++{ ++ __u64 bytes; /* NUmber of enqueues bytes */ ++ __u32 packets; /* Number of enqueued packets */ ++ __u32 drops; /* Packets dropped because of lack of resources */ ++ __u32 overlimits; /* Number of throttle events when this ++ * flow goes out of allocated bandwidth */ ++ __u32 bps; /* Current flow byte rate */ ++ __u32 pps; /* Current flow packet rate */ ++ __u32 qlen; ++ __u32 backlog; ++#ifdef __KERNEL__ ++ spinlock_t *lock; ++#endif ++}; ++ ++struct tc_estimator ++{ ++ char interval; ++ unsigned char ewma_log; ++}; ++ ++/* "Handles" ++ --------- ++ ++ All the traffic control objects have 32bit identifiers, or "handles". ++ ++ They can be considered as opaque numbers from user API viewpoint, ++ but actually they always consist of two fields: major and ++ minor numbers, which are interpreted by kernel specially, ++ that may be used by applications, though not recommended. ++ ++ F.e. qdisc handles always have minor number equal to zero, ++ classes (or flows) have major equal to parent qdisc major, and ++ minor uniquely identifying class inside qdisc. ++ ++ Macros to manipulate handles: ++ */ ++ ++#define TC_H_MAJ_MASK (0xFFFF0000U) ++#define TC_H_MIN_MASK (0x0000FFFFU) ++#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) ++#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) ++#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) ++ ++#define TC_H_UNSPEC (0U) ++#define TC_H_ROOT (0xFFFFFFFFU) ++#define TC_H_INGRESS (0xFFFFFFF1U) ++ ++struct tc_ratespec ++{ ++ unsigned char cell_log; ++ unsigned char __reserved; ++ unsigned short feature; ++ short addend; ++ unsigned short mpu; ++ __u32 rate; ++}; ++ ++/* FIFO section */ ++ ++struct tc_fifo_qopt ++{ ++ __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ ++}; ++ ++/* PRIO section */ ++ ++#define TCQ_PRIO_BANDS 16 ++ ++struct tc_prio_qopt ++{ ++ int bands; /* Number of bands */ ++ __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ ++}; ++ ++/* CSZ section */ ++ ++struct tc_csz_qopt ++{ ++ int flows; /* Maximal number of guaranteed flows */ ++ unsigned char R_log; /* Fixed point position for round number */ ++ unsigned char delta_log; /* Log of maximal managed time interval */ ++ __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> CSZ band */ ++}; ++ ++struct tc_csz_copt ++{ ++ struct tc_ratespec slice; ++ struct tc_ratespec rate; ++ struct tc_ratespec peakrate; ++ __u32 limit; ++ __u32 buffer; ++ __u32 mtu; ++}; ++ ++enum ++{ ++ TCA_CSZ_UNSPEC, ++ TCA_CSZ_PARMS, ++ TCA_CSZ_RTAB, ++ TCA_CSZ_PTAB, ++}; ++ ++/* TBF section */ ++ ++struct tc_tbf_qopt ++{ ++ struct tc_ratespec rate; ++ struct tc_ratespec peakrate; ++ __u32 limit; ++ __u32 buffer; ++ __u32 mtu; ++}; ++ ++enum ++{ ++ TCA_TBF_UNSPEC, ++ TCA_TBF_PARMS, ++ TCA_TBF_RTAB, ++ TCA_TBF_PTAB, ++}; ++ ++ ++/* TEQL section */ ++ ++/* TEQL does not require any parameters */ ++ ++/* SFQ section */ ++ ++struct tc_sfq_qopt ++{ ++ unsigned quantum; /* Bytes per round allocated to flow */ ++ int perturb_period; /* Period of hash perturbation */ ++ __u32 limit; /* Maximal packets in queue */ ++ unsigned divisor; /* Hash divisor */ ++ unsigned flows; /* Maximal number of flows */ ++}; ++ ++/* ++ * NOTE: limit, divisor and flows are hardwired to code at the moment. ++ * ++ * limit=flows=128, divisor=1024; ++ * ++ * The only reason for this is efficiency, it is possible ++ * to change these parameters in compile time. ++ */ ++ ++/* RED section */ ++ ++enum ++{ ++ TCA_RED_UNSPEC, ++ TCA_RED_PARMS, ++ TCA_RED_STAB, ++}; ++ ++struct tc_red_qopt ++{ ++ __u32 limit; /* HARD maximal queue length (bytes) */ ++ __u32 qth_min; /* Min average length threshold (bytes) */ ++ __u32 qth_max; /* Max average length threshold (bytes) */ ++ unsigned char Wlog; /* log(W) */ ++ unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ ++ unsigned char Scell_log; /* cell size for idle damping */ ++ unsigned char flags; ++#define TC_RED_ECN 1 ++}; ++ ++struct tc_red_xstats ++{ ++ __u32 early; /* Early drops */ ++ __u32 pdrop; /* Drops due to queue limits */ ++ __u32 other; /* Drops due to drop() calls */ ++ __u32 marked; /* Marked packets */ ++}; ++ ++/* GRED section */ ++ ++#define MAX_DPs 16 ++ ++enum ++{ ++ TCA_GRED_UNSPEC, ++ TCA_GRED_PARMS, ++ TCA_GRED_STAB, ++ TCA_GRED_DPS, ++}; ++ ++#define TCA_SET_OFF TCA_GRED_PARMS ++struct tc_gred_qopt ++{ ++ __u32 limit; /* HARD maximal queue length (bytes) ++*/ ++ __u32 qth_min; /* Min average length threshold (bytes) ++*/ ++ __u32 qth_max; /* Max average length threshold (bytes) ++*/ ++ __u32 DP; /* upto 2^32 DPs */ ++ __u32 backlog; ++ __u32 qave; ++ __u32 forced; ++ __u32 early; ++ __u32 other; ++ __u32 pdrop; ++ ++ unsigned char Wlog; /* log(W) */ ++ unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ ++ unsigned char Scell_log; /* cell size for idle damping */ ++ __u8 prio; /* prio of this VQ */ ++ __u32 packets; ++ __u32 bytesin; ++}; ++/* gred setup */ ++struct tc_gred_sopt ++{ ++ __u32 DPs; ++ __u32 def_DP; ++ __u8 grio; ++}; ++ ++/* HTB section */ ++#define TC_HTB_NUMPRIO 8 ++#define TC_HTB_MAXDEPTH 8 ++#define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ ++ ++struct tc_htb_opt ++{ ++ struct tc_ratespec rate; ++ struct tc_ratespec ceil; ++ __u32 buffer; ++ __u32 cbuffer; ++ __u32 quantum; ++ __u32 level; /* out only */ ++ __u32 prio; ++}; ++struct tc_htb_glob ++{ ++ __u32 version; /* to match HTB/TC */ ++ __u32 rate2quantum; /* bps->quantum divisor */ ++ __u32 defcls; /* default class number */ ++ __u32 debug; /* debug flags */ ++ ++ /* stats */ ++ __u32 direct_pkts; /* count of non shapped packets */ ++}; ++enum ++{ ++ TCA_HTB_UNSPEC, ++ TCA_HTB_PARMS, ++ TCA_HTB_INIT, ++ TCA_HTB_CTAB, ++ TCA_HTB_RTAB, ++}; ++struct tc_htb_xstats ++{ ++ __u32 lends; ++ __u32 borrows; ++ __u32 giants; /* too big packets (rate will not be accurate) */ ++ __u32 tokens; ++ __u32 ctokens; ++}; ++ ++/* CBQ section */ ++ ++#define TC_CBQ_MAXPRIO 8 ++#define TC_CBQ_MAXLEVEL 8 ++#define TC_CBQ_DEF_EWMA 5 ++ ++struct tc_cbq_lssopt ++{ ++ unsigned char change; ++ unsigned char flags; ++#define TCF_CBQ_LSS_BOUNDED 1 ++#define TCF_CBQ_LSS_ISOLATED 2 ++ unsigned char ewma_log; ++ unsigned char level; ++#define TCF_CBQ_LSS_FLAGS 1 ++#define TCF_CBQ_LSS_EWMA 2 ++#define TCF_CBQ_LSS_MAXIDLE 4 ++#define TCF_CBQ_LSS_MINIDLE 8 ++#define TCF_CBQ_LSS_OFFTIME 0x10 ++#define TCF_CBQ_LSS_AVPKT 0x20 ++ __u32 maxidle; ++ __u32 minidle; ++ __u32 offtime; ++ __u32 avpkt; ++}; ++ ++struct tc_cbq_wrropt ++{ ++ unsigned char flags; ++ unsigned char priority; ++ unsigned char cpriority; ++ unsigned char __reserved; ++ __u32 allot; ++ __u32 weight; ++}; ++ ++struct tc_cbq_ovl ++{ ++ unsigned char strategy; ++#define TC_CBQ_OVL_CLASSIC 0 ++#define TC_CBQ_OVL_DELAY 1 ++#define TC_CBQ_OVL_LOWPRIO 2 ++#define TC_CBQ_OVL_DROP 3 ++#define TC_CBQ_OVL_RCLASSIC 4 ++ unsigned char priority2; ++ __u32 penalty; ++}; ++ ++struct tc_cbq_police ++{ ++ unsigned char police; ++ unsigned char __res1; ++ unsigned short __res2; ++}; ++ ++struct tc_cbq_fopt ++{ ++ __u32 split; ++ __u32 defmap; ++ __u32 defchange; ++}; ++ ++struct tc_cbq_xstats ++{ ++ __u32 borrows; ++ __u32 overactions; ++ __s32 avgidle; ++ __s32 undertime; ++}; ++ ++enum ++{ ++ TCA_CBQ_UNSPEC, ++ TCA_CBQ_LSSOPT, ++ TCA_CBQ_WRROPT, ++ TCA_CBQ_FOPT, ++ TCA_CBQ_OVL_STRATEGY, ++ TCA_CBQ_RATE, ++ TCA_CBQ_RTAB, ++ TCA_CBQ_POLICE, ++}; ++ ++#define TCA_CBQ_MAX TCA_CBQ_POLICE ++ ++/* dsmark section */ ++ ++enum { ++ TCA_DSMARK_UNSPEC, ++ TCA_DSMARK_INDICES, ++ TCA_DSMARK_DEFAULT_INDEX, ++ TCA_DSMARK_SET_TC_INDEX, ++ TCA_DSMARK_MASK, ++ TCA_DSMARK_VALUE ++}; ++ ++#define TCA_DSMARK_MAX TCA_DSMARK_VALUE ++ ++/* ATM section */ ++ ++enum { ++ TCA_ATM_UNSPEC, ++ TCA_ATM_FD, /* file/socket descriptor */ ++ TCA_ATM_PTR, /* pointer to descriptor - later */ ++ TCA_ATM_HDR, /* LL header */ ++ TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ ++ TCA_ATM_ADDR, /* PVC address (for output only) */ ++ TCA_ATM_STATE /* VC state (ATM_VS_*; for output only) */ ++}; ++ ++#define TCA_ATM_MAX TCA_ATM_STATE ++ ++#endif +diff -urN iproute2/include/utils.h iproute2-gentoo/include/utils.h +--- iproute2/include/utils.h Sun Apr 16 11:42:50 2000 ++++ iproute2-gentoo/include/utils.h Sun Aug 4 17:36:36 2002 +@@ -2,8 +2,6 @@ + #define __UTILS_H__ 1 + + #include <asm/types.h> +-#include <asm/bitops.h> +-#include <linux/inetdevice.h> + #include <resolv.h> + + #include "libnetlink.h" +Binary files iproute2/ip/ip and iproute2-gentoo/ip/ip differ +Binary files iproute2/ip/ip.o and iproute2-gentoo/ip/ip.o differ +Binary files iproute2/ip/ipaddress.o and iproute2-gentoo/ip/ipaddress.o differ +Binary files iproute2/ip/iplink.o and iproute2-gentoo/ip/iplink.o differ +Binary files iproute2/ip/ipmaddr.o and iproute2-gentoo/ip/ipmaddr.o differ +Binary files iproute2/ip/ipmonitor.o and iproute2-gentoo/ip/ipmonitor.o differ +Binary files iproute2/ip/ipmroute.o and iproute2-gentoo/ip/ipmroute.o differ +Binary files iproute2/ip/ipneigh.o and iproute2-gentoo/ip/ipneigh.o differ +diff -urN iproute2/ip/iproute.c iproute2-gentoo/ip/iproute.c +--- iproute2/ip/iproute.c Sun Aug 5 18:31:52 2001 ++++ iproute2-gentoo/ip/iproute.c Sun Aug 4 17:36:36 2002 +@@ -620,6 +620,8 @@ + } + rtnh->rtnh_len = sizeof(*rtnh); + rtnh->rtnh_ifindex = 0; ++ rtnh->rtnh_flags = 0; ++ rtnh->rtnh_hops = 0; + rta->rta_len += rtnh->rtnh_len; + parse_one_nh(rta, rtnh, &argc, &argv); + rtnh = RTNH_NEXT(rtnh); +Binary files iproute2/ip/iproute.o and iproute2-gentoo/ip/iproute.o differ +Binary files iproute2/ip/iprule.o and iproute2-gentoo/ip/iprule.o differ +Binary files iproute2/ip/iptunnel.o and iproute2-gentoo/ip/iptunnel.o differ +Binary files iproute2/ip/rtacct and iproute2-gentoo/ip/rtacct differ +Binary files iproute2/ip/rtacct.o and iproute2-gentoo/ip/rtacct.o differ +Binary files iproute2/ip/rtm_map.o and iproute2-gentoo/ip/rtm_map.o differ +Binary files iproute2/ip/rtmon and iproute2-gentoo/ip/rtmon differ +Binary files iproute2/ip/rtmon.o and iproute2-gentoo/ip/rtmon.o differ +Binary files iproute2/lib/dnet_ntop.o and iproute2-gentoo/lib/dnet_ntop.o differ +Binary files iproute2/lib/dnet_pton.o and iproute2-gentoo/lib/dnet_pton.o differ +Binary files iproute2/lib/inet_proto.o and iproute2-gentoo/lib/inet_proto.o differ +Binary files iproute2/lib/ipx_ntop.o and iproute2-gentoo/lib/ipx_ntop.o differ +Binary files iproute2/lib/ipx_pton.o and iproute2-gentoo/lib/ipx_pton.o differ +Binary files iproute2/lib/libnetlink.a and iproute2-gentoo/lib/libnetlink.a differ +Binary files iproute2/lib/libnetlink.o and iproute2-gentoo/lib/libnetlink.o differ +Binary files iproute2/lib/libutil.a and iproute2-gentoo/lib/libutil.a differ +Binary files iproute2/lib/ll_addr.o and iproute2-gentoo/lib/ll_addr.o differ +Binary files iproute2/lib/ll_map.o and iproute2-gentoo/lib/ll_map.o differ +diff -urN iproute2/lib/ll_proto.c iproute2-gentoo/lib/ll_proto.c +--- iproute2/lib/ll_proto.c Wed Aug 1 20:41:41 2001 ++++ iproute2-gentoo/lib/ll_proto.c Sun Aug 4 17:36:36 2002 +@@ -34,13 +34,19 @@ + } llproto_names[] = { + __PF(LOOP,loop) + __PF(PUP,pup) ++#ifdef ETH_P_PUPAT + __PF(PUPAT,pupat) ++#endif + __PF(IP,ip) + __PF(X25,x25) + __PF(ARP,arp) + __PF(BPQ,bpq) ++#ifdef ETH_P_IEEEPUP + __PF(IEEEPUP,ieeepup) ++#endif ++#ifdef ETH_P_IEEEPUPAT + __PF(IEEEPUPAT,ieeepupat) ++#endif + __PF(DEC,dec) + __PF(DNA_DL,dna_dl) + __PF(DNA_RC,dna_rc) +Binary files iproute2/lib/ll_proto.o and iproute2-gentoo/lib/ll_proto.o differ +diff -urN iproute2/lib/ll_types.c iproute2-gentoo/lib/ll_types.c +--- iproute2/lib/ll_types.c Wed Aug 1 21:18:33 2001 ++++ iproute2-gentoo/lib/ll_types.c Sun Aug 4 17:36:36 2002 +@@ -47,7 +47,9 @@ + __PF(DLCI,dlci) + __PF(ATM,atm) + __PF(METRICOM,metricom) ++#ifdef ARPHRD_IEEE1394 + __PF(IEEE1394,ieee1394) ++#endif + + __PF(SLIP,slip) + __PF(CSLIP,cslip) +@@ -99,7 +101,9 @@ + #ifdef ARPHRD_IEEE802_TR + __PF(IEEE802_TR,tr) + #endif ++#ifdef ARPHRD_IEEE80211 + __PF(IEEE80211,ieee802.11) ++#endif + #ifdef ARPHRD_VOID + __PF(VOID,void) + #endif +Binary files iproute2/lib/ll_types.o and iproute2-gentoo/lib/ll_types.o differ +Binary files iproute2/lib/rt_names.o and iproute2-gentoo/lib/rt_names.o differ +Binary files iproute2/lib/utils.o and iproute2-gentoo/lib/utils.o differ +diff -urN iproute2/tc/Makefile iproute2-gentoo/tc/Makefile +--- iproute2/tc/Makefile Sun Apr 16 11:42:53 2000 ++++ iproute2-gentoo/tc/Makefile Sun Aug 4 17:37:00 2002 +@@ -25,6 +25,7 @@ + endif + + #TCMODULES += q_csz.o ++TCMODULES += q_htb.o + #TCMODULES += q_hpfq.o + #TCMODULES += q_hfsc.o + +Binary files iproute2/tc/f_fw.o and iproute2-gentoo/tc/f_fw.o differ +Binary files iproute2/tc/f_route.o and iproute2-gentoo/tc/f_route.o differ +Binary files iproute2/tc/f_rsvp.o and iproute2-gentoo/tc/f_rsvp.o differ +Binary files iproute2/tc/f_tcindex.o and iproute2-gentoo/tc/f_tcindex.o differ +Binary files iproute2/tc/f_u32.o and iproute2-gentoo/tc/f_u32.o differ +Binary files iproute2/tc/libtc.a and iproute2-gentoo/tc/libtc.a differ +Binary files iproute2/tc/m_estimator.o and iproute2-gentoo/tc/m_estimator.o differ +Binary files iproute2/tc/m_police.o and iproute2-gentoo/tc/m_police.o differ +Binary files iproute2/tc/q_cbq.o and iproute2-gentoo/tc/q_cbq.o differ +Binary files iproute2/tc/q_dsmark.o and iproute2-gentoo/tc/q_dsmark.o differ +Binary files iproute2/tc/q_fifo.o and iproute2-gentoo/tc/q_fifo.o differ +Binary files iproute2/tc/q_gred.o and iproute2-gentoo/tc/q_gred.o differ +diff -urN iproute2/tc/q_htb.c iproute2-gentoo/tc/q_htb.c +--- iproute2/tc/q_htb.c Wed Dec 31 17:00:00 1969 ++++ iproute2-gentoo/tc/q_htb.c Sun Aug 4 18:47:28 2002 +@@ -0,0 +1,303 @@ ++/* ++ * q_htb.c HTB. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Authors: Martin Devera, devik@cdi.cz ++ * ++ */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <syslog.h> ++#include <fcntl.h> ++#include <sys/socket.h> ++#include <netinet/in.h> ++#include <arpa/inet.h> ++#include <string.h> ++ ++#include "utils.h" ++#include "tc_util.h" ++ ++#define HTB_TC_VER 0x30003 ++ ++static void explain(void) ++{ ++ fprintf(stderr, "Usage: ... qdisc add ... htb [default N] [r2q N]\n" ++ " default minor id of class to which unclassified packets are sent {0}\n" ++ " r2q DRR quantums are computed as rate in Bps/r2q {10}\n" ++ " debug string of 16 numbers each 0-3 {0}\n\n" ++ "... class add ... htb rate R1 burst B1 [prio P] [slot S] [pslot PS]\n" ++ " [ceil R2] [cburst B2] [mtu MTU] [quantum Q]\n" ++ " rate rate allocated to this class (class can still borrow)\n" ++ " burst max bytes burst which can be accumulated during idle period {computed}\n" ++ " ceil definite upper class rate (no borrows) {rate}\n" ++ " cburst burst but for ceil {computed}\n" ++ " mtu max packet size we create rate map for {1600}\n" ++ " prio priority of leaf; lower are served first {0}\n" ++ " quantum how much bytes to serve from leaf at once {use r2q}\n" ++ "\nTC HTB version %d.%d\n",HTB_TC_VER>>16,HTB_TC_VER&0xffff ++ ); ++} ++ ++static void explain1(char *arg) ++{ ++ fprintf(stderr, "Illegal \"%s\"\n", arg); ++ explain(); ++} ++ ++ ++#define usage() return(-1) ++ ++static int htb_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) ++{ ++ struct tc_htb_glob opt; ++ struct rtattr *tail; ++ unsigned i; char *p; ++ memset(&opt,0,sizeof(opt)); ++ opt.rate2quantum = 10; ++ opt.version = 3; ++ ++ while (argc > 0) { ++ if (matches(*argv, "r2q") == 0) { ++ NEXT_ARG(); ++ if (get_u32(&opt.rate2quantum, *argv, 10)) { ++ explain1("r2q"); return -1; ++ } ++ } else if (matches(*argv, "default") == 0) { ++ NEXT_ARG(); ++ if (get_u32(&opt.defcls, *argv, 16)) { ++ explain1("default"); return -1; ++ } ++ } else if (matches(*argv, "debug") == 0) { ++ NEXT_ARG(); p = *argv; ++ for (i=0; i<16; i++,p++) { ++ if (*p<'0' || *p>'3') break; ++ opt.debug |= (*p-'0')<<(2*i); ++ } ++ } else { ++ fprintf(stderr, "What is \"%s\"?\n", *argv); ++ explain(); ++ return -1; ++ } ++ argc--; argv++; ++ } ++ tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len)); ++ addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); ++ addattr_l(n, 2024, TCA_HTB_INIT, &opt, NLMSG_ALIGN(sizeof(opt))); ++ tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail; ++ return 0; ++} ++ ++static int htb_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) ++{ ++ int ok=0; ++ struct tc_htb_opt opt; ++ __u32 rtab[256],ctab[256]; ++ unsigned buffer=0,cbuffer=0; ++ int cell_log=-1,ccell_log = -1,mtu; ++ struct rtattr *tail; ++ ++ memset(&opt, 0, sizeof(opt)); mtu = 1600; /* eth packet len */ ++ ++ while (argc > 0) { ++ if (matches(*argv, "prio") == 0) { ++ NEXT_ARG(); ++ if (get_u32(&opt.prio, *argv, 10)) { ++ explain1("prio"); return -1; ++ } ++ ok++; ++ } else if (matches(*argv, "mtu") == 0) { ++ NEXT_ARG(); ++ if (get_u32(&mtu, *argv, 10)) { ++ explain1("mtu"); return -1; ++ } ++ } else if (matches(*argv, "quantum") == 0) { ++ NEXT_ARG(); ++ if (get_u32(&opt.quantum, *argv, 10)) { ++ explain1("quantum"); return -1; ++ } ++ } else if (matches(*argv, "burst") == 0 || ++ strcmp(*argv, "buffer") == 0 || ++ strcmp(*argv, "maxburst") == 0) { ++ NEXT_ARG(); ++ if (get_size_and_cell(&buffer, &cell_log, *argv) < 0) { ++ explain1("buffer"); ++ return -1; ++ } ++ ok++; ++ } else if (matches(*argv, "cburst") == 0 || ++ strcmp(*argv, "cbuffer") == 0 || ++ strcmp(*argv, "cmaxburst") == 0) { ++ NEXT_ARG(); ++ if (get_size_and_cell(&cbuffer, &ccell_log, *argv) < 0) { ++ explain1("cbuffer"); ++ return -1; ++ } ++ ok++; ++ } else if (strcmp(*argv, "ceil") == 0) { ++ NEXT_ARG(); ++ if (opt.ceil.rate) { ++ fprintf(stderr, "Double \"ceil\" spec\n"); ++ return -1; ++ } ++ if (get_rate(&opt.ceil.rate, *argv)) { ++ explain1("ceil"); ++ return -1; ++ } ++ ok++; ++ } else if (strcmp(*argv, "rate") == 0) { ++ NEXT_ARG(); ++ if (opt.rate.rate) { ++ fprintf(stderr, "Double \"rate\" spec\n"); ++ return -1; ++ } ++ if (get_rate(&opt.rate.rate, *argv)) { ++ explain1("rate"); ++ return -1; ++ } ++ ok++; ++ } else if (strcmp(*argv, "help") == 0) { ++ explain(); ++ return -1; ++ } else { ++ fprintf(stderr, "What is \"%s\"?\n", *argv); ++ explain(); ++ return -1; ++ } ++ argc--; argv++; ++ } ++ ++/* if (!ok) ++ return 0;*/ ++ ++ if (opt.rate.rate == 0) { ++ fprintf(stderr, "\"rate\" is required.\n"); ++ return -1; ++ } ++ /* if ceil params are missing, use the same as rate */ ++ if (!opt.ceil.rate) opt.ceil = opt.rate; ++ ++ /* compute minimal allowed burst from rate; mtu is added here to make ++ sute that buffer is larger than mtu and to have some safeguard space */ ++ if (!buffer) buffer = opt.rate.rate / HZ + mtu; ++ if (!cbuffer) cbuffer = opt.ceil.rate / HZ + mtu; ++ ++ if ((cell_log = tc_calc_rtable(opt.rate.rate, rtab, cell_log, mtu, 0)) < 0) { ++ fprintf(stderr, "htb: failed to calculate rate table.\n"); ++ return -1; ++ } ++ opt.buffer = tc_calc_xmittime(opt.rate.rate, buffer); ++ opt.rate.cell_log = cell_log; ++ ++ if ((ccell_log = tc_calc_rtable(opt.ceil.rate, ctab, cell_log, mtu, 0)) < 0) { ++ fprintf(stderr, "htb: failed to calculate ceil rate table.\n"); ++ return -1; ++ } ++ opt.cbuffer = tc_calc_xmittime(opt.ceil.rate, cbuffer); ++ opt.ceil.cell_log = ccell_log; ++ ++ tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len)); ++ addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); ++ addattr_l(n, 2024, TCA_HTB_PARMS, &opt, sizeof(opt)); ++ addattr_l(n, 3024, TCA_HTB_RTAB, rtab, 1024); ++ addattr_l(n, 4024, TCA_HTB_CTAB, ctab, 1024); ++ tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail; ++ return 0; ++} ++ ++static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt) ++{ ++ struct rtattr *tb[TCA_HTB_RTAB+1]; ++ struct tc_htb_opt *hopt; ++ struct tc_htb_glob *gopt; ++ double buffer,cbuffer; ++ SPRINT_BUF(b1); ++ SPRINT_BUF(b2); ++ ++ if (opt == NULL) ++ return 0; ++ ++ memset(tb, 0, sizeof(tb)); ++ parse_rtattr(tb, TCA_HTB_RTAB, RTA_DATA(opt), RTA_PAYLOAD(opt)); ++ ++ if (tb[TCA_HTB_PARMS]) { ++ ++ hopt = RTA_DATA(tb[TCA_HTB_PARMS]); ++ if (RTA_PAYLOAD(tb[TCA_HTB_PARMS]) < sizeof(*hopt)) return -1; ++ ++ if (!hopt->level) { ++ fprintf(f, "prio %d ", (int)hopt->prio); ++ if (show_details) ++ fprintf(f, "quantum %d ", (int)hopt->quantum); ++ } ++ fprintf(f, "rate %s ", sprint_rate(hopt->rate.rate, b1)); ++ buffer = ((double)hopt->rate.rate*tc_core_tick2usec(hopt->buffer))/1000000; ++ fprintf(f, "ceil %s ", sprint_rate(hopt->ceil.rate, b1)); ++ cbuffer = ((double)hopt->ceil.rate*tc_core_tick2usec(hopt->cbuffer))/1000000; ++ if (show_details) { ++ fprintf(f, "burst %s/%u mpu %s ", sprint_size(buffer, b1), ++ 1<<hopt->rate.cell_log, sprint_size(hopt->rate.mpu, b2)); ++ fprintf(f, "cburst %s/%u mpu %s ", sprint_size(cbuffer, b1), ++ 1<<hopt->ceil.cell_log, sprint_size(hopt->ceil.mpu, b2)); ++ fprintf(f, "level %d ", (int)hopt->level); ++ } else { ++ fprintf(f, "burst %s ", sprint_size(buffer, b1)); ++ fprintf(f, "cburst %s ", sprint_size(cbuffer, b1)); ++ } ++ if (show_raw) ++ fprintf(f, "buffer [%08x] cbuffer [%08x] ", ++ hopt->buffer,hopt->cbuffer); ++ } ++ if (tb[TCA_HTB_INIT]) { ++ gopt = RTA_DATA(tb[TCA_HTB_INIT]); ++ if (RTA_PAYLOAD(tb[TCA_HTB_INIT]) < sizeof(*gopt)) return -1; ++ ++ fprintf(f, "r2q %d default %x direct_packets_stat %u", ++ gopt->rate2quantum,gopt->defcls,gopt->direct_pkts); ++ if (show_details) ++ fprintf(f," ver %d.%d",gopt->version >> 16,gopt->version & 0xffff); ++ } ++ return 0; ++} ++ ++static int htb_print_xstats(struct qdisc_util *qu, FILE *f, struct rtattr *xstats) ++{ ++ struct tc_htb_xstats *st; ++ if (xstats == NULL) ++ return 0; ++ ++ if (RTA_PAYLOAD(xstats) < sizeof(*st)) ++ return -1; ++ ++ st = RTA_DATA(xstats); ++ fprintf(f, " lended: %u borrowed: %u giants: %u\n", ++ st->lends,st->borrows,st->giants); ++ fprintf(f, " tokens: %d ctokens: %d\n", st->tokens,st->ctokens); ++ return 0; ++} ++ ++struct qdisc_util htb_util = { ++ NULL, ++ "htb", ++ htb_parse_opt, ++ htb_print_opt, ++ htb_print_xstats, ++ htb_parse_class_opt, ++ htb_print_opt, ++}; ++ ++/* for testing of old one */ ++struct qdisc_util htb2_util = { ++ NULL, ++ "htb2", ++ htb_parse_opt, ++ htb_print_opt, ++ htb_print_xstats, ++ htb_parse_class_opt, ++ htb_print_opt, ++}; +Binary files iproute2/tc/q_ingress.o and iproute2-gentoo/tc/q_ingress.o differ +Binary files iproute2/tc/q_prio.o and iproute2-gentoo/tc/q_prio.o differ +Binary files iproute2/tc/q_red.o and iproute2-gentoo/tc/q_red.o differ +Binary files iproute2/tc/q_sfq.o and iproute2-gentoo/tc/q_sfq.o differ +Binary files iproute2/tc/q_tbf.o and iproute2-gentoo/tc/q_tbf.o differ +Binary files iproute2/tc/tc.o and iproute2-gentoo/tc/tc.o differ +Binary files iproute2/tc/tc_cbq.o and iproute2-gentoo/tc/tc_cbq.o differ +Binary files iproute2/tc/tc_class.o and iproute2-gentoo/tc/tc_class.o differ +Binary files iproute2/tc/tc_core.o and iproute2-gentoo/tc/tc_core.o differ +Binary files iproute2/tc/tc_estimator.o and iproute2-gentoo/tc/tc_estimator.o differ +Binary files iproute2/tc/tc_filter.o and iproute2-gentoo/tc/tc_filter.o differ +diff -urN iproute2/tc/tc_qdisc.c iproute2-gentoo/tc/tc_qdisc.c +--- iproute2/tc/tc_qdisc.c Fri Aug 24 11:19:19 2001 ++++ iproute2-gentoo/tc/tc_qdisc.c Sun Aug 4 17:36:36 2002 +@@ -251,7 +251,7 @@ + q->print_xstats(q, fp, tb[TCA_XSTATS]); + fprintf(fp, "\n"); + } +- fprintf(fp, "\n "); ++ fprintf(fp, "\n"); + } + fflush(fp); + return 0; +Binary files iproute2/tc/tc_qdisc.o and iproute2-gentoo/tc/tc_qdisc.o differ +Binary files iproute2/tc/tc_red.o and iproute2-gentoo/tc/tc_red.o differ +Binary files iproute2/tc/tc_util.o and iproute2-gentoo/tc/tc_util.o differ diff --git a/sys-apps/iproute/iproute-20010824-r1.ebuild b/sys-apps/iproute/iproute-20010824-r1.ebuild new file mode 100644 index 000000000000..3cfdf666cd9c --- /dev/null +++ b/sys-apps/iproute/iproute-20010824-r1.ebuild @@ -0,0 +1,66 @@ +# Copyright 1999-2002 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/iproute/iproute-20010824-r1.ebuild,v 1.1 2002/08/05 01:13:04 drobbins Exp $ + +S=${WORKDIR}/iproute2 +DESCRIPTION="Kernel 2.4 routing and traffic control utilities" +SRC_URI="ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.4.7-now-ss010824.tar.gz" +HOMEPAGE="" +KEYWORDS="x86" +SLOT="0" +DEPEND="virtual/glibc virtual/linux-sources" +LICENSE="GPL-2" + +pkg_setup() { + # Make sure kernel headers are really available + check_KV +} + +src_unpack() { + unpack ${A} + cd ${S} + + # Our patch does two things for us; First, it syncs up with Debian's + # iproute 20010824-8 package; Secondly, it adds htb3 support. The Debian + # patch tweaks the iproute compile so that we use an included pkt_sched.h + # header rather than looking at the one in /usr/src/linux/include/linux. + # This allows us to always enable HTB3 without compile problems; however, + # other parts of the source tree are still dependent upon having a kernel + # source tree in /usr/src/linux. + + patch -p1 < ${FILESDIR}/iproute-debian-8-htb3.diff || die + + # why was this commented out? were the programs segfaulting/not working? + # they seem ok here when i compile with optimisations, so im reenabling + # this patch. if theres problems, will glady change back. ~woodchip + + cp Makefile Makefile.orig + sed -e "s/-O2/${CFLAGS}/g" \ + -e "s/-Werror//g" Makefile.orig > Makefile + + # this next thing is required to enable diffserv (ATM support doesn't compile right now) + + cp Config Config.orig + sed -e 's/DIFFSERV=n/DIFFSERV=y/g' -e 's/ATM=y/ATM=n/g' Config.orig > Config +} + +src_compile() { + emake || die +} + +src_install() { + cd ${S}/ip ; dosbin ifcfg ip routef routel rtacct rtmon rtpr + cd ${S}/tc ; dosbin tc + cd ${S} ; dodoc README* RELNOTES + + #install Debian man pages + doman ${S}/debian/*.[1-9] + + docinto examples/diffserv ; dodoc examples/diffserv/* + docinto examples ; dodoc examples/* + dodir /etc/iproute2 + insinto /etc/iproute2 ; doins ${S}/etc/iproute2/* + if [ "`use tex`" ] ; then + docinto ps ; dodoc doc/*.ps + fi +} |