mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
9823 lines
285 KiB
Diff
9823 lines
285 KiB
Diff
diff -Naur iproute2-orig/Makefile iproute2/Makefile
|
|
--- iproute2-orig/Makefile 2002-01-15 15:30:32.000000000 -0800
|
|
+++ iproute2/Makefile 2004-05-21 00:16:36.000000000 -0700
|
|
@@ -4,8 +4,6 @@
|
|
CONFDIR=/etc/iproute2
|
|
DOCDIR=/usr/doc/iproute2
|
|
|
|
-KERNEL_INCLUDE=/usr/src/linux/include
|
|
-LIBC_INCLUDE=/usr/include
|
|
|
|
DEFINES= -DRESOLVE_HOSTNAMES
|
|
|
|
@@ -23,19 +21,11 @@
|
|
#options for ipx
|
|
ADDLIB+=ipx_ntop.o ipx_pton.o
|
|
|
|
-ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
|
|
- ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
|
|
- GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
|
|
- endif
|
|
-endif
|
|
-ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
|
|
- GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
|
|
-endif
|
|
|
|
|
|
CC = gcc
|
|
CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
|
|
-CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
|
|
+CFLAGS = $(CCOPTS) -I../include $(DEFINES)
|
|
|
|
LDLIBS += -L../lib -lnetlink -lutil
|
|
|
|
@@ -43,19 +33,11 @@
|
|
|
|
LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
|
|
|
|
-all: check-kernel
|
|
+all:
|
|
@set -e; \
|
|
for i in $(SUBDIRS); \
|
|
do $(MAKE) -C $$i; done
|
|
|
|
-check-kernel:
|
|
-ifeq ($(KERNEL_INCLUDE),)
|
|
- @echo "Please, set correct KERNEL_INCLUDE"; false
|
|
-else
|
|
- @set -e; \
|
|
- if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
|
|
- echo "Please, compile the kernel first"; false; fi
|
|
-endif
|
|
|
|
install: all
|
|
install -m 0755 -d $(DESTDIR)$(SBINDIR)
|
|
diff -Naur iproute2-orig/Makefile~ iproute2/Makefile~
|
|
--- iproute2-orig/Makefile~ 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/Makefile~ 2002-01-15 15:30:32.000000000 -0800
|
|
@@ -0,0 +1,77 @@
|
|
+# Path to parent kernel include files directory
|
|
+DESTDIR=
|
|
+SBINDIR=/sbin
|
|
+CONFDIR=/etc/iproute2
|
|
+DOCDIR=/usr/doc/iproute2
|
|
+
|
|
+KERNEL_INCLUDE=/usr/src/linux/include
|
|
+LIBC_INCLUDE=/usr/include
|
|
+
|
|
+DEFINES= -DRESOLVE_HOSTNAMES
|
|
+
|
|
+#options if you have a bind>=4.9.4 libresolv (or, maybe, glibc)
|
|
+LDLIBS=-lresolv
|
|
+ADDLIB=
|
|
+
|
|
+#options if you compile with libc5, and without a bind>=4.9.4 libresolv
|
|
+#LDLIBS=
|
|
+#ADDLIB=inet_ntop.o inet_pton.o
|
|
+
|
|
+#options for decnet
|
|
+ADDLIB+=dnet_ntop.o dnet_pton.o
|
|
+
|
|
+#options for ipx
|
|
+ADDLIB+=ipx_ntop.o ipx_pton.o
|
|
+
|
|
+ifeq ($(LIBC_INCLUDE)/socketbits.h,$(wildcard $(LIBC_INCLUDE)/socketbits.h))
|
|
+ ifeq ($(LIBC_INCLUDE)/net/if_packet.h,$(wildcard $(LIBC_INCLUDE)/net/if_packet.h))
|
|
+ GLIBCFIX=-I../include-glibc -include ../include-glibc/glibc-bugs.h
|
|
+ endif
|
|
+endif
|
|
+ifeq ($(LIBC_INCLUDE)/bits/socket.h,$(wildcard $(LIBC_INCLUDE)/bits/socket.h))
|
|
+ GLIBCFIX=-I../include-glibc -I/usr/include/db3 -include ../include-glibc/glibc-bugs.h
|
|
+endif
|
|
+
|
|
+
|
|
+CC = gcc
|
|
+CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
|
|
+CFLAGS = $(CCOPTS) $(GLIBCFIX) -I$(KERNEL_INCLUDE) -I../include $(DEFINES)
|
|
+
|
|
+LDLIBS += -L../lib -lnetlink -lutil
|
|
+
|
|
+SUBDIRS=lib ip tc misc
|
|
+
|
|
+LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
|
|
+
|
|
+all: check-kernel
|
|
+ @set -e; \
|
|
+ for i in $(SUBDIRS); \
|
|
+ do $(MAKE) -C $$i; done
|
|
+
|
|
+check-kernel:
|
|
+ifeq ($(KERNEL_INCLUDE),)
|
|
+ @echo "Please, set correct KERNEL_INCLUDE"; false
|
|
+else
|
|
+ @set -e; \
|
|
+ if [ ! -r $(KERNEL_INCLUDE)/linux/autoconf.h ]; then \
|
|
+ echo "Please, compile the kernel first"; false; fi
|
|
+endif
|
|
+
|
|
+install: all
|
|
+ install -m 0755 -d $(DESTDIR)$(SBINDIR)
|
|
+ install -m 0755 -d $(DESTDIR)$(CONFDIR)
|
|
+ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples
|
|
+ install -m 0755 -d $(DESTDIR)$(DOCDIR)/examples/diffserv
|
|
+ install -m 0644 README.iproute2+tc $(shell find examples -type f -maxdepth 1) $(DESTDIR)$(DOCDIR)/examples
|
|
+ install -m 0644 $(shell echo examples/diffserv/*) $(DESTDIR)$(DOCDIR)/examples/diffserv
|
|
+ @for i in $(SUBDIRS) doc; do $(MAKE) -C $$i install; done
|
|
+ @cd etc/iproute2; for i in *; do \
|
|
+ if [ ! -e $(DESTDIR)$(CONFDIR)/$$i ]; then \
|
|
+ echo install -m 0644 $$i $(DESTDIR)$(CONFDIR); \
|
|
+ install -m 0644 $$i $(DESTDIR)$(CONFDIR); fi; done
|
|
+
|
|
+clean:
|
|
+ for i in $(SUBDIRS) doc; \
|
|
+ do $(MAKE) -C $$i clean; done
|
|
+
|
|
+.EXPORT_ALL_VARIABLES:
|
|
diff -Naur iproute2-orig/debian/README.Debian iproute2/debian/README.Debian
|
|
--- iproute2-orig/debian/README.Debian 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/README.Debian 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,4 @@
|
|
+This version of "iproute" includes the HTB Linux queuing discipline
|
|
+explained in http://luxik.cdi.cz/~devik/qos/htb/
|
|
+
|
|
+You need kernel version 2.4.21 or newer in order to use it.
|
|
diff -Naur iproute2-orig/debian/changelog iproute2/debian/changelog
|
|
--- iproute2-orig/debian/changelog 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/changelog 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,207 @@
|
|
+iproute (20010824-13) unstable; urgency=low
|
|
+
|
|
+ * debian/rules: Run dpkg-shlibdeps with all the executables,
|
|
+ to fix dependency problem (closes: Bug#224063)
|
|
+ * Really removed references to obsolete include files
|
|
+ (Bug#223165 was not fixed properly)
|
|
+
|
|
+ -- Juan Cespedes <cespedes@debian.org> Sun, 25 Jan 2004 23:04:20 +0100
|
|
+
|
|
+iproute (20010824-12) unstable; urgency=low
|
|
+
|
|
+ * Updated README.Debian and copyright file
|
|
+ * Added two new manpages from http://lartc.org/manpages/:
|
|
+ ip(8) and tc-cbq-details(8).
|
|
+ * Removed references to obsolete include files which made
|
|
+ compilation fail (closes: Bug#223165)
|
|
+
|
|
+ -- Juan Cespedes <cespedes@debian.org> Sun, 14 Dec 2003 00:40:10 +0100
|
|
+
|
|
+iproute (20010824-11) unstable; urgency=low
|
|
+
|
|
+ * Changed priority to "optional"
|
|
+ * Fixed "tc -s qdisc" on sparc (patch by "Nicolas S. Dade"
|
|
+ <ndade@nsd.dyndns.org>) (closes: Bug#194128)
|
|
+
|
|
+ -- Juan Cespedes <cespedes@debian.org> Sun, 17 Aug 2003 00:22:47 +0200
|
|
+
|
|
+iproute (20010824-10) unstable; urgency=low
|
|
+
|
|
+ * Updated manual pages from http://www.lartc.org/manpages/
|
|
+ (closes: Bug#156353, Bug#175313, Bug#176989, Bug#189095)
|
|
+ * New Standards-Version
|
|
+ * Don't "rm -rf /etc/iproute2" on purge (closes: Bug#202862)
|
|
+ * Include "iproute2" in the description (closes: Bug#182999)
|
|
+
|
|
+ -- Juan Cespedes <cespedes@debian.org> Sat, 16 Aug 2003 18:29:27 +0200
|
|
+
|
|
+iproute (20010824-9) unstable; urgency=medium
|
|
+
|
|
+ * Added patch for HTB v3.6 to be able to work with kernel 2.4.20
|
|
+ (from http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz)
|
|
+ (closes: Bug#147550, Bug#167149, Bug#167597, Bug#171277)
|
|
+
|
|
+ -- Juan Cespedes <cespedes@debian.org> Thu, 05 Dec 2002 13:44:10 +0100
|
|
+
|
|
+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> 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> 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> 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> 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> 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>)
|
|
+ * Fixed spurious space in `tc -s qdisc' output (closes: Bug#128501)
|
|
+
|
|
+ -- Juan Cespedes <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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> Mon, 17 Apr 1997 17:00:36 +0100
|
|
+
|
|
+iproute (961225-1) unstable; urgency=low
|
|
+
|
|
+ * Initial Release.
|
|
+
|
|
+ -- Tom Lees <tom@lpsg.demon.co.uk> Mon, 30 Dec 1996 11:12:23 +0000
|
|
+
|
|
+Local variables:
|
|
+mode: debian-changelog
|
|
+End:
|
|
diff -Naur iproute2-orig/debian/conffiles iproute2/debian/conffiles
|
|
--- iproute2-orig/debian/conffiles 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/conffiles 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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 -Naur iproute2-orig/debian/control iproute2/debian/control
|
|
--- iproute2-orig/debian/control 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/control 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,19 @@
|
|
+Source: iproute
|
|
+Section: net
|
|
+Priority: optional
|
|
+Maintainer: Juan Cespedes <cespedes@debian.org>
|
|
+Standards-Version: 3.6.0
|
|
+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
|
|
+ .
|
|
+ This package is also known as iproute2 upstream and in some
|
|
+ documentation.
|
|
diff -Naur iproute2-orig/debian/copyright iproute2/debian/copyright
|
|
--- iproute2-orig/debian/copyright 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/copyright 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,42 @@
|
|
+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
|
|
+ * Added HTB v3.6 from
|
|
+ <http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz>
|
|
+
|
|
+
|
|
+Copyrights
|
|
+----------
|
|
+Copyright (C) 1996-2001 Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
|
|
+
|
|
+Modifications for Debian:
|
|
+ Copyright (C) 1996 Tom Lees <tom@lpsg.demon.co.uk>
|
|
+ Copyright (C) 1998 Christoph Lameter <christoph@lameter.com>
|
|
+ Copyright (C) 1998-1999 Roberto Lumbreras <rover@debian.org>
|
|
+ Copyright (C) 1999-2003 Juan Cespedes <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 -Naur iproute2-orig/debian/manpages/ip.8 iproute2/debian/manpages/ip.8
|
|
--- iproute2-orig/debian/manpages/ip.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/ip.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,1809 @@
|
|
+.TH IP 8 "17 January 2002" "iproute2" "Linux"
|
|
+.SH NAME
|
|
+ip \- show / manipulate routing, devices, policy routing and tunnels
|
|
+.SH SYNOPSIS
|
|
+
|
|
+.ad l
|
|
+.in +8
|
|
+.ti -8
|
|
+.B ip
|
|
+.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
|
|
+.BR help " }"
|
|
+.sp
|
|
+
|
|
+.ti -8
|
|
+.IR OBJECT " := { "
|
|
+.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
|
|
+maddr " | " mroute " | " monitor " }"
|
|
+.sp
|
|
+
|
|
+.ti -8
|
|
+.IR OPTIONS " := { "
|
|
+\fB\-V\fR[\fIersion\fR] |
|
|
+\fB\-s\fR[\fItatistics\fR] |
|
|
+\fB\-r\fR[\fIesolve\fR] |
|
|
+\fB\-f\fR[\fIamily\fR] {
|
|
+.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
|
|
+\fB\-o\fR[\fIneline\fR] }
|
|
+
|
|
+.ti -8
|
|
+.BI "ip link set " DEVICE
|
|
+.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
|
|
+.br
|
|
+.BR promisc " { " on " | " off " } |"
|
|
+.br
|
|
+.BR allmulti " { " on " | " off " } |"
|
|
+.br
|
|
+.BR dynamic " { " on " | " off " } |"
|
|
+.br
|
|
+.BR multicast " { " on " | " off " } |"
|
|
+.br
|
|
+.B txqueuelen
|
|
+.IR PACKETS " |"
|
|
+.br
|
|
+.B name
|
|
+.IR NEWNAME " |"
|
|
+.br
|
|
+.B address
|
|
+.IR LLADDR " |"
|
|
+.B broadcast
|
|
+.IR LLADDR " |"
|
|
+.br
|
|
+.B mtu
|
|
+.IR MTU " }"
|
|
+
|
|
+.ti -8
|
|
+.B ip link show
|
|
+.RI "[ " DEVICE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip addr" " { " add " | " del " } "
|
|
+.IB IFADDR " dev " STRING
|
|
+
|
|
+.ti -8
|
|
+.BR "ip addr" " { " show " | " flush " } [ " dev
|
|
+.IR STRING " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE-ID " ] [ "
|
|
+.B to
|
|
+.IR PREFIX " ] [ " FLAG-LIST " ] [ "
|
|
+.B label
|
|
+.IR PATTERN " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR IFADDR " := " PREFIX " | " ADDR
|
|
+.B peer
|
|
+.IR PREFIX " [ "
|
|
+.B broadcast
|
|
+.IR ADDR " ] [ "
|
|
+.B anycast
|
|
+.IR ADDR " ] [ "
|
|
+.B label
|
|
+.IR STRING " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE-ID " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR SCOPE-ID " := "
|
|
+.RB "[ " host " | " link " | " global " | "
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
|
|
+
|
|
+.ti -8
|
|
+.IR FLAG " := "
|
|
+.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
|
|
+tentative " | " deprecated " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip route" " { "
|
|
+.BR list " | " flush " } "
|
|
+.I SELECTOR
|
|
+
|
|
+.ti -8
|
|
+.B ip route get
|
|
+.IR ADDRESS " [ "
|
|
+.BI from " ADDRESS " iif " STRING"
|
|
+.RB " ] [ " oif
|
|
+.IR STRING " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip route" " { " add " | " del " | " change " | " append " | "\
|
|
+replace " | " monitor " } "
|
|
+.I ROUTE
|
|
+
|
|
+.ti -8
|
|
+.IR SELECTOR " := "
|
|
+.RB "[ " root
|
|
+.IR PREFIX " ] [ "
|
|
+.B match
|
|
+.IR PREFIX " ] [ "
|
|
+.B exact
|
|
+.IR PREFIX " ] [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B proto
|
|
+.IR RTPROTO " ] [ "
|
|
+.B type
|
|
+.IR TYPE " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B proto
|
|
+.IR RTPROTO " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE " ] [ "
|
|
+.B metric
|
|
+.IR METRIC " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
|
|
+.B nexthop
|
|
+.IR NH " ] ..."
|
|
+
|
|
+.ti -8
|
|
+.IR NH " := [ "
|
|
+.B via
|
|
+.IR ADDRESS " ] [ "
|
|
+.B dev
|
|
+.IR STRING " ] [ "
|
|
+.B weight
|
|
+.IR NUMBER " ] " NHFLAGS
|
|
+
|
|
+.ti -8
|
|
+.IR OPTIONS " := " FLAGS " [ "
|
|
+.B mtu
|
|
+.IR NUMBER " ] [ "
|
|
+.B advmss
|
|
+.IR NUMBER " ] [ "
|
|
+.B rtt
|
|
+.IR NUMBER " ] [ "
|
|
+.B rttvar
|
|
+.IR NUMBER " ] [ "
|
|
+.B window
|
|
+.IR NUMBER " ] [ "
|
|
+.B cwnd
|
|
+.IR NUMBER " ] [ "
|
|
+.B ssthresh
|
|
+.IR REALM " ] [ "
|
|
+.B realms
|
|
+.IR REALM " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TYPE " := [ "
|
|
+.BR unicast " | " local " | " broadcast " | " multicast " | "\
|
|
+throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TABLE_ID " := [ "
|
|
+.BR local "| " main " | " default " | " all " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR SCOPE " := [ "
|
|
+.BR host " | " link " | " global " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR FLAGS " := [ "
|
|
+.BR equalize " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR NHFLAGS " := [ "
|
|
+.BR onlink " | " pervasive " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR RTPROTO " := [ "
|
|
+.BR kernel " | " boot " | " static " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.B ip rule
|
|
+.RB " [ " list " | " add " | " del " ]"
|
|
+.I SELECTOR ACTION
|
|
+
|
|
+.ti -8
|
|
+.IR SELECTOR " := [ "
|
|
+.B from
|
|
+.IR PREFIX " ] [ "
|
|
+.B to
|
|
+.IR PREFIX " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.B fwmark
|
|
+.IR FWMARK " ] [ "
|
|
+.B dev
|
|
+.IR STRING " ] [ "
|
|
+.B pref
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ACTION " := [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B nat
|
|
+.IR ADDRESS " ] [ "
|
|
+.BR prohibit " | " reject " | " unreachable " ] [ " realms
|
|
+.RI "[" SRCREALM "/]" DSTREALM " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TABLE_ID " := [ "
|
|
+.BR local " | " main " | " default " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
|
|
+.IR ADDR " [ "
|
|
+.B lladdr
|
|
+.IR LLADDR " ] [ "
|
|
+.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
|
|
+.IR ADDR " } [ "
|
|
+.B dev
|
|
+.IR DEV " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip neigh" " { " show " | " flush " } [ " to
|
|
+.IR PREFIX " ] [ "
|
|
+.B dev
|
|
+.IR DEV " ] [ "
|
|
+.B nud
|
|
+.IR STATE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
|
|
+.RI "[ " NAME " ]"
|
|
+.br
|
|
+.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
|
|
+.br
|
|
+.RB "[ " remote
|
|
+.IR ADDR " ] [ "
|
|
+.B local
|
|
+.IR ADDR " ]"
|
|
+.br
|
|
+.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
|
|
+.IR KEY " ] [ "
|
|
+.RB "[" i "|" o "]" csum " ] ]"
|
|
+.br
|
|
+.RB "[ " ttl
|
|
+.IR TTL " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.RB "[" no "]" pmtudisc " ]"
|
|
+.br
|
|
+.RB "[ " dev
|
|
+.IR PHYS_DEV " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ADDR " := { " IP_ADDRESS " |"
|
|
+.BR any " }"
|
|
+
|
|
+.ti -8
|
|
+.IR TOS " := { " NUMBER " |"
|
|
+.BR inherit " }"
|
|
+
|
|
+.ti -8
|
|
+.IR TTL " := { " 1 ".." 255 " | "
|
|
+.BR inherit " }"
|
|
+
|
|
+.ti -8
|
|
+.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip maddr" " [ " add " | " del " ]"
|
|
+.IB MULTIADDR " dev " STRING
|
|
+
|
|
+.ti -8
|
|
+.BR "ip maddr show" " [ " dev
|
|
+.IR STRING " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip mroute show" " ["
|
|
+.IR PREFIX " ] [ "
|
|
+.B from
|
|
+.IR PREFIX " ] [ "
|
|
+.B iif
|
|
+.IR DEVICE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip monitor" " [ " all " |"
|
|
+.IR LISTofOBJECTS " ]"
|
|
+.in -8
|
|
+.ad b
|
|
+
|
|
+.SH OPTIONS
|
|
+
|
|
+.TP
|
|
+.BR "\-V" , " -Version"
|
|
+print the version of the
|
|
+.B ip
|
|
+utility and exit.
|
|
+
|
|
+.TP
|
|
+.BR "\-s" , " \-stats", " \-statistics"
|
|
+output more information. If the option
|
|
+appears twice or more, the amount of information increases.
|
|
+As a rule, the information is statistics or some time values.
|
|
+
|
|
+.TP
|
|
+.BR "\-f" , " \-family"
|
|
+followed by protocol family identifier:
|
|
+.BR "inet" , " inet6"
|
|
+or
|
|
+.B link
|
|
+,enforce the protocol family to use. If the option is not present,
|
|
+the protocol family is guessed from other arguments. If the rest
|
|
+of the command line does not give enough information to guess the
|
|
+family,
|
|
+.B ip
|
|
+falls back to the default one, usually
|
|
+.B inet
|
|
+or
|
|
+.BR "any" .
|
|
+.B link
|
|
+is a special family identifier meaning that no networking protocol
|
|
+is involved.
|
|
+
|
|
+.TP
|
|
+.B \-4
|
|
+shortcut for
|
|
+.BR "-family inet" .
|
|
+
|
|
+.TP
|
|
+.B \-6
|
|
+shortcut for
|
|
+.BR "\-family inet6" .
|
|
+
|
|
+.TP
|
|
+.B \-0
|
|
+shortcut for
|
|
+.BR "\-family link" .
|
|
+
|
|
+.TP
|
|
+.BR "\-o" , " \-oneline"
|
|
+output each record on a single line, replacing line feeds
|
|
+with the
|
|
+.B '\'
|
|
+character. This is convenient when you want to count records
|
|
+with
|
|
+.BR wc (1)
|
|
+ or to
|
|
+.BR grep (1)
|
|
+the output.
|
|
+
|
|
+.TP
|
|
+.BR "\-r" , " \-resolve"
|
|
+use the system's name resolver to print DNS names instead of
|
|
+host addresses.
|
|
+
|
|
+.SH IP - COMMAND SYNTAX
|
|
+
|
|
+.SS
|
|
+.I OBJECT
|
|
+
|
|
+.TP
|
|
+.B link
|
|
+- network device.
|
|
+
|
|
+.TP
|
|
+.B address
|
|
+- protocol (IP or IPv6) address on a device.
|
|
+.TP
|
|
+.B neighbour
|
|
+- ARP or NDISC cache entry.
|
|
+
|
|
+.TP
|
|
+.B route
|
|
+- routing table entry.
|
|
+
|
|
+.TP
|
|
+.B rule
|
|
+- rule in routing policy database.
|
|
+
|
|
+.TP
|
|
+.B maddress
|
|
+- multicast address.
|
|
+
|
|
+.TP
|
|
+.B mroute
|
|
+- multicast routing cache entry.
|
|
+
|
|
+.TP
|
|
+.B tunnel
|
|
+- tunnel over IP.
|
|
+
|
|
+.PP
|
|
+The names of all objects may be written in full or
|
|
+abbreviated form, f.e.
|
|
+.B address
|
|
+is abbreviated as
|
|
+.B addr
|
|
+or just
|
|
+.B a.
|
|
+
|
|
+.SS
|
|
+.I COMMAND
|
|
+
|
|
+Specifies the action to perform on the object.
|
|
+The set of possible actions depends on the object type.
|
|
+As a rule, it is possible to
|
|
+.BR "add" , " delete"
|
|
+and
|
|
+.B show
|
|
+(or
|
|
+.B list
|
|
+) objects, but some objects do not allow all of these operations
|
|
+or have some additional commands. The
|
|
+.B help
|
|
+command is available for all objects. It prints
|
|
+out a list of available commands and argument syntax conventions.
|
|
+.sp
|
|
+If no command is given, some default command is assumed.
|
|
+Usually it is
|
|
+.B list
|
|
+or, if the objects of this class cannot be listed,
|
|
+.BR "help" .
|
|
+
|
|
+.SH ip link - network device configuration
|
|
+
|
|
+.B link
|
|
+is a network device and the corresponding commands
|
|
+display and change the state of devices.
|
|
+
|
|
+.SS ip link set - change device attributes
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+.I NAME
|
|
+specifies network device to operate on.
|
|
+
|
|
+.TP
|
|
+.BR up " and " down
|
|
+change the state of the device to
|
|
+.B UP
|
|
+or
|
|
+.BR "DOWN" .
|
|
+
|
|
+.TP
|
|
+.BR "arp on " or " arp off"
|
|
+change the
|
|
+.B NOARP
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BR "multicast on " or " multicast off"
|
|
+change the
|
|
+.B MULTICAST
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BR "dynamic on " or " dynamic off"
|
|
+change the
|
|
+.B DYNAMIC
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BI name " NAME"
|
|
+change the name of the device. This operation is not
|
|
+recommended if the device is running or has some addresses
|
|
+already configured.
|
|
+
|
|
+.TP
|
|
+.BI txqueuelen " NUMBER"
|
|
+.TP
|
|
+.BI txqlen " NUMBER"
|
|
+change the transmit queue length of the device.
|
|
+
|
|
+.TP
|
|
+.BI mtu " NUMBER"
|
|
+change the
|
|
+.I MTU
|
|
+of the device.
|
|
+
|
|
+.TP
|
|
+.BI address " LLADDRESS"
|
|
+change the station address of the interface.
|
|
+
|
|
+.TP
|
|
+.BI broadcast " LLADDRESS"
|
|
+.TP
|
|
+.BI brd " LLADDRESS"
|
|
+.TP
|
|
+.BI peer " LLADDRESS"
|
|
+change the link layer broadcast address or the peer address when
|
|
+the interface is
|
|
+.IR "POINTOPOINT" .
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+If multiple parameter changes are requested,
|
|
+.B ip
|
|
+aborts immediately after any of the changes have failed.
|
|
+This is the only case when
|
|
+.B ip
|
|
+can move the system to an unpredictable state. The solution
|
|
+is to avoid changing several parameters with one
|
|
+.B ip link set
|
|
+call.
|
|
+
|
|
+.SS ip link show - display device attributes
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+.I NAME
|
|
+specifies the network device to show.
|
|
+If this argument is omitted all devices are listed.
|
|
+
|
|
+.TP
|
|
+.B up
|
|
+only display running interfaces.
|
|
+
|
|
+.SH ip address - protocol address management.
|
|
+
|
|
+The
|
|
+.B address
|
|
+is a protocol (IP or IPv6) address attached
|
|
+to a network device. Each device must have at least one address
|
|
+to use the corresponding protocol. It is possible to have several
|
|
+different addresses attached to one device. These addresses are not
|
|
+discriminated, so that the term
|
|
+.B alias
|
|
+is not quite appropriate for them and we do not use it in this document.
|
|
+.sp
|
|
+The
|
|
+.B ip addr
|
|
+command displays addresses and their properties, adds new addresses
|
|
+and deletes old ones.
|
|
+
|
|
+.SS ip address add - add new protocol address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the name of the device to add the address to.
|
|
+
|
|
+.TP
|
|
+.BI local " ADDRESS " (default)
|
|
+the address of the interface. The format of the address depends
|
|
+on the protocol. It is a dotted quad for IP and a sequence of
|
|
+hexadecimal halfwords separated by colons for IPv6. The
|
|
+.I ADDRESS
|
|
+may be followed by a slash and a decimal number which encodes
|
|
+the network prefix length.
|
|
+
|
|
+.TP
|
|
+.BI peer " ADDRESS"
|
|
+the address of the remote endpoint for pointopoint interfaces.
|
|
+Again, the
|
|
+.I ADDRESS
|
|
+may be followed by a slash and a decimal number, encoding the network
|
|
+prefix length. If a peer address is specified, the local address
|
|
+cannot have a prefix length. The network prefix is associated
|
|
+with the peer rather than with the local address.
|
|
+
|
|
+.TP
|
|
+.BI broadcast " ADDRESS"
|
|
+the broadcast address on the interface.
|
|
+.sp
|
|
+It is possible to use the special symbols
|
|
+.B '+'
|
|
+and
|
|
+.B '-'
|
|
+instead of the broadcast address. In this case, the broadcast address
|
|
+is derived by setting/resetting the host bits of the interface prefix.
|
|
+
|
|
+.TP
|
|
+.BI label " NAME"
|
|
+Each address may be tagged with a label string.
|
|
+In order to preserve compatibility with Linux-2.0 net aliases,
|
|
+this string must coincide with the name of the device or must be prefixed
|
|
+with the device name followed by colon.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VALUE"
|
|
+the scope of the area where this address is valid.
|
|
+The available scopes are listed in file
|
|
+.BR "/etc/iproute2/rt_scopes" .
|
|
+Predefined scope values are:
|
|
+
|
|
+.in +8
|
|
+.B global
|
|
+- the address is globally valid.
|
|
+.sp
|
|
+.B site
|
|
+- (IPv6 only) the address is site local, i.e. it is
|
|
+valid inside this site.
|
|
+.sp
|
|
+.B link
|
|
+- the address is link local, i.e. it is valid only on this device.
|
|
+.sp
|
|
+.B host
|
|
+- the address is valid only inside this host.
|
|
+.in -8
|
|
+
|
|
+.SS ip address delete - delete protocol address
|
|
+.B Arguments:
|
|
+coincide with the arguments of
|
|
+.B ip addr add.
|
|
+The device name is a required argument. The rest are optional.
|
|
+If no arguments are given, the first address is deleted.
|
|
+
|
|
+.SS ip address show - look at protocol addresses
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+name of device.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+only list addresses with this scope.
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX"
|
|
+only list addresses matching this prefix.
|
|
+
|
|
+.TP
|
|
+.BI label " PATTERN"
|
|
+only list addresses with labels matching the
|
|
+.IR "PATTERN" .
|
|
+.I PATTERN
|
|
+is a usual shell style pattern.
|
|
+
|
|
+.TP
|
|
+.BR dynamic " and " permanent
|
|
+(IPv6 only) only list addresses installed due to stateless
|
|
+address configuration or only list permanent (not dynamic)
|
|
+addresses.
|
|
+
|
|
+.TP
|
|
+.B tentative
|
|
+(IPv6 only) only list addresses which did not pass duplicate
|
|
+address detection.
|
|
+
|
|
+.TP
|
|
+.B deprecated
|
|
+(IPv6 only) only list deprecated addresses.
|
|
+
|
|
+.TP
|
|
+.BR primary " and " secondary
|
|
+only list primary (or secondary) addresses.
|
|
+
|
|
+.SS ip address flush - flush protocol addresses
|
|
+This command flushes the protocol addresses selected by some criteria.
|
|
+
|
|
+.PP
|
|
+This command has the same arguments as
|
|
+.B show.
|
|
+The difference is that it does not run when no arguments are given.
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+This command (and other
|
|
+.B flush
|
|
+commands described below) is pretty dangerous. If you make a mistake,
|
|
+it will not forgive it, but will cruelly purge all the addresses.
|
|
+
|
|
+.PP
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of deleted
|
|
+addresses and the number of rounds made to flush the address list. If
|
|
+this option is given twice,
|
|
+.B ip addr flush
|
|
+also dumps all the deleted addresses in the format described in the
|
|
+previous subsection.
|
|
+
|
|
+.SH ip neighbour - neighbour/arp tables management.
|
|
+
|
|
+.B neighbour
|
|
+objects establish bindings between protocol addresses and
|
|
+link layer addresses for hosts sharing the same link.
|
|
+Neighbour entries are organized into tables. The IPv4 neighbour table
|
|
+is known by another name - the ARP table.
|
|
+
|
|
+.P
|
|
+The corresponding commands display neighbour bindings
|
|
+and their properties, add new neighbour entries and delete old ones.
|
|
+
|
|
+.SS ip neighbour add - add a new neighbour entry
|
|
+.SS ip neighbour change - change an existing entry
|
|
+.SS ip neighbour replace - add a new entry or change an existing one
|
|
+
|
|
+These commands create new neighbour records or update existing ones.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the interface to which this neighbour is attached.
|
|
+
|
|
+.TP
|
|
+.BI lladdr " LLADDRESS"
|
|
+the link layer address of the neighbour.
|
|
+.I LLADDRESS
|
|
+can also be
|
|
+.BR "null" .
|
|
+
|
|
+.TP
|
|
+.BI nud " NUD_STATE"
|
|
+the state of the neighbour entry.
|
|
+.B nud
|
|
+is an abbreviation for 'Neigh bour Unreachability Detection'.
|
|
+The state can take one of the following values:
|
|
+
|
|
+.in +8
|
|
+.B permanent
|
|
+- the neighbour entry is valid forever and can be only
|
|
+be removed administratively.
|
|
+.sp
|
|
+
|
|
+.B noarp
|
|
+- the neighbour entry is valid. No attempts to validate
|
|
+this entry will be made but it can be removed when its lifetime expires.
|
|
+.sp
|
|
+
|
|
+.B reachable
|
|
+- the neighbour entry is valid until the reachability
|
|
+timeout expires.
|
|
+.sp
|
|
+
|
|
+.B stale
|
|
+- the neighbour entry is valid but suspicious.
|
|
+This option to
|
|
+.B ip neigh
|
|
+does not change the neighbour state if it was valid and the address
|
|
+is not changed by this command.
|
|
+.in -8
|
|
+
|
|
+.SS ip neighbour delete - delete a neighbour entry
|
|
+This command invalidates a neighbour entry.
|
|
+
|
|
+.PP
|
|
+The arguments are the same as with
|
|
+.BR "ip neigh add" ,
|
|
+except that
|
|
+.B lladdr
|
|
+and
|
|
+.B nud
|
|
+are ignored.
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+Attempts to delete or manually change a
|
|
+.B noarp
|
|
+entry created by the kernel may result in unpredictable behaviour.
|
|
+Particularly, the kernel may try to resolve this address even
|
|
+on a
|
|
+.B NOARP
|
|
+interface or if the address is multicast or broadcast.
|
|
+
|
|
+.SS ip neighbour show - list neighbour entries
|
|
+
|
|
+This commands displays neighbour tables.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the prefix selecting the neighbours to list.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+only list the neighbours attached to this device.
|
|
+
|
|
+.TP
|
|
+.B unused
|
|
+only list neighbours which are not currently in use.
|
|
+
|
|
+.TP
|
|
+.BI nud " NUD_STATE"
|
|
+only list neighbour entries in this state.
|
|
+.I NUD_STATE
|
|
+takes values listed below or the special value
|
|
+.B all
|
|
+which means all states. This option may occur more than once.
|
|
+If this option is absent,
|
|
+.B ip
|
|
+lists all entries except for
|
|
+.B none
|
|
+and
|
|
+.BR "noarp" .
|
|
+
|
|
+.SS ip neighbour flush - flush neighbour entries
|
|
+This command flushes neighbour tables, selecting
|
|
+entries to flush by some criteria.
|
|
+
|
|
+.PP
|
|
+This command has the same arguments as
|
|
+.B show.
|
|
+The differences are that it does not run when no arguments are given,
|
|
+and that the default neighbour states to be flushed do not include
|
|
+.B permanent
|
|
+and
|
|
+.BR "noarp" .
|
|
+
|
|
+.PP
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of
|
|
+deleted neighbours and the number of rounds made to flush the
|
|
+neighbour table. If the option is given
|
|
+twice,
|
|
+.B ip neigh flush
|
|
+also dumps all the deleted neighbours.
|
|
+
|
|
+.SH ip route - routing table management
|
|
+Manipulate route entries in the kernel routing tables keep
|
|
+information about paths to other networked nodes.
|
|
+.sp
|
|
+.B Route types:
|
|
+
|
|
+.in +8
|
|
+.B unicast
|
|
+- the route entry describes real paths to the destinations covered
|
|
+by the route prefix.
|
|
+
|
|
+.sp
|
|
+.B unreachable
|
|
+- these destinations are unreachable. Packets are discarded and the
|
|
+ICMP message
|
|
+.I host unreachable
|
|
+is generated.
|
|
+The local senders get an
|
|
+.I EHOSTUNREACH
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B blackhole
|
|
+- these destinations are unreachable. Packets are discarded silently.
|
|
+The local senders get an
|
|
+.I EINVAL
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B prohibit
|
|
+- these destinations are unreachable. Packets are discarded and the
|
|
+ICMP message
|
|
+.I communication administratively prohibited
|
|
+is generated. The local senders get an
|
|
+.I EACCES
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B local
|
|
+- the destinations are assigned to this host. The packets are looped
|
|
+back and delivered locally.
|
|
+
|
|
+.sp
|
|
+.B broadcast
|
|
+- the destinations are broadcast addresses. The packets are sent as
|
|
+link broadcasts.
|
|
+
|
|
+.sp
|
|
+.B throw
|
|
+- a special control route used together with policy rules. If such a
|
|
+route is selected, lookup in this table is terminated pretending that
|
|
+no route was found. Without policy routing it is equivalent to the
|
|
+absence of the route in the routing table. The packets are dropped
|
|
+and the ICMP message
|
|
+.I net unreachable
|
|
+is generated. The local senders get an
|
|
+.I ENETUNREACH
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B nat
|
|
+- a special NAT route. Destinations covered by the prefix
|
|
+are considered to be dummy (or external) addresses which require translation
|
|
+to real (or internal) ones before forwarding. The addresses to translate to
|
|
+are selected with the attribute
|
|
+.BR "via" .
|
|
+
|
|
+.sp
|
|
+.B anycast
|
|
+.RI "- " "not implemented"
|
|
+the destinations are
|
|
+.I anycast
|
|
+addresses assigned to this host. They are mainly equivalent
|
|
+to
|
|
+.B local
|
|
+with one difference: such addresses are invalid when used
|
|
+as the source address of any packet.
|
|
+
|
|
+.sp
|
|
+.B multicast
|
|
+- a special type used for multicast routing. It is not present in
|
|
+normal routing tables.
|
|
+.in -8
|
|
+
|
|
+.P
|
|
+.B Route tables:
|
|
+Linux-2.x can pack routes into several routing
|
|
+tables identified by a number in the range from 1 to 255 or by
|
|
+name from the file
|
|
+.B /etc/iproute2/rt_tables
|
|
+. By default all normal routes are inserted into the
|
|
+.B main
|
|
+table (ID 254) and the kernel only uses this table when calculating routes.
|
|
+
|
|
+.sp
|
|
+Actually, one other table always exists, which is invisible but
|
|
+even more important. It is the
|
|
+.B local
|
|
+table (ID 255). This table
|
|
+consists of routes for local and broadcast addresses. The kernel maintains
|
|
+this table automatically and the administrator usually need not modify it
|
|
+or even look at it.
|
|
+
|
|
+The multiple routing tables enter the game when
|
|
+.I policy routing
|
|
+is used.
|
|
+
|
|
+.SS ip route add - add new route
|
|
+.SS ip route change - change route
|
|
+.SS ip route replace - change or add new one
|
|
+
|
|
+.TP
|
|
+.BI to " TYPE PREFIX " (default)
|
|
+the destination prefix of the route. If
|
|
+.I TYPE
|
|
+is omitted,
|
|
+.B ip
|
|
+assumes type
|
|
+.BR "unicast" .
|
|
+Other values of
|
|
+.I TYPE
|
|
+are listed above.
|
|
+.I PREFIX
|
|
+is an IP or IPv6 address optionally followed by a slash and the
|
|
+prefix length. If the length of the prefix is missing,
|
|
+.B ip
|
|
+assumes a full-length host route. There is also a special
|
|
+.I PREFIX
|
|
+.B default
|
|
+- which is equivalent to IP
|
|
+.B 0/0
|
|
+or to IPv6
|
|
+.BR "::/0" .
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+the Type Of Service (TOS) key. This key has no associated mask and
|
|
+the longest match is understood as: First, compare the TOS
|
|
+of the route and of the packet. If they are not equal, then the packet
|
|
+may still match a route with a zero TOS.
|
|
+.I TOS
|
|
+is either an 8 bit hexadecimal number or an identifier
|
|
+from
|
|
+.BR "/etc/iproute2/rt_dsfield" .
|
|
+
|
|
+.TP
|
|
+.BI metric " NUMBER"
|
|
+.TP
|
|
+.BI preference " NUMBER"
|
|
+the preference value of the route.
|
|
+.I NUMBER
|
|
+is an arbitrary 32bit number.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+the table to add this route to.
|
|
+.I TABLEID
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_tables" .
|
|
+If this parameter is omitted,
|
|
+.B ip
|
|
+assumes the
|
|
+.B main
|
|
+table, with the exception of
|
|
+.BR local " , " broadcast " and " nat
|
|
+routes, which are put into the
|
|
+.B local
|
|
+table by default.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the output device name.
|
|
+
|
|
+.TP
|
|
+.BI via " ADDRESS"
|
|
+the address of the nexthop router. Actually, the sense of this field
|
|
+depends on the route type. For normal
|
|
+.B unicast
|
|
+routes it is either the true next hop router or, if it is a direct
|
|
+route installed in BSD compatibility mode, it can be a local address
|
|
+of the interface. For NAT routes it is the first address of the block
|
|
+of translated IP destinations.
|
|
+
|
|
+.TP
|
|
+.BI src " ADDRESS"
|
|
+the source address to prefer when sending to the destinations
|
|
+covered by the route prefix.
|
|
+
|
|
+.TP
|
|
+.BI realm " REALMID"
|
|
+the realm to which this route is assigned.
|
|
+.I REALMID
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_realms" .
|
|
+
|
|
+.TP
|
|
+.BI mtu " MTU"
|
|
+.TP
|
|
+.BI "mtu lock" " MTU"
|
|
+the MTU along the path to the destination. If the modifier
|
|
+.B lock
|
|
+is not used, the MTU may be updated by the kernel due to
|
|
+Path MTU Discovery. If the modifier
|
|
+.B lock
|
|
+is used, no path MTU discovery will be tried, all packets
|
|
+will be sent without the DF bit in IPv4 case or fragmented
|
|
+to MTU for IPv6.
|
|
+
|
|
+.TP
|
|
+.BI window " NUMBER"
|
|
+the maximal window for TCP to advertise to these destinations,
|
|
+measured in bytes. It limits maximal data bursts that our TCP
|
|
+peers are allowed to send to us.
|
|
+
|
|
+.TP
|
|
+.BI rtt " NUMBER"
|
|
+the initial RTT ('Round Trip Time') estimate.
|
|
+
|
|
+.TP
|
|
+.BI rttvar " NUMBER " "(2.3.15+ only)"
|
|
+the initial RTT variance estimate.
|
|
+
|
|
+.TP
|
|
+.BI ssthresh " NUMBER " "(2.3.15+ only)"
|
|
+an estimate for the initial slow start threshold.
|
|
+
|
|
+.TP
|
|
+.BI cwnd " NUMBER " "(2.3.15+ only)"
|
|
+the clamp for congestion window. It is ignored if the
|
|
+.B lock
|
|
+flag is not used.
|
|
+
|
|
+.TP
|
|
+.BI advmss " NUMBER " "(2.3.15+ only)"
|
|
+the MSS ('Maximal Segment Size') to advertise to these
|
|
+destinations when establishing TCP connections. If it is not given,
|
|
+Linux uses a default value calculated from the first hop device MTU.
|
|
+(If the path to these destination is asymmetric, this guess may be wrong.)
|
|
+
|
|
+.TP
|
|
+.BI reordering " NUMBER " "(2.3.15+ only)"
|
|
+Maximal reordering on the path to this destination.
|
|
+If it is not given, Linux uses the value selected with
|
|
+.B sysctl
|
|
+variable
|
|
+.BR "net/ipv4/tcp_reordering" .
|
|
+
|
|
+.TP
|
|
+.BI nexthop " NEXTHOP"
|
|
+the nexthop of a multipath route.
|
|
+.I NEXTHOP
|
|
+is a complex value with its own syntax similar to the top level
|
|
+argument lists:
|
|
+
|
|
+.in +8
|
|
+.BI via " ADDRESS"
|
|
+- is the nexthop router.
|
|
+.sp
|
|
+
|
|
+.BI dev " NAME"
|
|
+- is the output device.
|
|
+.sp
|
|
+
|
|
+.BI weight " NUMBER"
|
|
+- is a weight for this element of a multipath
|
|
+route reflecting its relative bandwidth or quality.
|
|
+.in -8
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+the scope of the destinations covered by the route prefix.
|
|
+.I SCOPE_VAL
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_scopes" .
|
|
+If this parameter is omitted,
|
|
+.B ip
|
|
+assumes scope
|
|
+.B global
|
|
+for all gatewayed
|
|
+.B unicast
|
|
+routes, scope
|
|
+.B link
|
|
+for direct
|
|
+.BR unicast " and " broadcast
|
|
+routes and scope
|
|
+.BR host " for " local
|
|
+routes.
|
|
+
|
|
+.TP
|
|
+.BI protocol " RTPROTO"
|
|
+the routing protocol identifier of this route.
|
|
+.I RTPROTO
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_protos" .
|
|
+If the routing protocol ID is not given,
|
|
+.B ip assumes protocol
|
|
+.B boot
|
|
+(i.e. it assumes the route was added by someone who doesn't
|
|
+understand what they are doing). Several protocol values have
|
|
+a fixed interpretation.
|
|
+Namely:
|
|
+
|
|
+.in +8
|
|
+.B redirect
|
|
+- the route was installed due to an ICMP redirect.
|
|
+.sp
|
|
+
|
|
+.B kernel
|
|
+- the route was installed by the kernel during autoconfiguration.
|
|
+.sp
|
|
+
|
|
+.B boot
|
|
+- the route was installed during the bootup sequence.
|
|
+If a routing daemon starts, it will purge all of them.
|
|
+.sp
|
|
+
|
|
+.B static
|
|
+- the route was installed by the administrator
|
|
+to override dynamic routing. Routing daemon will respect them
|
|
+and, probably, even advertise them to its peers.
|
|
+.sp
|
|
+
|
|
+.B ra
|
|
+- the route was installed by Router Discovery protocol.
|
|
+.in -8
|
|
+
|
|
+.sp
|
|
+The rest of the values are not reserved and the administrator is free
|
|
+to assign (or not to assign) protocol tags.
|
|
+
|
|
+.TP
|
|
+.B onlink
|
|
+pretend that the nexthop is directly attached to this link,
|
|
+even if it does not match any interface prefix.
|
|
+
|
|
+.TP
|
|
+.B equalize
|
|
+allow packet by packet randomization on multipath routes.
|
|
+Without this modifier, the route will be frozen to one selected
|
|
+nexthop, so that load splitting will only occur on per-flow base.
|
|
+.B equalize
|
|
+only works if the kernel is patched.
|
|
+
|
|
+.SS ip route delete - delete route
|
|
+
|
|
+.B ip route del
|
|
+has the same arguments as
|
|
+.BR "ip route add" ,
|
|
+but their semantics are a bit different.
|
|
+
|
|
+Key values
|
|
+.RB "(" to ", " tos ", " preference " and " table ")"
|
|
+select the route to delete. If optional attributes are present,
|
|
+.B ip
|
|
+verifies that they coincide with the attributes of the route to delete.
|
|
+If no route with the given key and attributes was found,
|
|
+.B ip route del
|
|
+fails.
|
|
+
|
|
+.SS ip route show - list routes
|
|
+the command displays the contents of the routing tables or the route(s)
|
|
+selected by some criteria.
|
|
+
|
|
+.TP
|
|
+.BI to " SELECTOR " (default)
|
|
+only select routes from the given range of destinations.
|
|
+.I SELECTOR
|
|
+consists of an optional modifier
|
|
+.RB "(" root ", " match " or " exact ")"
|
|
+and a prefix.
|
|
+.BI root " PREFIX"
|
|
+selects routes with prefixes not shorter than
|
|
+.IR PREFIX "."
|
|
+F.e.
|
|
+.BI root " 0/0"
|
|
+selects the entire routing table.
|
|
+.BI match " PREFIX"
|
|
+selects routes with prefixes not longer than
|
|
+.IR PREFIX "."
|
|
+F.e.
|
|
+.BI match " 10.0/16"
|
|
+selects
|
|
+.IR 10.0/16 ","
|
|
+.IR 10/8 " and " 0/0 ,
|
|
+but it does not select
|
|
+.IR 10.1/16 " and " 10.0.0/24 .
|
|
+And
|
|
+.BI exact " PREFIX"
|
|
+(or just
|
|
+.IR PREFIX ")"
|
|
+selects routes with this exact prefix. If neither of these options
|
|
+are present,
|
|
+.B ip
|
|
+assumes
|
|
+.BI root " 0/0"
|
|
+i.e. it lists the entire table.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.BI dsfield " TOS"
|
|
+only select routes with the given TOS.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+show the routes from this table(s). The default setting is to show
|
|
+.BR table main "."
|
|
+.I TABLEID
|
|
+may either be the ID of a real table or one of the special values:
|
|
+.sp
|
|
+.in +8
|
|
+.B all
|
|
+- list all of the tables.
|
|
+.sp
|
|
+.B cache
|
|
+- dump the routing cache.
|
|
+.in -8
|
|
+
|
|
+.TP
|
|
+.B cloned
|
|
+.TP
|
|
+.B cached
|
|
+list cloned routes i.e. routes which were dynamically forked from
|
|
+other routes because some route attribute (f.e. MTU) was updated.
|
|
+Actually, it is equivalent to
|
|
+.BR "table cache" "."
|
|
+
|
|
+.TP
|
|
+.BI from " SELECTOR"
|
|
+the same syntax as for
|
|
+.BR to ","
|
|
+but it binds the source address range rather than destinations.
|
|
+Note that the
|
|
+.B from
|
|
+option only works with cloned routes.
|
|
+
|
|
+.TP
|
|
+.BI protocol " RTPROTO"
|
|
+only list routes of this protocol.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+only list routes with this scope.
|
|
+
|
|
+.TP
|
|
+.BI type " TYPE"
|
|
+only list routes of this type.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+only list routes going via this device.
|
|
+
|
|
+.TP
|
|
+.BI via " PREFIX"
|
|
+only list routes going via the nexthop routers selected by
|
|
+.IR PREFIX "."
|
|
+
|
|
+.TP
|
|
+.BI src " PREFIX"
|
|
+only list routes with preferred source addresses selected
|
|
+by
|
|
+.IR PREFIX "."
|
|
+
|
|
+.TP
|
|
+.BI realm " REALMID"
|
|
+.TP
|
|
+.BI realms " FROMREALM/TOREALM"
|
|
+only list routes with these realms.
|
|
+
|
|
+.SS ip route flush - flush routing tables
|
|
+this command flushes routes selected by some criteria.
|
|
+
|
|
+.sp
|
|
+The arguments have the same syntax and semantics as the arguments of
|
|
+.BR "ip route show" ,
|
|
+but routing tables are not listed but purged. The only difference is
|
|
+the default action:
|
|
+.B show
|
|
+dumps all the IP main routing table but
|
|
+.B flush
|
|
+prints the helper page.
|
|
+
|
|
+.sp
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of
|
|
+deleted routes and the number of rounds made to flush the routing
|
|
+table. If the option is given
|
|
+twice,
|
|
+.B ip route flush
|
|
+also dumps all the deleted routes in the format described in the
|
|
+previous subsection.
|
|
+
|
|
+.SS ip route get - get a single route
|
|
+this command gets a single route to a destination and prints its
|
|
+contents exactly as the kernel sees it.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the destination address.
|
|
+
|
|
+.TP
|
|
+.BI from " ADDRESS"
|
|
+the source address.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+the Type Of Service.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+the device from which this packet is expected to arrive.
|
|
+
|
|
+.TP
|
|
+.BI oif " NAME"
|
|
+force the output device on which this packet will be routed.
|
|
+
|
|
+.TP
|
|
+.B connected
|
|
+if no source address
|
|
+.RB "(option " from ")"
|
|
+was given, relookup the route with the source set to the preferred
|
|
+address received from the first lookup.
|
|
+If policy routing is used, it may be a different route.
|
|
+
|
|
+.P
|
|
+Note that this operation is not equivalent to
|
|
+.BR "ip route show" .
|
|
+.B show
|
|
+shows existing routes.
|
|
+.B get
|
|
+resolves them and creates new clones if necessary. Essentially,
|
|
+.B get
|
|
+is equivalent to sending a packet along this path.
|
|
+If the
|
|
+.B iif
|
|
+argument is not given, the kernel creates a route
|
|
+to output packets towards the requested destination.
|
|
+This is equivalent to pinging the destination
|
|
+with a subsequent
|
|
+.BR "ip route ls cache" ,
|
|
+however, no packets are actually sent. With the
|
|
+.B iif
|
|
+argument, the kernel pretends that a packet arrived from this interface
|
|
+and searches for a path to forward the packet.
|
|
+
|
|
+.SH ip rule - routing policy database management
|
|
+
|
|
+.BR "Rule" s
|
|
+in the routing policy database control the route selection algorithm.
|
|
+
|
|
+.P
|
|
+Classic routing algorithms used in the Internet make routing decisions
|
|
+based only on the destination address of packets (and in theory,
|
|
+but not in practice, on the TOS field).
|
|
+
|
|
+.P
|
|
+In some circumstances we want to route packets differently depending not only
|
|
+on destination addresses, but also on other packet fields: source address,
|
|
+IP protocol, transport protocol ports or even packet payload.
|
|
+This task is called 'policy routing'.
|
|
+
|
|
+.P
|
|
+To solve this task, the conventional destination based routing table, ordered
|
|
+according to the longest match rule, is replaced with a 'routing policy
|
|
+database' (or RPDB), which selects routes by executing some set of rules.
|
|
+
|
|
+.P
|
|
+Each policy routing rule consists of a
|
|
+.B selector
|
|
+and an
|
|
+.B action predicate.
|
|
+The RPDB is scanned in the order of increasing priority. The selector
|
|
+of each rule is applied to {source address, destination address, incoming
|
|
+interface, tos, fwmark} and, if the selector matches the packet,
|
|
+the action is performed. The action predicate may return with success.
|
|
+In this case, it will either give a route or failure indication
|
|
+and the RPDB lookup is terminated. Otherwise, the RPDB program
|
|
+continues on the next rule.
|
|
+
|
|
+.P
|
|
+Semantically, natural action is to select the nexthop and the output device.
|
|
+
|
|
+.P
|
|
+At startup time the kernel configures the default RPDB consisting of three
|
|
+rules:
|
|
+
|
|
+.TP
|
|
+1.
|
|
+Priority: 0, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B local
|
|
+(ID 255).
|
|
+The
|
|
+.B local
|
|
+table is a special routing table containing
|
|
+high priority control routes for local and broadcast addresses.
|
|
+.sp
|
|
+Rule 0 is special. It cannot be deleted or overridden.
|
|
+
|
|
+.TP
|
|
+2.
|
|
+Priority: 32766, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B main
|
|
+(ID 254).
|
|
+The
|
|
+.B main
|
|
+table is the normal routing table containing all non-policy
|
|
+routes. This rule may be deleted and/or overridden with other
|
|
+ones by the administrator.
|
|
+
|
|
+.TP
|
|
+3.
|
|
+Priority: 32767, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B default
|
|
+(ID 253).
|
|
+The
|
|
+.B default
|
|
+table is empty. It is reserved for some post-processing if no previous
|
|
+default rules selected the packet.
|
|
+This rule may also be deleted.
|
|
+
|
|
+.P
|
|
+Each RPDB entry has additional
|
|
+attributes. F.e. each rule has a pointer to some routing
|
|
+table. NAT and masquerading rules have an attribute to select new IP
|
|
+address to translate/masquerade. Besides that, rules have some
|
|
+optional attributes, which routes have, namely
|
|
+.BR "realms" .
|
|
+These values do not override those contained in the routing tables. They
|
|
+are only used if the route did not select any attributes.
|
|
+
|
|
+.sp
|
|
+The RPDB may contain rules of the following types:
|
|
+
|
|
+.in +8
|
|
+.B unicast
|
|
+- the rule prescribes to return the route found
|
|
+in the routing table referenced by the rule.
|
|
+
|
|
+.B blackhole
|
|
+- the rule prescribes to silently drop the packet.
|
|
+
|
|
+.B unreachable
|
|
+- the rule prescribes to generate a 'Network is unreachable' error.
|
|
+
|
|
+.B prohibit
|
|
+- the rule prescribes to generate 'Communication is administratively
|
|
+prohibited' error.
|
|
+
|
|
+.B nat
|
|
+- the rule prescribes to translate the source address
|
|
+of the IP packet into some other value.
|
|
+.in -8
|
|
+
|
|
+.SS ip rule add - insert a new rule
|
|
+.SS ip rule delete - delete a rule
|
|
+
|
|
+.TP
|
|
+.BI type " TYPE " (default)
|
|
+the type of this rule. The list of valid types was given in the previous
|
|
+subsection.
|
|
+
|
|
+.TP
|
|
+.BI from " PREFIX"
|
|
+select the source prefix to match.
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX"
|
|
+select the destination prefix to match.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+select the incoming device to match. If the interface is loopback,
|
|
+the rule only matches packets originating from this host. This means
|
|
+that you may create separate routing tables for forwarded and local
|
|
+packets and, hence, completely segregate them.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+select the TOS value to match.
|
|
+
|
|
+.TP
|
|
+.BI fwmark " MARK"
|
|
+select the
|
|
+.B fwmark
|
|
+value to match.
|
|
+
|
|
+.TP
|
|
+.BI priority " PREFERENCE"
|
|
+the priority of this rule. Each rule should have an explicitly
|
|
+set
|
|
+.I unique
|
|
+priority value.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+the routing table identifier to lookup if the rule selector matches.
|
|
+
|
|
+.TP
|
|
+.BI realms " FROM/TO"
|
|
+Realms to select if the rule matched and the routing table lookup
|
|
+succeeded. Realm
|
|
+.I TO
|
|
+is only used if the route did not select any realm.
|
|
+
|
|
+.TP
|
|
+.BI nat " ADDRESS"
|
|
+The base of the IP address block to translate (for source addresses).
|
|
+The
|
|
+.I ADDRESS
|
|
+may be either the start of the block of NAT addresses (selected by NAT
|
|
+routes) or a local host address (or even zero).
|
|
+In the last case the router does not translate the packets, but
|
|
+masquerades them to this address.
|
|
+
|
|
+.B Warning:
|
|
+Changes to the RPDB made with these commands do not become active
|
|
+immediately. It is assumed that after a script finishes a batch of
|
|
+updates, it flushes the routing cache with
|
|
+.BR "ip route flush cache" .
|
|
+
|
|
+.SS ip rule show - list rules
|
|
+This command has no arguments.
|
|
+
|
|
+.SH ip maddress - multicast addresses management
|
|
+
|
|
+.B maddress
|
|
+objects are multicast addresses.
|
|
+
|
|
+.SS ip maddress show - list multicast addresses
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+the device name.
|
|
+
|
|
+.SS ip maddress add - add a multicast address
|
|
+.SS ip maddress delete - delete a multicast address
|
|
+these commands attach/detach a static link layer multicast address
|
|
+to listen on the interface.
|
|
+Note that it is impossible to join protocol multicast groups
|
|
+statically. This command only manages link layer addresses.
|
|
+
|
|
+.TP
|
|
+.BI address " LLADDRESS " (default)
|
|
+the link layer multicast address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the device to join/leave this multicast address.
|
|
+
|
|
+.SH ip mroute - multicast routing cache management
|
|
+.B mroute
|
|
+objects are multicast routing cache entries created by a user level
|
|
+mrouting daemon (f.e.
|
|
+.B pimd
|
|
+or
|
|
+.B mrouted
|
|
+).
|
|
+
|
|
+Due to the limitations of the current interface to the multicast routing
|
|
+engine, it is impossible to change
|
|
+.B mroute
|
|
+objects administratively, so we may only display them. This limitation
|
|
+will be removed in the future.
|
|
+
|
|
+.SS ip mroute show - list mroute cache entries
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX " (default)
|
|
+the prefix selecting the destination multicast addresses to list.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+the interface on which multicast packets are received.
|
|
+
|
|
+.TP
|
|
+.BI from " PREFIX"
|
|
+the prefix selecting the IP source addresses of the multicast route.
|
|
+
|
|
+.SH ip tunnel - tunnel configuration
|
|
+.B tunnel
|
|
+objects are tunnels, encapsulating packets in IPv4 packets and then
|
|
+sending them over the IP infrastructure.
|
|
+
|
|
+.SS ip tunnel add - add a new tunnel
|
|
+.SS ip tunnel change - change an existing tunnel
|
|
+.SS ip tunnel delete - destroy a tunnel
|
|
+
|
|
+.TP
|
|
+.BI name " NAME " (default)
|
|
+select the tunnel device name.
|
|
+
|
|
+.TP
|
|
+.BI mode " MODE"
|
|
+set the tunnel mode. Three modes are currently available:
|
|
+.BR ipip ", " sit " and " gre "."
|
|
+
|
|
+.TP
|
|
+.BI remote " ADDRESS"
|
|
+set the remote endpoint of the tunnel.
|
|
+
|
|
+.TP
|
|
+.BI local " ADDRESS"
|
|
+set the fixed local address for tunneled packets.
|
|
+It must be an address on another interface of this host.
|
|
+
|
|
+.TP
|
|
+.BI ttl " N"
|
|
+set a fixed TTL
|
|
+.I N
|
|
+on tunneled packets.
|
|
+.I N
|
|
+is a number in the range 1--255. 0 is a special value
|
|
+meaning that packets inherit the TTL value.
|
|
+The default value is:
|
|
+.BR "inherit" .
|
|
+
|
|
+.TP
|
|
+.BI tos " T"
|
|
+.TP
|
|
+.BI dsfield " T"
|
|
+set a fixed TOS
|
|
+.I T
|
|
+on tunneled packets.
|
|
+The default value is:
|
|
+.BR "inherit" .
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+bind the tunnel to the device
|
|
+.I NAME
|
|
+so that tunneled packets will only be routed via this device and will
|
|
+not be able to escape to another device when the route to endpoint
|
|
+changes.
|
|
+
|
|
+.TP
|
|
+.B nopmtudisc
|
|
+disable Path MTU Discovery on this tunnel.
|
|
+It is enabled by default. Note that a fixed ttl is incompatible
|
|
+with this option: tunnelling with a fixed ttl always makes pmtu
|
|
+discovery.
|
|
+
|
|
+.TP
|
|
+.BI key " K"
|
|
+.TP
|
|
+.BI ikey " K"
|
|
+.TP
|
|
+.BI okey " K"
|
|
+.RB ( " only GRE tunnels " )
|
|
+use keyed GRE with key
|
|
+.IR K ". " K
|
|
+is either a number or an IP address-like dotted quad.
|
|
+The
|
|
+.B key
|
|
+parameter sets the key to use in both directions.
|
|
+The
|
|
+.BR ikey " and " okey
|
|
+parameters set different keys for input and output.
|
|
+
|
|
+.TP
|
|
+.BR csum ", " icsum ", " ocsum
|
|
+.RB ( " only GRE tunnels " )
|
|
+generate/require checksums for tunneled packets.
|
|
+The
|
|
+.B ocsum
|
|
+flag calculates checksums for outgoing packets.
|
|
+The
|
|
+.B icsum
|
|
+flag requires that all input packets have the correct
|
|
+checksum. The
|
|
+.B csum
|
|
+flag is equivalent to the combination
|
|
+.BR "icsum ocsum" .
|
|
+
|
|
+.TP
|
|
+.BR seq ", " iseq ", " oseq
|
|
+.RB ( " only GRE tunnels " )
|
|
+serialize packets.
|
|
+The
|
|
+.B oseq
|
|
+flag enables sequencing of outgoing packets.
|
|
+The
|
|
+.B iseq
|
|
+flag requires that all input packets are serialized.
|
|
+The
|
|
+.B seq
|
|
+flag is equivalent to the combination
|
|
+.BR "iseq oseq" .
|
|
+.B It isn't work. Don't use it.
|
|
+
|
|
+.SS ip tunnel show - list tunnels
|
|
+This command has no arguments.
|
|
+
|
|
+.SH ip monitor and rtmon - state monitoring
|
|
+
|
|
+The
|
|
+.B ip
|
|
+utility can monitor the state of devices, addresses
|
|
+and routes continuously. This option has a slightly different format.
|
|
+Namely, the
|
|
+.B monitor
|
|
+command is the first in the command line and then the object list follows:
|
|
+
|
|
+.BR "ip monitor" " [ " all " |"
|
|
+.IR LISTofOBJECTS " ]"
|
|
+
|
|
+.I OBJECT-LIST
|
|
+is the list of object types that we want to monitor.
|
|
+It may contain
|
|
+.BR link ", " address " and " route "."
|
|
+If no
|
|
+.B file
|
|
+argument is given,
|
|
+.B ip
|
|
+opens RTNETLINK, listens on it and dumps state changes in the format
|
|
+described in previous sections.
|
|
+
|
|
+.P
|
|
+If a file name is given, it does not listen on RTNETLINK,
|
|
+but opens the file containing RTNETLINK messages saved in binary format
|
|
+and dumps them. Such a history file can be generated with the
|
|
+.B rtmon
|
|
+utility. This utility has a command line syntax similar to
|
|
+.BR "ip monitor" .
|
|
+Ideally,
|
|
+.B rtmon
|
|
+should be started before the first network configuration command
|
|
+is issued. F.e. if you insert:
|
|
+.sp
|
|
+.in +8
|
|
+rtmon file /var/log/rtmon.log
|
|
+.in -8
|
|
+.sp
|
|
+in a startup script, you will be able to view the full history
|
|
+later.
|
|
+
|
|
+.P
|
|
+Certainly, it is possible to start
|
|
+.B rtmon
|
|
+at any time.
|
|
+It prepends the history with the state snapshot dumped at the moment
|
|
+of starting.
|
|
+
|
|
+.SH HISTORY
|
|
+
|
|
+.B ip
|
|
+was written by Alexey N. Kuznetsov and added in Linux 2.2.
|
|
+.SH SEE ALSO
|
|
+.BR tc (8)
|
|
+.br
|
|
+.RB "IP Command reference " ip-cref.ps
|
|
+.br
|
|
+.RB "IP tunnels " ip-cref.ps
|
|
+
|
|
+.SH AUTHOR
|
|
+
|
|
+Manpage maintained by Michail Litvak <mci@owl.openwall.com>
|
|
diff -Naur iproute2-orig/debian/manpages/old/ip.8 iproute2/debian/manpages/old/ip.8
|
|
--- iproute2-orig/debian/manpages/old/ip.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/ip.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,1809 @@
|
|
+.TH IP 8 "17 January 2002" "iproute2" "Linux"
|
|
+.SH NAME
|
|
+ip \- show / manipulate routing, devices, policy routing and tunnels
|
|
+.SH SYNOPSIS
|
|
+
|
|
+.ad l
|
|
+.in +8
|
|
+.ti -8
|
|
+.B ip
|
|
+.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | "
|
|
+.BR help " }"
|
|
+.sp
|
|
+
|
|
+.ti -8
|
|
+.IR OBJECT " := { "
|
|
+.BR link " | " addr " | " route " | " rule " | " neigh " | " tunnel " | "\
|
|
+maddr " | " mroute " | " monitor " }"
|
|
+.sp
|
|
+
|
|
+.ti -8
|
|
+.IR OPTIONS " := { "
|
|
+\fB\-V\fR[\fIersion\fR] |
|
|
+\fB\-s\fR[\fItatistics\fR] |
|
|
+\fB\-r\fR[\fIesolve\fR] |
|
|
+\fB\-f\fR[\fIamily\fR] {
|
|
+.BR inet " | " inet6 " | " ipx " | " dnet " | " link " } | "
|
|
+\fB\-o\fR[\fIneline\fR] }
|
|
+
|
|
+.ti -8
|
|
+.BI "ip link set " DEVICE
|
|
+.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
|
|
+.br
|
|
+.BR promisc " { " on " | " off " } |"
|
|
+.br
|
|
+.BR allmulti " { " on " | " off " } |"
|
|
+.br
|
|
+.BR dynamic " { " on " | " off " } |"
|
|
+.br
|
|
+.BR multicast " { " on " | " off " } |"
|
|
+.br
|
|
+.B txqueuelen
|
|
+.IR PACKETS " |"
|
|
+.br
|
|
+.B name
|
|
+.IR NEWNAME " |"
|
|
+.br
|
|
+.B address
|
|
+.IR LLADDR " |"
|
|
+.B broadcast
|
|
+.IR LLADDR " |"
|
|
+.br
|
|
+.B mtu
|
|
+.IR MTU " }"
|
|
+
|
|
+.ti -8
|
|
+.B ip link show
|
|
+.RI "[ " DEVICE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip addr" " { " add " | " del " } "
|
|
+.IB IFADDR " dev " STRING
|
|
+
|
|
+.ti -8
|
|
+.BR "ip addr" " { " show " | " flush " } [ " dev
|
|
+.IR STRING " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE-ID " ] [ "
|
|
+.B to
|
|
+.IR PREFIX " ] [ " FLAG-LIST " ] [ "
|
|
+.B label
|
|
+.IR PATTERN " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR IFADDR " := " PREFIX " | " ADDR
|
|
+.B peer
|
|
+.IR PREFIX " [ "
|
|
+.B broadcast
|
|
+.IR ADDR " ] [ "
|
|
+.B anycast
|
|
+.IR ADDR " ] [ "
|
|
+.B label
|
|
+.IR STRING " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE-ID " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR SCOPE-ID " := "
|
|
+.RB "[ " host " | " link " | " global " | "
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR FLAG-LIST " := [ " FLAG-LIST " ] " FLAG
|
|
+
|
|
+.ti -8
|
|
+.IR FLAG " := "
|
|
+.RB "[ " permanent " | " dynamic " | " secondary " | " primary " | "\
|
|
+tentative " | " deprecated " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip route" " { "
|
|
+.BR list " | " flush " } "
|
|
+.I SELECTOR
|
|
+
|
|
+.ti -8
|
|
+.B ip route get
|
|
+.IR ADDRESS " [ "
|
|
+.BI from " ADDRESS " iif " STRING"
|
|
+.RB " ] [ " oif
|
|
+.IR STRING " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip route" " { " add " | " del " | " change " | " append " | "\
|
|
+replace " | " monitor " } "
|
|
+.I ROUTE
|
|
+
|
|
+.ti -8
|
|
+.IR SELECTOR " := "
|
|
+.RB "[ " root
|
|
+.IR PREFIX " ] [ "
|
|
+.B match
|
|
+.IR PREFIX " ] [ "
|
|
+.B exact
|
|
+.IR PREFIX " ] [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B proto
|
|
+.IR RTPROTO " ] [ "
|
|
+.B type
|
|
+.IR TYPE " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ROUTE " := " NODE_SPEC " [ " INFO_SPEC " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR NODE_SPEC " := [ " TYPE " ] " PREFIX " ["
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B proto
|
|
+.IR RTPROTO " ] [ "
|
|
+.B scope
|
|
+.IR SCOPE " ] [ "
|
|
+.B metric
|
|
+.IR METRIC " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR INFO_SPEC " := " "NH OPTIONS FLAGS" " ["
|
|
+.B nexthop
|
|
+.IR NH " ] ..."
|
|
+
|
|
+.ti -8
|
|
+.IR NH " := [ "
|
|
+.B via
|
|
+.IR ADDRESS " ] [ "
|
|
+.B dev
|
|
+.IR STRING " ] [ "
|
|
+.B weight
|
|
+.IR NUMBER " ] " NHFLAGS
|
|
+
|
|
+.ti -8
|
|
+.IR OPTIONS " := " FLAGS " [ "
|
|
+.B mtu
|
|
+.IR NUMBER " ] [ "
|
|
+.B advmss
|
|
+.IR NUMBER " ] [ "
|
|
+.B rtt
|
|
+.IR NUMBER " ] [ "
|
|
+.B rttvar
|
|
+.IR NUMBER " ] [ "
|
|
+.B window
|
|
+.IR NUMBER " ] [ "
|
|
+.B cwnd
|
|
+.IR NUMBER " ] [ "
|
|
+.B ssthresh
|
|
+.IR REALM " ] [ "
|
|
+.B realms
|
|
+.IR REALM " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TYPE " := [ "
|
|
+.BR unicast " | " local " | " broadcast " | " multicast " | "\
|
|
+throw " | " unreachable " | " prohibit " | " blackhole " | " nat " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TABLE_ID " := [ "
|
|
+.BR local "| " main " | " default " | " all " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR SCOPE " := [ "
|
|
+.BR host " | " link " | " global " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR FLAGS " := [ "
|
|
+.BR equalize " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR NHFLAGS " := [ "
|
|
+.BR onlink " | " pervasive " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR RTPROTO " := [ "
|
|
+.BR kernel " | " boot " | " static " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.B ip rule
|
|
+.RB " [ " list " | " add " | " del " ]"
|
|
+.I SELECTOR ACTION
|
|
+
|
|
+.ti -8
|
|
+.IR SELECTOR " := [ "
|
|
+.B from
|
|
+.IR PREFIX " ] [ "
|
|
+.B to
|
|
+.IR PREFIX " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.B fwmark
|
|
+.IR FWMARK " ] [ "
|
|
+.B dev
|
|
+.IR STRING " ] [ "
|
|
+.B pref
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ACTION " := [ "
|
|
+.B table
|
|
+.IR TABLE_ID " ] [ "
|
|
+.B nat
|
|
+.IR ADDRESS " ] [ "
|
|
+.BR prohibit " | " reject " | " unreachable " ] [ " realms
|
|
+.RI "[" SRCREALM "/]" DSTREALM " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR TABLE_ID " := [ "
|
|
+.BR local " | " main " | " default " |"
|
|
+.IR NUMBER " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip neigh" " { " add " | " del " | " change " | " replace " } { "
|
|
+.IR ADDR " [ "
|
|
+.B lladdr
|
|
+.IR LLADDR " ] [ "
|
|
+.BR nud " { " permanent " | " noarp " | " stale " | " reachable " } ] | " proxy
|
|
+.IR ADDR " } [ "
|
|
+.B dev
|
|
+.IR DEV " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip neigh" " { " show " | " flush " } [ " to
|
|
+.IR PREFIX " ] [ "
|
|
+.B dev
|
|
+.IR DEV " ] [ "
|
|
+.B nud
|
|
+.IR STATE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip tunnel" " { " add " | " change " | " del " | " show " }"
|
|
+.RI "[ " NAME " ]"
|
|
+.br
|
|
+.RB "[ " mode " { " ipip " | " gre " | " sit " } ]"
|
|
+.br
|
|
+.RB "[ " remote
|
|
+.IR ADDR " ] [ "
|
|
+.B local
|
|
+.IR ADDR " ]"
|
|
+.br
|
|
+.RB "[ [" i "|" o "]" seq " ] [ [" i "|" o "]" key
|
|
+.IR KEY " ] [ "
|
|
+.RB "[" i "|" o "]" csum " ] ]"
|
|
+.br
|
|
+.RB "[ " ttl
|
|
+.IR TTL " ] [ "
|
|
+.B tos
|
|
+.IR TOS " ] [ "
|
|
+.RB "[" no "]" pmtudisc " ]"
|
|
+.br
|
|
+.RB "[ " dev
|
|
+.IR PHYS_DEV " ]"
|
|
+
|
|
+.ti -8
|
|
+.IR ADDR " := { " IP_ADDRESS " |"
|
|
+.BR any " }"
|
|
+
|
|
+.ti -8
|
|
+.IR TOS " := { " NUMBER " |"
|
|
+.BR inherit " }"
|
|
+
|
|
+.ti -8
|
|
+.IR TTL " := { " 1 ".." 255 " | "
|
|
+.BR inherit " }"
|
|
+
|
|
+.ti -8
|
|
+.IR KEY " := { " DOTTED_QUAD " | " NUMBER " }"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip maddr" " [ " add " | " del " ]"
|
|
+.IB MULTIADDR " dev " STRING
|
|
+
|
|
+.ti -8
|
|
+.BR "ip maddr show" " [ " dev
|
|
+.IR STRING " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip mroute show" " ["
|
|
+.IR PREFIX " ] [ "
|
|
+.B from
|
|
+.IR PREFIX " ] [ "
|
|
+.B iif
|
|
+.IR DEVICE " ]"
|
|
+
|
|
+.ti -8
|
|
+.BR "ip monitor" " [ " all " |"
|
|
+.IR LISTofOBJECTS " ]"
|
|
+.in -8
|
|
+.ad b
|
|
+
|
|
+.SH OPTIONS
|
|
+
|
|
+.TP
|
|
+.BR "\-V" , " -Version"
|
|
+print the version of the
|
|
+.B ip
|
|
+utility and exit.
|
|
+
|
|
+.TP
|
|
+.BR "\-s" , " \-stats", " \-statistics"
|
|
+output more information. If the option
|
|
+appears twice or more, the amount of information increases.
|
|
+As a rule, the information is statistics or some time values.
|
|
+
|
|
+.TP
|
|
+.BR "\-f" , " \-family"
|
|
+followed by protocol family identifier:
|
|
+.BR "inet" , " inet6"
|
|
+or
|
|
+.B link
|
|
+,enforce the protocol family to use. If the option is not present,
|
|
+the protocol family is guessed from other arguments. If the rest
|
|
+of the command line does not give enough information to guess the
|
|
+family,
|
|
+.B ip
|
|
+falls back to the default one, usually
|
|
+.B inet
|
|
+or
|
|
+.BR "any" .
|
|
+.B link
|
|
+is a special family identifier meaning that no networking protocol
|
|
+is involved.
|
|
+
|
|
+.TP
|
|
+.B \-4
|
|
+shortcut for
|
|
+.BR "-family inet" .
|
|
+
|
|
+.TP
|
|
+.B \-6
|
|
+shortcut for
|
|
+.BR "\-family inet6" .
|
|
+
|
|
+.TP
|
|
+.B \-0
|
|
+shortcut for
|
|
+.BR "\-family link" .
|
|
+
|
|
+.TP
|
|
+.BR "\-o" , " \-oneline"
|
|
+output each record on a single line, replacing line feeds
|
|
+with the
|
|
+.B '\'
|
|
+character. This is convenient when you want to count records
|
|
+with
|
|
+.BR wc (1)
|
|
+ or to
|
|
+.BR grep (1)
|
|
+the output.
|
|
+
|
|
+.TP
|
|
+.BR "\-r" , " \-resolve"
|
|
+use the system's name resolver to print DNS names instead of
|
|
+host addresses.
|
|
+
|
|
+.SH IP - COMMAND SYNTAX
|
|
+
|
|
+.SS
|
|
+.I OBJECT
|
|
+
|
|
+.TP
|
|
+.B link
|
|
+- network device.
|
|
+
|
|
+.TP
|
|
+.B address
|
|
+- protocol (IP or IPv6) address on a device.
|
|
+.TP
|
|
+.B neighbour
|
|
+- ARP or NDISC cache entry.
|
|
+
|
|
+.TP
|
|
+.B route
|
|
+- routing table entry.
|
|
+
|
|
+.TP
|
|
+.B rule
|
|
+- rule in routing policy database.
|
|
+
|
|
+.TP
|
|
+.B maddress
|
|
+- multicast address.
|
|
+
|
|
+.TP
|
|
+.B mroute
|
|
+- multicast routing cache entry.
|
|
+
|
|
+.TP
|
|
+.B tunnel
|
|
+- tunnel over IP.
|
|
+
|
|
+.PP
|
|
+The names of all objects may be written in full or
|
|
+abbreviated form, f.e.
|
|
+.B address
|
|
+is abbreviated as
|
|
+.B addr
|
|
+or just
|
|
+.B a.
|
|
+
|
|
+.SS
|
|
+.I COMMAND
|
|
+
|
|
+Specifies the action to perform on the object.
|
|
+The set of possible actions depends on the object type.
|
|
+As a rule, it is possible to
|
|
+.BR "add" , " delete"
|
|
+and
|
|
+.B show
|
|
+(or
|
|
+.B list
|
|
+) objects, but some objects do not allow all of these operations
|
|
+or have some additional commands. The
|
|
+.B help
|
|
+command is available for all objects. It prints
|
|
+out a list of available commands and argument syntax conventions.
|
|
+.sp
|
|
+If no command is given, some default command is assumed.
|
|
+Usually it is
|
|
+.B list
|
|
+or, if the objects of this class cannot be listed,
|
|
+.BR "help" .
|
|
+
|
|
+.SH ip link - network device configuration
|
|
+
|
|
+.B link
|
|
+is a network device and the corresponding commands
|
|
+display and change the state of devices.
|
|
+
|
|
+.SS ip link set - change device attributes
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+.I NAME
|
|
+specifies network device to operate on.
|
|
+
|
|
+.TP
|
|
+.BR up " and " down
|
|
+change the state of the device to
|
|
+.B UP
|
|
+or
|
|
+.BR "DOWN" .
|
|
+
|
|
+.TP
|
|
+.BR "arp on " or " arp off"
|
|
+change the
|
|
+.B NOARP
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BR "multicast on " or " multicast off"
|
|
+change the
|
|
+.B MULTICAST
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BR "dynamic on " or " dynamic off"
|
|
+change the
|
|
+.B DYNAMIC
|
|
+flag on the device.
|
|
+
|
|
+.TP
|
|
+.BI name " NAME"
|
|
+change the name of the device. This operation is not
|
|
+recommended if the device is running or has some addresses
|
|
+already configured.
|
|
+
|
|
+.TP
|
|
+.BI txqueuelen " NUMBER"
|
|
+.TP
|
|
+.BI txqlen " NUMBER"
|
|
+change the transmit queue length of the device.
|
|
+
|
|
+.TP
|
|
+.BI mtu " NUMBER"
|
|
+change the
|
|
+.I MTU
|
|
+of the device.
|
|
+
|
|
+.TP
|
|
+.BI address " LLADDRESS"
|
|
+change the station address of the interface.
|
|
+
|
|
+.TP
|
|
+.BI broadcast " LLADDRESS"
|
|
+.TP
|
|
+.BI brd " LLADDRESS"
|
|
+.TP
|
|
+.BI peer " LLADDRESS"
|
|
+change the link layer broadcast address or the peer address when
|
|
+the interface is
|
|
+.IR "POINTOPOINT" .
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+If multiple parameter changes are requested,
|
|
+.B ip
|
|
+aborts immediately after any of the changes have failed.
|
|
+This is the only case when
|
|
+.B ip
|
|
+can move the system to an unpredictable state. The solution
|
|
+is to avoid changing several parameters with one
|
|
+.B ip link set
|
|
+call.
|
|
+
|
|
+.SS ip link show - display device attributes
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+.I NAME
|
|
+specifies the network device to show.
|
|
+If this argument is omitted all devices are listed.
|
|
+
|
|
+.TP
|
|
+.B up
|
|
+only display running interfaces.
|
|
+
|
|
+.SH ip address - protocol address management.
|
|
+
|
|
+The
|
|
+.B address
|
|
+is a protocol (IP or IPv6) address attached
|
|
+to a network device. Each device must have at least one address
|
|
+to use the corresponding protocol. It is possible to have several
|
|
+different addresses attached to one device. These addresses are not
|
|
+discriminated, so that the term
|
|
+.B alias
|
|
+is not quite appropriate for them and we do not use it in this document.
|
|
+.sp
|
|
+The
|
|
+.B ip addr
|
|
+command displays addresses and their properties, adds new addresses
|
|
+and deletes old ones.
|
|
+
|
|
+.SS ip address add - add new protocol address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the name of the device to add the address to.
|
|
+
|
|
+.TP
|
|
+.BI local " ADDRESS " (default)
|
|
+the address of the interface. The format of the address depends
|
|
+on the protocol. It is a dotted quad for IP and a sequence of
|
|
+hexadecimal halfwords separated by colons for IPv6. The
|
|
+.I ADDRESS
|
|
+may be followed by a slash and a decimal number which encodes
|
|
+the network prefix length.
|
|
+
|
|
+.TP
|
|
+.BI peer " ADDRESS"
|
|
+the address of the remote endpoint for pointopoint interfaces.
|
|
+Again, the
|
|
+.I ADDRESS
|
|
+may be followed by a slash and a decimal number, encoding the network
|
|
+prefix length. If a peer address is specified, the local address
|
|
+cannot have a prefix length. The network prefix is associated
|
|
+with the peer rather than with the local address.
|
|
+
|
|
+.TP
|
|
+.BI broadcast " ADDRESS"
|
|
+the broadcast address on the interface.
|
|
+.sp
|
|
+It is possible to use the special symbols
|
|
+.B '+'
|
|
+and
|
|
+.B '-'
|
|
+instead of the broadcast address. In this case, the broadcast address
|
|
+is derived by setting/resetting the host bits of the interface prefix.
|
|
+
|
|
+.TP
|
|
+.BI label " NAME"
|
|
+Each address may be tagged with a label string.
|
|
+In order to preserve compatibility with Linux-2.0 net aliases,
|
|
+this string must coincide with the name of the device or must be prefixed
|
|
+with the device name followed by colon.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VALUE"
|
|
+the scope of the area where this address is valid.
|
|
+The available scopes are listed in file
|
|
+.BR "/etc/iproute2/rt_scopes" .
|
|
+Predefined scope values are:
|
|
+
|
|
+.in +8
|
|
+.B global
|
|
+- the address is globally valid.
|
|
+.sp
|
|
+.B site
|
|
+- (IPv6 only) the address is site local, i.e. it is
|
|
+valid inside this site.
|
|
+.sp
|
|
+.B link
|
|
+- the address is link local, i.e. it is valid only on this device.
|
|
+.sp
|
|
+.B host
|
|
+- the address is valid only inside this host.
|
|
+.in -8
|
|
+
|
|
+.SS ip address delete - delete protocol address
|
|
+.B Arguments:
|
|
+coincide with the arguments of
|
|
+.B ip addr add.
|
|
+The device name is a required argument. The rest are optional.
|
|
+If no arguments are given, the first address is deleted.
|
|
+
|
|
+.SS ip address show - look at protocol addresses
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+name of device.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+only list addresses with this scope.
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX"
|
|
+only list addresses matching this prefix.
|
|
+
|
|
+.TP
|
|
+.BI label " PATTERN"
|
|
+only list addresses with labels matching the
|
|
+.IR "PATTERN" .
|
|
+.I PATTERN
|
|
+is a usual shell style pattern.
|
|
+
|
|
+.TP
|
|
+.BR dynamic " and " permanent
|
|
+(IPv6 only) only list addresses installed due to stateless
|
|
+address configuration or only list permanent (not dynamic)
|
|
+addresses.
|
|
+
|
|
+.TP
|
|
+.B tentative
|
|
+(IPv6 only) only list addresses which did not pass duplicate
|
|
+address detection.
|
|
+
|
|
+.TP
|
|
+.B deprecated
|
|
+(IPv6 only) only list deprecated addresses.
|
|
+
|
|
+.TP
|
|
+.BR primary " and " secondary
|
|
+only list primary (or secondary) addresses.
|
|
+
|
|
+.SS ip address flush - flush protocol addresses
|
|
+This command flushes the protocol addresses selected by some criteria.
|
|
+
|
|
+.PP
|
|
+This command has the same arguments as
|
|
+.B show.
|
|
+The difference is that it does not run when no arguments are given.
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+This command (and other
|
|
+.B flush
|
|
+commands described below) is pretty dangerous. If you make a mistake,
|
|
+it will not forgive it, but will cruelly purge all the addresses.
|
|
+
|
|
+.PP
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of deleted
|
|
+addresses and the number of rounds made to flush the address list. If
|
|
+this option is given twice,
|
|
+.B ip addr flush
|
|
+also dumps all the deleted addresses in the format described in the
|
|
+previous subsection.
|
|
+
|
|
+.SH ip neighbour - neighbour/arp tables management.
|
|
+
|
|
+.B neighbour
|
|
+objects establish bindings between protocol addresses and
|
|
+link layer addresses for hosts sharing the same link.
|
|
+Neighbour entries are organized into tables. The IPv4 neighbour table
|
|
+is known by another name - the ARP table.
|
|
+
|
|
+.P
|
|
+The corresponding commands display neighbour bindings
|
|
+and their properties, add new neighbour entries and delete old ones.
|
|
+
|
|
+.SS ip neighbour add - add a new neighbour entry
|
|
+.SS ip neighbour change - change an existing entry
|
|
+.SS ip neighbour replace - add a new entry or change an existing one
|
|
+
|
|
+These commands create new neighbour records or update existing ones.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the protocol address of the neighbour. It is either an IPv4 or IPv6 address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the interface to which this neighbour is attached.
|
|
+
|
|
+.TP
|
|
+.BI lladdr " LLADDRESS"
|
|
+the link layer address of the neighbour.
|
|
+.I LLADDRESS
|
|
+can also be
|
|
+.BR "null" .
|
|
+
|
|
+.TP
|
|
+.BI nud " NUD_STATE"
|
|
+the state of the neighbour entry.
|
|
+.B nud
|
|
+is an abbreviation for 'Neigh bour Unreachability Detection'.
|
|
+The state can take one of the following values:
|
|
+
|
|
+.in +8
|
|
+.B permanent
|
|
+- the neighbour entry is valid forever and can be only
|
|
+be removed administratively.
|
|
+.sp
|
|
+
|
|
+.B noarp
|
|
+- the neighbour entry is valid. No attempts to validate
|
|
+this entry will be made but it can be removed when its lifetime expires.
|
|
+.sp
|
|
+
|
|
+.B reachable
|
|
+- the neighbour entry is valid until the reachability
|
|
+timeout expires.
|
|
+.sp
|
|
+
|
|
+.B stale
|
|
+- the neighbour entry is valid but suspicious.
|
|
+This option to
|
|
+.B ip neigh
|
|
+does not change the neighbour state if it was valid and the address
|
|
+is not changed by this command.
|
|
+.in -8
|
|
+
|
|
+.SS ip neighbour delete - delete a neighbour entry
|
|
+This command invalidates a neighbour entry.
|
|
+
|
|
+.PP
|
|
+The arguments are the same as with
|
|
+.BR "ip neigh add" ,
|
|
+except that
|
|
+.B lladdr
|
|
+and
|
|
+.B nud
|
|
+are ignored.
|
|
+
|
|
+.PP
|
|
+.B Warning:
|
|
+Attempts to delete or manually change a
|
|
+.B noarp
|
|
+entry created by the kernel may result in unpredictable behaviour.
|
|
+Particularly, the kernel may try to resolve this address even
|
|
+on a
|
|
+.B NOARP
|
|
+interface or if the address is multicast or broadcast.
|
|
+
|
|
+.SS ip neighbour show - list neighbour entries
|
|
+
|
|
+This commands displays neighbour tables.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the prefix selecting the neighbours to list.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+only list the neighbours attached to this device.
|
|
+
|
|
+.TP
|
|
+.B unused
|
|
+only list neighbours which are not currently in use.
|
|
+
|
|
+.TP
|
|
+.BI nud " NUD_STATE"
|
|
+only list neighbour entries in this state.
|
|
+.I NUD_STATE
|
|
+takes values listed below or the special value
|
|
+.B all
|
|
+which means all states. This option may occur more than once.
|
|
+If this option is absent,
|
|
+.B ip
|
|
+lists all entries except for
|
|
+.B none
|
|
+and
|
|
+.BR "noarp" .
|
|
+
|
|
+.SS ip neighbour flush - flush neighbour entries
|
|
+This command flushes neighbour tables, selecting
|
|
+entries to flush by some criteria.
|
|
+
|
|
+.PP
|
|
+This command has the same arguments as
|
|
+.B show.
|
|
+The differences are that it does not run when no arguments are given,
|
|
+and that the default neighbour states to be flushed do not include
|
|
+.B permanent
|
|
+and
|
|
+.BR "noarp" .
|
|
+
|
|
+.PP
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of
|
|
+deleted neighbours and the number of rounds made to flush the
|
|
+neighbour table. If the option is given
|
|
+twice,
|
|
+.B ip neigh flush
|
|
+also dumps all the deleted neighbours.
|
|
+
|
|
+.SH ip route - routing table management
|
|
+Manipulate route entries in the kernel routing tables keep
|
|
+information about paths to other networked nodes.
|
|
+.sp
|
|
+.B Route types:
|
|
+
|
|
+.in +8
|
|
+.B unicast
|
|
+- the route entry describes real paths to the destinations covered
|
|
+by the route prefix.
|
|
+
|
|
+.sp
|
|
+.B unreachable
|
|
+- these destinations are unreachable. Packets are discarded and the
|
|
+ICMP message
|
|
+.I host unreachable
|
|
+is generated.
|
|
+The local senders get an
|
|
+.I EHOSTUNREACH
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B blackhole
|
|
+- these destinations are unreachable. Packets are discarded silently.
|
|
+The local senders get an
|
|
+.I EINVAL
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B prohibit
|
|
+- these destinations are unreachable. Packets are discarded and the
|
|
+ICMP message
|
|
+.I communication administratively prohibited
|
|
+is generated. The local senders get an
|
|
+.I EACCES
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B local
|
|
+- the destinations are assigned to this host. The packets are looped
|
|
+back and delivered locally.
|
|
+
|
|
+.sp
|
|
+.B broadcast
|
|
+- the destinations are broadcast addresses. The packets are sent as
|
|
+link broadcasts.
|
|
+
|
|
+.sp
|
|
+.B throw
|
|
+- a special control route used together with policy rules. If such a
|
|
+route is selected, lookup in this table is terminated pretending that
|
|
+no route was found. Without policy routing it is equivalent to the
|
|
+absence of the route in the routing table. The packets are dropped
|
|
+and the ICMP message
|
|
+.I net unreachable
|
|
+is generated. The local senders get an
|
|
+.I ENETUNREACH
|
|
+error.
|
|
+
|
|
+.sp
|
|
+.B nat
|
|
+- a special NAT route. Destinations covered by the prefix
|
|
+are considered to be dummy (or external) addresses which require translation
|
|
+to real (or internal) ones before forwarding. The addresses to translate to
|
|
+are selected with the attribute
|
|
+.BR "via" .
|
|
+
|
|
+.sp
|
|
+.B anycast
|
|
+.RI "- " "not implemented"
|
|
+the destinations are
|
|
+.I anycast
|
|
+addresses assigned to this host. They are mainly equivalent
|
|
+to
|
|
+.B local
|
|
+with one difference: such addresses are invalid when used
|
|
+as the source address of any packet.
|
|
+
|
|
+.sp
|
|
+.B multicast
|
|
+- a special type used for multicast routing. It is not present in
|
|
+normal routing tables.
|
|
+.in -8
|
|
+
|
|
+.P
|
|
+.B Route tables:
|
|
+Linux-2.x can pack routes into several routing
|
|
+tables identified by a number in the range from 1 to 255 or by
|
|
+name from the file
|
|
+.B /etc/iproute2/rt_tables
|
|
+. By default all normal routes are inserted into the
|
|
+.B main
|
|
+table (ID 254) and the kernel only uses this table when calculating routes.
|
|
+
|
|
+.sp
|
|
+Actually, one other table always exists, which is invisible but
|
|
+even more important. It is the
|
|
+.B local
|
|
+table (ID 255). This table
|
|
+consists of routes for local and broadcast addresses. The kernel maintains
|
|
+this table automatically and the administrator usually need not modify it
|
|
+or even look at it.
|
|
+
|
|
+The multiple routing tables enter the game when
|
|
+.I policy routing
|
|
+is used.
|
|
+
|
|
+.SS ip route add - add new route
|
|
+.SS ip route change - change route
|
|
+.SS ip route replace - change or add new one
|
|
+
|
|
+.TP
|
|
+.BI to " TYPE PREFIX " (default)
|
|
+the destination prefix of the route. If
|
|
+.I TYPE
|
|
+is omitted,
|
|
+.B ip
|
|
+assumes type
|
|
+.BR "unicast" .
|
|
+Other values of
|
|
+.I TYPE
|
|
+are listed above.
|
|
+.I PREFIX
|
|
+is an IP or IPv6 address optionally followed by a slash and the
|
|
+prefix length. If the length of the prefix is missing,
|
|
+.B ip
|
|
+assumes a full-length host route. There is also a special
|
|
+.I PREFIX
|
|
+.B default
|
|
+- which is equivalent to IP
|
|
+.B 0/0
|
|
+or to IPv6
|
|
+.BR "::/0" .
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+the Type Of Service (TOS) key. This key has no associated mask and
|
|
+the longest match is understood as: First, compare the TOS
|
|
+of the route and of the packet. If they are not equal, then the packet
|
|
+may still match a route with a zero TOS.
|
|
+.I TOS
|
|
+is either an 8 bit hexadecimal number or an identifier
|
|
+from
|
|
+.BR "/etc/iproute2/rt_dsfield" .
|
|
+
|
|
+.TP
|
|
+.BI metric " NUMBER"
|
|
+.TP
|
|
+.BI preference " NUMBER"
|
|
+the preference value of the route.
|
|
+.I NUMBER
|
|
+is an arbitrary 32bit number.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+the table to add this route to.
|
|
+.I TABLEID
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_tables" .
|
|
+If this parameter is omitted,
|
|
+.B ip
|
|
+assumes the
|
|
+.B main
|
|
+table, with the exception of
|
|
+.BR local " , " broadcast " and " nat
|
|
+routes, which are put into the
|
|
+.B local
|
|
+table by default.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the output device name.
|
|
+
|
|
+.TP
|
|
+.BI via " ADDRESS"
|
|
+the address of the nexthop router. Actually, the sense of this field
|
|
+depends on the route type. For normal
|
|
+.B unicast
|
|
+routes it is either the true next hop router or, if it is a direct
|
|
+route installed in BSD compatibility mode, it can be a local address
|
|
+of the interface. For NAT routes it is the first address of the block
|
|
+of translated IP destinations.
|
|
+
|
|
+.TP
|
|
+.BI src " ADDRESS"
|
|
+the source address to prefer when sending to the destinations
|
|
+covered by the route prefix.
|
|
+
|
|
+.TP
|
|
+.BI realm " REALMID"
|
|
+the realm to which this route is assigned.
|
|
+.I REALMID
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_realms" .
|
|
+
|
|
+.TP
|
|
+.BI mtu " MTU"
|
|
+.TP
|
|
+.BI "mtu lock" " MTU"
|
|
+the MTU along the path to the destination. If the modifier
|
|
+.B lock
|
|
+is not used, the MTU may be updated by the kernel due to
|
|
+Path MTU Discovery. If the modifier
|
|
+.B lock
|
|
+is used, no path MTU discovery will be tried, all packets
|
|
+will be sent without the DF bit in IPv4 case or fragmented
|
|
+to MTU for IPv6.
|
|
+
|
|
+.TP
|
|
+.BI window " NUMBER"
|
|
+the maximal window for TCP to advertise to these destinations,
|
|
+measured in bytes. It limits maximal data bursts that our TCP
|
|
+peers are allowed to send to us.
|
|
+
|
|
+.TP
|
|
+.BI rtt " NUMBER"
|
|
+the initial RTT ('Round Trip Time') estimate.
|
|
+
|
|
+.TP
|
|
+.BI rttvar " NUMBER " "(2.3.15+ only)"
|
|
+the initial RTT variance estimate.
|
|
+
|
|
+.TP
|
|
+.BI ssthresh " NUMBER " "(2.3.15+ only)"
|
|
+an estimate for the initial slow start threshold.
|
|
+
|
|
+.TP
|
|
+.BI cwnd " NUMBER " "(2.3.15+ only)"
|
|
+the clamp for congestion window. It is ignored if the
|
|
+.B lock
|
|
+flag is not used.
|
|
+
|
|
+.TP
|
|
+.BI advmss " NUMBER " "(2.3.15+ only)"
|
|
+the MSS ('Maximal Segment Size') to advertise to these
|
|
+destinations when establishing TCP connections. If it is not given,
|
|
+Linux uses a default value calculated from the first hop device MTU.
|
|
+(If the path to these destination is asymmetric, this guess may be wrong.)
|
|
+
|
|
+.TP
|
|
+.BI reordering " NUMBER " "(2.3.15+ only)"
|
|
+Maximal reordering on the path to this destination.
|
|
+If it is not given, Linux uses the value selected with
|
|
+.B sysctl
|
|
+variable
|
|
+.BR "net/ipv4/tcp_reordering" .
|
|
+
|
|
+.TP
|
|
+.BI nexthop " NEXTHOP"
|
|
+the nexthop of a multipath route.
|
|
+.I NEXTHOP
|
|
+is a complex value with its own syntax similar to the top level
|
|
+argument lists:
|
|
+
|
|
+.in +8
|
|
+.BI via " ADDRESS"
|
|
+- is the nexthop router.
|
|
+.sp
|
|
+
|
|
+.BI dev " NAME"
|
|
+- is the output device.
|
|
+.sp
|
|
+
|
|
+.BI weight " NUMBER"
|
|
+- is a weight for this element of a multipath
|
|
+route reflecting its relative bandwidth or quality.
|
|
+.in -8
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+the scope of the destinations covered by the route prefix.
|
|
+.I SCOPE_VAL
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_scopes" .
|
|
+If this parameter is omitted,
|
|
+.B ip
|
|
+assumes scope
|
|
+.B global
|
|
+for all gatewayed
|
|
+.B unicast
|
|
+routes, scope
|
|
+.B link
|
|
+for direct
|
|
+.BR unicast " and " broadcast
|
|
+routes and scope
|
|
+.BR host " for " local
|
|
+routes.
|
|
+
|
|
+.TP
|
|
+.BI protocol " RTPROTO"
|
|
+the routing protocol identifier of this route.
|
|
+.I RTPROTO
|
|
+may be a number or a string from the file
|
|
+.BR "/etc/iproute2/rt_protos" .
|
|
+If the routing protocol ID is not given,
|
|
+.B ip assumes protocol
|
|
+.B boot
|
|
+(i.e. it assumes the route was added by someone who doesn't
|
|
+understand what they are doing). Several protocol values have
|
|
+a fixed interpretation.
|
|
+Namely:
|
|
+
|
|
+.in +8
|
|
+.B redirect
|
|
+- the route was installed due to an ICMP redirect.
|
|
+.sp
|
|
+
|
|
+.B kernel
|
|
+- the route was installed by the kernel during autoconfiguration.
|
|
+.sp
|
|
+
|
|
+.B boot
|
|
+- the route was installed during the bootup sequence.
|
|
+If a routing daemon starts, it will purge all of them.
|
|
+.sp
|
|
+
|
|
+.B static
|
|
+- the route was installed by the administrator
|
|
+to override dynamic routing. Routing daemon will respect them
|
|
+and, probably, even advertise them to its peers.
|
|
+.sp
|
|
+
|
|
+.B ra
|
|
+- the route was installed by Router Discovery protocol.
|
|
+.in -8
|
|
+
|
|
+.sp
|
|
+The rest of the values are not reserved and the administrator is free
|
|
+to assign (or not to assign) protocol tags.
|
|
+
|
|
+.TP
|
|
+.B onlink
|
|
+pretend that the nexthop is directly attached to this link,
|
|
+even if it does not match any interface prefix.
|
|
+
|
|
+.TP
|
|
+.B equalize
|
|
+allow packet by packet randomization on multipath routes.
|
|
+Without this modifier, the route will be frozen to one selected
|
|
+nexthop, so that load splitting will only occur on per-flow base.
|
|
+.B equalize
|
|
+only works if the kernel is patched.
|
|
+
|
|
+.SS ip route delete - delete route
|
|
+
|
|
+.B ip route del
|
|
+has the same arguments as
|
|
+.BR "ip route add" ,
|
|
+but their semantics are a bit different.
|
|
+
|
|
+Key values
|
|
+.RB "(" to ", " tos ", " preference " and " table ")"
|
|
+select the route to delete. If optional attributes are present,
|
|
+.B ip
|
|
+verifies that they coincide with the attributes of the route to delete.
|
|
+If no route with the given key and attributes was found,
|
|
+.B ip route del
|
|
+fails.
|
|
+
|
|
+.SS ip route show - list routes
|
|
+the command displays the contents of the routing tables or the route(s)
|
|
+selected by some criteria.
|
|
+
|
|
+.TP
|
|
+.BI to " SELECTOR " (default)
|
|
+only select routes from the given range of destinations.
|
|
+.I SELECTOR
|
|
+consists of an optional modifier
|
|
+.RB "(" root ", " match " or " exact ")"
|
|
+and a prefix.
|
|
+.BI root " PREFIX"
|
|
+selects routes with prefixes not shorter than
|
|
+.IR PREFIX "."
|
|
+F.e.
|
|
+.BI root " 0/0"
|
|
+selects the entire routing table.
|
|
+.BI match " PREFIX"
|
|
+selects routes with prefixes not longer than
|
|
+.IR PREFIX "."
|
|
+F.e.
|
|
+.BI match " 10.0/16"
|
|
+selects
|
|
+.IR 10.0/16 ","
|
|
+.IR 10/8 " and " 0/0 ,
|
|
+but it does not select
|
|
+.IR 10.1/16 " and " 10.0.0/24 .
|
|
+And
|
|
+.BI exact " PREFIX"
|
|
+(or just
|
|
+.IR PREFIX ")"
|
|
+selects routes with this exact prefix. If neither of these options
|
|
+are present,
|
|
+.B ip
|
|
+assumes
|
|
+.BI root " 0/0"
|
|
+i.e. it lists the entire table.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.BI dsfield " TOS"
|
|
+only select routes with the given TOS.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+show the routes from this table(s). The default setting is to show
|
|
+.BR table main "."
|
|
+.I TABLEID
|
|
+may either be the ID of a real table or one of the special values:
|
|
+.sp
|
|
+.in +8
|
|
+.B all
|
|
+- list all of the tables.
|
|
+.sp
|
|
+.B cache
|
|
+- dump the routing cache.
|
|
+.in -8
|
|
+
|
|
+.TP
|
|
+.B cloned
|
|
+.TP
|
|
+.B cached
|
|
+list cloned routes i.e. routes which were dynamically forked from
|
|
+other routes because some route attribute (f.e. MTU) was updated.
|
|
+Actually, it is equivalent to
|
|
+.BR "table cache" "."
|
|
+
|
|
+.TP
|
|
+.BI from " SELECTOR"
|
|
+the same syntax as for
|
|
+.BR to ","
|
|
+but it binds the source address range rather than destinations.
|
|
+Note that the
|
|
+.B from
|
|
+option only works with cloned routes.
|
|
+
|
|
+.TP
|
|
+.BI protocol " RTPROTO"
|
|
+only list routes of this protocol.
|
|
+
|
|
+.TP
|
|
+.BI scope " SCOPE_VAL"
|
|
+only list routes with this scope.
|
|
+
|
|
+.TP
|
|
+.BI type " TYPE"
|
|
+only list routes of this type.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+only list routes going via this device.
|
|
+
|
|
+.TP
|
|
+.BI via " PREFIX"
|
|
+only list routes going via the nexthop routers selected by
|
|
+.IR PREFIX "."
|
|
+
|
|
+.TP
|
|
+.BI src " PREFIX"
|
|
+only list routes with preferred source addresses selected
|
|
+by
|
|
+.IR PREFIX "."
|
|
+
|
|
+.TP
|
|
+.BI realm " REALMID"
|
|
+.TP
|
|
+.BI realms " FROMREALM/TOREALM"
|
|
+only list routes with these realms.
|
|
+
|
|
+.SS ip route flush - flush routing tables
|
|
+this command flushes routes selected by some criteria.
|
|
+
|
|
+.sp
|
|
+The arguments have the same syntax and semantics as the arguments of
|
|
+.BR "ip route show" ,
|
|
+but routing tables are not listed but purged. The only difference is
|
|
+the default action:
|
|
+.B show
|
|
+dumps all the IP main routing table but
|
|
+.B flush
|
|
+prints the helper page.
|
|
+
|
|
+.sp
|
|
+With the
|
|
+.B -statistics
|
|
+option, the command becomes verbose. It prints out the number of
|
|
+deleted routes and the number of rounds made to flush the routing
|
|
+table. If the option is given
|
|
+twice,
|
|
+.B ip route flush
|
|
+also dumps all the deleted routes in the format described in the
|
|
+previous subsection.
|
|
+
|
|
+.SS ip route get - get a single route
|
|
+this command gets a single route to a destination and prints its
|
|
+contents exactly as the kernel sees it.
|
|
+
|
|
+.TP
|
|
+.BI to " ADDRESS " (default)
|
|
+the destination address.
|
|
+
|
|
+.TP
|
|
+.BI from " ADDRESS"
|
|
+the source address.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+the Type Of Service.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+the device from which this packet is expected to arrive.
|
|
+
|
|
+.TP
|
|
+.BI oif " NAME"
|
|
+force the output device on which this packet will be routed.
|
|
+
|
|
+.TP
|
|
+.B connected
|
|
+if no source address
|
|
+.RB "(option " from ")"
|
|
+was given, relookup the route with the source set to the preferred
|
|
+address received from the first lookup.
|
|
+If policy routing is used, it may be a different route.
|
|
+
|
|
+.P
|
|
+Note that this operation is not equivalent to
|
|
+.BR "ip route show" .
|
|
+.B show
|
|
+shows existing routes.
|
|
+.B get
|
|
+resolves them and creates new clones if necessary. Essentially,
|
|
+.B get
|
|
+is equivalent to sending a packet along this path.
|
|
+If the
|
|
+.B iif
|
|
+argument is not given, the kernel creates a route
|
|
+to output packets towards the requested destination.
|
|
+This is equivalent to pinging the destination
|
|
+with a subsequent
|
|
+.BR "ip route ls cache" ,
|
|
+however, no packets are actually sent. With the
|
|
+.B iif
|
|
+argument, the kernel pretends that a packet arrived from this interface
|
|
+and searches for a path to forward the packet.
|
|
+
|
|
+.SH ip rule - routing policy database management
|
|
+
|
|
+.BR "Rule" s
|
|
+in the routing policy database control the route selection algorithm.
|
|
+
|
|
+.P
|
|
+Classic routing algorithms used in the Internet make routing decisions
|
|
+based only on the destination address of packets (and in theory,
|
|
+but not in practice, on the TOS field).
|
|
+
|
|
+.P
|
|
+In some circumstances we want to route packets differently depending not only
|
|
+on destination addresses, but also on other packet fields: source address,
|
|
+IP protocol, transport protocol ports or even packet payload.
|
|
+This task is called 'policy routing'.
|
|
+
|
|
+.P
|
|
+To solve this task, the conventional destination based routing table, ordered
|
|
+according to the longest match rule, is replaced with a 'routing policy
|
|
+database' (or RPDB), which selects routes by executing some set of rules.
|
|
+
|
|
+.P
|
|
+Each policy routing rule consists of a
|
|
+.B selector
|
|
+and an
|
|
+.B action predicate.
|
|
+The RPDB is scanned in the order of increasing priority. The selector
|
|
+of each rule is applied to {source address, destination address, incoming
|
|
+interface, tos, fwmark} and, if the selector matches the packet,
|
|
+the action is performed. The action predicate may return with success.
|
|
+In this case, it will either give a route or failure indication
|
|
+and the RPDB lookup is terminated. Otherwise, the RPDB program
|
|
+continues on the next rule.
|
|
+
|
|
+.P
|
|
+Semantically, natural action is to select the nexthop and the output device.
|
|
+
|
|
+.P
|
|
+At startup time the kernel configures the default RPDB consisting of three
|
|
+rules:
|
|
+
|
|
+.TP
|
|
+1.
|
|
+Priority: 0, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B local
|
|
+(ID 255).
|
|
+The
|
|
+.B local
|
|
+table is a special routing table containing
|
|
+high priority control routes for local and broadcast addresses.
|
|
+.sp
|
|
+Rule 0 is special. It cannot be deleted or overridden.
|
|
+
|
|
+.TP
|
|
+2.
|
|
+Priority: 32766, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B main
|
|
+(ID 254).
|
|
+The
|
|
+.B main
|
|
+table is the normal routing table containing all non-policy
|
|
+routes. This rule may be deleted and/or overridden with other
|
|
+ones by the administrator.
|
|
+
|
|
+.TP
|
|
+3.
|
|
+Priority: 32767, Selector: match anything, Action: lookup routing
|
|
+table
|
|
+.B default
|
|
+(ID 253).
|
|
+The
|
|
+.B default
|
|
+table is empty. It is reserved for some post-processing if no previous
|
|
+default rules selected the packet.
|
|
+This rule may also be deleted.
|
|
+
|
|
+.P
|
|
+Each RPDB entry has additional
|
|
+attributes. F.e. each rule has a pointer to some routing
|
|
+table. NAT and masquerading rules have an attribute to select new IP
|
|
+address to translate/masquerade. Besides that, rules have some
|
|
+optional attributes, which routes have, namely
|
|
+.BR "realms" .
|
|
+These values do not override those contained in the routing tables. They
|
|
+are only used if the route did not select any attributes.
|
|
+
|
|
+.sp
|
|
+The RPDB may contain rules of the following types:
|
|
+
|
|
+.in +8
|
|
+.B unicast
|
|
+- the rule prescribes to return the route found
|
|
+in the routing table referenced by the rule.
|
|
+
|
|
+.B blackhole
|
|
+- the rule prescribes to silently drop the packet.
|
|
+
|
|
+.B unreachable
|
|
+- the rule prescribes to generate a 'Network is unreachable' error.
|
|
+
|
|
+.B prohibit
|
|
+- the rule prescribes to generate 'Communication is administratively
|
|
+prohibited' error.
|
|
+
|
|
+.B nat
|
|
+- the rule prescribes to translate the source address
|
|
+of the IP packet into some other value.
|
|
+.in -8
|
|
+
|
|
+.SS ip rule add - insert a new rule
|
|
+.SS ip rule delete - delete a rule
|
|
+
|
|
+.TP
|
|
+.BI type " TYPE " (default)
|
|
+the type of this rule. The list of valid types was given in the previous
|
|
+subsection.
|
|
+
|
|
+.TP
|
|
+.BI from " PREFIX"
|
|
+select the source prefix to match.
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX"
|
|
+select the destination prefix to match.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+select the incoming device to match. If the interface is loopback,
|
|
+the rule only matches packets originating from this host. This means
|
|
+that you may create separate routing tables for forwarded and local
|
|
+packets and, hence, completely segregate them.
|
|
+
|
|
+.TP
|
|
+.BI tos " TOS"
|
|
+.TP
|
|
+.BI dsfield " TOS"
|
|
+select the TOS value to match.
|
|
+
|
|
+.TP
|
|
+.BI fwmark " MARK"
|
|
+select the
|
|
+.B fwmark
|
|
+value to match.
|
|
+
|
|
+.TP
|
|
+.BI priority " PREFERENCE"
|
|
+the priority of this rule. Each rule should have an explicitly
|
|
+set
|
|
+.I unique
|
|
+priority value.
|
|
+
|
|
+.TP
|
|
+.BI table " TABLEID"
|
|
+the routing table identifier to lookup if the rule selector matches.
|
|
+
|
|
+.TP
|
|
+.BI realms " FROM/TO"
|
|
+Realms to select if the rule matched and the routing table lookup
|
|
+succeeded. Realm
|
|
+.I TO
|
|
+is only used if the route did not select any realm.
|
|
+
|
|
+.TP
|
|
+.BI nat " ADDRESS"
|
|
+The base of the IP address block to translate (for source addresses).
|
|
+The
|
|
+.I ADDRESS
|
|
+may be either the start of the block of NAT addresses (selected by NAT
|
|
+routes) or a local host address (or even zero).
|
|
+In the last case the router does not translate the packets, but
|
|
+masquerades them to this address.
|
|
+
|
|
+.B Warning:
|
|
+Changes to the RPDB made with these commands do not become active
|
|
+immediately. It is assumed that after a script finishes a batch of
|
|
+updates, it flushes the routing cache with
|
|
+.BR "ip route flush cache" .
|
|
+
|
|
+.SS ip rule show - list rules
|
|
+This command has no arguments.
|
|
+
|
|
+.SH ip maddress - multicast addresses management
|
|
+
|
|
+.B maddress
|
|
+objects are multicast addresses.
|
|
+
|
|
+.SS ip maddress show - list multicast addresses
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME " (default)
|
|
+the device name.
|
|
+
|
|
+.SS ip maddress add - add a multicast address
|
|
+.SS ip maddress delete - delete a multicast address
|
|
+these commands attach/detach a static link layer multicast address
|
|
+to listen on the interface.
|
|
+Note that it is impossible to join protocol multicast groups
|
|
+statically. This command only manages link layer addresses.
|
|
+
|
|
+.TP
|
|
+.BI address " LLADDRESS " (default)
|
|
+the link layer multicast address.
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+the device to join/leave this multicast address.
|
|
+
|
|
+.SH ip mroute - multicast routing cache management
|
|
+.B mroute
|
|
+objects are multicast routing cache entries created by a user level
|
|
+mrouting daemon (f.e.
|
|
+.B pimd
|
|
+or
|
|
+.B mrouted
|
|
+).
|
|
+
|
|
+Due to the limitations of the current interface to the multicast routing
|
|
+engine, it is impossible to change
|
|
+.B mroute
|
|
+objects administratively, so we may only display them. This limitation
|
|
+will be removed in the future.
|
|
+
|
|
+.SS ip mroute show - list mroute cache entries
|
|
+
|
|
+.TP
|
|
+.BI to " PREFIX " (default)
|
|
+the prefix selecting the destination multicast addresses to list.
|
|
+
|
|
+.TP
|
|
+.BI iif " NAME"
|
|
+the interface on which multicast packets are received.
|
|
+
|
|
+.TP
|
|
+.BI from " PREFIX"
|
|
+the prefix selecting the IP source addresses of the multicast route.
|
|
+
|
|
+.SH ip tunnel - tunnel configuration
|
|
+.B tunnel
|
|
+objects are tunnels, encapsulating packets in IPv4 packets and then
|
|
+sending them over the IP infrastructure.
|
|
+
|
|
+.SS ip tunnel add - add a new tunnel
|
|
+.SS ip tunnel change - change an existing tunnel
|
|
+.SS ip tunnel delete - destroy a tunnel
|
|
+
|
|
+.TP
|
|
+.BI name " NAME " (default)
|
|
+select the tunnel device name.
|
|
+
|
|
+.TP
|
|
+.BI mode " MODE"
|
|
+set the tunnel mode. Three modes are currently available:
|
|
+.BR ipip ", " sit " and " gre "."
|
|
+
|
|
+.TP
|
|
+.BI remote " ADDRESS"
|
|
+set the remote endpoint of the tunnel.
|
|
+
|
|
+.TP
|
|
+.BI local " ADDRESS"
|
|
+set the fixed local address for tunneled packets.
|
|
+It must be an address on another interface of this host.
|
|
+
|
|
+.TP
|
|
+.BI ttl " N"
|
|
+set a fixed TTL
|
|
+.I N
|
|
+on tunneled packets.
|
|
+.I N
|
|
+is a number in the range 1--255. 0 is a special value
|
|
+meaning that packets inherit the TTL value.
|
|
+The default value is:
|
|
+.BR "inherit" .
|
|
+
|
|
+.TP
|
|
+.BI tos " T"
|
|
+.TP
|
|
+.BI dsfield " T"
|
|
+set a fixed TOS
|
|
+.I T
|
|
+on tunneled packets.
|
|
+The default value is:
|
|
+.BR "inherit" .
|
|
+
|
|
+.TP
|
|
+.BI dev " NAME"
|
|
+bind the tunnel to the device
|
|
+.I NAME
|
|
+so that tunneled packets will only be routed via this device and will
|
|
+not be able to escape to another device when the route to endpoint
|
|
+changes.
|
|
+
|
|
+.TP
|
|
+.B nopmtudisc
|
|
+disable Path MTU Discovery on this tunnel.
|
|
+It is enabled by default. Note that a fixed ttl is incompatible
|
|
+with this option: tunnelling with a fixed ttl always makes pmtu
|
|
+discovery.
|
|
+
|
|
+.TP
|
|
+.BI key " K"
|
|
+.TP
|
|
+.BI ikey " K"
|
|
+.TP
|
|
+.BI okey " K"
|
|
+.RB ( " only GRE tunnels " )
|
|
+use keyed GRE with key
|
|
+.IR K ". " K
|
|
+is either a number or an IP address-like dotted quad.
|
|
+The
|
|
+.B key
|
|
+parameter sets the key to use in both directions.
|
|
+The
|
|
+.BR ikey " and " okey
|
|
+parameters set different keys for input and output.
|
|
+
|
|
+.TP
|
|
+.BR csum ", " icsum ", " ocsum
|
|
+.RB ( " only GRE tunnels " )
|
|
+generate/require checksums for tunneled packets.
|
|
+The
|
|
+.B ocsum
|
|
+flag calculates checksums for outgoing packets.
|
|
+The
|
|
+.B icsum
|
|
+flag requires that all input packets have the correct
|
|
+checksum. The
|
|
+.B csum
|
|
+flag is equivalent to the combination
|
|
+.BR "icsum ocsum" .
|
|
+
|
|
+.TP
|
|
+.BR seq ", " iseq ", " oseq
|
|
+.RB ( " only GRE tunnels " )
|
|
+serialize packets.
|
|
+The
|
|
+.B oseq
|
|
+flag enables sequencing of outgoing packets.
|
|
+The
|
|
+.B iseq
|
|
+flag requires that all input packets are serialized.
|
|
+The
|
|
+.B seq
|
|
+flag is equivalent to the combination
|
|
+.BR "iseq oseq" .
|
|
+.B It isn't work. Don't use it.
|
|
+
|
|
+.SS ip tunnel show - list tunnels
|
|
+This command has no arguments.
|
|
+
|
|
+.SH ip monitor and rtmon - state monitoring
|
|
+
|
|
+The
|
|
+.B ip
|
|
+utility can monitor the state of devices, addresses
|
|
+and routes continuously. This option has a slightly different format.
|
|
+Namely, the
|
|
+.B monitor
|
|
+command is the first in the command line and then the object list follows:
|
|
+
|
|
+.BR "ip monitor" " [ " all " |"
|
|
+.IR LISTofOBJECTS " ]"
|
|
+
|
|
+.I OBJECT-LIST
|
|
+is the list of object types that we want to monitor.
|
|
+It may contain
|
|
+.BR link ", " address " and " route "."
|
|
+If no
|
|
+.B file
|
|
+argument is given,
|
|
+.B ip
|
|
+opens RTNETLINK, listens on it and dumps state changes in the format
|
|
+described in previous sections.
|
|
+
|
|
+.P
|
|
+If a file name is given, it does not listen on RTNETLINK,
|
|
+but opens the file containing RTNETLINK messages saved in binary format
|
|
+and dumps them. Such a history file can be generated with the
|
|
+.B rtmon
|
|
+utility. This utility has a command line syntax similar to
|
|
+.BR "ip monitor" .
|
|
+Ideally,
|
|
+.B rtmon
|
|
+should be started before the first network configuration command
|
|
+is issued. F.e. if you insert:
|
|
+.sp
|
|
+.in +8
|
|
+rtmon file /var/log/rtmon.log
|
|
+.in -8
|
|
+.sp
|
|
+in a startup script, you will be able to view the full history
|
|
+later.
|
|
+
|
|
+.P
|
|
+Certainly, it is possible to start
|
|
+.B rtmon
|
|
+at any time.
|
|
+It prepends the history with the state snapshot dumped at the moment
|
|
+of starting.
|
|
+
|
|
+.SH HISTORY
|
|
+
|
|
+.B ip
|
|
+was written by Alexey N. Kuznetsov and added in Linux 2.2.
|
|
+.SH SEE ALSO
|
|
+.BR tc (8)
|
|
+.br
|
|
+.RB "IP Command reference " ip-cref.ps
|
|
+.br
|
|
+.RB "IP tunnels " ip-cref.ps
|
|
+
|
|
+.SH AUTHOR
|
|
+
|
|
+Manpage maintained by Michail Litvak <mci@owl.openwall.com>
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-cbq-details.8 iproute2/debian/manpages/old/tc-cbq-details.8
|
|
--- iproute2-orig/debian/manpages/old/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,425 @@
|
|
+.TH CBQ 8 "8 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 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
|
|
+Shaping is done using link idle time calculations, and actions taken if
|
|
+these calculations deviate from set limits.
|
|
+
|
|
+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.
|
|
+
|
|
+From the kernel's perspective, this is hard to measure, so CBQ instead
|
|
+derives the idle time from the number of microseconds (in fact, jiffies)
|
|
+that elapse between requests from the device driver for more data. Combined
|
|
+with the knowledge of packet sizes, this is used to approximate how full or
|
|
+empty the link is.
|
|
+
|
|
+This is rather circumspect and doesn't always arrive at proper
|
|
+results. For example, what is the actual link speed of an interface
|
|
+that is not really able to transmit the full 100mbit/s of data,
|
|
+perhaps because of a badly implemented driver? A PCMCIA network card
|
|
+will also never achieve 100mbit/s because of the way the bus is
|
|
+designed - again, how do we calculate the idle time?
|
|
+
|
|
+The physical link bandwidth may be ill defined in case of not-quite-real
|
|
+network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
|
|
+bandwidth in that case is probably determined by the efficiency of pipes
|
|
+to userspace - which not defined.
|
|
+
|
|
+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. If a verdict is reached, this
|
|
+process is repeated for the recipient class which might have further
|
|
+means of classifying traffic to its children, if any.
|
|
+
|
|
+CBQ has the following methods available to classify a packet to any child
|
|
+classes.
|
|
+.TP
|
|
+(i)
|
|
+.B skb->priority class encoding.
|
|
+Can be set from userspace by an application with the
|
|
+.B SO_PRIORITY
|
|
+setsockopt.
|
|
+The
|
|
+.B skb->priority class encoding
|
|
+only applies if the skb->priority holds a major:minor handle of an existing
|
|
+class within this qdisc.
|
|
+.TP
|
|
+(ii)
|
|
+tc filters attached to the class.
|
|
+.TP
|
|
+(iii)
|
|
+The defmap of a class, as set with the
|
|
+.B split & defmap
|
|
+parameters. The defmap may contain instructions for each possible Linux packet
|
|
+priority.
|
|
+
|
|
+.P
|
|
+Each class also has a
|
|
+.B level.
|
|
+Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
|
|
+.SH CLASSIFICATION ALGORITHM
|
|
+
|
|
+Classification is a loop, which terminates when a leaf class is found. At any
|
|
+point the loop may jump to the fallback algorithm.
|
|
+
|
|
+The loop consists of the following steps:
|
|
+.TP
|
|
+(i)
|
|
+If the packet is generated locally and has a valid classid encoded within its
|
|
+.B skb->priority,
|
|
+choose it and terminate.
|
|
+
|
|
+.TP
|
|
+(ii)
|
|
+Consult the tc filters, if any, attached to this child. If these return
|
|
+a class which is not a leaf class, restart loop from the class returned.
|
|
+If it is a leaf, choose it and terminate.
|
|
+.TP
|
|
+(iii)
|
|
+If the tc filters did not return a class, but did return a classid,
|
|
+try to find a class with that id within this qdisc.
|
|
+Check if the found class is of a lower
|
|
+.B level
|
|
+than the current class. If so, and the returned class is not a leaf node,
|
|
+restart the loop at the found class. If it is a leaf node, terminate.
|
|
+If we found an upward reference to a higher level, enter the fallback
|
|
+algorithm.
|
|
+.TP
|
|
+(iv)
|
|
+If the tc filters did not return a class, nor a valid reference to one,
|
|
+consider the minor number of the reference to be the priority. Retrieve
|
|
+a class from the defmap of this class for the priority. If this did not
|
|
+contain a class, consult the defmap of this class for the
|
|
+.B BEST_EFFORT
|
|
+class. If this is an upward reference, or no
|
|
+.B BEST_EFFORT
|
|
+class was defined,
|
|
+enter the fallback algorithm. If a valid class was found, and it is not a
|
|
+leaf node, restart the loop at this class. If it is a leaf, choose it and
|
|
+terminate. If
|
|
+neither the priority distilled from the classid, nor the
|
|
+.B BEST_EFFORT
|
|
+priority yielded a class, enter the fallback algorithm.
|
|
+.P
|
|
+The fallback algorithm resides outside of the loop and is as follows.
|
|
+.TP
|
|
+(i)
|
|
+Consult the defmap of the class at which the jump to fallback occured. If
|
|
+the defmap contains a class for the
|
|
+.B
|
|
+priority
|
|
+of the class (which is related to the TOS field), choose this class and
|
|
+terminate.
|
|
+.TP
|
|
+(ii)
|
|
+Consult the map for a class for the
|
|
+.B BEST_EFFORT
|
|
+priority. If found, choose it, and terminate.
|
|
+.TP
|
|
+(iii)
|
|
+Choose the class at which break out to the fallback algorithm occured. Terminate.
|
|
+.P
|
|
+The packet is enqueued to the class which was chosen when either algorithm
|
|
+terminated. It is therefore possible for a packet to be enqueued *not* at a
|
|
+leaf node, but in the middle of the hierarchy.
|
|
+
|
|
+.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.
|
|
+
|
|
+.B CERTAINTY ENDS HERE, ANK PLEASE HELP
|
|
+
|
|
+Each class is not allowed to send at length though - they can only dequeue a
|
|
+configurable amount of data during each round.
|
|
+
|
|
+If a class is about to go overlimit, and it is not
|
|
+.B bounded
|
|
+it will try to borrow avgidle from siblings that are not
|
|
+.B isolated.
|
|
+This process is repeated from the bottom upwards. If a class is unable
|
|
+to borrow enough avgidle to send a packet, it is throttled and not asked
|
|
+for a packet for enough time for the avgidle to increase above zero.
|
|
+
|
|
+.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
|
|
+.B AGAIN.
|
|
+
|
|
+.SH QDISC
|
|
+The root qdisc of a CBQ 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.
|
|
+.TP
|
|
+avpkt bytes
|
|
+For calculations, the average packet size must be known. It is silently capped
|
|
+at a minimum of 2/3 of the interface MTU. 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. Defaults
|
|
+to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
|
|
+.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.
|
|
+
|
|
+.TP
|
|
+priority 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 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.
|
|
+
|
|
+.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.
|
|
+
|
|
+.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 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 Guarantee 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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-cbq.8 iproute2/debian/manpages/old/tc-cbq.8
|
|
--- iproute2-orig/debian/manpages/old/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-htb.8 iproute2/debian/manpages/old/tc-htb.8
|
|
--- iproute2-orig/debian/manpages/old/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,150 @@
|
|
+.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 HTB qdisc class tree has the following parameters:
|
|
+
|
|
+.TP
|
|
+parent major:minor | root
|
|
+This mandatory parameter determines the place of the HTB instance, either at the
|
|
+.B root
|
|
+of an interface or within an existing class.
|
|
+.TP
|
|
+handle major:
|
|
+Like all other qdiscs, the HTB 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 SEE ALSO
|
|
+.BR tc (8)
|
|
+.P
|
|
+HTB website: http://luxik.cdi.cz/~devik/qos/htb/
|
|
+.SH AUTHOR
|
|
+Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-pbfifo.8 iproute2/debian/manpages/old/tc-pbfifo.8
|
|
--- iproute2-orig/debian/manpages/old/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 iproute2/debian/manpages/old/tc-pfifo_fast.8
|
|
--- iproute2-orig/debian/manpages/old/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-prio.8 iproute2/debian/manpages/old/tc-prio.8
|
|
--- iproute2-orig/debian/manpages/old/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>, J Hadi Salim
|
|
+<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-red.8 iproute2/debian/manpages/old/tc-red.8
|
|
--- iproute2-orig/debian/manpages/old/tc-red.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-red.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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 if 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>, Alexey Makarenko
|
|
+<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-sfq.8 iproute2/debian/manpages/old/tc-sfq.8
|
|
--- iproute2-orig/debian/manpages/old/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc-tbf.8 iproute2/debian/manpages/old/tc-tbf.8
|
|
--- iproute2-orig/debian/manpages/old/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/old/tc.8 iproute2/debian/manpages/old/tc.8
|
|
--- iproute2-orig/debian/manpages/old/tc.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/old/tc.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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
|
|
+Bytes 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)
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-cbq-details.8 iproute2/debian/manpages/tc-cbq-details.8
|
|
--- iproute2-orig/debian/manpages/tc-cbq-details.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-cbq-details.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,425 @@
|
|
+.TH CBQ 8 "8 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 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
|
|
+Shaping is done using link idle time calculations, and actions taken if
|
|
+these calculations deviate from set limits.
|
|
+
|
|
+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.
|
|
+
|
|
+From the kernel's perspective, this is hard to measure, so CBQ instead
|
|
+derives the idle time from the number of microseconds (in fact, jiffies)
|
|
+that elapse between requests from the device driver for more data. Combined
|
|
+with the knowledge of packet sizes, this is used to approximate how full or
|
|
+empty the link is.
|
|
+
|
|
+This is rather circumspect and doesn't always arrive at proper
|
|
+results. For example, what is the actual link speed of an interface
|
|
+that is not really able to transmit the full 100mbit/s of data,
|
|
+perhaps because of a badly implemented driver? A PCMCIA network card
|
|
+will also never achieve 100mbit/s because of the way the bus is
|
|
+designed - again, how do we calculate the idle time?
|
|
+
|
|
+The physical link bandwidth may be ill defined in case of not-quite-real
|
|
+network devices like PPP over Ethernet or PPTP over TCP/IP. The effective
|
|
+bandwidth in that case is probably determined by the efficiency of pipes
|
|
+to userspace - which not defined.
|
|
+
|
|
+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. If a verdict is reached, this
|
|
+process is repeated for the recipient class which might have further
|
|
+means of classifying traffic to its children, if any.
|
|
+
|
|
+CBQ has the following methods available to classify a packet to any child
|
|
+classes.
|
|
+.TP
|
|
+(i)
|
|
+.B skb->priority class encoding.
|
|
+Can be set from userspace by an application with the
|
|
+.B SO_PRIORITY
|
|
+setsockopt.
|
|
+The
|
|
+.B skb->priority class encoding
|
|
+only applies if the skb->priority holds a major:minor handle of an existing
|
|
+class within this qdisc.
|
|
+.TP
|
|
+(ii)
|
|
+tc filters attached to the class.
|
|
+.TP
|
|
+(iii)
|
|
+The defmap of a class, as set with the
|
|
+.B split & defmap
|
|
+parameters. The defmap may contain instructions for each possible Linux packet
|
|
+priority.
|
|
+
|
|
+.P
|
|
+Each class also has a
|
|
+.B level.
|
|
+Leaf nodes, attached to the bottom of the class hierarchy, have a level of 0.
|
|
+.SH CLASSIFICATION ALGORITHM
|
|
+
|
|
+Classification is a loop, which terminates when a leaf class is found. At any
|
|
+point the loop may jump to the fallback algorithm.
|
|
+
|
|
+The loop consists of the following steps:
|
|
+.TP
|
|
+(i)
|
|
+If the packet is generated locally and has a valid classid encoded within its
|
|
+.B skb->priority,
|
|
+choose it and terminate.
|
|
+
|
|
+.TP
|
|
+(ii)
|
|
+Consult the tc filters, if any, attached to this child. If these return
|
|
+a class which is not a leaf class, restart loop from the class returned.
|
|
+If it is a leaf, choose it and terminate.
|
|
+.TP
|
|
+(iii)
|
|
+If the tc filters did not return a class, but did return a classid,
|
|
+try to find a class with that id within this qdisc.
|
|
+Check if the found class is of a lower
|
|
+.B level
|
|
+than the current class. If so, and the returned class is not a leaf node,
|
|
+restart the loop at the found class. If it is a leaf node, terminate.
|
|
+If we found an upward reference to a higher level, enter the fallback
|
|
+algorithm.
|
|
+.TP
|
|
+(iv)
|
|
+If the tc filters did not return a class, nor a valid reference to one,
|
|
+consider the minor number of the reference to be the priority. Retrieve
|
|
+a class from the defmap of this class for the priority. If this did not
|
|
+contain a class, consult the defmap of this class for the
|
|
+.B BEST_EFFORT
|
|
+class. If this is an upward reference, or no
|
|
+.B BEST_EFFORT
|
|
+class was defined,
|
|
+enter the fallback algorithm. If a valid class was found, and it is not a
|
|
+leaf node, restart the loop at this class. If it is a leaf, choose it and
|
|
+terminate. If
|
|
+neither the priority distilled from the classid, nor the
|
|
+.B BEST_EFFORT
|
|
+priority yielded a class, enter the fallback algorithm.
|
|
+.P
|
|
+The fallback algorithm resides outside of the loop and is as follows.
|
|
+.TP
|
|
+(i)
|
|
+Consult the defmap of the class at which the jump to fallback occured. If
|
|
+the defmap contains a class for the
|
|
+.B
|
|
+priority
|
|
+of the class (which is related to the TOS field), choose this class and
|
|
+terminate.
|
|
+.TP
|
|
+(ii)
|
|
+Consult the map for a class for the
|
|
+.B BEST_EFFORT
|
|
+priority. If found, choose it, and terminate.
|
|
+.TP
|
|
+(iii)
|
|
+Choose the class at which break out to the fallback algorithm occured. Terminate.
|
|
+.P
|
|
+The packet is enqueued to the class which was chosen when either algorithm
|
|
+terminated. It is therefore possible for a packet to be enqueued *not* at a
|
|
+leaf node, but in the middle of the hierarchy.
|
|
+
|
|
+.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.
|
|
+
|
|
+.B CERTAINTY ENDS HERE, ANK PLEASE HELP
|
|
+
|
|
+Each class is not allowed to send at length though - they can only dequeue a
|
|
+configurable amount of data during each round.
|
|
+
|
|
+If a class is about to go overlimit, and it is not
|
|
+.B bounded
|
|
+it will try to borrow avgidle from siblings that are not
|
|
+.B isolated.
|
|
+This process is repeated from the bottom upwards. If a class is unable
|
|
+to borrow enough avgidle to send a packet, it is throttled and not asked
|
|
+for a packet for enough time for the avgidle to increase above zero.
|
|
+
|
|
+.B I REALLY NEED HELP FIGURING THIS OUT. REST OF DOCUMENT IS PRETTY CERTAIN
|
|
+.B AGAIN.
|
|
+
|
|
+.SH QDISC
|
|
+The root qdisc of a CBQ 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.
|
|
+.TP
|
|
+avpkt bytes
|
|
+For calculations, the average packet size must be known. It is silently capped
|
|
+at a minimum of 2/3 of the interface MTU. 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. Defaults
|
|
+to 5. Lower values imply greater sensitivity. Must be between 0 and 31.
|
|
+.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.
|
|
+
|
|
+.TP
|
|
+priority 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 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.
|
|
+
|
|
+.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.
|
|
+
|
|
+.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 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 Guarantee 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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-cbq.8 iproute2/debian/manpages/tc-cbq.8
|
|
--- iproute2-orig/debian/manpages/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-htb.8 iproute2/debian/manpages/tc-htb.8
|
|
--- iproute2-orig/debian/manpages/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,150 @@
|
|
+.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 HTB qdisc class tree has the following parameters:
|
|
+
|
|
+.TP
|
|
+parent major:minor | root
|
|
+This mandatory parameter determines the place of the HTB instance, either at the
|
|
+.B root
|
|
+of an interface or within an existing class.
|
|
+.TP
|
|
+handle major:
|
|
+Like all other qdiscs, the HTB 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 SEE ALSO
|
|
+.BR tc (8)
|
|
+.P
|
|
+HTB website: http://luxik.cdi.cz/~devik/qos/htb/
|
|
+.SH AUTHOR
|
|
+Martin Devera <devik@cdi.cz>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-pbfifo.8 iproute2/debian/manpages/tc-pbfifo.8
|
|
--- iproute2-orig/debian/manpages/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-pfifo_fast.8 iproute2/debian/manpages/tc-pfifo_fast.8
|
|
--- iproute2-orig/debian/manpages/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-prio.8 iproute2/debian/manpages/tc-prio.8
|
|
--- iproute2-orig/debian/manpages/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>, J Hadi Salim
|
|
+<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-red.8 iproute2/debian/manpages/tc-red.8
|
|
--- iproute2-orig/debian/manpages/tc-red.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-red.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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 if 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>, Alexey Makarenko
|
|
+<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-sfq.8 iproute2/debian/manpages/tc-sfq.8
|
|
--- iproute2-orig/debian/manpages/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc-tbf.8 iproute2/debian/manpages/tc-tbf.8
|
|
--- iproute2-orig/debian/manpages/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/manpages/tc.8 iproute2/debian/manpages/tc.8
|
|
--- iproute2-orig/debian/manpages/tc.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/manpages/tc.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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
|
|
+Bytes 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)
|
|
+
|
|
diff -Naur iproute2-orig/debian/postinst iproute2/debian/postinst
|
|
--- iproute2-orig/debian/postinst 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/postinst 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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 -Naur iproute2-orig/debian/postrm iproute2/debian/postrm
|
|
--- iproute2-orig/debian/postrm 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/postrm 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,6 @@
|
|
+#!/bin/sh
|
|
+
|
|
+if [ "$1" = "purge" ]
|
|
+then
|
|
+ rm -rf /etc/iproute2
|
|
+fi
|
|
diff -Naur iproute2-orig/debian/prerm iproute2/debian/prerm
|
|
--- iproute2-orig/debian/prerm 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/prerm 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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 -Naur iproute2-orig/debian/rules iproute2/debian/rules
|
|
--- iproute2-orig/debian/rules 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/rules 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -0,0 +1,85 @@
|
|
+#!/usr/bin/make -f
|
|
+#
|
|
+# Copyright (C) 1999 Roberto Lumbreras <rover@debian.org>
|
|
+# Copyright (C) 1999-2002 Juan Cespedes <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
|
|
+MAN8 = debian/manpages/*.8
|
|
+MANLINKS= rtmon rtacct routef routel
|
|
+TEXDOCS = ip-cref ip-tunnels api-ip6-flowlabels
|
|
+
|
|
+build: stamp-build
|
|
+
|
|
+stamp-build:
|
|
+ test -f include-glibc/netinet/in.h.orig || \
|
|
+ mv include-glibc/netinet/in.h \
|
|
+ include-glibc/netinet/in.h.orig
|
|
+ $(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 $(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/undocumented.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/
|
|
+
|
|
+ dpkg-shlibdeps $(BINS) $(SBINS)
|
|
+ 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
|
|
+ test -f include-glibc/netinet/in.h.orig && \
|
|
+ mv include-glibc/netinet/in.h.orig \
|
|
+ include-glibc/netinet/in.h || true
|
|
+
|
|
+.PHONY: build binary binary-arch binary-indep checkdir checkroot clean
|
|
diff -Naur iproute2-orig/debian/tc-cbq.8 iproute2/debian/tc-cbq.8
|
|
--- iproute2-orig/debian/tc-cbq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-cbq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-htb.8 iproute2/debian/tc-htb.8
|
|
--- iproute2-orig/debian/tc-htb.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-htb.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-pbfifo.8 iproute2/debian/tc-pbfifo.8
|
|
--- iproute2-orig/debian/tc-pbfifo.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-pbfifo.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-pfifo_fast.8 iproute2/debian/tc-pfifo_fast.8
|
|
--- iproute2-orig/debian/tc-pfifo_fast.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-pfifo_fast.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>
|
|
+
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-prio.8 iproute2/debian/tc-prio.8
|
|
--- iproute2-orig/debian/tc-prio.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-prio.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>, J Hadi Salim
|
|
+<hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-red.8 iproute2/debian/tc-red.8
|
|
--- iproute2-orig/debian/tc-red.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-red.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>, Alexey Makarenko
|
|
+<makar@phoenix.kharkov.ua>, J Hadi Salim <hadi@nortelnetworks.com>.
|
|
+This manpage maintained by bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-sfq.8 iproute2/debian/tc-sfq.8
|
|
--- iproute2-orig/debian/tc-sfq.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-sfq.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc-tbf.8 iproute2/debian/tc-tbf.8
|
|
--- iproute2-orig/debian/tc-tbf.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc-tbf.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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>. This manpage maintained by
|
|
+bert hubert <ahu@ds9a.nl>
|
|
+
|
|
+
|
|
diff -Naur iproute2-orig/debian/tc.8 iproute2/debian/tc.8
|
|
--- iproute2-orig/debian/tc.8 1969-12-31 16:00:00.000000000 -0800
|
|
+++ iproute2/debian/tc.8 2004-05-21 00:09:38.000000000 -0700
|
|
@@ -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)
|
|
+
|
|
diff -Naur iproute2-orig/include/rt_names.h iproute2/include/rt_names.h
|
|
--- iproute2-orig/include/rt_names.h 2000-04-16 10:42:50.000000000 -0700
|
|
+++ iproute2/include/rt_names.h 2004-05-21 00:16:36.000000000 -0700
|
|
@@ -1,6 +1,8 @@
|
|
#ifndef RT_NAMES_H_
|
|
#define RT_NAMES_H_ 1
|
|
|
|
+#include <asm/byteorder.h>
|
|
+
|
|
const char* rtnl_rtprot_n2a(int id, char *buf, int len);
|
|
const char* rtnl_rtscope_n2a(int id, char *buf, int len);
|
|
const char* rtnl_rttable_n2a(int id, char *buf, int len);
|
|
diff -Naur iproute2-orig/lib/rt_names.c iproute2/lib/rt_names.c
|
|
--- iproute2-orig/lib/rt_names.c 2000-04-16 10:42:52.000000000 -0700
|
|
+++ iproute2/lib/rt_names.c 2004-05-21 00:16:36.000000000 -0700
|
|
@@ -16,6 +16,7 @@
|
|
#include <fcntl.h>
|
|
#include <string.h>
|
|
#include <sys/time.h>
|
|
+#include <asm/byteorder.h>
|
|
|
|
static void rtnl_tab_initialize(char *file, char **tab, int size)
|
|
{
|
|
diff -Naur iproute2-orig/misc/arpd.c iproute2/misc/arpd.c
|
|
--- iproute2-orig/misc/arpd.c 2002-01-09 20:02:26.000000000 -0800
|
|
+++ iproute2/misc/arpd.c 2004-05-21 00:16:36.000000000 -0700
|
|
@@ -16,7 +16,7 @@
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <netdb.h>
|
|
-#include <db.h>
|
|
+#include <db_185.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/poll.h>
|
|
#include <errno.h>
|
|
@@ -28,6 +28,7 @@
|
|
#include <signal.h>
|
|
#include <linux/if.h>
|
|
#include <linux/if_arp.h>
|
|
+#include <linux/if_ether.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
#include <linux/if_packet.h>
|