This commit was manufactured by cvs2svn to create branch planetlab-4_0-branch planetlab-4_0-branch
authorPlanet-Lab Support <support@planet-lab.org>
Fri, 19 Jan 2007 20:39:17 +0000 (20:39 +0000)
committerPlanet-Lab Support <support@planet-lab.org>
Fri, 19 Jan 2007 20:39:17 +0000 (20:39 +0000)
'planetlab-4_0-branch'.

112 files changed:
Config [deleted file]
Makefile.kernel [deleted file]
etc/iproute2/rt_dsfield.rt_config [deleted file]
etc/iproute2/rt_protos.rt_config [deleted file]
etc/iproute2/rt_realms.rt_config [deleted file]
etc/iproute2/rt_scopes.rt_config [deleted file]
etc/iproute2/rt_tables.rt_config [deleted file]
include/linux/tcp_diag.h [deleted file]
ip.8 [new file with mode: 0644]
ip/ip [deleted file]
ip/ip.o [deleted file]
ip/ipaddress.o [deleted file]
ip/iplink.o [deleted file]
ip/ipmaddr.o [deleted file]
ip/ipmonitor.o [deleted file]
ip/ipmroute.o [deleted file]
ip/ipneigh.o [deleted file]
ip/ipprefix.o [deleted file]
ip/iproute.c.initvar [deleted file]
ip/iproute.o [deleted file]
ip/iprule.o [deleted file]
ip/iptunnel.o [deleted file]
ip/ipxfrm.o [deleted file]
ip/rtm_map.o [deleted file]
ip/rtmon [deleted file]
ip/rtmon.o [deleted file]
ip/xfrm_policy.o [deleted file]
ip/xfrm_state.o [deleted file]
iproute.spec [new file with mode: 0644]
lib/dnet_ntop.o [deleted file]
lib/dnet_pton.o [deleted file]
lib/inet_proto.o [deleted file]
lib/ipx_ntop.o [deleted file]
lib/ipx_pton.o [deleted file]
lib/libnetlink.a [deleted file]
lib/libnetlink.o [deleted file]
lib/libutil.a [deleted file]
lib/ll_addr.o [deleted file]
lib/ll_map.o [deleted file]
lib/ll_proto.o [deleted file]
lib/ll_types.o [deleted file]
lib/rt_names.o [deleted file]
lib/utils.o [deleted file]
misc/arpd [deleted file]
misc/ifstat [deleted file]
misc/lnstat [deleted file]
misc/lnstat.o [deleted file]
misc/lnstat_util.o [deleted file]
misc/nstat [deleted file]
misc/rtacct [deleted file]
misc/ss [deleted file]
misc/ss.o [deleted file]
misc/ssfilter.c [deleted file]
misc/ssfilter.o [deleted file]
netem/experimental.dist [deleted file]
netem/maketable [deleted file]
netem/normal [deleted file]
netem/normal.dist [deleted file]
netem/pareto [deleted file]
netem/pareto.dist [deleted file]
netem/paretonormal [deleted file]
netem/paretonormal.dist [deleted file]
tc-cbq-details.8 [new file with mode: 0644]
tc-cbq.8 [new file with mode: 0644]
tc-htb.8 [new file with mode: 0644]
tc-pbfifo.8 [new file with mode: 0644]
tc-pfifo_fast.8 [new file with mode: 0644]
tc-prio.8 [new file with mode: 0644]
tc-red.8 [new file with mode: 0644]
tc-sfq.8 [new file with mode: 0644]
tc-tbf.8 [new file with mode: 0644]
tc.8 [new file with mode: 0644]
tc/f_fw.o [deleted file]
tc/f_route.o [deleted file]
tc/f_rsvp.o [deleted file]
tc/f_tcindex.o [deleted file]
tc/f_u32.o [deleted file]
tc/libtc.a [deleted file]
tc/m_action.o [deleted file]
tc/m_estimator.o [deleted file]
tc/m_gact.o [deleted file]
tc/m_ipt.o [deleted file]
tc/m_mirred.o [deleted file]
tc/m_pedit.o [deleted file]
tc/m_police.o [deleted file]
tc/p_icmp.o [deleted file]
tc/p_ip.o [deleted file]
tc/p_tcp.o [deleted file]
tc/p_udp.o [deleted file]
tc/q_cbq.o [deleted file]
tc/q_dsmark.o [deleted file]
tc/q_fifo.o [deleted file]
tc/q_gred.o [deleted file]
tc/q_hfsc.o [deleted file]
tc/q_htb.o [deleted file]
tc/q_ingress.o [deleted file]
tc/q_netem.so [deleted file]
tc/q_prio.o [deleted file]
tc/q_red.o [deleted file]
tc/q_sfq.o [deleted file]
tc/q_tbf.o [deleted file]
tc/tc [deleted file]
tc/tc.o [deleted file]
tc/tc_cbq.o [deleted file]
tc/tc_class.o [deleted file]
tc/tc_core.o [deleted file]
tc/tc_estimator.o [deleted file]
tc/tc_filter.o [deleted file]
tc/tc_qdisc.o [deleted file]
tc/tc_red.o [deleted file]
tc/tc_util.o [deleted file]
testsuite/tests/std-cbq [deleted file]

diff --git a/Config b/Config
deleted file mode 100644 (file)
index 290e783..0000000
--- a/Config
+++ /dev/null
@@ -1 +0,0 @@
-# Generated config based on /tmp/iproute2-2.6.11/include
diff --git a/Makefile.kernel b/Makefile.kernel
deleted file mode 100644 (file)
index abd5aab..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-DESTDIR=
-SBINDIR=/usr/sbin
-CONFDIR=/etc/iproute2
-DOCDIR=/usr/share/doc/iproute2
-MANDIR=/usr/share/man
-
-# Path to db_185.h include
-DBM_INCLUDE:=/usr/include
-
-DEFINES= -DRESOLVE_HOSTNAMES
-
-#options if you have a bind>=4.9.4 libresolv (or, maybe, glibc)
-LDLIBS=-lresolv
-ADDLIB=
-
-#options for decnet
-ADDLIB+=dnet_ntop.o dnet_pton.o
-
-#options for ipx
-ADDLIB+=ipx_ntop.o ipx_pton.o
-
-CC = gcc
-HOSTCC = gcc
-CCOPTS = -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall
-CFLAGS = $(CCOPTS) -I../include $(DEFINES)
-
-LDLIBS += -L../lib -lnetlink -lutil
-
-SUBDIRS=lib ip tc misc netem
-
-LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
-
-all: Config
-       @for i in $(SUBDIRS); \
-       do $(MAKE) $(MFLAGS) -C $$i; done
-
-Config:
-       ./configure $(KERNEL_INCLUDE)
-
-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 -maxdepth 1 -type f) \
-               $(DESTDIR)$(DOCDIR)/examples
-       install -m 0644 $(shell find examples/diffserv -maxdepth 1 -type f) \
-               $(DESTDIR)$(DOCDIR)/examples/diffserv
-       @for i in $(SUBDIRS) doc; do $(MAKE) -C $$i install; done
-       install -m 0644 $(shell find etc/iproute2 -maxdepth 1 -type f) $(DESTDIR)$(CONFDIR)
-       install -m 0755 -d $(DESTDIR)$(MANDIR)/man8
-       install -m 0644 $(shell find man/man8 -maxdepth 1 -type f) $(DESTDIR)$(MANDIR)/man8
-       ln -sf $(MANDIR)/man8/tc-pbfifo.8  $(DESTDIR)$(MANDIR)/man8/tc-bfifo.8
-       ln -sf $(MANDIR)/man8/tc-pbfifo.8  $(DESTDIR)$(MANDIR)/man8/tc-pfifo.8
-       install -m 0755 -d $(DESTDIR)$(MANDIR)/man3
-       install -m 0644 $(shell find man/man3 -maxdepth 1 -type f) $(DESTDIR)$(MANDIR)/man3
-
-clean:
-       @for i in $(SUBDIRS) doc; \
-       do $(MAKE) $(MFLAGS) -C $$i clean; done
-
-clobber: clean
-       rm -f Config
-
-distclean: clean clobber
-
-.EXPORT_ALL_VARIABLES:
diff --git a/etc/iproute2/rt_dsfield.rt_config b/etc/iproute2/rt_dsfield.rt_config
deleted file mode 100644 (file)
index 110061a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-0x10   lowdelay
-0x08   throughput
-0x04   reliability
-# This value overlap with ECT, do not use it!
-0x02   mincost
-# These values seems do not want to die, Cisco likes them by a strange reason.
-0x20   priority
-0x40   immediate
-0x60   flash
-0x80   flash-override
-0xa0   critical
-0xc0   internet
-0xe0   network
diff --git a/etc/iproute2/rt_protos.rt_config b/etc/iproute2/rt_protos.rt_config
deleted file mode 100644 (file)
index 8c985d7..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Reserved protocols.
-#
-0      unspec
-1      redirect
-2      kernel
-3      boot
-4      static
-8      gated
-9      ra
-10     mrt
-11     zebra
-12     bird
-#
-#      Used by me for gated
-#
-254    gated/aggr
-253    gated/bgp
-252    gated/ospf
-251    gated/ospfase
-250    gated/rip
-249    gated/static
-248    gated/conn
-247    gated/inet
-246    gated/default
diff --git a/etc/iproute2/rt_realms.rt_config b/etc/iproute2/rt_realms.rt_config
deleted file mode 100644 (file)
index eedd76d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# reserved values
-#
-0      cosmos
-#
-# local
-#
-#1     inr.ac
-#2     inr.ruhep
-#3     freenet
-#4     radio-msu
-#5     russia
-#6     internet
diff --git a/etc/iproute2/rt_scopes.rt_config b/etc/iproute2/rt_scopes.rt_config
deleted file mode 100644 (file)
index 8514bc1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# reserved values
-#
-0      global
-255    nowhere
-254    host
-253    link
-#
-# pseudo-reserved
-#
-200    site
diff --git a/etc/iproute2/rt_tables.rt_config b/etc/iproute2/rt_tables.rt_config
deleted file mode 100644 (file)
index 541abfd..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# reserved values
-#
-255    local
-254    main
-253    default
-0      unspec
-#
-# local
-#
-#1     inr.ruhep
diff --git a/include/linux/tcp_diag.h b/include/linux/tcp_diag.h
deleted file mode 100644 (file)
index ceee962..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef _TCP_DIAG_H_
-#define _TCP_DIAG_H_ 1
-
-/* Just some random number */
-#define TCPDIAG_GETSOCK 18
-
-/* Socket identity */
-struct tcpdiag_sockid
-{
-       __u16   tcpdiag_sport;
-       __u16   tcpdiag_dport;
-       __u32   tcpdiag_src[4];
-       __u32   tcpdiag_dst[4];
-       __u32   tcpdiag_if;
-       __u32   tcpdiag_cookie[2];
-#define TCPDIAG_NOCOOKIE (~0U)
-};
-
-/* Request structure */
-
-struct tcpdiagreq
-{
-       __u8    tcpdiag_family;         /* Family of addresses. */
-       __u8    tcpdiag_src_len;
-       __u8    tcpdiag_dst_len;
-       __u8    tcpdiag_ext;            /* Query extended information */
-
-       struct tcpdiag_sockid id;
-
-       __u32   tcpdiag_states;         /* States to dump */
-       __u32   tcpdiag_dbs;            /* Tables to dump (NI) */
-};
-
-enum
-{
-       TCPDIAG_REQ_NONE,
-       TCPDIAG_REQ_BYTECODE,
-};
-
-#define TCPDIAG_REQ_MAX TCPDIAG_REQ_BYTECODE
-
-/* Bytecode is sequence of 4 byte commands followed by variable arguments.
- * All the commands identified by "code" are conditional jumps forward:
- * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be
- * length of the command and its arguments.
- */
-struct tcpdiag_bc_op
-{
-       unsigned char   code;
-       unsigned char   yes;
-       unsigned short  no;
-};
-
-enum
-{
-       TCPDIAG_BC_NOP,
-       TCPDIAG_BC_JMP,
-       TCPDIAG_BC_S_GE,
-       TCPDIAG_BC_S_LE,
-       TCPDIAG_BC_D_GE,
-       TCPDIAG_BC_D_LE,
-       TCPDIAG_BC_AUTO,
-       TCPDIAG_BC_S_COND,
-       TCPDIAG_BC_D_COND,
-};
-
-struct tcpdiag_hostcond
-{
-       __u8    family;
-       __u8    prefix_len;
-       int     port;
-       __u32   addr[0];
-};
-
-/* Base info structure. It contains socket identity (addrs/ports/cookie)
- * and, alas, the information shown by netstat. */
-struct tcpdiagmsg
-{
-       __u8    tcpdiag_family;
-       __u8    tcpdiag_state;
-       __u8    tcpdiag_timer;
-       __u8    tcpdiag_retrans;
-
-       struct tcpdiag_sockid id;
-
-       __u32   tcpdiag_expires;
-       __u32   tcpdiag_rqueue;
-       __u32   tcpdiag_wqueue;
-       __u32   tcpdiag_uid;
-       __u32   tcpdiag_inode;
-};
-
-/* Extensions */
-
-enum
-{
-       TCPDIAG_NONE,
-       TCPDIAG_MEMINFO,
-       TCPDIAG_INFO,
-       TCPDIAG_VEGASINFO,
-};
-
-#define TCPDIAG_MAX TCPDIAG_VEGASINFO
-
-
-/* TCPDIAG_MEM */
-
-struct tcpdiag_meminfo
-{
-       __u32   tcpdiag_rmem;
-       __u32   tcpdiag_wmem;
-       __u32   tcpdiag_fmem;
-       __u32   tcpdiag_tmem;
-};
-
-/* TCPDIAG_VEGASINFO */
-
-struct tcpvegas_info {
-       __u32   tcpv_enabled;
-       __u32   tcpv_rttcnt;
-       __u32   tcpv_rtt;
-       __u32   tcpv_minrtt;
-};
-
-
-#endif /* _TCP_DIAG_H_ */
diff --git a/ip.8 b/ip.8
new file mode 100644 (file)
index 0000000..50e4419
--- /dev/null
+++ b/ip.8
@@ -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 --git a/ip/ip b/ip/ip
deleted file mode 100755 (executable)
index 5ba7f4e..0000000
Binary files a/ip/ip and /dev/null differ
diff --git a/ip/ip.o b/ip/ip.o
deleted file mode 100644 (file)
index 61cd6c4..0000000
Binary files a/ip/ip.o and /dev/null differ
diff --git a/ip/ipaddress.o b/ip/ipaddress.o
deleted file mode 100644 (file)
index 9d3fa3b..0000000
Binary files a/ip/ipaddress.o and /dev/null differ
diff --git a/ip/iplink.o b/ip/iplink.o
deleted file mode 100644 (file)
index ac0829c..0000000
Binary files a/ip/iplink.o and /dev/null differ
diff --git a/ip/ipmaddr.o b/ip/ipmaddr.o
deleted file mode 100644 (file)
index fc862e5..0000000
Binary files a/ip/ipmaddr.o and /dev/null differ
diff --git a/ip/ipmonitor.o b/ip/ipmonitor.o
deleted file mode 100644 (file)
index 9783bef..0000000
Binary files a/ip/ipmonitor.o and /dev/null differ
diff --git a/ip/ipmroute.o b/ip/ipmroute.o
deleted file mode 100644 (file)
index 3783d57..0000000
Binary files a/ip/ipmroute.o and /dev/null differ
diff --git a/ip/ipneigh.o b/ip/ipneigh.o
deleted file mode 100644 (file)
index 876eab6..0000000
Binary files a/ip/ipneigh.o and /dev/null differ
diff --git a/ip/ipprefix.o b/ip/ipprefix.o
deleted file mode 100644 (file)
index 5186e99..0000000
Binary files a/ip/ipprefix.o and /dev/null differ
diff --git a/ip/iproute.c.initvar b/ip/iproute.c.initvar
deleted file mode 100644 (file)
index b2ddb6e..0000000
+++ /dev/null
@@ -1,1413 +0,0 @@
-/*
- * iproute.c           "ip route".
- *
- *             This program is free software; you can redistribute it and/or
- *             modify it under the terms of the GNU General Public License
- *             as published by the Free Software Foundation; either version
- *             2 of the License, or (at your option) any later version.
- *
- * Authors:    Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
- *
- *
- * Changes:
- *
- * Rani Assaf <rani@magic.metawire.com> 980929:        resolve addresses
- * Kunihiro Ishiguro <kunihiro@zebra.org> 001102: rtnh_ifindex was not initialized
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <syslog.h>
-#include <fcntl.h>
-#include <string.h>
-#include <time.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#include <arpa/inet.h>
-#include <linux/in_route.h>
-
-#include "rt_names.h"
-#include "utils.h"
-#include "ip_common.h"
-
-#ifndef RTAX_RTTVAR
-#define RTAX_RTTVAR RTAX_HOPS
-#endif
-
-
-static void usage(void) __attribute__((noreturn));
-
-static void usage(void)
-{
-       fprintf(stderr, "Usage: ip route { list | flush } SELECTOR\n");
-       fprintf(stderr, "       ip route get ADDRESS [ from ADDRESS iif STRING ]\n");
-       fprintf(stderr, "                            [ oif STRING ]  [ tos TOS ]\n");
-       fprintf(stderr, "       ip route { add | del | change | append | replace | monitor } ROUTE\n");
-       fprintf(stderr, "SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]\n");
-       fprintf(stderr, "            [ table TABLE_ID ] [ proto RTPROTO ]\n");
-       fprintf(stderr, "            [ type TYPE ] [ scope SCOPE ]\n");
-       fprintf(stderr, "ROUTE := NODE_SPEC [ INFO_SPEC ]\n");
-       fprintf(stderr, "NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]\n");
-       fprintf(stderr, "             [ table TABLE_ID ] [ proto RTPROTO ]\n");
-       fprintf(stderr, "             [ scope SCOPE ] [ metric METRIC ]\n");
-       fprintf(stderr, "INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...\n");
-       fprintf(stderr, "NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS\n");
-       fprintf(stderr, "OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]\n");
-       fprintf(stderr, "           [ rtt NUMBER ] [ rttvar NUMBER ]\n");
-       fprintf(stderr, "           [ window NUMBER] [ cwnd NUMBER ] [ ssthresh NUMBER ]\n");
-       fprintf(stderr, "           [ realms REALM ]\n");
-       fprintf(stderr, "TYPE := [ unicast | local | broadcast | multicast | throw |\n");
-       fprintf(stderr, "          unreachable | prohibit | blackhole | nat ]\n");
-       fprintf(stderr, "TABLE_ID := [ local | main | default | all | NUMBER ]\n");
-       fprintf(stderr, "SCOPE := [ host | link | global | NUMBER ]\n");
-       fprintf(stderr, "FLAGS := [ equalize ]\n");
-       fprintf(stderr, "NHFLAGS := [ onlink | pervasive ]\n");
-       fprintf(stderr, "RTPROTO := [ kernel | boot | static | NUMBER ]\n");
-       exit(-1);
-}
-
-
-static struct
-{
-       int tb;
-       int flushed;
-       char *flushb;
-       int flushp;
-       int flushe;
-       struct rtnl_handle *rth;
-       int protocol, protocolmask;
-       int scope, scopemask;
-       int type, typemask;
-       int tos, tosmask;
-       int iif, iifmask;
-       int oif, oifmask;
-       int realm, realmmask;
-       inet_prefix rprefsrc;
-       inet_prefix rvia;
-       inet_prefix rdst;
-       inet_prefix mdst;
-       inet_prefix rsrc;
-       inet_prefix msrc;
-} filter;
-
-static int flush_update(void)
-{
-       if (rtnl_send(filter.rth, filter.flushb, filter.flushp) < 0) {
-               perror("Failed to send flush request\n");
-               return -1;
-       }
-       filter.flushp = 0;
-       return 0;
-}
-
-int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
-{
-       FILE *fp = (FILE*)arg;
-       struct rtmsg *r = NLMSG_DATA(n);
-       int len = n->nlmsg_len;
-       struct rtattr * tb[RTA_MAX+1];
-       char abuf[256];
-       inet_prefix dst;
-       inet_prefix src;
-       inet_prefix prefsrc;
-       inet_prefix via;
-       int host_len = -1;
-       SPRINT_BUF(b1);
-       
-
-       if (n->nlmsg_type != RTM_NEWROUTE && n->nlmsg_type != RTM_DELROUTE) {
-               fprintf(stderr, "Not a route: %08x %08x %08x\n",
-                       n->nlmsg_len, n->nlmsg_type, n->nlmsg_flags);
-               return 0;
-       }
-       if (filter.flushb && n->nlmsg_type != RTM_NEWROUTE)
-               return 0;
-       len -= NLMSG_LENGTH(sizeof(*r));
-       if (len < 0) {
-               fprintf(stderr, "BUG: wrong nlmsg len %d\n", len);
-               return -1;
-       }
-
-       if (r->rtm_family == AF_INET6)
-               host_len = 128;
-       else if (r->rtm_family == AF_INET)
-               host_len = 32;
-       else if (r->rtm_family == AF_DECnet)
-               host_len = 16;
-       else if (r->rtm_family == AF_IPX)
-               host_len = 80;
-
-       if (r->rtm_family == AF_INET6) {
-               if (filter.tb) {
-                       if (filter.tb < 0) {
-                               if (!(r->rtm_flags&RTM_F_CLONED))
-                                       return 0;
-                       } else {
-                               if (r->rtm_flags&RTM_F_CLONED)
-                                       return 0;
-                               if (filter.tb == RT_TABLE_LOCAL) {
-                                       if (r->rtm_type != RTN_LOCAL)
-                                               return 0;
-                               } else if (filter.tb == RT_TABLE_MAIN) {
-                                       if (r->rtm_type == RTN_LOCAL)
-                                               return 0;
-                               } else {
-                                       return 0;
-                               }
-                       }
-               }
-       } else {
-               if (filter.tb > 0 && filter.tb != r->rtm_table)
-                       return 0;
-       }
-       if ((filter.protocol^r->rtm_protocol)&filter.protocolmask)
-               return 0;
-       if ((filter.scope^r->rtm_scope)&filter.scopemask)
-               return 0;
-       if ((filter.type^r->rtm_type)&filter.typemask)
-               return 0;
-       if ((filter.tos^r->rtm_tos)&filter.tosmask)
-               return 0;
-       if (filter.rdst.family &&
-           (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len))
-               return 0;
-       if (filter.mdst.family &&
-           (r->rtm_family != filter.mdst.family ||
-            (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len)))
-               return 0;
-       if (filter.rsrc.family &&
-           (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len))
-               return 0;
-       if (filter.msrc.family &&
-           (r->rtm_family != filter.msrc.family ||
-            (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len)))
-               return 0;
-       if (filter.rvia.family && r->rtm_family != filter.rvia.family)
-               return 0;
-       if (filter.rprefsrc.family && r->rtm_family != filter.rprefsrc.family)
-               return 0;
-
-       parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
-
-       memset(&dst, 0, sizeof(dst));
-       dst.family = r->rtm_family;
-       if (tb[RTA_DST])
-               memcpy(&dst.data, RTA_DATA(tb[RTA_DST]), (r->rtm_dst_len+7)/8);
-       if (filter.rsrc.family || filter.msrc.family) {
-               memset(&src, 0, sizeof(src));
-               src.family = r->rtm_family;
-               if (tb[RTA_SRC])
-                       memcpy(&src.data, RTA_DATA(tb[RTA_SRC]), (r->rtm_src_len+7)/8);
-       }
-       if (filter.rvia.bitlen>0) {
-               memset(&via, 0, sizeof(via));
-               via.family = r->rtm_family;
-               if (tb[RTA_GATEWAY])
-                       memcpy(&via.data, RTA_DATA(tb[RTA_GATEWAY]), host_len);
-       }
-       if (filter.rprefsrc.bitlen>0) {
-               memset(&prefsrc, 0, sizeof(prefsrc));
-               prefsrc.family = r->rtm_family;
-               if (tb[RTA_PREFSRC])
-                       memcpy(&prefsrc.data, RTA_DATA(tb[RTA_PREFSRC]), host_len);
-       }
-
-       if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen))
-               return 0;
-       if (filter.mdst.family && filter.mdst.bitlen >= 0 &&
-           inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len))
-               return 0;
-
-       if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen))
-               return 0;
-       if (filter.msrc.family && filter.msrc.bitlen >= 0 &&
-           inet_addr_match(&src, &filter.msrc, r->rtm_src_len))
-               return 0;
-
-       if (filter.rvia.family && inet_addr_match(&via, &filter.rvia, filter.rvia.bitlen))
-               return 0;
-       if (filter.rprefsrc.family && inet_addr_match(&prefsrc, &filter.rprefsrc, filter.rprefsrc.bitlen))
-               return 0;
-       if (filter.realmmask) {
-               __u32 realms = 0;
-               if (tb[RTA_FLOW])
-                       realms = *(__u32*)RTA_DATA(tb[RTA_FLOW]);
-               if ((realms^filter.realm)&filter.realmmask)
-                       return 0;
-       }
-       if (filter.iifmask) {
-               int iif = 0;
-               if (tb[RTA_IIF])
-                       iif = *(int*)RTA_DATA(tb[RTA_IIF]);
-               if ((iif^filter.iif)&filter.iifmask)
-                       return 0;
-       }
-       if (filter.oifmask) {
-               int oif = 0;
-               if (tb[RTA_OIF])
-                       oif = *(int*)RTA_DATA(tb[RTA_OIF]);
-               if ((oif^filter.oif)&filter.oifmask)
-                       return 0;
-       }
-       if (filter.flushb && 
-           r->rtm_family == AF_INET6 &&
-           r->rtm_dst_len == 0 &&
-           r->rtm_type == RTN_UNREACHABLE &&
-           tb[RTA_PRIORITY] &&
-           *(int*)RTA_DATA(tb[RTA_PRIORITY]) == -1)
-               return 0;
-
-       if (filter.flushb) {
-               struct nlmsghdr *fn;
-               if (NLMSG_ALIGN(filter.flushp) + n->nlmsg_len > filter.flushe) {
-                       if (flush_update())
-                               return -1;
-               }
-               fn = (struct nlmsghdr*)(filter.flushb + NLMSG_ALIGN(filter.flushp));
-               memcpy(fn, n, n->nlmsg_len);
-               fn->nlmsg_type = RTM_DELROUTE;
-               fn->nlmsg_flags = NLM_F_REQUEST;
-               fn->nlmsg_seq = ++filter.rth->seq;
-               filter.flushp = (((char*)fn) + n->nlmsg_len) - filter.flushb;
-               filter.flushed++;
-               if (show_stats < 2)
-                       return 0;
-       }
-
-       if (n->nlmsg_type == RTM_DELROUTE)
-               fprintf(fp, "Deleted ");
-       if (r->rtm_type != RTN_UNICAST && !filter.type)
-               fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1)));
-
-       if (tb[RTA_DST]) {
-               if (r->rtm_dst_len != host_len) {
-                       fprintf(fp, "%s/%u ", rt_addr_n2a(r->rtm_family,
-                                                        RTA_PAYLOAD(tb[RTA_DST]),
-                                                        RTA_DATA(tb[RTA_DST]),
-                                                        abuf, sizeof(abuf)),
-                               r->rtm_dst_len
-                               );
-               } else {
-                       fprintf(fp, "%s ", format_host(r->rtm_family,
-                                                      RTA_PAYLOAD(tb[RTA_DST]),
-                                                      RTA_DATA(tb[RTA_DST]),
-                                                      abuf, sizeof(abuf))
-                               );
-               }
-       } else if (r->rtm_dst_len) {
-               fprintf(fp, "0/%d ", r->rtm_dst_len);
-       } else {
-               fprintf(fp, "default ");
-       }
-       if (tb[RTA_SRC]) {
-               if (r->rtm_src_len != host_len) {
-                       fprintf(fp, "from %s/%u ", rt_addr_n2a(r->rtm_family,
-                                                        RTA_PAYLOAD(tb[RTA_SRC]),
-                                                        RTA_DATA(tb[RTA_SRC]),
-                                                        abuf, sizeof(abuf)),
-                               r->rtm_src_len
-                               );
-               } else {
-                       fprintf(fp, "from %s ", format_host(r->rtm_family,
-                                                      RTA_PAYLOAD(tb[RTA_SRC]),
-                                                      RTA_DATA(tb[RTA_SRC]),
-                                                      abuf, sizeof(abuf))
-                               );
-               }
-       } else if (r->rtm_src_len) {
-               fprintf(fp, "from 0/%u ", r->rtm_src_len);
-       }
-       if (r->rtm_tos && filter.tosmask != -1) {
-               SPRINT_BUF(b1);
-               fprintf(fp, "tos %s ", rtnl_dsfield_n2a(r->rtm_tos, b1, sizeof(b1)));
-       }
-       if (tb[RTA_GATEWAY] && filter.rvia.bitlen != host_len) {
-               fprintf(fp, "via %s ", 
-                       format_host(r->rtm_family,
-                                   RTA_PAYLOAD(tb[RTA_GATEWAY]),
-                                   RTA_DATA(tb[RTA_GATEWAY]),
-                                   abuf, sizeof(abuf)));
-       }
-       if (tb[RTA_OIF] && filter.oifmask != -1)
-               fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF])));
-
-       if (!(r->rtm_flags&RTM_F_CLONED)) {
-               if (r->rtm_table != RT_TABLE_MAIN && !filter.tb)
-                       fprintf(fp, " table %s ", rtnl_rttable_n2a(r->rtm_table, b1, sizeof(b1)));
-               if (r->rtm_protocol != RTPROT_BOOT && filter.protocolmask != -1)
-                       fprintf(fp, " proto %s ", rtnl_rtprot_n2a(r->rtm_protocol, b1, sizeof(b1)));
-               if (r->rtm_scope != RT_SCOPE_UNIVERSE && filter.scopemask != -1)
-                       fprintf(fp, " scope %s ", rtnl_rtscope_n2a(r->rtm_scope, b1, sizeof(b1)));
-       }
-       if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) {
-               /* Do not use format_host(). It is our local addr
-                  and symbolic name will not be useful.
-                */
-               fprintf(fp, " src %s ", 
-                       rt_addr_n2a(r->rtm_family,
-                                   RTA_PAYLOAD(tb[RTA_PREFSRC]),
-                                   RTA_DATA(tb[RTA_PREFSRC]),
-                                   abuf, sizeof(abuf)));
-       }
-       if (tb[RTA_PRIORITY])
-               fprintf(fp, " metric %d ", *(__u32*)RTA_DATA(tb[RTA_PRIORITY]));
-       if (r->rtm_flags & RTNH_F_DEAD)
-               fprintf(fp, "dead ");
-       if (r->rtm_flags & RTNH_F_ONLINK)
-               fprintf(fp, "onlink ");
-       if (r->rtm_flags & RTNH_F_PERVASIVE)
-               fprintf(fp, "pervasive ");
-       if (r->rtm_flags & RTM_F_EQUALIZE)
-               fprintf(fp, "equalize ");
-       if (r->rtm_flags & RTM_F_NOTIFY)
-               fprintf(fp, "notify ");
-
-       if (tb[RTA_FLOW] && filter.realmmask != ~0U) {
-               __u32 to = *(__u32*)RTA_DATA(tb[RTA_FLOW]);
-               __u32 from = to>>16;
-               to &= 0xFFFF;
-               fprintf(fp, "realm%s ", from ? "s" : "");
-               if (from) {
-                       fprintf(fp, "%s/",
-                               rtnl_rtrealm_n2a(from, b1, sizeof(b1)));
-               }
-               fprintf(fp, "%s ",
-                       rtnl_rtrealm_n2a(to, b1, sizeof(b1)));
-       }
-       if ((r->rtm_flags&RTM_F_CLONED) && r->rtm_family == AF_INET) {
-               __u32 flags = r->rtm_flags&~0xFFFF;
-               int first = 1;
-
-               fprintf(fp, "%s    cache ", _SL_);
-
-#define PRTFL(fl,flname) if (flags&RTCF_##fl) { \
-  flags &= ~RTCF_##fl; \
-  fprintf(fp, "%s" flname "%s", first ? "<" : "", flags ? "," : "> "); \
-  first = 0; }
-               PRTFL(LOCAL, "local");
-               PRTFL(REJECT, "reject");
-               PRTFL(MULTICAST, "mc");
-               PRTFL(BROADCAST, "brd");
-               PRTFL(DNAT, "dst-nat");
-               PRTFL(SNAT, "src-nat");
-               PRTFL(MASQ, "masq");
-               PRTFL(DIRECTDST, "dst-direct");
-               PRTFL(DIRECTSRC, "src-direct");
-               PRTFL(REDIRECTED, "redirected");
-               PRTFL(DOREDIRECT, "redirect");
-               PRTFL(FAST, "fastroute");
-               PRTFL(NOTIFY, "notify");
-               PRTFL(TPROXY, "proxy");
-#ifdef RTCF_EQUALIZE
-               PRTFL(EQUALIZE, "equalize");
-#endif
-               if (flags)
-                       fprintf(fp, "%s%x> ", first ? "<" : "", flags);
-               if (tb[RTA_CACHEINFO]) {
-                       struct rta_cacheinfo *ci = RTA_DATA(tb[RTA_CACHEINFO]);
-                       static int hz;
-                       if (!hz)
-                               hz = get_user_hz();
-                       if (ci->rta_expires != 0)
-                               fprintf(fp, " expires %dsec", ci->rta_expires/hz);
-                       if (ci->rta_error != 0)
-                               fprintf(fp, " error %d", ci->rta_error);
-                       if (show_stats) {
-                               if (ci->rta_clntref)
-                                       fprintf(fp, " users %d", ci->rta_clntref);
-                               if (ci->rta_used != 0)
-                                       fprintf(fp, " used %d", ci->rta_used);
-                               if (ci->rta_lastuse != 0)
-                                       fprintf(fp, " age %dsec", ci->rta_lastuse/hz);
-                       }
-#ifdef RTNETLINK_HAVE_PEERINFO
-                       if (ci->rta_id)
-                               fprintf(fp, " ipid 0x%04x", ci->rta_id);
-                       if (ci->rta_ts || ci->rta_tsage)
-                               fprintf(fp, " ts 0x%x tsage %dsec", ci->rta_ts, ci->rta_tsage);
-#endif
-               }
-       } else if (r->rtm_family == AF_INET6) {
-               struct rta_cacheinfo *ci = NULL;
-               if (tb[RTA_CACHEINFO])
-                       ci = RTA_DATA(tb[RTA_CACHEINFO]);
-               if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) {
-                       static int hz;
-                       if (!hz)
-                               hz = get_user_hz();
-                       if (r->rtm_flags & RTM_F_CLONED)
-                               fprintf(fp, "%s    cache ", _SL_);
-                       if (ci->rta_expires)
-                               fprintf(fp, " expires %dsec", ci->rta_expires/hz);
-                       if (ci->rta_error != 0)
-                               fprintf(fp, " error %d", ci->rta_error);
-                       if (show_stats) {
-                               if (ci->rta_clntref)
-                                       fprintf(fp, " users %d", ci->rta_clntref);
-                               if (ci->rta_used != 0)
-                                       fprintf(fp, " used %d", ci->rta_used);
-                               if (ci->rta_lastuse != 0)
-                                       fprintf(fp, " age %dsec", ci->rta_lastuse/hz);
-                       }
-               } else if (ci) {
-                       if (ci->rta_error != 0)
-                               fprintf(fp, " error %d", ci->rta_error);
-               }
-       }
-       if (tb[RTA_METRICS]) {
-               int i;
-               unsigned mxlock = 0;
-               struct rtattr *mxrta[RTAX_MAX+1];
-
-               parse_rtattr(mxrta, RTAX_MAX, RTA_DATA(tb[RTA_METRICS]),
-                           RTA_PAYLOAD(tb[RTA_METRICS]));
-               if (mxrta[RTAX_LOCK])
-                       mxlock = *(unsigned*)RTA_DATA(mxrta[RTAX_LOCK]);
-
-               for (i=2; i<=RTAX_MAX; i++) {
-                       static char *mx_names[] = 
-                       {
-                               "mtu",
-                               "window",
-                               "rtt",
-                               "rttvar",
-                               "ssthresh",
-                               "cwnd",
-                               "advmss",
-                               "reordering",
-                       };
-                       static int hz;
-                       if (mxrta[i] == NULL)
-                               continue;
-                       if (!hz)
-                               hz = get_hz();
-                       if (i-2 < sizeof(mx_names)/sizeof(char*))
-                               fprintf(fp, " %s", mx_names[i-2]);
-                       else
-                               fprintf(fp, " metric %d", i);
-                       if (mxlock & (1<<i))
-                               fprintf(fp, " lock");
-
-                       if (i != RTAX_RTT && i != RTAX_RTTVAR)
-                               fprintf(fp, " %u", *(unsigned*)RTA_DATA(mxrta[i]));
-                       else {
-                               unsigned val = *(unsigned*)RTA_DATA(mxrta[i]);
-
-                               val *= 1000;
-                               if (i == RTAX_RTT)
-                                       val /= 8;
-                               else
-                                       val /= 4;
-                               if (val >= hz)
-                                       fprintf(fp, " %ums", val/hz);
-                               else
-                                       fprintf(fp, " %.2fms", (float)val/hz);
-                       }
-               }
-       }
-       if (tb[RTA_IIF] && filter.iifmask != -1) {
-               fprintf(fp, " iif %s", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_IIF])));
-       }
-       if (tb[RTA_MULTIPATH]) {
-               struct rtnexthop *nh = RTA_DATA(tb[RTA_MULTIPATH]);
-               int first = 0;
-
-               len = RTA_PAYLOAD(tb[RTA_MULTIPATH]);
-
-               for (;;) {
-                       if (len < sizeof(*nh))
-                               break;
-                       if (nh->rtnh_len > len)
-                               break;
-                       if (r->rtm_flags&RTM_F_CLONED && r->rtm_type == RTN_MULTICAST) {
-                               if (first)
-                                       fprintf(fp, " Oifs:");
-                               else
-                                       fprintf(fp, " ");
-                       } else
-                               fprintf(fp, "%s\tnexthop", _SL_);
-                       if (nh->rtnh_len > sizeof(*nh)) {
-                               parse_rtattr(tb, RTA_MAX, RTNH_DATA(nh), nh->rtnh_len - sizeof(*nh));
-                               if (tb[RTA_GATEWAY]) {
-                                       fprintf(fp, " via %s ", 
-                                               format_host(r->rtm_family,
-                                                           RTA_PAYLOAD(tb[RTA_GATEWAY]),
-                                                           RTA_DATA(tb[RTA_GATEWAY]),
-                                                           abuf, sizeof(abuf)));
-                               }
-                       }
-                       if (r->rtm_flags&RTM_F_CLONED && r->rtm_type == RTN_MULTICAST) {
-                               fprintf(fp, " %s", ll_index_to_name(nh->rtnh_ifindex));
-                               if (nh->rtnh_hops != 1)
-                                       fprintf(fp, "(ttl>%d)", nh->rtnh_hops);
-                       } else {
-                               fprintf(fp, " dev %s", ll_index_to_name(nh->rtnh_ifindex));
-                               fprintf(fp, " weight %d", nh->rtnh_hops+1);
-                       }
-                       if (nh->rtnh_flags & RTNH_F_DEAD)
-                               fprintf(fp, " dead");
-                       if (nh->rtnh_flags & RTNH_F_ONLINK)
-                               fprintf(fp, " onlink");
-                       if (nh->rtnh_flags & RTNH_F_PERVASIVE)
-                               fprintf(fp, " pervasive");
-                       len -= NLMSG_ALIGN(nh->rtnh_len);
-                       nh = RTNH_NEXT(nh);
-               }
-       }
-       fprintf(fp, "\n");
-       fflush(fp);
-       return 0;
-}
-
-
-int parse_one_nh(struct rtattr *rta, struct rtnexthop *rtnh, int *argcp, char ***argvp)
-{
-       int argc = *argcp;
-       char **argv = *argvp;
-
-       while (++argv, --argc > 0) {
-               if (strcmp(*argv, "via") == 0) {
-                       NEXT_ARG();
-                       rta_addattr32(rta, 4096, RTA_GATEWAY, get_addr32(*argv));
-                       rtnh->rtnh_len += sizeof(struct rtattr) + 4;
-               } else if (strcmp(*argv, "dev") == 0) {
-                       NEXT_ARG();
-                       if ((rtnh->rtnh_ifindex = ll_name_to_index(*argv)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", *argv);
-                               exit(1);
-                       }
-               } else if (strcmp(*argv, "weight") == 0) {
-                       unsigned w;
-                       NEXT_ARG();
-                       if (get_unsigned(&w, *argv, 0) || w == 0 || w > 256)
-                               invarg("\"weight\" is invalid\n", *argv);
-                       rtnh->rtnh_hops = w - 1;
-               } else if (strcmp(*argv, "onlink") == 0) {
-                       rtnh->rtnh_flags |= RTNH_F_ONLINK;
-               } else
-                       break;
-       }
-       *argcp = argc;
-       *argvp = argv;
-       return 0;
-}
-
-int parse_nexthops(struct nlmsghdr *n, struct rtmsg *r, int argc, char **argv)
-{
-       char buf[1024];
-       struct rtattr *rta = (void*)buf;
-       struct rtnexthop *rtnh;
-
-       rta->rta_type = RTA_MULTIPATH;
-       rta->rta_len = RTA_LENGTH(0);
-       rtnh = RTA_DATA(rta);
-
-       while (argc > 0) {
-               if (strcmp(*argv, "nexthop") != 0) {
-                       fprintf(stderr, "Error: \"nexthop\" or end of line is expected instead of \"%s\"\n", *argv);
-                       exit(-1);
-               }
-               if (argc <= 1) {
-                       fprintf(stderr, "Error: unexpected end of line after \"nexthop\"\n");
-                       exit(-1);
-               }
-               memset(rtnh, 0, sizeof(*rtnh));
-               rtnh->rtnh_len = sizeof(*rtnh);
-               rta->rta_len += rtnh->rtnh_len;
-               parse_one_nh(rta, rtnh, &argc, &argv);
-               rtnh = RTNH_NEXT(rtnh);
-       }
-
-       if (rta->rta_len > RTA_LENGTH(0))
-               addattr_l(n, 1024, RTA_MULTIPATH, RTA_DATA(rta), RTA_PAYLOAD(rta));
-       return 0;
-}
-
-
-int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
-{
-       struct rtnl_handle rth;
-       struct {
-               struct nlmsghdr         n;
-               struct rtmsg            r;
-               char                    buf[1024];
-       } req;
-       char  mxbuf[256];
-       struct rtattr * mxrta = (void*)mxbuf;
-       unsigned mxlock = 0;
-       char  *d = NULL;
-       int gw_ok = 0;
-       int dst_ok = 0;
-       int nhs_ok = 0;
-       int scope_ok = 0;
-       int table_ok = 0;
-       int proto_ok = 0;
-       int type_ok = 0;
-
-       memset(&req, 0, sizeof(req));
-
-       req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
-       req.n.nlmsg_flags = NLM_F_REQUEST|flags;
-       req.n.nlmsg_type = cmd;
-       req.r.rtm_family = preferred_family;
-       req.r.rtm_table = RT_TABLE_MAIN;
-       req.r.rtm_scope = RT_SCOPE_NOWHERE;
-
-       if (cmd != RTM_DELROUTE) {
-               req.r.rtm_protocol = RTPROT_BOOT;
-               req.r.rtm_scope = RT_SCOPE_UNIVERSE;
-               req.r.rtm_type = RTN_UNICAST;
-       }
-
-       mxrta->rta_type = RTA_METRICS;
-       mxrta->rta_len = RTA_LENGTH(0);
-
-       while (argc > 0) {
-               if (strcmp(*argv, "src") == 0) {
-                       inet_prefix addr;
-                       NEXT_ARG();
-                       get_addr(&addr, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = addr.family;
-                       addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &addr.data, addr.bytelen);
-               } else if (strcmp(*argv, "via") == 0) {
-                       inet_prefix addr;
-                       gw_ok = 1;
-                       NEXT_ARG();
-                       get_addr(&addr, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = addr.family;
-                       addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen);
-               } else if (strcmp(*argv, "from") == 0) {
-                       inet_prefix addr;
-                       NEXT_ARG();
-                       get_prefix(&addr, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = addr.family;
-                       if (addr.bytelen)
-                               addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen);
-                       req.r.rtm_src_len = addr.bitlen;
-               } else if (strcmp(*argv, "tos") == 0 ||
-                          matches(*argv, "dsfield") == 0) {
-                       __u32 tos;
-                       NEXT_ARG();
-                       if (rtnl_dsfield_a2n(&tos, *argv))
-                               invarg("\"tos\" value is invalid\n", *argv);
-                       req.r.rtm_tos = tos;
-               } else if (matches(*argv, "metric") == 0 ||
-                          matches(*argv, "priority") == 0 ||
-                          matches(*argv, "preference") == 0) {
-                       __u32 metric;
-                       NEXT_ARG();
-                       if (get_u32(&metric, *argv, 0))
-                               invarg("\"metric\" value is invalid\n", *argv);
-                       addattr32(&req.n, sizeof(req), RTA_PRIORITY, metric);
-               } else if (strcmp(*argv, "scope") == 0) {
-                       int scope = 0;
-                       NEXT_ARG();
-                       if (rtnl_rtscope_a2n(&scope, *argv))
-                               invarg("invalid \"scope\" value\n", *argv);
-                       req.r.rtm_scope = scope;
-                       scope_ok = 1;
-               } else if (strcmp(*argv, "mtu") == 0) {
-                       unsigned mtu;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_MTU);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&mtu, *argv, 0))
-                               invarg("\"mtu\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu);
-#ifdef RTAX_ADVMSS
-               } else if (strcmp(*argv, "advmss") == 0) {
-                       unsigned mss;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_ADVMSS);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&mss, *argv, 0))
-                               invarg("\"mss\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_ADVMSS, mss);
-#endif
-#ifdef RTAX_REORDERING
-               } else if (matches(*argv, "reordering") == 0) {
-                       unsigned reord;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_REORDERING);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&reord, *argv, 0))
-                               invarg("\"reordering\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_REORDERING, reord);
-#endif
-               } else if (strcmp(*argv, "rtt") == 0) {
-                       unsigned rtt;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_RTT);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&rtt, *argv, 0))
-                               invarg("\"rtt\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_RTT, rtt);
-               } else if (matches(*argv, "window") == 0) {
-                       unsigned win;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_WINDOW);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&win, *argv, 0))
-                               invarg("\"window\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_WINDOW, win);
-               } else if (matches(*argv, "cwnd") == 0) {
-                       unsigned win;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_CWND);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&win, *argv, 0))
-                               invarg("\"cwnd\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_CWND, win);
-               } else if (matches(*argv, "rttvar") == 0) {
-                       unsigned win;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_RTTVAR);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&win, *argv, 0))
-                               invarg("\"rttvar\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_RTTVAR, win);
-               } else if (matches(*argv, "ssthresh") == 0) {
-                       unsigned win;
-                       NEXT_ARG();
-                       if (strcmp(*argv, "lock") == 0) {
-                               mxlock |= (1<<RTAX_SSTHRESH);
-                               NEXT_ARG();
-                       }
-                       if (get_unsigned(&win, *argv, 0))
-                               invarg("\"ssthresh\" value is invalid\n", *argv);
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_SSTHRESH, win);
-               } else if (matches(*argv, "realms") == 0) {
-                       __u32 realm;
-                       NEXT_ARG();
-                       if (get_rt_realms(&realm, *argv))
-                               invarg("\"realm\" value is invalid\n", *argv);
-                       addattr32(&req.n, sizeof(req), RTA_FLOW, realm);
-               } else if (strcmp(*argv, "onlink") == 0) {
-                       req.r.rtm_flags |= RTNH_F_ONLINK;
-               } else if (matches(*argv, "equalize") == 0 ||
-                          strcmp(*argv, "eql") == 0) {
-                       req.r.rtm_flags |= RTM_F_EQUALIZE;
-               } else if (strcmp(*argv, "nexthop") == 0) {
-                       nhs_ok = 1;
-                       break;
-               } else if (matches(*argv, "protocol") == 0) {
-                       int prot;
-                       NEXT_ARG();
-                       if (rtnl_rtprot_a2n(&prot, *argv))
-                               invarg("\"protocol\" value is invalid\n", *argv);
-                       req.r.rtm_protocol = prot;
-                       proto_ok =1;
-               } else if (matches(*argv, "table") == 0) {
-                       int tid;
-                       NEXT_ARG();
-                       if (rtnl_rttable_a2n(&tid, *argv))
-                               invarg("\"table\" value is invalid\n", *argv);
-                       req.r.rtm_table = tid;
-                       table_ok = 1;
-               } else if (strcmp(*argv, "dev") == 0 ||
-                          strcmp(*argv, "oif") == 0) {
-                       NEXT_ARG();
-                       d = *argv;
-               } else {
-                       int type;
-                       inet_prefix dst;
-
-                       if (strcmp(*argv, "to") == 0) {
-                               NEXT_ARG();
-                       }
-                       if ((**argv < '0' || **argv > '9') &&
-                           rtnl_rtntype_a2n(&type, *argv) == 0) {
-                               NEXT_ARG();
-                               req.r.rtm_type = type;
-                               type_ok = 1;
-                       }
-
-                       if (matches(*argv, "help") == 0)
-                               usage();
-                       if (dst_ok)
-                               duparg2("to", *argv);
-                       get_prefix(&dst, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = dst.family;
-                       req.r.rtm_dst_len = dst.bitlen;
-                       dst_ok = 1;
-                       if (dst.bytelen)
-                               addattr_l(&req.n, sizeof(req), RTA_DST, &dst.data, dst.bytelen);
-               }
-               argc--; argv++;
-       }
-
-       if (rtnl_open(&rth, 0) < 0)
-               exit(1);
-
-       if (d || nhs_ok)  {
-               int idx;
-
-               ll_init_map(&rth);
-
-               if (d) {
-                       if ((idx = ll_name_to_index(d)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", d);
-                               return -1;
-                       }
-                       addattr32(&req.n, sizeof(req), RTA_OIF, idx);
-               }
-       }
-
-       if (mxrta->rta_len > RTA_LENGTH(0)) {
-               if (mxlock)
-                       rta_addattr32(mxrta, sizeof(mxbuf), RTAX_LOCK, mxlock);
-               addattr_l(&req.n, sizeof(req), RTA_METRICS, RTA_DATA(mxrta), RTA_PAYLOAD(mxrta));
-       }
-
-       if (nhs_ok)
-               parse_nexthops(&req.n, &req.r, argc, argv);
-
-       if (!table_ok) {
-               if (req.r.rtm_type == RTN_LOCAL ||
-                   req.r.rtm_type == RTN_BROADCAST ||
-                   req.r.rtm_type == RTN_NAT ||
-                   req.r.rtm_type == RTN_ANYCAST)
-                       req.r.rtm_table = RT_TABLE_LOCAL;
-       }
-       if (!scope_ok) {
-               if (req.r.rtm_type == RTN_LOCAL ||
-                   req.r.rtm_type == RTN_NAT)
-                       req.r.rtm_scope = RT_SCOPE_HOST;
-               else if (req.r.rtm_type == RTN_BROADCAST ||
-                        req.r.rtm_type == RTN_MULTICAST ||
-                        req.r.rtm_type == RTN_ANYCAST)
-                       req.r.rtm_scope = RT_SCOPE_LINK;
-               else if (req.r.rtm_type == RTN_UNICAST ||
-                        req.r.rtm_type == RTN_UNSPEC) {
-                       if (cmd == RTM_DELROUTE)
-                               req.r.rtm_scope = RT_SCOPE_NOWHERE;
-                       else if (!gw_ok && !nhs_ok)
-                               req.r.rtm_scope = RT_SCOPE_LINK;
-               }
-       }
-
-       if (req.r.rtm_family == AF_UNSPEC)
-               req.r.rtm_family = AF_INET;
-
-       if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
-               exit(2);
-
-       return 0;
-}
-
-static int rtnl_rtcache_request(struct rtnl_handle *rth, int family)
-{
-       struct {
-               struct nlmsghdr nlh;
-               struct rtmsg rtm;
-       } req;
-       struct sockaddr_nl nladdr;
-
-       memset(&nladdr, 0, sizeof(nladdr));
-       memset(&req, 0, sizeof(req));
-       nladdr.nl_family = AF_NETLINK;
-
-       req.nlh.nlmsg_len = sizeof(req);
-       req.nlh.nlmsg_type = RTM_GETROUTE;
-       req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_REQUEST;
-       req.nlh.nlmsg_pid = 0;
-       req.nlh.nlmsg_seq = rth->dump = ++rth->seq;
-       req.rtm.rtm_family = family;
-       req.rtm.rtm_flags |= RTM_F_CLONED;
-
-       return sendto(rth->fd, (void*)&req, sizeof(req), 0, (struct sockaddr*)&nladdr, sizeof(nladdr));
-}
-
-static int iproute_flush_cache(void)
-{
-#define ROUTE_FLUSH_PATH "/proc/sys/net/ipv4/route/flush"
-
-       int len;
-       int flush_fd = open (ROUTE_FLUSH_PATH, O_WRONLY);
-       char *buffer = "-1";
-
-       if (flush_fd < 0) {
-               fprintf (stderr, "Cannot open \"%s\"\n", ROUTE_FLUSH_PATH);
-               return -1;
-       }
-
-       len = strlen (buffer);
-               
-       if ((write (flush_fd, (void *)buffer, len)) < len) {
-               fprintf (stderr, "Cannot flush routing cache\n");
-               return -1;
-       }
-       close(flush_fd);
-       return 0;
-}
-
-
-static int iproute_list_or_flush(int argc, char **argv, int flush)
-{
-       int do_ipv6 = preferred_family;
-       struct rtnl_handle rth;
-       char *id = NULL;
-       char *od = NULL;
-
-       iproute_reset_filter();
-       filter.tb = RT_TABLE_MAIN;
-
-       if (flush && argc <= 0) {
-               fprintf(stderr, "\"ip route flush\" requires arguments.\n");
-               return -1;
-       }
-
-       while (argc > 0) {
-               if (matches(*argv, "table") == 0) {
-                       int tid;
-                       NEXT_ARG();
-                       if (rtnl_rttable_a2n(&tid, *argv)) {
-                               if (strcmp(*argv, "all") == 0) {
-                                       tid = 0;
-                               } else if (strcmp(*argv, "cache") == 0) {
-                                       tid = -1;
-                               } else if (strcmp(*argv, "help") == 0) {
-                                       usage();
-                               } else {
-                                       invarg("table id value is invalid\n", *argv);
-                               }
-                       }
-                       filter.tb = tid;
-               } else if (matches(*argv, "cached") == 0 ||
-                          matches(*argv, "cloned") == 0) {
-                       filter.tb = -1;
-               } else if (strcmp(*argv, "tos") == 0 ||
-                          matches(*argv, "dsfield") == 0) {
-                       __u32 tos;
-                       NEXT_ARG();
-                       if (rtnl_dsfield_a2n(&tos, *argv))
-                               invarg("TOS value is invalid\n", *argv);
-                       filter.tos = tos;
-                       filter.tosmask = -1;
-               } else if (matches(*argv, "protocol") == 0) {
-                       int prot = 0;
-                       NEXT_ARG();
-                       filter.protocolmask = -1;
-                       if (rtnl_rtprot_a2n(&prot, *argv)) {
-                               if (strcmp(*argv, "all") != 0)
-                                       invarg("invalid \"protocol\"\n", *argv);
-                               prot = 0;
-                               filter.protocolmask = 0;
-                       }
-                       filter.protocol = prot;
-               } else if (matches(*argv, "scope") == 0) {
-                       int scope = 0;
-                       NEXT_ARG();
-                       filter.scopemask = -1;
-                       if (rtnl_rtscope_a2n(&scope, *argv)) {
-                               if (strcmp(*argv, "all") != 0)
-                                       invarg("invalid \"scope\"\n", *argv);
-                               scope = RT_SCOPE_NOWHERE;
-                               filter.scopemask = 0;
-                       }
-                       filter.scope = scope;
-               } else if (matches(*argv, "type") == 0) {
-                       int type;
-                       NEXT_ARG();
-                       filter.typemask = -1;
-                       if (rtnl_rtntype_a2n(&type, *argv))
-                               invarg("node type value is invalid\n", *argv);
-                       filter.type = type;
-               } else if (strcmp(*argv, "dev") == 0 ||
-                          strcmp(*argv, "oif") == 0) {
-                       NEXT_ARG();
-                       od = *argv;
-               } else if (strcmp(*argv, "iif") == 0) {
-                       NEXT_ARG();
-                       id = *argv;
-               } else if (strcmp(*argv, "via") == 0) {
-                       NEXT_ARG();
-                       get_prefix(&filter.rvia, *argv, do_ipv6);
-               } else if (strcmp(*argv, "src") == 0) {
-                       NEXT_ARG();
-                       get_prefix(&filter.rprefsrc, *argv, do_ipv6);
-               } else if (matches(*argv, "realms") == 0) {
-                       __u32 realm;
-                       NEXT_ARG();
-                       if (get_rt_realms(&realm, *argv))
-                               invarg("invalid realms\n", *argv);
-                       filter.realm = realm;
-                       filter.realmmask = ~0U;
-                       if ((filter.realm&0xFFFF) == 0 &&
-                           (*argv)[strlen(*argv) - 1] == '/')
-                               filter.realmmask &= ~0xFFFF;
-                       if ((filter.realm&0xFFFF0000U) == 0 &&
-                           (strchr(*argv, '/') == NULL ||
-                            (*argv)[0] == '/'))
-                               filter.realmmask &= ~0xFFFF0000U;
-               } else if (matches(*argv, "from") == 0) {
-                       NEXT_ARG();
-                       if (matches(*argv, "root") == 0) {
-                               NEXT_ARG();
-                               get_prefix(&filter.rsrc, *argv, do_ipv6);
-                       } else if (matches(*argv, "match") == 0) {
-                               NEXT_ARG();
-                               get_prefix(&filter.msrc, *argv, do_ipv6);
-                       } else {
-                               if (matches(*argv, "exact") == 0) {
-                                       NEXT_ARG();
-                               }
-                               get_prefix(&filter.msrc, *argv, do_ipv6);
-                               filter.rsrc = filter.msrc;
-                       }
-               } else {
-                       if (matches(*argv, "to") == 0) {
-                               NEXT_ARG();
-                       }
-                       if (matches(*argv, "root") == 0) {
-                               NEXT_ARG();
-                               get_prefix(&filter.rdst, *argv, do_ipv6);
-                       } else if (matches(*argv, "match") == 0) {
-                               NEXT_ARG();
-                               get_prefix(&filter.mdst, *argv, do_ipv6);
-                       } else {
-                               if (matches(*argv, "exact") == 0) {
-                                       NEXT_ARG();
-                               }
-                               get_prefix(&filter.mdst, *argv, do_ipv6);
-                               filter.rdst = filter.mdst;
-                       }
-               }
-               argc--; argv++;
-       }
-
-       if (do_ipv6 == AF_UNSPEC && filter.tb)
-               do_ipv6 = AF_INET;
-
-       if (rtnl_open(&rth, 0) < 0)
-               exit(1);
-
-       ll_init_map(&rth);
-
-       if (id || od)  {
-               int idx;
-
-               if (id) {
-                       if ((idx = ll_name_to_index(id)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", id);
-                               return -1;
-                       }
-                       filter.iif = idx;
-                       filter.iifmask = -1;
-               }
-               if (od) {
-                       if ((idx = ll_name_to_index(od)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", od);
-                               return -1;
-                       }
-                       filter.oif = idx;
-                       filter.oifmask = -1;
-               }
-       }
-
-       if (flush) {
-               int round = 0;
-               char flushb[4096-512];
-               time_t start = time(0);
-
-               if (filter.tb == -1) {
-                       if (do_ipv6 != AF_INET6) {
-                               iproute_flush_cache();
-                               if (show_stats)
-                                       printf("*** IPv4 routing cache is flushed.\n");
-                       }
-                       if (do_ipv6 == AF_INET)
-                               return 0;
-               }
-
-               filter.flushb = flushb;
-               filter.flushp = 0;
-               filter.flushe = sizeof(flushb);
-               filter.rth = &rth;
-
-               for (;;) {
-                       if (rtnl_wilddump_request(&rth, do_ipv6, RTM_GETROUTE) < 0) {
-                               perror("Cannot send dump request");
-                               exit(1);
-                       }
-                       filter.flushed = 0;
-                       if (rtnl_dump_filter(&rth, print_route, stdout, NULL, NULL) < 0) {
-                               fprintf(stderr, "Flush terminated\n");
-                               exit(1);
-                       }
-                       if (filter.flushed == 0) {
-                               if (round == 0) {
-                                       if (filter.tb != -1 || do_ipv6 == AF_INET6)
-                                               fprintf(stderr, "Nothing to flush.\n");
-                               } else if (show_stats)
-                                       printf("*** Flush is complete after %d round%s ***\n", round, round>1?"s":"");
-                               fflush(stdout);
-                               return 0;
-                       }
-                       round++;
-                       if (flush_update() < 0)
-                               exit(1);
-
-                       if (time(0) - start > 30) {
-                               printf("\n*** Flush not completed after %ld seconds, %d entries remain ***\n",
-                                      time(0) - start, filter.flushed);
-                               exit(1);
-                       }
-
-                       if (show_stats) {
-                               printf("\n*** Round %d, deleting %d entries ***\n", round, filter.flushed);
-                               fflush(stdout);
-                       }
-               }
-       }
-
-       if (filter.tb != -1) {
-               if (rtnl_wilddump_request(&rth, do_ipv6, RTM_GETROUTE) < 0) {
-                       perror("Cannot send dump request");
-                       exit(1);
-               }
-       } else {
-               if (rtnl_rtcache_request(&rth, do_ipv6) < 0) {
-                       perror("Cannot send dump request");
-                       exit(1);
-               }
-       }
-
-       if (rtnl_dump_filter(&rth, print_route, stdout, NULL, NULL) < 0) {
-               fprintf(stderr, "Dump terminated\n");
-               exit(1);
-       }
-
-       exit(0);
-}
-
-
-int iproute_get(int argc, char **argv)
-{
-       struct rtnl_handle rth;
-       struct {
-               struct nlmsghdr         n;
-               struct rtmsg            r;
-               char                    buf[1024];
-       } req;
-       char  *idev = NULL;
-       char  *odev = NULL;
-       int connected = 0;
-       int from_ok = 0;
-
-       memset(&req, 0, sizeof(req));
-
-       iproute_reset_filter();
-
-       req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
-       req.n.nlmsg_flags = NLM_F_REQUEST;
-       req.n.nlmsg_type = RTM_GETROUTE;
-       req.r.rtm_family = preferred_family;
-       req.r.rtm_table = 0;
-       req.r.rtm_protocol = 0;
-       req.r.rtm_scope = 0;
-       req.r.rtm_type = 0;
-       req.r.rtm_src_len = 0;
-       req.r.rtm_dst_len = 0;
-       req.r.rtm_tos = 0;
-       
-       while (argc > 0) {
-               if (strcmp(*argv, "tos") == 0 ||
-                   matches(*argv, "dsfield") == 0) {
-                       __u32 tos;
-                       NEXT_ARG();
-                       if (rtnl_dsfield_a2n(&tos, *argv))
-                               invarg("TOS value is invalid\n", *argv);
-                       req.r.rtm_tos = tos;
-               } else if (matches(*argv, "from") == 0) {
-                       inet_prefix addr;
-                       NEXT_ARG();
-                       if (matches(*argv, "help") == 0)
-                               usage();
-                       from_ok = 1;
-                       get_prefix(&addr, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = addr.family;
-                       if (addr.bytelen)
-                               addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen);
-                       req.r.rtm_src_len = addr.bitlen;
-               } else if (matches(*argv, "iif") == 0) {
-                       NEXT_ARG();
-                       idev = *argv;
-               } else if (matches(*argv, "oif") == 0 ||
-                          strcmp(*argv, "dev") == 0) {
-                       NEXT_ARG();
-                       odev = *argv;
-               } else if (matches(*argv, "notify") == 0) {
-                       req.r.rtm_flags |= RTM_F_NOTIFY;
-               } else if (matches(*argv, "connected") == 0) {
-                       connected = 1;
-               } else {
-                       inet_prefix addr;
-                       if (strcmp(*argv, "to") == 0) {
-                               NEXT_ARG();
-                       }
-                       if (matches(*argv, "help") == 0)
-                               usage();
-                       get_prefix(&addr, *argv, req.r.rtm_family);
-                       if (req.r.rtm_family == AF_UNSPEC)
-                               req.r.rtm_family = addr.family;
-                       if (addr.bytelen)
-                               addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen);
-                       req.r.rtm_dst_len = addr.bitlen;
-               }
-               argc--; argv++;
-       }
-
-       if (req.r.rtm_dst_len == 0) {
-               fprintf(stderr, "need at least destination address\n");
-               exit(1);
-       }
-
-       if (rtnl_open(&rth, 0) < 0)
-               exit(1);
-
-       ll_init_map(&rth);
-
-       if (idev || odev)  {
-               int idx;
-
-               if (idev) {
-                       if ((idx = ll_name_to_index(idev)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", idev);
-                               return -1;
-                       }
-                       addattr32(&req.n, sizeof(req), RTA_IIF, idx);
-               }
-               if (odev) {
-                       if ((idx = ll_name_to_index(odev)) == 0) {
-                               fprintf(stderr, "Cannot find device \"%s\"\n", odev);
-                               return -1;
-                       }
-                       addattr32(&req.n, sizeof(req), RTA_OIF, idx);
-               }
-       }
-
-       if (req.r.rtm_family == AF_UNSPEC)
-               req.r.rtm_family = AF_INET;
-
-       if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0)
-               exit(2);
-
-       if (connected && !from_ok) {
-               struct rtmsg *r = NLMSG_DATA(&req.n);
-               int len = req.n.nlmsg_len;
-               struct rtattr * tb[RTA_MAX+1];
-
-               if (print_route(NULL, &req.n, (void*)stdout) < 0) {
-                       fprintf(stderr, "An error :-)\n");
-                       exit(1);
-               }
-
-               if (req.n.nlmsg_type != RTM_NEWROUTE) {
-                       fprintf(stderr, "Not a route?\n");
-                       return -1;
-               }
-               len -= NLMSG_LENGTH(sizeof(*r));
-               if (len < 0) {
-                       fprintf(stderr, "Wrong len %d\n", len);
-                       return -1;
-               }
-
-               parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
-
-               if (tb[RTA_PREFSRC]) {
-                       tb[RTA_PREFSRC]->rta_type = RTA_SRC;
-                       r->rtm_src_len = 8*RTA_PAYLOAD(tb[RTA_PREFSRC]);
-               } else if (!tb[RTA_SRC]) {
-                       fprintf(stderr, "Failed to connect the route\n");
-                       return -1;
-               }
-               if (!odev && tb[RTA_OIF])
-                       tb[RTA_OIF]->rta_type = 0;
-               if (tb[RTA_GATEWAY])
-                       tb[RTA_GATEWAY]->rta_type = 0;
-               if (!idev && tb[RTA_IIF])
-                       tb[RTA_IIF]->rta_type = 0;
-               req.n.nlmsg_flags = NLM_F_REQUEST;
-               req.n.nlmsg_type = RTM_GETROUTE;
-
-               if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0)
-                       exit(2);
-       }
-
-       if (print_route(NULL, &req.n, (void*)stdout) < 0) {
-               fprintf(stderr, "An error :-)\n");
-               exit(1);
-       }
-
-       exit(0);
-}
-
-void iproute_reset_filter()
-{
-       memset(&filter, 0, sizeof(filter));
-       filter.mdst.bitlen = -1;
-       filter.msrc.bitlen = -1;
-}
-
-int do_iproute(int argc, char **argv)
-{
-       if (argc < 1)
-               return iproute_list_or_flush(0, NULL, 0);
-       
-       if (matches(*argv, "add") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL,
-                                     argc-1, argv+1);
-       if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE,
-                                     argc-1, argv+1);
-       if (matches(*argv, "replace") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE,
-                                     argc-1, argv+1);
-       if (matches(*argv, "prepend") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE,
-                                     argc-1, argv+1);
-       if (matches(*argv, "append") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND,
-                                     argc-1, argv+1);
-       if (matches(*argv, "test") == 0)
-               return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL,
-                                     argc-1, argv+1);
-       if (matches(*argv, "delete") == 0)
-               return iproute_modify(RTM_DELROUTE, 0,
-                                     argc-1, argv+1);
-       if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0
-           || matches(*argv, "lst") == 0)
-               return iproute_list_or_flush(argc-1, argv+1, 0);
-       if (matches(*argv, "get") == 0)
-               return iproute_get(argc-1, argv+1);
-       if (matches(*argv, "flush") == 0)
-               return iproute_list_or_flush(argc-1, argv+1, 1);
-       if (matches(*argv, "help") == 0)
-               usage();
-       fprintf(stderr, "Command \"%s\" is unknown, try \"ip route help\".\n", *argv);
-       exit(-1);
-}
-
diff --git a/ip/iproute.o b/ip/iproute.o
deleted file mode 100644 (file)
index 37f2779..0000000
Binary files a/ip/iproute.o and /dev/null differ
diff --git a/ip/iprule.o b/ip/iprule.o
deleted file mode 100644 (file)
index f880305..0000000
Binary files a/ip/iprule.o and /dev/null differ
diff --git a/ip/iptunnel.o b/ip/iptunnel.o
deleted file mode 100644 (file)
index 4408086..0000000
Binary files a/ip/iptunnel.o and /dev/null differ
diff --git a/ip/ipxfrm.o b/ip/ipxfrm.o
deleted file mode 100644 (file)
index 5c4380f..0000000
Binary files a/ip/ipxfrm.o and /dev/null differ
diff --git a/ip/rtm_map.o b/ip/rtm_map.o
deleted file mode 100644 (file)
index 2daff0e..0000000
Binary files a/ip/rtm_map.o and /dev/null differ
diff --git a/ip/rtmon b/ip/rtmon
deleted file mode 100755 (executable)
index 179849b..0000000
Binary files a/ip/rtmon and /dev/null differ
diff --git a/ip/rtmon.o b/ip/rtmon.o
deleted file mode 100644 (file)
index 7729575..0000000
Binary files a/ip/rtmon.o and /dev/null differ
diff --git a/ip/xfrm_policy.o b/ip/xfrm_policy.o
deleted file mode 100644 (file)
index 34cbd9e..0000000
Binary files a/ip/xfrm_policy.o and /dev/null differ
diff --git a/ip/xfrm_state.o b/ip/xfrm_state.o
deleted file mode 100644 (file)
index 8fa15f7..0000000
Binary files a/ip/xfrm_state.o and /dev/null differ
diff --git a/iproute.spec b/iproute.spec
new file mode 100644 (file)
index 0000000..702a5f3
--- /dev/null
@@ -0,0 +1,227 @@
+%define name iproute
+%define version 2.6.16
+%define release 1%{?pldistro:.%{pldistro}}%{?date:.%{date}}
+
+Vendor: PlanetLab
+Packager: PlanetLab Central <support@planet-lab.org>
+Distribution: PlanetLab 3.0
+URL: http://cvs.planet-lab.org/cvs/iptables
+
+Summary: Advanced IP routing and network device configuration tools.
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Group: Applications/System
+#Source: http://developer.osdl.org/dev/iproute2/download/iproute2-%{version}-050314.tar.gz
+#URL:    http://developer.osdl.org/dev/iproute2/
+Source: %{name}-%{version}.tar.gz
+%define SOURCE1 ip.8
+%define SOURCE2 tc.8
+%define SOURCE3 tc-cbq.8
+%define SOURCE4 tc-cbq-details.8
+%define SOURCE5 tc-htb.8
+%define SOURCE6 tc-pbfifo.8
+%define SOURCE7 tc-pfifo_fast.8
+%define SOURCE8 tc-prio.8
+%define SOURCE9 tc-red.8
+%define SOURCE10 tc-sfq.8
+%define SOURCE11 tc-tbf.8
+License: GNU GPL
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+BuildPrereq: tetex-latex tetex-dvips psutils linuxdoc-tools db4-devel bison
+
+%description
+The iproute package contains networking utilities (ip and rtmon, for
+example) which are designed to use the advanced networking
+capabilities of the Linux 2.4.x and 2.6.x kernel.
+
+%prep
+%setup -q
+
+%build
+make
+make -C doc
+
+%install
+#rm -rf $RPM_BUILD_ROOT
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/sbin \
+        $RPM_BUILD_ROOT%{_sbindir} \
+         $RPM_BUILD_ROOT%{_mandir}/man8 \
+         $RPM_BUILD_ROOT/etc/iproute2 \
+        $RPM_BUILD_ROOT%{_libdir}/tc
+
+install -m 755 ip/ip ip/ifcfg ip/rtmon tc/tc $RPM_BUILD_ROOT/sbin
+install -m 755 misc/ss misc/nstat misc/rtacct misc/lnstat misc/arpd $RPM_BUILD_ROOT%{_sbindir}
+install -m 755 tc/q_netem.so $RPM_BUILD_ROOT%{_libdir}/tc
+install -m 644 netem/normal.dist netem/pareto.dist netem/paretonormal.dist $RPM_BUILD_ROOT%{_libdir}/tc
+install -m 644 %{SOURCE1} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE2} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE3} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE4} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE5} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE6} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE7} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE8} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE9} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE10} $RPM_BUILD_ROOT/%{_mandir}/man8
+install -m 644 %{SOURCE11} $RPM_BUILD_ROOT/%{_mandir}/man8
+
+cp -f etc/iproute2/* $RPM_BUILD_ROOT/etc/iproute2
+rm -rf $RPM_BUILD_ROOT/%{_libdir}/debug/*
+
+%clean
+#rm -rf $RPM_BUILD_ROOT
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%dir /etc/iproute2
+%doc README.decnet README.iproute2+tc RELNOTES
+%doc doc/*.ps examples
+/sbin/*
+%{_mandir}/man8/*
+%attr(644,root,root) %config(noreplace) /etc/iproute2/*
+%{_sbindir}/*
+%{_libdir}/tc/*
+
+%changelog
+* Tue Mar 15 2005 Radek Vokal <rvokal@redhat.com> 2.6.11-1
+- update to iproute-2.6.11
+
+* Fri Mar 04 2005 Radek Vokal <rvokal@redhat.com> 2.6.10-2
+- gcc4 rebuilt
+
+* Wed Feb 16 2005 Radek Vokal <rvokal@redhat.com> 2.6.10-1
+- update to iproute-2.6.10
+
+* Thu Dec 23 2004 Radek Vokal <rvokal@redhat.com> 2.6.9-6
+- added arpd into sbin
+
+* Mon Nov 29 2004 Radek Vokal <rvokal@redhat.com> 2.6.9-5
+- debug info removed from makefile and from spec (#140891)
+
+* Tue Nov 16 2004 Radek Vokal <rvokal@redhat.com> 2.6.9-4
+- source file updated from snapshot version
+- endian patch adding <endian.h> 
+
+* Sat Sep 18 2004 Joshua Blanton <jblanton@cs.ohiou.edu> 2.6.9-3
+- added installation of netem module for tc
+
+* Mon Sep 06 2004 Radek Vokal <rvokal@redhat.com> 2.6.9-2
+- fixed possible buffer owerflow, path by Steve Grubb <linux_4ever@yahoo.com>
+
+* Wed Sep 01 2004 Radek Vokal <rvokal@redhat.com> 2.6.9-1
+- updated to iproute-2.6.9, spec file change, patches cleared
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed May 26 2004 Phil Knirsch <pknirsch@redhat.com> 2.4.7-16
+- Took tons of manpages from debian, much more complete (#123952).
+
+* Thu May 06 2004 Phil Knirsch <pknirsch@redhat.com> 2.4.7-15
+- rebuilt
+
+* Thu May 06 2004 Phil Knirsch <pknirsch@redhat.com> 2.4.7-13.2
+- Built security errata version for FC1.
+
+* Wed Apr 21 2004 Phil Knirsch <pknirsch@redhat.com> 2.4.7-14
+- Fixed -f option for ss (#118355).
+- Small description fix (#110997).
+- Added initialization of some vars (#74961). 
+- Added patch to initialize "default" rule as well (#60693).
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Nov 05 2003 Phil Knirsch <pknirsch@redhat.com> 2.4.7-12
+- Security errata for netlink (CAN-2003-0856).
+
+* Thu Oct 23 2003 Phil Knirsch <pknirsch@redhat.com>
+- Updated to latest version. Used by other distros, so seems stable. ;-)
+- Quite a few patches needed updating in that turn.
+- Added ss (#107363) and several other new nifty tools.
+
+* Tue Jun 17 2003 Phil Knirsch <pknirsch@redhat.com>
+- rebuilt
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Thu Jan 16 2003 Phil Knirsch <pknirsch@redhat.com> 2.4.7-7
+- Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486).
+
+* Fri Oct 11 2002 Bill Nottingham <notting@redhat.com> 2.4.7-6
+- remove flags patch at author's request
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Wed Jun 19 2002 Phil Knirsch <pknirsch@redhat.com> 2.4.7-4
+- Don't forcibly strip binaries
+
+* Mon May 27 2002 Phil Knirsch <pknirsch@redhat.com> 2.4.7-3
+- Fixed missing diffserv and atm support in config (#57278).
+- Fixed inconsistent numeric base problem for command line (#65473).
+
+* Tue May 14 2002 Phil Knirsch <pknirsch@redhat.com> 2.4.7-2
+- Added patch to fix crosscompiling by Adrian Linkins.
+
+* Fri Mar 15 2002 Phil Knirsch <pknirsch@redhat.com> 2.4.7-1
+- Update to latest stable release 2.4.7-now-ss010824.
+- Added simple man page for ip.
+
+* Wed Aug  8 2001 Bill Nottingham <notting@redhat.com>
+- allow setting of allmulti & promisc flags (#48669)
+
+* Mon Jul 02 2001 Than Ngo <than@redhat.com>
+- fix build problem in beehive if kernel-sources is not installed
+
+* Fri May 25 2001 Helge Deller <hdeller@redhat.de>
+- updated to iproute2-2.2.4-now-ss001007.tar.gz 
+- bzip2 source tar file
+- "License" replaces "Copyright"
+- added "BuildPrereq: tetex-latex tetex-dvips psutils"
+- rebuilt for 7.2
+
+* Tue May  1 2001 Bill Nottingham <notting@redhat.com>
+- use the system headers - the included ones are broken
+- ETH_P_ECHO went away
+
+* Sat Jan  6 2001 Jeff Johnson <jbj@redhat.com>
+- test for specific KERNEL_INCLUDE directories.
+
+* Thu Oct 12 2000 Than Ngo <than@redhat.com>
+- rebuild for 7.1
+
+* Thu Oct 12 2000 Than Ngo <than@redhat.com>
+- add default configuration files for iproute (Bug #10549, #18887)
+
+* Tue Jul 25 2000 Jakub Jelinek <jakub@redhat.com>
+- fix include-glibc/ to cope with glibc 2.2 new resolver headers
+
+* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Sun Jun 18 2000 Than Ngo <than@redhat.de>
+- rebuilt in the new build environment
+- use RPM macros
+- handle RPM_OPT_FLAGS
+
+* Sat Jun 03 2000 Than Ngo <than@redhat.de>
+- fix iproute to build with new glibc
+
+* Fri May 26 2000 Ngo Than <than@redhat.de>
+- update to 2.2.4-now-ss000305
+- add configuration files
+
+* Mon Sep 13 1999 Bill Nottingham <notting@redhat.com>
+- strip binaries
+
+* Mon Aug 16 1999 Cristian Gafton <gafton@redhat.com>
+- first build
diff --git a/lib/dnet_ntop.o b/lib/dnet_ntop.o
deleted file mode 100644 (file)
index 8cb237d..0000000
Binary files a/lib/dnet_ntop.o and /dev/null differ
diff --git a/lib/dnet_pton.o b/lib/dnet_pton.o
deleted file mode 100644 (file)
index e784a7e..0000000
Binary files a/lib/dnet_pton.o and /dev/null differ
diff --git a/lib/inet_proto.o b/lib/inet_proto.o
deleted file mode 100644 (file)
index d7d93e1..0000000
Binary files a/lib/inet_proto.o and /dev/null differ
diff --git a/lib/ipx_ntop.o b/lib/ipx_ntop.o
deleted file mode 100644 (file)
index 03effc2..0000000
Binary files a/lib/ipx_ntop.o and /dev/null differ
diff --git a/lib/ipx_pton.o b/lib/ipx_pton.o
deleted file mode 100644 (file)
index e6064cc..0000000
Binary files a/lib/ipx_pton.o and /dev/null differ
diff --git a/lib/libnetlink.a b/lib/libnetlink.a
deleted file mode 100644 (file)
index b4edfee..0000000
Binary files a/lib/libnetlink.a and /dev/null differ
diff --git a/lib/libnetlink.o b/lib/libnetlink.o
deleted file mode 100644 (file)
index 01f8068..0000000
Binary files a/lib/libnetlink.o and /dev/null differ
diff --git a/lib/libutil.a b/lib/libutil.a
deleted file mode 100644 (file)
index effedc9..0000000
Binary files a/lib/libutil.a and /dev/null differ
diff --git a/lib/ll_addr.o b/lib/ll_addr.o
deleted file mode 100644 (file)
index 12a2dea..0000000
Binary files a/lib/ll_addr.o and /dev/null differ
diff --git a/lib/ll_map.o b/lib/ll_map.o
deleted file mode 100644 (file)
index 62facd9..0000000
Binary files a/lib/ll_map.o and /dev/null differ
diff --git a/lib/ll_proto.o b/lib/ll_proto.o
deleted file mode 100644 (file)
index 491146c..0000000
Binary files a/lib/ll_proto.o and /dev/null differ
diff --git a/lib/ll_types.o b/lib/ll_types.o
deleted file mode 100644 (file)
index 11e3790..0000000
Binary files a/lib/ll_types.o and /dev/null differ
diff --git a/lib/rt_names.o b/lib/rt_names.o
deleted file mode 100644 (file)
index acab8cc..0000000
Binary files a/lib/rt_names.o and /dev/null differ
diff --git a/lib/utils.o b/lib/utils.o
deleted file mode 100644 (file)
index 3fd2741..0000000
Binary files a/lib/utils.o and /dev/null differ
diff --git a/misc/arpd b/misc/arpd
deleted file mode 100755 (executable)
index cb898a9..0000000
Binary files a/misc/arpd and /dev/null differ
diff --git a/misc/ifstat b/misc/ifstat
deleted file mode 100755 (executable)
index 5a54b51..0000000
Binary files a/misc/ifstat and /dev/null differ
diff --git a/misc/lnstat b/misc/lnstat
deleted file mode 100755 (executable)
index c59931a..0000000
Binary files a/misc/lnstat and /dev/null differ
diff --git a/misc/lnstat.o b/misc/lnstat.o
deleted file mode 100644 (file)
index b272d87..0000000
Binary files a/misc/lnstat.o and /dev/null differ
diff --git a/misc/lnstat_util.o b/misc/lnstat_util.o
deleted file mode 100644 (file)
index b9de784..0000000
Binary files a/misc/lnstat_util.o and /dev/null differ
diff --git a/misc/nstat b/misc/nstat
deleted file mode 100755 (executable)
index acc6870..0000000
Binary files a/misc/nstat and /dev/null differ
diff --git a/misc/rtacct b/misc/rtacct
deleted file mode 100755 (executable)
index 5edd221..0000000
Binary files a/misc/rtacct and /dev/null differ
diff --git a/misc/ss b/misc/ss
deleted file mode 100755 (executable)
index 86af12e..0000000
Binary files a/misc/ss and /dev/null differ
diff --git a/misc/ss.o b/misc/ss.o
deleted file mode 100644 (file)
index 18ee0d8..0000000
Binary files a/misc/ss.o and /dev/null differ
diff --git a/misc/ssfilter.c b/misc/ssfilter.c
deleted file mode 100644 (file)
index fa73a87..0000000
+++ /dev/null
@@ -1,1581 +0,0 @@
-/* A Bison parser, made by GNU Bison 1.875c.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   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.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Written by Richard Stallman by simplifying the original so called
-   ``semantic'' parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     HOSTCOND = 258,
-     DCOND = 259,
-     SCOND = 260,
-     DPORT = 261,
-     SPORT = 262,
-     LEQ = 263,
-     GEQ = 264,
-     NEQ = 265,
-     AUTOBOUND = 266
-   };
-#endif
-#define HOSTCOND 258
-#define DCOND 259
-#define SCOND 260
-#define DPORT 261
-#define SPORT 262
-#define LEQ 263
-#define GEQ 264
-#define NEQ 265
-#define AUTOBOUND 266
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 1 "ssfilter.y"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include "ssfilter.h"
-
-typedef struct ssfilter * ssfilter_t;
-
-#define YYSTYPE ssfilter_t
-
-static struct ssfilter * alloc_node(int type, void *pred)
-{
-       struct ssfilter *n = malloc(sizeof(*n));
-       if (n == NULL)
-               abort();
-       n->type = type;
-       n->pred = pred;
-       n->post = NULL;
-       return n;
-}
-
-static char            **yy_argv;
-static int             yy_argc;
-static FILE            *yy_fp;
-static ssfilter_t      *yy_ret;
-
-static int yylex(void);
-
-static void yyerror(char *s)
-{
-       fprintf(stderr, "ss: bison bellows (while parsing filter): \"%s!\"", s);
-}
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-typedef int YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Line 214 of yacc.c.  */
-#line 146 "ssfilter.c"
-
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-# ifndef YYFREE
-#  define YYFREE free
-# endif
-# ifndef YYMALLOC
-#  define YYMALLOC malloc
-# endif
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   define YYSTACK_ALLOC alloca
-#  endif
-# else
-#  if defined (alloca) || defined (_ALLOCA_H)
-#   define YYSTACK_ALLOC alloca
-#  else
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-# endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined (__GNUC__) && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
-#else
-   typedef short yysigned_char;
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  3
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   90
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  20
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  4
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  24
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  46
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   266
-
-#define YYTRANSLATE(YYX)                                               \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    14,     2,     2,     2,     2,    13,     2,
-      18,    19,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      16,    17,    15,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,    12,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const unsigned char yyprhs[] =
-{
-       0,     0,     3,     6,     8,     9,    12,    15,    19,    23,
-      27,    31,    35,    39,    43,    47,    51,    55,    59,    63,
-      65,    69,    72,    76,    79
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
-      21,     0,    -1,    22,    23,    -1,    22,    -1,    -1,     4,
-       3,    -1,     5,     3,    -1,     6,     9,     3,    -1,     6,
-       8,     3,    -1,     6,    15,     3,    -1,     6,    16,     3,
-      -1,     6,    17,     3,    -1,     6,    10,     3,    -1,     7,
-       9,     3,    -1,     7,     8,     3,    -1,     7,    15,     3,
-      -1,     7,    16,     3,    -1,     7,    17,     3,    -1,     7,
-      10,     3,    -1,    11,    -1,    23,    12,    23,    -1,    23,
-      23,    -1,    23,    13,    23,    -1,    14,    23,    -1,    18,
-      23,    19,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned char yyrline[] =
-{
-       0,    44,    44,    49,    51,    53,    57,    61,    65,    69,
-      73,    77,    81,    86,    90,    94,    98,   102,   106,   111,
-     115,   120,   125,   131,   135
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "HOSTCOND", "DCOND", "SCOND", "DPORT",
-  "SPORT", "LEQ", "GEQ", "NEQ", "AUTOBOUND", "'|'", "'&'", "'!'", "'>'",
-  "'<'", "'='", "'('", "')'", "$accept", "applet", "null", "expr", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const unsigned short yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   124,    38,    33,    62,    60,    61,    40,    41
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] =
-{
-       0,    20,    21,    21,    22,    23,    23,    23,    23,    23,
-      23,    23,    23,    23,    23,    23,    23,    23,    23,    23,
-      23,    23,    23,    23,    23
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] =
-{
-       0,     2,     2,     1,     0,     2,     2,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
-       3,     2,     3,     2,     3
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const unsigned char yydefact[] =
-{
-       4,     0,     3,     1,     0,     0,     0,     0,    19,     0,
-       0,     2,     5,     6,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    23,     0,     0,     0,
-      21,     8,     7,    12,     9,    10,    11,    14,    13,    18,
-      15,    16,    17,    24,    20,    22
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
-{
-      -1,     1,     2,    30
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -3
-static const yysigned_char yypact[] =
-{
-      -3,     1,    47,    -3,     6,    11,    69,    73,    -3,    47,
-      47,    17,    -3,    -3,    12,    13,    16,    22,    29,    30,
-      31,    37,    38,    39,    41,    44,    62,    -1,    47,    47,
-      17,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,
-      -3,    -3,    -3,    -3,    32,    47
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yysigned_char yypgoto[] =
-{
-      -3,    -3,    -3,    -2
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
-static const yysigned_char yytable[] =
-{
-      11,     3,     0,     4,     5,     6,     7,    26,    27,    12,
-       8,    28,    29,     9,    13,    31,    32,    10,    43,    33,
-       0,     4,     5,     6,     7,    34,    44,    45,     8,    28,
-      29,     9,    35,    36,    37,    10,     4,     5,     6,     7,
-      38,    39,    40,     8,    41,    29,     9,    42,     0,     0,
-      10,     4,     5,     6,     7,     0,     0,     0,     8,     0,
-       0,     9,     0,     0,     0,    10,     4,     5,     6,     7,
-       0,     0,     0,     8,     0,     0,    -1,    14,    15,    16,
-      10,    20,    21,    22,    17,    18,    19,     0,    23,    24,
-      25
-};
-
-static const yysigned_char yycheck[] =
-{
-       2,     0,    -1,     4,     5,     6,     7,     9,    10,     3,
-      11,    12,    13,    14,     3,     3,     3,    18,    19,     3,
-      -1,     4,     5,     6,     7,     3,    28,    29,    11,    12,
-      13,    14,     3,     3,     3,    18,     4,     5,     6,     7,
-       3,     3,     3,    11,     3,    13,    14,     3,    -1,    -1,
-      18,     4,     5,     6,     7,    -1,    -1,    -1,    11,    -1,
-      -1,    14,    -1,    -1,    -1,    18,     4,     5,     6,     7,
-      -1,    -1,    -1,    11,    -1,    -1,    14,     8,     9,    10,
-      18,     8,     9,    10,    15,    16,    17,    -1,    15,    16,
-      17
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,    21,    22,     0,     4,     5,     6,     7,    11,    14,
-      18,    23,     3,     3,     8,     9,    10,    15,    16,    17,
-       8,     9,    10,    15,    16,    17,    23,    23,    12,    13,
-      23,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,    19,    23,    23
-};
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");\
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)               \
-   ((Current).first_line   = (Rhs)[1].first_line,      \
-    (Current).first_column = (Rhs)[1].first_column,    \
-    (Current).last_line    = (Rhs)[N].last_line,       \
-    (Current).last_column  = (Rhs)[N].last_column)
-#endif
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-
-# define YYDSYMPRINT(Args)                     \
-do {                                           \
-  if (yydebug)                                 \
-    yysymprint Args;                           \
-} while (0)
-
-# define YYDSYMPRINTF(Title, Token, Value, Location)           \
-do {                                                           \
-  if (yydebug)                                                 \
-    {                                                          \
-      YYFPRINTF (stderr, "%s ", Title);                                \
-      yysymprint (stderr,                                      \
-                  Token, Value);       \
-      YYFPRINTF (stderr, "\n");                                        \
-    }                                                          \
-} while (0)
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_stack_print (short *bottom, short *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    short *bottom;
-    short *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (/* Nothing. */; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_reduce_print (int yyrule)
-#else
-static void
-yy_reduce_print (yyrule)
-    int yyrule;
-#endif
-{
-  int yyi;
-  unsigned int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
-             yyrule - 1, yylno);
-  /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
-}
-
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (Rule);            \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-# define YYDSYMPRINTF(Title, Token, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-#endif /* !YYERROR_VERBOSE */
-
-\f
-
-#if YYDEBUG
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yysymprint (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (yytype < YYNTOKENS)
-    {
-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-# ifdef YYPRINT
-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-    }
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  switch (yytype)
-    {
-      default:
-        break;
-    }
-  YYFPRINTF (yyoutput, ")");
-}
-
-#endif /* ! YYDEBUG */
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yydestruct (int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yytype, yyvaluep)
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
-}
-\f
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM);
-# else
-int yyparse ();
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM)
-# else
-int yyparse (YYPARSE_PARAM)
-  void *YYPARSE_PARAM;
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-  
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule.  */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 2:
-#line 45 "ssfilter.y"
-    {
-                *yy_ret = yyvsp[0];
-                yyval = yyvsp[0];
-        ;}
-    break;
-
-  case 4:
-#line 51 "ssfilter.y"
-    { yyval = NULL; ;}
-    break;
-
-  case 5:
-#line 54 "ssfilter.y"
-    {
-               yyval = alloc_node(SSF_DCOND, yyvsp[0]);
-        ;}
-    break;
-
-  case 6:
-#line 58 "ssfilter.y"
-    { 
-               yyval = alloc_node(SSF_SCOND, yyvsp[0]);
-        ;}
-    break;
-
-  case 7:
-#line 62 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_D_GE, yyvsp[0]);
-        ;}
-    break;
-
-  case 8:
-#line 66 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_D_LE, yyvsp[0]);
-        ;}
-    break;
-
-  case 9:
-#line 70 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_NOT, alloc_node(SSF_D_LE, yyvsp[0]));
-        ;}
-    break;
-
-  case 10:
-#line 74 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_NOT, alloc_node(SSF_D_GE, yyvsp[0]));
-        ;}
-    break;
-
-  case 11:
-#line 78 "ssfilter.y"
-    {
-               yyval = alloc_node(SSF_DCOND, yyvsp[0]);
-        ;}
-    break;
-
-  case 12:
-#line 82 "ssfilter.y"
-    {
-               yyval = alloc_node(SSF_NOT, alloc_node(SSF_DCOND, yyvsp[0]));
-        ;}
-    break;
-
-  case 13:
-#line 87 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_S_GE, yyvsp[0]);
-        ;}
-    break;
-
-  case 14:
-#line 91 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_S_LE, yyvsp[0]);
-        ;}
-    break;
-
-  case 15:
-#line 95 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_NOT, alloc_node(SSF_S_LE, yyvsp[0]));
-        ;}
-    break;
-
-  case 16:
-#line 99 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_NOT, alloc_node(SSF_S_GE, yyvsp[0]));
-        ;}
-    break;
-
-  case 17:
-#line 103 "ssfilter.y"
-    {
-               yyval = alloc_node(SSF_SCOND, yyvsp[0]);
-        ;}
-    break;
-
-  case 18:
-#line 107 "ssfilter.y"
-    {
-               yyval = alloc_node(SSF_NOT, alloc_node(SSF_SCOND, yyvsp[0]));
-        ;}
-    break;
-
-  case 19:
-#line 112 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_S_AUTO, NULL);
-        ;}
-    break;
-
-  case 20:
-#line 116 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_OR, yyvsp[-2]);
-               yyval->post = yyvsp[0];
-        ;}
-    break;
-
-  case 21:
-#line 121 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_AND, yyvsp[-1]);
-               yyval->post = yyvsp[0];
-        ;}
-    break;
-
-  case 22:
-#line 127 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_AND, yyvsp[-2]);
-               yyval->post = yyvsp[0];
-        ;}
-    break;
-
-  case 23:
-#line 132 "ssfilter.y"
-    {
-                yyval = alloc_node(SSF_NOT, yyvsp[0]);
-        ;}
-    break;
-
-  case 24:
-#line 136 "ssfilter.y"
-    {
-                yyval = yyvsp[-1];
-        ;}
-    break;
-
-
-    }
-
-/* Line 1000 of yacc.c.  */
-#line 1219 "ssfilter.c"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-
-
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (YYPACT_NINF < yyn && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         int yytype = YYTRANSLATE (yychar);
-         const char* yyprefix;
-         char *yymsg;
-         int yyx;
-
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         int yyxbegin = yyn < 0 ? -yyn : 0;
-
-         /* Stay within bounds of both yycheck and yytname.  */
-         int yychecklim = YYLAST - yyn;
-         int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-         int yycount = 0;
-
-         yyprefix = ", expecting ";
-         for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-           if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-             {
-               yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
-               yycount += 1;
-               if (yycount == 5)
-                 {
-                   yysize = 0;
-                   break;
-                 }
-             }
-         yysize += (sizeof ("syntax error, unexpected ")
-                    + yystrlen (yytname[yytype]));
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[yytype]);
-
-             if (yycount < 5)
-               {
-                 yyprefix = ", expecting ";
-                 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-                   if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-                     {
-                       yyp = yystpcpy (yyp, yyprefix);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yyprefix = " or ";
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("syntax error; also virtual memory exhausted");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror ("syntax error");
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* If at end of input, pop the error token,
-            then the rest of the stack, then return failure.  */
-         if (yychar == YYEOF)
-            for (;;)
-              {
-                YYPOPSTACK;
-                if (yyssp == yyss)
-                  YYABORT;
-                YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-                yydestruct (yystos[*yyssp], yyvsp);
-              }
-        }
-      else
-       {
-         YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
-         yydestruct (yytoken, &yylval);
-         yychar = YYEMPTY;
-
-       }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-#ifdef __GNUC__
-  /* Pacify GCC when the user code never invokes YYERROR and the label
-     yyerrorlab therefore never appears in user code.  */
-  if (0)
-     goto yyerrorlab;
-#endif
-
-  yyvsp -= yylen;
-  yyssp -= yylen;
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-      yydestruct (yystos[yystate], yyvsp);
-      YYPOPSTACK;
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*----------------------------------------------.
-| yyoverflowlab -- parser overflow comes here.  |
-`----------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
-
-
-#line 140 "ssfilter.y"
-
-
-static char *get_token_from_line(char **ptr)
-{
-       char *tok, *cp = *ptr;
-
-       while (*cp == ' ' || *cp == '\t') cp++;
-
-       if (*cp == 0) {
-               *ptr = cp;
-               return NULL;
-       }
-
-       tok = cp;
-
-       while (*cp != 0 && *cp != ' ' && *cp != '\t') {
-               /* Backslash escapes everything. */
-               if (*cp == '\\') {
-                       char *tp;
-                       for (tp = cp; tp != tok; tp--)
-                               *tp = *(tp-1);
-                       cp++;
-                       tok++;
-                       if (*cp == 0)
-                               break;
-               }
-               cp++;
-       }
-       if (*cp)
-               *cp++ = 0;
-       *ptr = cp;
-       return tok;
-}
-
-int yylex(void)
-{
-       static char argbuf[1024];
-       static char *tokptr = argbuf;
-       static int argc;
-       char *curtok;
-
-       do {
-               while (*tokptr == 0) {
-                       tokptr = NULL;
-                       if (argc < yy_argc) {
-                               tokptr = yy_argv[argc];
-                               argc++;
-                       } else if (yy_fp) {
-                               while (tokptr == NULL) {
-                                       if (fgets(argbuf, sizeof(argbuf)-1, yy_fp) == NULL)
-                                               return 0;
-                                       argbuf[sizeof(argbuf)-1] = 0;
-                                       if (strlen(argbuf) == sizeof(argbuf) - 1) {
-                                               fprintf(stderr, "Too long line in filter");
-                                               exit(-1);
-                                       }
-                                       if (argbuf[strlen(argbuf)-1] == '\n')
-                                               argbuf[strlen(argbuf)-1] = 0;
-                                       if (argbuf[0] == '#' || argbuf[0] == '0')
-                                               continue;
-                                       tokptr = argbuf;
-                               }
-                       } else {
-                               return 0;
-                       }
-               }
-       } while ((curtok = get_token_from_line(&tokptr)) == NULL);
-
-       if (strcmp(curtok, "!") == 0 ||
-           strcmp(curtok, "not") == 0)
-               return '!';
-       if (strcmp(curtok, "&") == 0 ||
-           strcmp(curtok, "&&") == 0 ||
-           strcmp(curtok, "and") == 0)
-               return '&';
-       if (strcmp(curtok, "|") == 0 ||
-           strcmp(curtok, "||") == 0 ||
-           strcmp(curtok, "or") == 0)
-               return '|';
-       if (strcmp(curtok, "(") == 0)
-               return '(';
-       if (strcmp(curtok, ")") == 0)
-               return ')';
-       if (strcmp(curtok, "dst") == 0)
-               return DCOND;
-       if (strcmp(curtok, "src") == 0)
-               return SCOND;
-       if (strcmp(curtok, "dport") == 0)
-               return DPORT;
-       if (strcmp(curtok, "sport") == 0)
-               return SPORT;
-       if (strcmp(curtok, ">=") == 0 ||
-           strcmp(curtok, "ge") == 0 ||
-           strcmp(curtok, "geq") == 0)
-               return GEQ;
-       if (strcmp(curtok, "<=") == 0 ||
-           strcmp(curtok, "le") == 0 ||
-           strcmp(curtok, "leq") == 0)
-               return LEQ;
-       if (strcmp(curtok, "!=") == 0 ||
-           strcmp(curtok, "ne") == 0 ||
-           strcmp(curtok, "neq") == 0)
-               return NEQ;
-       if (strcmp(curtok, "=") == 0 ||
-           strcmp(curtok, "==") == 0 ||
-           strcmp(curtok, "eq") == 0)
-               return '=';
-       if (strcmp(curtok, ">") == 0 ||
-           strcmp(curtok, "gt") == 0)
-               return '>';
-       if (strcmp(curtok, "<") == 0 ||
-           strcmp(curtok, "lt") == 0)
-               return '<';
-       if (strcmp(curtok, "autobound") == 0)
-               return AUTOBOUND;
-       yylval = (void*)parse_hostcond(curtok);
-       if (yylval == NULL) {
-               fprintf(stderr, "Cannot parse dst/src address.\n");
-               exit(1);
-       }
-       return HOSTCOND;
-}
-
-int ssfilter_parse(struct ssfilter **f, int argc, char **argv, FILE *fp)
-{
-       yy_argc = argc;
-       yy_argv = argv;
-       yy_fp   = fp;
-       yy_ret  = f;
-
-       if (yyparse()) {
-               fprintf(stderr, " Sorry.\n");
-               return -1;
-       }
-       return 0;
-}
-
-
diff --git a/misc/ssfilter.o b/misc/ssfilter.o
deleted file mode 100644 (file)
index 477cb5b..0000000
Binary files a/misc/ssfilter.o and /dev/null differ
diff --git a/netem/experimental.dist b/netem/experimental.dist
deleted file mode 100644 (file)
index 025c198..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-# This is the distribution table for the experimental distribution.
--10576 -10197 -10134 -10071 -10008 -9945 -9882 -9819
--9788 -9756 -9725 -9693 -9672 -9651 -9630 -9615
--9599 -9583 -9567 -9546 -9525 -9504 -9483 -9462
--9441 -9420 -9399 -9378 -9366 -9353 -9341 -9328
--9315 -9303 -9290 -9278 -9265 -9252 -9245 -9237
--9229 -9221 -9213 -9205 -9197 -9189 -9183 -9177
--9171 -9164 -9158 -9152 -9145 -9139 -9133 -9126
--9119 -9111 -9103 -9095 -9087 -9079 -9071 -9063
--9054 -9045 -9036 -9027 -9018 -9009 -9000 -8993
--8986 -8979 -8972 -8965 -8958 -8951 -8944 -8937
--8932 -8927 -8922 -8916 -8911 -8906 -8901 -8895
--8890 -8885 -8880 -8874 -8867 -8859 -8851 -8843
--8835 -8827 -8819 -8811 -8804 -8797 -8790 -8783
--8776 -8769 -8762 -8755 -8748 -8744 -8740 -8736
--8732 -8727 -8723 -8719 -8715 -8711 -8706 -8702
--8698 -8694 -8690 -8685 -8681 -8676 -8671 -8666
--8661 -8656 -8652 -8647 -8642 -8637 -8632 -8627
--8622 -8618 -8613 -8609 -8604 -8600 -8595 -8591
--8586 -8582 -8577 -8573 -8568 -8564 -8559 -8556
--8552 -8548 -8545 -8541 -8537 -8534 -8530 -8526
--8522 -8519 -8515 -8511 -8508 -8504 -8500 -8496
--8492 -8487 -8482 -8477 -8472 -8467 -8463 -8458
--8453 -8448 -8443 -8438 -8433 -8429 -8425 -8421
--8416 -8412 -8408 -8404 -8399 -8395 -8391 -8387
--8382 -8378 -8374 -8369 -8366 -8362 -8358 -8354
--8350 -8346 -8342 -8338 -8334 -8330 -8326 -8322
--8318 -8314 -8310 -8306 -8303 -8299 -8295 -8292
--8288 -8284 -8281 -8277 -8273 -8269 -8266 -8262
--8258 -8255 -8251 -8247 -8243 -8240 -8236 -8232
--8229 -8225 -8221 -8218 -8214 -8210 -8206 -8203
--8199 -8195 -8192 -8188 -8184 -8180 -8176 -8172
--8168 -8164 -8159 -8155 -8151 -8147 -8143 -8138
--8134 -8130 -8126 -8122 -8117 -8114 -8111 -8108
--8105 -8102 -8099 -8095 -8092 -8089 -8086 -8083
--8080 -8077 -8073 -8070 -8067 -8064 -8061 -8058
--8054 -8051 -8047 -8043 -8040 -8036 -8032 -8029
--8025 -8021 -8017 -8014 -8010 -8006 -8003 -7999
--7995 -7991 -7988 -7984 -7981 -7977 -7974 -7970
--7967 -7963 -7960 -7956 -7953 -7949 -7946 -7942
--7939 -7935 -7932 -7928 -7925 -7921 -7917 -7914
--7910 -7906 -7903 -7899 -7895 -7891 -7888 -7884
--7880 -7877 -7873 -7869 -7865 -7861 -7857 -7853
--7849 -7844 -7840 -7836 -7832 -7828 -7823 -7819
--7815 -7811 -7807 -7802 -7800 -7797 -7794 -7792
--7789 -7786 -7783 -7781 -7778 -7775 -7772 -7770
--7767 -7764 -7761 -7759 -7756 -7753 -7750 -7748
--7745 -7742 -7739 -7736 -7733 -7730 -7727 -7724
--7721 -7717 -7714 -7711 -7708 -7705 -7702 -7699
--7695 -7692 -7689 -7686 -7683 -7680 -7676 -7674
--7671 -7668 -7665 -7662 -7659 -7656 -7654 -7651
--7648 -7645 -7642 -7639 -7636 -7634 -7631 -7628
--7625 -7622 -7619 -7616 -7613 -7611 -7609 -7606
--7604 -7601 -7599 -7597 -7594 -7592 -7589 -7587
--7584 -7582 -7580 -7577 -7575 -7572 -7570 -7567
--7565 -7563 -7560 -7558 -7555 -7553 -7550 -7547
--7544 -7541 -7537 -7534 -7531 -7527 -7524 -7521
--7517 -7514 -7511 -7507 -7504 -7501 -7497 -7494
--7491 -7487 -7484 -7480 -7477 -7473 -7470 -7466
--7463 -7459 -7456 -7452 -7449 -7445 -7442 -7438
--7435 -7431 -7428 -7424 -7420 -7416 -7412 -7408
--7403 -7399 -7395 -7391 -7387 -7382 -7378 -7374
--7370 -7366 -7361 -7359 -7357 -7354 -7352 -7349
--7347 -7345 -7342 -7340 -7337 -7335 -7332 -7330
--7328 -7325 -7323 -7320 -7318 -7315 -7313 -7311
--7308 -7306 -7303 -7301 -7298 -7296 -7294 -7291
--7289 -7286 -7284 -7282 -7279 -7277 -7274 -7272
--7269 -7267 -7265 -7262 -7260 -7257 -7255 -7252
--7250 -7248 -7245 -7243 -7240 -7238 -7235 -7232
--7229 -7226 -7222 -7219 -7216 -7212 -7209 -7206
--7202 -7199 -7196 -7192 -7189 -7186 -7182 -7179
--7176 -7172 -7169 -7165 -7162 -7158 -7155 -7151
--7148 -7144 -7141 -7137 -7134 -7130 -7127 -7123
--7120 -7116 -7113 -7109 -7107 -7104 -7101 -7098
--7095 -7092 -7089 -7087 -7084 -7081 -7078 -7075
--7072 -7069 -7067 -7064 -7061 -7058 -7055 -7052
--7049 -7046 -7043 -7040 -7037 -7034 -7031 -7028
--7025 -7022 -7019 -7016 -7013 -7010 -7007 -7004
--7001 -6998 -6995 -6992 -6989 -6986 -6983 -6980
--6977 -6974 -6970 -6967 -6964 -6960 -6957 -6954
--6950 -6947 -6944 -6940 -6937 -6934 -6930 -6927
--6924 -6920 -6918 -6915 -6912 -6909 -6906 -6903
--6900 -6898 -6895 -6892 -6889 -6886 -6883 -6880
--6878 -6875 -6872 -6869 -6866 -6863 -6860 -6857
--6855 -6852 -6850 -6847 -6844 -6842 -6839 -6836
--6834 -6831 -6829 -6826 -6823 -6821 -6818 -6815
--6813 -6810 -6808 -6805 -6802 -6800 -6797 -6794
--6792 -6789 -6786 -6783 -6780 -6777 -6774 -6772
--6769 -6766 -6763 -6760 -6757 -6754 -6752 -6749
--6746 -6743 -6740 -6737 -6734 -6731 -6729 -6727
--6725 -6722 -6720 -6718 -6715 -6713 -6711 -6709
--6706 -6704 -6702 -6699 -6697 -6695 -6693 -6690
--6688 -6686 -6683 -6681 -6679 -6677 -6674 -6672
--6670 -6667 -6665 -6662 -6659 -6656 -6653 -6651
--6648 -6645 -6642 -6639 -6636 -6634 -6631 -6628
--6625 -6622 -6620 -6617 -6614 -6611 -6608 -6605
--6602 -6599 -6596 -6593 -6589 -6586 -6583 -6580
--6577 -6573 -6570 -6567 -6564 -6561 -6557 -6554
--6551 -6548 -6545 -6541 -6539 -6537 -6534 -6532
--6530 -6527 -6525 -6523 -6520 -6518 -6516 -6513
--6511 -6509 -6506 -6504 -6502 -6499 -6497 -6495
--6492 -6490 -6488 -6485 -6483 -6481 -6478 -6475
--6472 -6469 -6465 -6462 -6459 -6455 -6452 -6449
--6445 -6442 -6439 -6435 -6432 -6429 -6425 -6422
--6419 -6415 -6412 -6408 -6405 -6401 -6398 -6394
--6391 -6387 -6384 -6380 -6377 -6373 -6370 -6366
--6363 -6359 -6356 -6352 -6349 -6346 -6343 -6340
--6337 -6334 -6331 -6328 -6325 -6322 -6319 -6316
--6313 -6310 -6307 -6304 -6301 -6298 -6295 -6292
--6289 -6287 -6284 -6282 -6279 -6276 -6274 -6271
--6268 -6266 -6263 -6261 -6258 -6255 -6253 -6250
--6247 -6245 -6242 -6240 -6237 -6234 -6232 -6229
--6226 -6223 -6219 -6216 -6212 -6209 -6205 -6202
--6198 -6195 -6191 -6188 -6184 -6181 -6177 -6174
--6170 -6167 -6163 -6160 -6156 -6152 -6149 -6145
--6141 -6138 -6134 -6130 -6126 -6123 -6119 -6115
--6112 -6108 -6104 -6100 -6098 -6095 -6092 -6089
--6086 -6083 -6080 -6078 -6075 -6072 -6069 -6066
--6063 -6060 -6058 -6055 -6052 -6049 -6046 -6043
--6040 -6037 -6035 -6032 -6029 -6027 -6024 -6021
--6018 -6016 -6013 -6010 -6007 -6005 -6002 -5999
--5996 -5994 -5991 -5988 -5985 -5983 -5980 -5977
--5974 -5971 -5968 -5965 -5962 -5959 -5956 -5952
--5949 -5946 -5943 -5940 -5937 -5934 -5930 -5927
--5924 -5921 -5918 -5915 -5911 -5909 -5906 -5903
--5900 -5897 -5894 -5891 -5889 -5886 -5883 -5880
--5877 -5874 -5871 -5869 -5866 -5863 -5860 -5857
--5854 -5851 -5848 -5846 -5843 -5840 -5837 -5834
--5831 -5828 -5826 -5823 -5820 -5817 -5814 -5811
--5808 -5806 -5803 -5800 -5797 -5794 -5791 -5788
--5785 -5782 -5779 -5776 -5772 -5769 -5766 -5762
--5759 -5756 -5752 -5749 -5746 -5742 -5739 -5736
--5732 -5729 -5726 -5722 -5720 -5717 -5714 -5711
--5708 -5705 -5702 -5700 -5697 -5694 -5691 -5688
--5685 -5682 -5680 -5677 -5674 -5671 -5668 -5665
--5662 -5659 -5657 -5655 -5652 -5650 -5647 -5645
--5643 -5640 -5638 -5635 -5633 -5630 -5628 -5626
--5623 -5621 -5618 -5616 -5613 -5611 -5609 -5606
--5604 -5601 -5599 -5596 -5592 -5587 -5583 -5578
--5574 -5569 -5565 -5560 -5556 -5551 -5547 -5542
--5538 -5533 -5531 -5528 -5526 -5523 -5521 -5518
--5516 -5513 -5511 -5508 -5506 -5503 -5501 -5498
--5496 -5493 -5491 -5488 -5486 -5483 -5481 -5478
--5476 -5473 -5470 -5467 -5464 -5461 -5457 -5454
--5451 -5447 -5444 -5441 -5437 -5434 -5431 -5427
--5424 -5421 -5417 -5414 -5411 -5407 -5404 -5401
--5398 -5394 -5391 -5388 -5384 -5381 -5378 -5374
--5371 -5368 -5364 -5361 -5358 -5354 -5351 -5348
--5344 -5341 -5338 -5335 -5331 -5328 -5325 -5321
--5318 -5315 -5311 -5308 -5305 -5301 -5298 -5295
--5291 -5288 -5285 -5281 -5278 -5274 -5270 -5267
--5263 -5259 -5256 -5252 -5248 -5244 -5241 -5237
--5233 -5230 -5226 -5222 -5218 -5216 -5214 -5212
--5210 -5208 -5205 -5203 -5201 -5199 -5197 -5195
--5192 -5190 -5188 -5186 -5184 -5182 -5179 -5177
--5175 -5173 -5171 -5169 -5166 -5164 -5162 -5160
--5158 -5155 -5152 -5148 -5144 -5140 -5136 -5132
--5128 -5124 -5120 -5116 -5112 -5108 -5104 -5100
--5096 -5092 -5089 -5086 -5083 -5079 -5076 -5073
--5069 -5066 -5063 -5059 -5056 -5053 -5049 -5046
--5043 -5039 -5036 -5033 -5029 -5027 -5024 -5022
--5019 -5017 -5014 -5012 -5009 -5007 -5004 -5002
--4999 -4997 -4994 -4992 -4989 -4987 -4984 -4982
--4979 -4977 -4974 -4972 -4969 -4966 -4963 -4960
--4957 -4954 -4951 -4948 -4944 -4941 -4938 -4935
--4932 -4929 -4926 -4922 -4919 -4916 -4913 -4910
--4907 -4903 -4899 -4895 -4891 -4887 -4882 -4878
--4874 -4870 -4866 -4861 -4857 -4853 -4849 -4845
--4840 -4837 -4833 -4829 -4825 -4822 -4818 -4814
--4810 -4807 -4803 -4799 -4795 -4792 -4788 -4784
--4780 -4776 -4774 -4771 -4768 -4765 -4762 -4759
--4756 -4753 -4750 -4747 -4744 -4741 -4738 -4735
--4732 -4729 -4726 -4723 -4720 -4717 -4714 -4711
--4708 -4705 -4702 -4699 -4696 -4693 -4690 -4687
--4684 -4681 -4678 -4675 -4672 -4669 -4666 -4663
--4660 -4657 -4654 -4650 -4647 -4643 -4639 -4636
--4632 -4628 -4625 -4621 -4617 -4613 -4610 -4606
--4602 -4599 -4595 -4591 -4587 -4584 -4580 -4576
--4572 -4568 -4564 -4560 -4556 -4552 -4548 -4544
--4540 -4536 -4532 -4528 -4524 -4520 -4516 -4512
--4508 -4503 -4499 -4495 -4491 -4487 -4482 -4478
--4474 -4470 -4466 -4461 -4459 -4456 -4453 -4450
--4447 -4444 -4441 -4439 -4436 -4433 -4430 -4427
--4424 -4421 -4419 -4416 -4413 -4410 -4407 -4404
--4401 -4398 -4395 -4391 -4388 -4384 -4381 -4377
--4374 -4370 -4367 -4363 -4360 -4356 -4353 -4349
--4346 -4342 -4339 -4335 -4332 -4329 -4326 -4323
--4320 -4317 -4314 -4311 -4308 -4305 -4302 -4299
--4296 -4293 -4290 -4287 -4284 -4281 -4278 -4275
--4272 -4268 -4263 -4258 -4253 -4248 -4243 -4239
--4234 -4229 -4224 -4219 -4214 -4209 -4206 -4202
--4199 -4195 -4192 -4188 -4185 -4181 -4178 -4174
--4171 -4167 -4164 -4160 -4157 -4153 -4150 -4146
--4142 -4138 -4134 -4130 -4125 -4121 -4117 -4113
--4109 -4104 -4100 -4096 -4092 -4088 -4083 -4080
--4076 -4073 -4069 -4066 -4062 -4059 -4055 -4052
--4048 -4045 -4041 -4038 -4034 -4031 -4027 -4024
--4020 -4017 -4013 -4010 -4006 -4003 -3999 -3996
--3992 -3989 -3985 -3982 -3978 -3975 -3971 -3968
--3964 -3961 -3957 -3954 -3950 -3947 -3943 -3940
--3936 -3933 -3929 -3926 -3922 -3919 -3915 -3912
--3908 -3905 -3901 -3898 -3894 -3891 -3887 -3884
--3880 -3877 -3873 -3870 -3866 -3863 -3859 -3856
--3852 -3849 -3845 -3842 -3838 -3835 -3831 -3827
--3823 -3819 -3815 -3810 -3806 -3802 -3798 -3794
--3789 -3785 -3781 -3777 -3773 -3768 -3765 -3761
--3757 -3754 -3750 -3746 -3743 -3739 -3735 -3731
--3728 -3724 -3720 -3717 -3713 -3709 -3705 -3702
--3699 -3696 -3692 -3689 -3686 -3682 -3679 -3676
--3672 -3669 -3666 -3662 -3659 -3656 -3652 -3649
--3646 -3642 -3639 -3635 -3631 -3628 -3624 -3620
--3617 -3613 -3609 -3605 -3602 -3598 -3594 -3591
--3587 -3583 -3579 -3575 -3570 -3566 -3561 -3557
--3552 -3548 -3543 -3539 -3534 -3530 -3525 -3521
--3516 -3513 -3509 -3505 -3501 -3497 -3493 -3489
--3485 -3481 -3477 -3473 -3469 -3465 -3461 -3457
--3453 -3450 -3446 -3442 -3439 -3435 -3431 -3428
--3424 -3420 -3416 -3413 -3409 -3405 -3402 -3398
--3394 -3390 -3387 -3383 -3380 -3376 -3373 -3369
--3366 -3362 -3359 -3355 -3352 -3348 -3345 -3341
--3338 -3334 -3331 -3327 -3323 -3318 -3314 -3309
--3305 -3300 -3296 -3291 -3287 -3282 -3278 -3273
--3269 -3264 -3260 -3255 -3250 -3245 -3240 -3235
--3231 -3226 -3221 -3216 -3211 -3206 -3201 -3198
--3194 -3190 -3186 -3182 -3178 -3174 -3170 -3166
--3162 -3158 -3154 -3150 -3146 -3142 -3138 -3135
--3131 -3128 -3124 -3121 -3117 -3114 -3110 -3107
--3103 -3100 -3096 -3093 -3089 -3086 -3082 -3079
--3075 -3072 -3068 -3065 -3061 -3058 -3054 -3051
--3047 -3044 -3040 -3037 -3033 -3030 -3026 -3023
--3019 -3016 -3012 -3008 -3004 -3000 -2995 -2991
--2987 -2983 -2978 -2974 -2970 -2966 -2961 -2957
--2953 -2948 -2945 -2942 -2939 -2935 -2932 -2929
--2925 -2922 -2919 -2915 -2912 -2909 -2905 -2902
--2899 -2895 -2892 -2889 -2885 -2882 -2878 -2874
--2870 -2866 -2862 -2858 -2854 -2850 -2846 -2842
--2838 -2834 -2830 -2826 -2822 -2819 -2815 -2811
--2807 -2803 -2799 -2795 -2791 -2787 -2783 -2779
--2775 -2771 -2767 -2763 -2759 -2755 -2750 -2745
--2740 -2735 -2730 -2726 -2721 -2716 -2711 -2706
--2701 -2696 -2692 -2688 -2684 -2680 -2675 -2671
--2667 -2663 -2659 -2654 -2650 -2646 -2642 -2638
--2633 -2630 -2626 -2622 -2618 -2614 -2610 -2606
--2602 -2598 -2594 -2590 -2586 -2582 -2578 -2574
--2570 -2566 -2561 -2557 -2552 -2548 -2543 -2539
--2534 -2530 -2525 -2521 -2516 -2512 -2507 -2502
--2497 -2492 -2486 -2481 -2476 -2471 -2465 -2460
--2455 -2450 -2444 -2439 -2434 -2429 -2423 -2418
--2413 -2408 -2402 -2397 -2392 -2387 -2381 -2376
--2371 -2366 -2360 -2355 -2350 -2345 -2339 -2334
--2329 -2324 -2318 -2314 -2309 -2305 -2300 -2296
--2291 -2287 -2282 -2278 -2273 -2269 -2264 -2260
--2255 -2251 -2246 -2242 -2237 -2233 -2228 -2224
--2219 -2215 -2210 -2206 -2201 -2197 -2192 -2188
--2183 -2179 -2174 -2170 -2165 -2161 -2156 -2152
--2147 -2143 -2138 -2134 -2129 -2125 -2121 -2117
--2113 -2108 -2104 -2100 -2096 -2092 -2087 -2083
--2079 -2075 -2071 -2066 -2062 -2057 -2052 -2047
--2042 -2037 -2033 -2028 -2023 -2018 -2013 -2008
--2003 -1999 -1994 -1989 -1984 -1979 -1974 -1970
--1965 -1960 -1955 -1950 -1945 -1940 -1936 -1931
--1926 -1921 -1916 -1911 -1907 -1902 -1897 -1892
--1887 -1882 -1877 -1873 -1869 -1865 -1861 -1856
--1852 -1848 -1844 -1840 -1835 -1831 -1827 -1823
--1819 -1814 -1811 -1807 -1803 -1800 -1796 -1792
--1789 -1785 -1781 -1777 -1774 -1770 -1766 -1763
--1759 -1755 -1751 -1747 -1742 -1737 -1732 -1727
--1722 -1718 -1713 -1708 -1703 -1698 -1693 -1688
--1684 -1679 -1674 -1669 -1664 -1659 -1655 -1650
--1645 -1640 -1635 -1630 -1625 -1620 -1615 -1610
--1604 -1599 -1594 -1589 -1583 -1578 -1573 -1568
--1562 -1557 -1552 -1547 -1541 -1536 -1531 -1526
--1520 -1515 -1510 -1505 -1499 -1495 -1490 -1485
--1480 -1475 -1470 -1466 -1461 -1456 -1451 -1446
--1441 -1436 -1431 -1426 -1421 -1415 -1410 -1405
--1400 -1394 -1389 -1384 -1379 -1373 -1369 -1364
--1360 -1355 -1351 -1346 -1342 -1337 -1333 -1328
--1324 -1319 -1315 -1310 -1307 -1303 -1299 -1295
--1292 -1288 -1284 -1280 -1277 -1273 -1269 -1265
--1262 -1258 -1254 -1250 -1246 -1242 -1238 -1233
--1229 -1224 -1220 -1215 -1211 -1207 -1202 -1198
--1193 -1189 -1184 -1180 -1175 -1171 -1166 -1162
--1157 -1153 -1148 -1144 -1139 -1135 -1130 -1126
--1121 -1116 -1110 -1104 -1098 -1092 -1087 -1081
--1075 -1069 -1063 -1057 -1052 -1047 -1042 -1036
--1031 -1026 -1021 -1015 -1010 -1005 -1000 -994
--990 -985 -981 -976 -972 -967 -963 -958
--954 -949 -945 -940 -936 -931 -927 -923
--919 -915 -910 -906 -902 -898 -894 -889
--885 -881 -877 -873 -868 -861 -854 -847
--840 -833 -826 -819 -812 -805 -800 -794
--788 -783 -777 -771 -765 -760 -754 -748
--742 -737 -731 -725 -720 -714 -708 -702
--697 -691 -685 -679 -675 -670 -666 -661
--657 -652 -648 -643 -639 -634 -630 -625
--621 -616 -611 -605 -599 -594 -588 -582
--576 -571 -565 -559 -553 -548 -542 -536
--531 -525 -519 -513 -508 -502 -496 -490
--485 -480 -475 -469 -464 -459 -454 -448
--443 -438 -433 -427 -420 -412 -404 -396
--388 -380 -372 -364 -355 -346 -337 -328
--319 -310 -301 -294 -287 -280 -273 -266
--259 -252 -245 -238 -234 -229 -224 -219
--214 -209 -205 -200 -195 -190 -185 -180
--175 -168 -161 -154 -147 -140 -133 -126
--119 -112 -107 -101 -95 -90 -84 -78
--72 -67 -61 -55 -49 -43 -37 -31
--24 -18 -12 -5 1 7 14 21
-28 35 42 49 56 63 70 77
-83 89 95 102 108 114 121 127
-133 140 147 154 161 168 175 182
-189 196 203 210 217 224 231 238
-245 252 259 266 272 278 284 291
-297 303 310 316 322 329 334 339
-344 350 355 360 365 371 376 381
-386 392 399 406 413 420 427 434
-441 448 455 462 470 478 486 494
-502 510 518 523 529 535 540 546
-552 558 563 569 575 581 590 599
-608 617 626 635 645 652 659 666
-673 680 687 694 701 708 714 720
-726 733 739 745 752 758 764 771
-775 780 784 789 793 798 802 807
-811 816 820 825 829 834 839 845
-851 856 862 868 874 879 885 891
-897 902 907 912 918 923 928 933
-939 944 949 954 960 969 978 987
-996 1005 1014 1023 1033 1044 1054 1065
-1075 1086 1093 1101 1109 1117 1125 1133
-1141 1149 1158 1167 1176 1185 1194 1203
-1212 1218 1224 1230 1237 1243 1249 1256
-1262 1268 1275 1281 1287 1293 1300 1306
-1312 1319 1325 1331 1338 1347 1356 1365
-1374 1383 1392 1401 1406 1412 1418 1423
-1429 1435 1441 1446 1452 1458 1464 1469
-1475 1481 1486 1492 1498 1504 1509 1515
-1521 1527 1536 1545 1554 1563 1572 1581
-1590 1599 1608 1617 1626 1635 1644 1653
-1660 1667 1674 1681 1688 1695 1702 1709
-1716 1722 1728 1734 1741 1747 1753 1760
-1766 1772 1779 1789 1800 1810 1821 1831
-1842 1847 1853 1859 1864 1870 1876 1882
-1887 1893 1899 1905 1915 1926 1936 1947
-1957 1968 1975 1983 1991 1999 2007 2015
-2023 2031 2038 2046 2054 2062 2070 2078
-2086 2094 2101 2108 2115 2122 2129 2136
-2143 2150 2157 2164 2172 2180 2188 2196
-2204 2212 2220 2225 2231 2237 2242 2248
-2254 2260 2265 2271 2277 2283 2292 2301
-2310 2319 2328 2337 2347 2352 2358 2363
-2369 2375 2380 2386 2392 2397 2403 2409
-2417 2425 2433 2441 2449 2457 2465 2473
-2480 2488 2496 2504 2512 2520 2528 2536
-2542 2548 2554 2561 2567 2573 2580 2586
-2592 2599 2611 2624 2636 2649 2662 2669
-2676 2683 2690 2697 2704 2711 2718 2725
-2732 2740 2748 2756 2764 2772 2780 2788
-2795 2803 2811 2819 2827 2835 2843 2851
-2857 2863 2869 2876 2882 2888 2895 2901
-2907 2914 2921 2929 2937 2945 2953 2961
-2969 2977 2986 2995 3004 3013 3022 3031
-3040 3050 3061 3071 3082 3092 3103 3110
-3117 3124 3131 3138 3145 3152 3159 3166
-3173 3180 3187 3194 3201 3208 3215 3222
-3229 3235 3241 3247 3254 3260 3266 3273
-3279 3285 3292 3298 3304 3310 3317 3323
-3329 3336 3342 3348 3355 3361 3367 3373
-3380 3386 3392 3399 3405 3411 3418 3427
-3436 3445 3454 3463 3472 3481 3491 3502
-3512 3523 3533 3544 3551 3559 3567 3575
-3583 3591 3599 3607 3619 3632 3644 3657
-3670 3676 3682 3688 3695 3701 3707 3714
-3720 3726 3733 3738 3744 3750 3755 3761
-3767 3773 3778 3784 3790 3796 3803 3811
-3819 3827 3835 3843 3851 3859 3866 3874
-3882 3890 3898 3906 3914 3922 3932 3943
-3953 3964 3974 3985 3992 3999 4006 4013
-4020 4027 4034 4041 4048 4058 4069 4079
-4090 4100 4111 4120 4129 4138 4147 4156
-4165 4174 4180 4186 4193 4199 4206 4212
-4218 4225 4231 4238 4245 4253 4261 4269
-4276 4284 4292 4300 4308 4316 4324 4332
-4340 4348 4356 4364 4371 4379 4387 4395
-4403 4411 4419 4427 4434 4441 4448 4455
-4462 4469 4476 4483 4490 4505 4521 4537
-4553 4560 4567 4574 4581 4588 4595 4602
-4609 4616 4625 4634 4643 4652 4661 4670
-4679 4688 4697 4706 4715 4724 4733 4742
-4751 4760 4769 4778 4787 4796 4805 4812
-4819 4826 4833 4840 4847 4854 4861 4868
-4875 4882 4889 4896 4903 4910 4917 4924
-4931 4941 4952 4962 4973 4983 4994 5004
-5015 5025 5036 5046 5057 5064 5071 5078
-5085 5092 5099 5106 5113 5120 5129 5138
-5147 5156 5165 5174 5183 5193 5204 5214
-5225 5235 5246 5258 5271 5283 5296 5309
-5318 5327 5336 5345 5354 5363 5372 5382
-5393 5403 5414 5424 5435 5445 5456 5466
-5477 5487 5498 5505 5513 5521 5529 5537
-5545 5553 5561 5568 5576 5584 5592 5600
-5608 5616 5624 5634 5645 5655 5666 5676
-5687 5696 5705 5714 5723 5732 5741 5750
-5757 5764 5771 5778 5785 5792 5799 5806
-5813 5818 5824 5830 5835 5841 5847 5853
-5858 5864 5870 5876 5886 5897 5907 5918
-5928 5939 5951 5964 5976 5989 6002 6011
-6020 6029 6038 6047 6056 6066 6075 6084
-6093 6102 6111 6120 6129 6138 6147 6156
-6165 6174 6183 6192 6199 6207 6215 6223
-6231 6239 6247 6255 6262 6269 6276 6283
-6290 6297 6304 6311 6318 6325 6333 6341
-6349 6357 6365 6373 6381 6391 6402 6412
-6423 6433 6444 6453 6462 6471 6480 6489
-6498 6507 6514 6521 6528 6535 6542 6549
-6556 6563 6570 6579 6588 6597 6606 6615
-6624 6633 6640 6648 6656 6664 6672 6680
-6688 6696 6705 6714 6723 6732 6741 6750
-6759 6771 6784 6796 6809 6822 6837 6853
-6869 6885 6892 6900 6908 6916 6924 6932
-6940 6948 6957 6966 6975 6984 6993 7002
-7011 7021 7032 7042 7053 7063 7074 7083
-7092 7101 7110 7119 7128 7137 7142 7148
-7154 7159 7165 7171 7177 7182 7188 7194
-7200 7210 7221 7231 7242 7252 7263 7269
-7275 7281 7288 7294 7300 7307 7313 7319
-7326 7341 7357 7373 7389 7399 7410 7420
-7431 7441 7452 7459 7466 7473 7480 7487
-7494 7501 7508 7515 7522 7530 7538 7546
-7554 7562 7570 7578 7588 7599 7609 7620
-7630 7641 7651 7662 7672 7683 7693 7704
-7714 7725 7735 7746 7756 7767 7777 7788
-7798 7809 7819 7830 7839 7848 7857 7866
-7875 7884 7893 7902 7911 7920 7929 7938
-7947 7957 7966 7975 7984 7993 8002 8011
-8020 8030 8041 8051 8062 8072 8083 8090
-8098 8106 8114 8122 8130 8138 8146 8158
-8171 8183 8196 8209 8219 8230 8240 8251
-8261 8272 8281 8290 8299 8308 8317 8326
-8335 8345 8356 8366 8377 8387 8398 8413
-8429 8445 8461 8471 8482 8492 8503 8513
-8524 8531 8539 8547 8555 8563 8571 8579
-8587 8597 8608 8618 8629 8639 8650 8657
-8665 8673 8681 8689 8697 8705 8713 8722
-8731 8740 8749 8758 8767 8776 8783 8790
-8797 8804 8811 8818 8825 8832 8839 8849
-8860 8870 8881 8891 8902 8914 8927 8939
-8952 8965 8974 8983 8992 9001 9010 9019
-9028 9038 9049 9059 9070 9080 9091 9101
-9112 9122 9133 9143 9154 9166 9179 9191
-9204 9217 9223 9229 9235 9242 9248 9254
-9261 9267 9273 9280 9290 9301 9311 9322
-9332 9343 9353 9364 9374 9385 9395 9406
-9421 9437 9453 9469 9481 9494 9506 9519
-9532 9542 9553 9563 9574 9584 9595 9607
-9620 9633 9646 9659 9669 9679 9690 9700
-9710 9721 9733 9746 9759 9772 9785 9795
-9806 9816 9827 9837 9848 9858 9869 9879
-9890 9900 9911 9921 9932 9942 9953 9963
-9974 9981 9989 9997 10005 10013 10021 10029
-10037 10046 10055 10064 10073 10082 10091 10100
-10115 10131 10147 10163 10173 10184 10194 10205
-10215 10226 10235 10244 10253 10262 10271 10280
-10289 10299 10310 10320 10331 10341 10352 10373
-10394 10415 10430 10446 10462 10478 10487 10496
-10505 10514 10523 10532 10541 10553 10566 10578
-10591 10604 10619 10635 10651 10667 10676 10685
-10694 10703 10712 10721 10730 10742 10755 10767
-10780 10793 10803 10814 10824 10835 10845 10856
-10868 10881 10893 10906 10919 10929 10940 10950
-10961 10971 10982 10992 11003 11013 11024 11034
-11045 11060 11076 11092 11108 11123 11139 11155
-11171 11181 11192 11202 11213 11223 11234 11244
-11255 11265 11276 11286 11297 11307 11318 11329
-11339 11350 11361 11371 11381 11392 11402 11412
-11423 11433 11444 11454 11465 11475 11486 11518
-11550 11560 11571 11581 11592 11602 11613 11628
-11644 11660 11676 11697 11718 11739 11749 11760
-11770 11781 11791 11802 11817 11833 11849 11865
-11875 11886 11896 11907 11917 11928 11959 11991
-12006 12022 12038 12054 12069 12085 12101 12117
-12127 12138 12148 12159 12169 12180 12201 12222
-12243 12274 12306 12321 12337 12353 12369 12384
-12400 12416 12432 12453 12474 12495 12507 12520
-12532 12545 12558 12579 12600 12621 12642 12663
-12684 12705 12726 12747 12759 12772 12784 12797
-12810 12822 12835 12847 12860 12873 12894 12915
-12936 12948 12961 12973 12986 12999 13020 13041
-13062 13093 13125 13140 13156 13172 13188 13209
-13230 13252 13283 13314 13378 13399 13420 13441
-13451 13462 13472 13483 13493 13504 13519 13535
-13551 13567 13630 13651 13672 13693 13714 13735
-13756 13787 13819 13882 13897 13913 13929 13945
-13966 13987 14008 14029 14050 14071 14092 14113
-14134 14197 14212 14228 14244 14260 14281 14302
-14323 14354 14386 14417 14449 14480 14512 14533
-14554 14575 14606 14638 14669 14701 14764 14795
-14827 14842 14858 14874 14890 14953 14984 15016
-15048 15080 15111 15143 15174 15205 15226 15247
-15269 15284 15300 15316 15332 15395 15458 15479
-15500 15521 15584 15615 15647 15668 15689 15710
-15741 15773 15836 15899 15930 15962 15993 16025
-16056 16088 16151 16214 16245 16277 16340 16403
-16466 16529 16592 16718 16781 16844 16907 16971
-17034 17065 17097 17160 17223 17254 17286 17412
-17443 17475 17538 17601 17664 17727 17916 18042
-18105 18136 18168 18294 18325 18357 18546 18577
-18609 18735 18830 18925 18956 18988 19114 19177
-19240 19303 19366 19429 19555 19618 19681 19807
-19870 19933 20185 20374 20564 20753 20942 21068
-21509 21761 22139 22455 22644 23148 23400 23652
-24030 24913 25985 26174 26993 28128 28947 29136
-30082 30712 32767 32767 32767 32767 32767 32767
-32767 32767 32767 32767 32767 32767 32767 32767
diff --git a/netem/maketable b/netem/maketable
deleted file mode 100755 (executable)
index 9fbd1ca..0000000
Binary files a/netem/maketable and /dev/null differ
diff --git a/netem/normal b/netem/normal
deleted file mode 100755 (executable)
index a42860d..0000000
Binary files a/netem/normal and /dev/null differ
diff --git a/netem/normal.dist b/netem/normal.dist
deleted file mode 100644 (file)
index 8cfe768..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-# This is the distribution table for the normal distribution.
- -32768 -28307 -26871 -25967 -25298 -24765 -24320 -23937
- -23600 -23298 -23025 -22776 -22546 -22333 -22133 -21946
- -21770 -21604 -21445 -21295 -21151 -21013 -20882 -20755
- -20633 -20516 -20403 -20293 -20187 -20084 -19984 -19887
- -19793 -19702 -19612 -19526 -19441 -19358 -19277 -19198
- -19121 -19045 -18971 -18899 -18828 -18758 -18690 -18623
- -18557 -18492 -18429 -18366 -18305 -18245 -18185 -18127
- -18070 -18013 -17957 -17902 -17848 -17794 -17741 -17690
- -17638 -17588 -17538 -17489 -17440 -17392 -17345 -17298
- -17252 -17206 -17160 -17116 -17071 -17028 -16984 -16942
- -16899 -16857 -16816 -16775 -16735 -16694 -16654 -16615
- -16576 -16538 -16499 -16461 -16424 -16386 -16350 -16313
- -16277 -16241 -16205 -16170 -16135 -16100 -16066 -16031
- -15998 -15964 -15931 -15897 -15865 -15832 -15800 -15768
- -15736 -15704 -15673 -15642 -15611 -15580 -15550 -15519
- -15489 -15460 -15430 -15401 -15371 -15342 -15313 -15285
- -15256 -15228 -15200 -15172 -15144 -15116 -15089 -15062
- -15035 -15008 -14981 -14954 -14928 -14902 -14875 -14850
- -14823 -14798 -14772 -14747 -14722 -14696 -14671 -14647
- -14622 -14597 -14573 -14549 -14524 -14500 -14476 -14453
- -14429 -14405 -14382 -14359 -14335 -14312 -14289 -14266
- -14243 -14221 -14198 -14176 -14153 -14131 -14109 -14087
- -14065 -14043 -14021 -14000 -13978 -13957 -13935 -13914
- -13893 -13872 -13851 -13830 -13809 -13788 -13768 -13747
- -13727 -13706 -13686 -13666 -13646 -13626 -13606 -13586
- -13566 -13547 -13527 -13507 -13488 -13468 -13449 -13430
- -13411 -13392 -13373 -13354 -13335 -13316 -13297 -13278
- -13260 -13242 -13223 -13204 -13186 -13168 -13150 -13131
- -13113 -13095 -13077 -13060 -13042 -13024 -13006 -12988
- -12971 -12954 -12936 -12918 -12901 -12884 -12867 -12850
- -12832 -12815 -12798 -12781 -12764 -12748 -12731 -12714
- -12697 -12681 -12664 -12648 -12631 -12615 -12598 -12582
- -12566 -12549 -12533 -12517 -12501 -12485 -12469 -12453
- -12437 -12422 -12406 -12390 -12374 -12358 -12343 -12327
- -12312 -12296 -12281 -12265 -12250 -12235 -12220 -12204
- -12189 -12174 -12159 -12144 -12129 -12114 -12099 -12084
- -12069 -12054 -12039 -12025 -12010 -11995 -11981 -11966
- -11952 -11937 -11923 -11908 -11894 -11879 -11865 -11851
- -11837 -11822 -11808 -11794 -11780 -11766 -11752 -11737
- -11724 -11710 -11696 -11682 -11668 -11654 -11640 -11627
- -11613 -11599 -11586 -11572 -11559 -11545 -11531 -11518
- -11504 -11491 -11478 -11464 -11451 -11438 -11425 -11411
- -11398 -11385 -11372 -11359 -11346 -11332 -11319 -11306
- -11293 -11280 -11268 -11255 -11242 -11229 -11216 -11203
- -11191 -11178 -11165 -11153 -11140 -11127 -11114 -11102
- -11090 -11077 -11065 -11052 -11040 -11027 -11015 -11002
- -10990 -10978 -10965 -10953 -10941 -10929 -10917 -10904
- -10892 -10880 -10868 -10856 -10844 -10832 -10820 -10808
- -10796 -10784 -10772 -10760 -10748 -10736 -10725 -10713
- -10701 -10689 -10677 -10666 -10654 -10643 -10631 -10619
- -10607 -10596 -10584 -10573 -10562 -10550 -10539 -10527
- -10516 -10504 -10493 -10481 -10470 -10459 -10447 -10436
- -10425 -10414 -10402 -10391 -10380 -10369 -10358 -10346
- -10335 -10324 -10313 -10302 -10291 -10280 -10269 -10258
- -10247 -10236 -10225 -10214 -10203 -10192 -10181 -10171
- -10160 -10149 -10138 -10127 -10117 -10106 -10095 -10085
- -10074 -10063 -10052 -10042 -10031 -10021 -10010 -10000
- -9989 -9978 -9968 -9957 -9947 -9936 -9926 -9916
- -9905 -9895 -9884 -9874 -9864 -9853 -9843 -9833
- -9822 -9812 -9802 -9791 -9781 -9771 -9761 -9751
- -9741 -9730 -9720 -9710 -9700 -9690 -9680 -9670
- -9660 -9650 -9640 -9630 -9619 -9610 -9600 -9590
- -9580 -9570 -9560 -9550 -9540 -9530 -9520 -9511
- -9501 -9491 -9481 -9472 -9462 -9452 -9442 -9432
- -9423 -9413 -9403 -9394 -9384 -9374 -9365 -9355
- -9345 -9336 -9326 -9317 -9307 -9298 -9288 -9278
- -9269 -9259 -9250 -9241 -9231 -9221 -9212 -9202
- -9193 -9184 -9175 -9165 -9156 -9146 -9137 -9128
- -9119 -9109 -9100 -9090 -9081 -9072 -9063 -9053
- -9044 -9035 -9026 -9017 -9008 -8998 -8989 -8980
- -8971 -8962 -8953 -8944 -8934 -8925 -8916 -8907
- -8898 -8889 -8880 -8871 -8862 -8853 -8844 -8835
- -8826 -8817 -8808 -8799 -8790 -8781 -8772 -8764
- -8755 -8746 -8737 -8728 -8719 -8711 -8702 -8693
- -8684 -8675 -8667 -8658 -8649 -8640 -8632 -8623
- -8614 -8605 -8597 -8588 -8579 -8570 -8562 -8553
- -8545 -8536 -8527 -8519 -8510 -8502 -8493 -8484
- -8476 -8467 -8459 -8450 -8442 -8433 -8425 -8416
- -8408 -8399 -8391 -8382 -8374 -8365 -8357 -8348
- -8340 -8332 -8323 -8315 -8306 -8298 -8290 -8281
- -8273 -8264 -8256 -8248 -8240 -8231 -8223 -8215
- -8206 -8198 -8190 -8182 -8174 -8165 -8157 -8149
- -8140 -8132 -8124 -8116 -8108 -8099 -8091 -8083
- -8075 -8067 -8059 -8051 -8042 -8034 -8027 -8018
- -8010 -8002 -7994 -7986 -7978 -7970 -7962 -7954
- -7946 -7938 -7930 -7922 -7913 -7906 -7897 -7890
- -7882 -7874 -7866 -7858 -7850 -7842 -7834 -7826
- -7818 -7810 -7802 -7795 -7787 -7779 -7771 -7763
- -7755 -7748 -7739 -7732 -7724 -7716 -7708 -7700
- -7693 -7685 -7677 -7669 -7662 -7654 -7646 -7638
- -7630 -7623 -7615 -7608 -7600 -7592 -7584 -7577
- -7569 -7561 -7553 -7546 -7538 -7530 -7523 -7515
- -7508 -7500 -7492 -7485 -7477 -7469 -7462 -7454
- -7447 -7439 -7432 -7424 -7417 -7409 -7401 -7394
- -7386 -7379 -7372 -7364 -7356 -7349 -7341 -7334
- -7327 -7319 -7311 -7304 -7297 -7289 -7281 -7274
- -7267 -7259 -7252 -7245 -7237 -7230 -7222 -7215
- -7208 -7200 -7193 -7186 -7178 -7171 -7163 -7156
- -7149 -7141 -7134 -7127 -7119 -7112 -7105 -7098
- -7090 -7083 -7075 -7068 -7061 -7054 -7046 -7039
- -7032 -7025 -7018 -7010 -7003 -6996 -6989 -6981
- -6974 -6967 -6960 -6953 -6946 -6938 -6931 -6924
- -6917 -6910 -6903 -6895 -6888 -6881 -6874 -6867
- -6860 -6853 -6845 -6838 -6831 -6824 -6817 -6810
- -6803 -6796 -6789 -6782 -6775 -6767 -6760 -6753
- -6747 -6740 -6732 -6725 -6718 -6711 -6704 -6697
- -6690 -6683 -6676 -6669 -6662 -6655 -6648 -6641
- -6634 -6627 -6620 -6613 -6607 -6600 -6593 -6586
- -6579 -6572 -6565 -6558 -6551 -6544 -6538 -6531
- -6524 -6517 -6510 -6503 -6496 -6489 -6482 -6476
- -6469 -6462 -6455 -6448 -6441 -6434 -6428 -6421
- -6414 -6407 -6400 -6394 -6387 -6380 -6373 -6366
- -6360 -6353 -6346 -6339 -6333 -6326 -6319 -6312
- -6306 -6299 -6292 -6286 -6279 -6272 -6265 -6259
- -6252 -6245 -6239 -6232 -6225 -6219 -6212 -6205
- -6198 -6192 -6185 -6178 -6172 -6165 -6158 -6152
- -6145 -6139 -6132 -6125 -6119 -6112 -6105 -6099
- -6092 -6085 -6079 -6072 -6066 -6059 -6053 -6046
- -6040 -6033 -6026 -6019 -6013 -6006 -6000 -5993
- -5987 -5980 -5974 -5967 -5961 -5954 -5948 -5941
- -5935 -5928 -5922 -5915 -5908 -5902 -5895 -5889
- -5883 -5876 -5870 -5863 -5857 -5850 -5844 -5837
- -5831 -5825 -5818 -5811 -5805 -5799 -5792 -5786
- -5779 -5773 -5766 -5760 -5754 -5747 -5741 -5734
- -5728 -5722 -5715 -5709 -5702 -5696 -5690 -5683
- -5677 -5671 -5664 -5658 -5651 -5645 -5639 -5632
- -5626 -5620 -5613 -5607 -5600 -5594 -5588 -5582
- -5575 -5569 -5563 -5556 -5550 -5544 -5537 -5531
- -5525 -5519 -5512 -5506 -5500 -5494 -5487 -5481
- -5475 -5468 -5462 -5456 -5450 -5443 -5437 -5431
- -5425 -5418 -5412 -5406 -5400 -5393 -5387 -5381
- -5375 -5369 -5362 -5356 -5350 -5344 -5337 -5331
- -5325 -5319 -5313 -5306 -5300 -5294 -5288 -5282
- -5276 -5270 -5263 -5257 -5251 -5245 -5239 -5233
- -5226 -5220 -5214 -5208 -5202 -5196 -5190 -5183
- -5177 -5171 -5165 -5159 -5153 -5147 -5140 -5135
- -5129 -5122 -5116 -5110 -5104 -5098 -5092 -5086
- -5080 -5074 -5068 -5061 -5055 -5050 -5043 -5037
- -5031 -5025 -5019 -5013 -5007 -5001 -4995 -4989
- -4983 -4977 -4971 -4965 -4959 -4953 -4947 -4941
- -4935 -4929 -4923 -4917 -4911 -4905 -4899 -4893
- -4887 -4881 -4875 -4869 -4863 -4857 -4851 -4845
- -4839 -4833 -4827 -4821 -4815 -4809 -4803 -4797
- -4791 -4785 -4779 -4773 -4767 -4762 -4755 -4750
- -4744 -4738 -4732 -4726 -4720 -4714 -4708 -4702
- -4696 -4690 -4685 -4678 -4673 -4667 -4661 -4655
- -4649 -4643 -4637 -4631 -4626 -4620 -4614 -4608
- -4602 -4596 -4590 -4585 -4579 -4573 -4567 -4561
- -4555 -4549 -4544 -4538 -4532 -4526 -4520 -4514
- -4508 -4503 -4497 -4491 -4485 -4479 -4474 -4468
- -4462 -4456 -4450 -4445 -4439 -4433 -4427 -4421
- -4415 -4410 -4404 -4398 -4392 -4386 -4381 -4375
- -4369 -4363 -4358 -4352 -4346 -4340 -4334 -4329
- -4323 -4317 -4311 -4306 -4300 -4294 -4289 -4283
- -4277 -4271 -4266 -4260 -4254 -4248 -4243 -4237
- -4231 -4225 -4220 -4214 -4208 -4202 -4197 -4191
- -4185 -4180 -4174 -4168 -4162 -4157 -4151 -4146
- -4140 -4134 -4128 -4123 -4117 -4111 -4105 -4100
- -4094 -4089 -4083 -4077 -4071 -4066 -4060 -4055
- -4049 -4043 -4037 -4032 -4026 -4021 -4015 -4009
- -4003 -3998 -3992 -3987 -3981 -3975 -3970 -3964
- -3958 -3953 -3947 -3942 -3936 -3930 -3925 -3919
- -3913 -3908 -3902 -3897 -3891 -3885 -3880 -3874
- -3869 -3863 -3857 -3852 -3846 -3840 -3835 -3829
- -3824 -3818 -3813 -3807 -3801 -3796 -3790 -3785
- -3779 -3774 -3768 -3762 -3757 -3751 -3746 -3740
- -3734 -3729 -3723 -3718 -3712 -3707 -3701 -3696
- -3690 -3684 -3679 -3673 -3668 -3662 -3657 -3651
- -3646 -3640 -3635 -3629 -3624 -3618 -3613 -3607
- -3602 -3596 -3591 -3585 -3579 -3574 -3568 -3563
- -3557 -3552 -3546 -3541 -3535 -3530 -3524 -3519
- -3514 -3508 -3502 -3497 -3491 -3486 -3480 -3475
- -3469 -3464 -3459 -3453 -3448 -3442 -3437 -3431
- -3425 -3420 -3415 -3409 -3404 -3398 -3393 -3387
- -3382 -3376 -3371 -3366 -3360 -3355 -3349 -3344
- -3338 -3333 -3328 -3322 -3317 -3311 -3305 -3300
- -3295 -3289 -3284 -3278 -3273 -3268 -3262 -3257
- -3251 -3246 -3240 -3235 -3230 -3224 -3219 -3213
- -3208 -3203 -3197 -3192 -3186 -3181 -3176 -3170
- -3165 -3159 -3154 -3149 -3143 -3138 -3132 -3127
- -3122 -3116 -3111 -3105 -3100 -3095 -3089 -3084
- -3079 -3073 -3068 -3062 -3057 -3052 -3046 -3041
- -3036 -3030 -3025 -3019 -3014 -3009 -3003 -2998
- -2993 -2987 -2982 -2977 -2971 -2966 -2961 -2955
- -2950 -2944 -2939 -2934 -2928 -2923 -2918 -2912
- -2907 -2902 -2896 -2891 -2886 -2880 -2875 -2870
- -2864 -2859 -2854 -2848 -2843 -2838 -2832 -2827
- -2822 -2816 -2811 -2806 -2800 -2795 -2790 -2784
- -2779 -2774 -2768 -2763 -2758 -2753 -2747 -2742
- -2737 -2732 -2726 -2721 -2716 -2710 -2705 -2700
- -2694 -2689 -2684 -2678 -2673 -2668 -2663 -2657
- -2652 -2647 -2642 -2636 -2631 -2626 -2620 -2615
- -2610 -2605 -2599 -2594 -2589 -2583 -2578 -2573
- -2568 -2562 -2557 -2552 -2546 -2542 -2536 -2531
- -2526 -2520 -2515 -2510 -2505 -2499 -2494 -2489
- -2483 -2478 -2473 -2468 -2463 -2457 -2452 -2447
- -2442 -2436 -2431 -2426 -2421 -2415 -2410 -2405
- -2400 -2395 -2389 -2384 -2379 -2374 -2368 -2363
- -2358 -2353 -2347 -2342 -2337 -2332 -2327 -2321
- -2316 -2311 -2306 -2300 -2295 -2290 -2285 -2279
- -2275 -2269 -2264 -2259 -2254 -2248 -2243 -2238
- -2233 -2227 -2222 -2217 -2212 -2207 -2202 -2196
- -2191 -2186 -2181 -2175 -2170 -2165 -2160 -2155
- -2150 -2144 -2139 -2134 -2129 -2124 -2118 -2113
- -2108 -2103 -2098 -2093 -2087 -2082 -2077 -2072
- -2067 -2062 -2056 -2051 -2046 -2041 -2036 -2030
- -2025 -2020 -2015 -2010 -2005 -2000 -1994 -1989
- -1984 -1979 -1974 -1969 -1963 -1958 -1953 -1948
- -1943 -1937 -1932 -1927 -1922 -1917 -1912 -1907
- -1901 -1896 -1891 -1886 -1881 -1876 -1871 -1865
- -1860 -1855 -1850 -1845 -1840 -1835 -1829 -1824
- -1819 -1814 -1809 -1804 -1799 -1794 -1788 -1783
- -1778 -1773 -1768 -1763 -1758 -1752 -1747 -1742
- -1737 -1732 -1727 -1722 -1717 -1711 -1706 -1701
- -1696 -1691 -1686 -1681 -1676 -1670 -1665 -1660
- -1655 -1650 -1645 -1640 -1635 -1629 -1624 -1619
- -1614 -1609 -1604 -1599 -1594 -1589 -1584 -1579
- -1573 -1568 -1563 -1558 -1553 -1548 -1543 -1538
- -1532 -1527 -1522 -1517 -1512 -1507 -1502 -1497
- -1492 -1486 -1482 -1477 -1471 -1466 -1461 -1456
- -1451 -1446 -1441 -1436 -1431 -1425 -1420 -1415
- -1410 -1405 -1400 -1395 -1390 -1385 -1380 -1375
- -1370 -1364 -1359 -1354 -1349 -1344 -1339 -1334
- -1329 -1324 -1319 -1314 -1309 -1303 -1298 -1294
- -1288 -1283 -1278 -1273 -1268 -1263 -1258 -1253
- -1248 -1243 -1237 -1232 -1228 -1222 -1217 -1212
- -1207 -1202 -1197 -1192 -1187 -1182 -1177 -1171
- -1167 -1162 -1156 -1151 -1146 -1141 -1136 -1131
- -1126 -1121 -1116 -1111 -1106 -1101 -1096 -1091
- -1085 -1081 -1076 -1070 -1065 -1060 -1055 -1050
- -1045 -1040 -1035 -1030 -1025 -1020 -1015 -1010
- -1005 -1000 -995 -990 -985 -979 -974 -970
- -964 -959 -954 -949 -944 -939 -934 -929
- -924 -919 -914 -909 -904 -899 -894 -889
- -884 -879 -874 -868 -863 -859 -853 -848
- -843 -838 -833 -828 -823 -818 -813 -808
- -803 -798 -793 -788 -783 -778 -773 -768
- -763 -758 -752 -748 -743 -738 -732 -727
- -723 -717 -712 -707 -702 -697 -692 -687
- -682 -677 -672 -667 -662 -657 -652 -647
- -642 -637 -632 -627 -622 -617 -612 -607
- -602 -597 -591 -587 -582 -577 -571 -566
- -562 -557 -551 -546 -541 -537 -531 -526
- -521 -516 -511 -506 -501 -496 -491 -486
- -481 -476 -471 -466 -461 -456 -451 -446
- -441 -436 -431 -426 -421 -416 -411 -406
- -401 -396 -391 -386 -381 -376 -371 -366
- -360 -356 -351 -346 -340 -335 -331 -326
- -320 -315 -310 -306 -300 -295 -290 -285
- -281 -275 -270 -265 -261 -255 -250 -245
- -240 -235 -230 -225 -220 -215 -210 -205
- -200 -195 -190 -185 -180 -175 -170 -165
- -160 -155 -150 -145 -140 -135 -130 -125
- -120 -115 -110 -105 -100 -95 -90 -85
- -80 -75 -70 -65 -60 -55 -50 -45
- -40 -35 -29 -25 -20 -15 -9 -5
- 0 5 11 16 20 25 30 36
- 41 45 50 56 61 66 70 76
- 81 86 91 96 101 106 111 116
- 121 126 131 136 141 146 151 156
- 161 166 171 176 181 186 191 196
- 201 206 211 216 221 226 231 236
- 241 246 251 256 261 266 271 276
- 281 286 291 296 301 306 311 316
- 322 326 331 336 342 347 351 356
- 362 367 372 376 382 387 392 396
- 402 407 412 417 422 427 432 437
- 442 447 452 457 462 467 472 477
- 482 487 492 497 502 507 512 517
- 522 527 532 537 542 547 552 557
- 562 567 572 578 582 587 593 598
- 603 607 613 618 623 628 633 638
- 643 648 653 658 663 668 673 678
- 683 688 693 698 703 708 713 718
- 723 728 733 739 743 748 754 759
- 763 768 774 779 784 789 794 799
- 804 809 814 819 824 829 834 839
- 844 849 854 859 864 869 874 879
- 884 890 895 899 905 910 915 920
- 925 930 935 940 945 950 955 960
- 965 970 975 980 985 990 995 1001
- 1006 1010 1016 1021 1026 1031 1036 1041
- 1046 1051 1056 1061 1066 1071 1076 1081
- 1086 1092 1096 1102 1107 1112 1117 1122
- 1127 1132 1137 1142 1147 1152 1157 1162
- 1167 1173 1178 1183 1188 1193 1198 1203
- 1208 1213 1218 1223 1228 1233 1238 1244
- 1248 1254 1259 1264 1269 1274 1279 1284
- 1289 1294 1299 1304 1309 1314 1320 1325
- 1330 1335 1340 1345 1350 1355 1360 1365
- 1371 1375 1381 1386 1391 1396 1401 1406
- 1411 1416 1421 1426 1432 1436 1442 1447
- 1452 1457 1462 1467 1472 1477 1482 1488
- 1493 1497 1503 1508 1513 1518 1523 1528
- 1534 1538 1543 1549 1554 1559 1564 1569
- 1574 1579 1584 1590 1595 1600 1605 1610
- 1615 1620 1625 1630 1636 1640 1646 1651
- 1656 1661 1666 1671 1676 1681 1687 1692
- 1697 1702 1707 1712 1717 1722 1728 1733
- 1738 1743 1748 1753 1758 1764 1769 1774
- 1779 1784 1789 1794 1799 1805 1810 1815
- 1820 1825 1831 1835 1841 1846 1851 1856
- 1861 1866 1871 1877 1882 1887 1892 1897
- 1902 1908 1913 1918 1923 1928 1933 1939
- 1944 1949 1954 1959 1964 1969 1975 1980
- 1985 1990 1995 2000 2005 2011 2016 2021
- 2026 2031 2037 2042 2047 2052 2057 2062
- 2068 2073 2078 2083 2088 2093 2099 2104
- 2109 2114 2119 2125 2130 2135 2140 2145
- 2150 2156 2161 2166 2171 2177 2182 2187
- 2192 2197 2202 2208 2213 2218 2223 2229
- 2234 2239 2244 2249 2254 2260 2265 2270
- 2275 2281 2286 2291 2296 2302 2306 2312
- 2317 2322 2327 2333 2338 2343 2348 2354
- 2359 2364 2369 2374 2380 2385 2390 2395
- 2401 2406 2411 2416 2422 2427 2432 2437
- 2442 2448 2453 2458 2463 2469 2474 2479
- 2485 2490 2495 2500 2506 2511 2516 2521
- 2526 2532 2537 2542 2548 2553 2558 2563
- 2569 2574 2579 2585 2589 2595 2600 2605
- 2611 2616 2621 2627 2632 2637 2642 2648
- 2653 2658 2664 2669 2674 2680 2685 2690
- 2695 2700 2706 2711 2716 2722 2727 2732
- 2738 2743 2748 2754 2759 2764 2769 2775
- 2780 2785 2791 2796 2801 2807 2812 2817
- 2823 2828 2833 2839 2844 2849 2855 2860
- 2865 2870 2876 2881 2886 2892 2897 2902
- 2908 2913 2918 2924 2929 2935 2940 2945
- 2951 2956 2961 2967 2972 2977 2983 2988
- 2993 2999 3004 3010 3015 3020 3026 3031
- 3036 3042 3047 3052 3058 3063 3069 3074
- 3079 3085 3090 3095 3101 3106 3112 3117
- 3122 3128 3133 3139 3144 3149 3155 3160
- 3166 3171 3176 3182 3187 3193 3198 3203
- 3209 3214 3220 3225 3231 3236 3242 3247
- 3252 3258 3263 3269 3274 3279 3285 3290
- 3296 3301 3307 3312 3317 3323 3328 3334
- 3339 3345 3350 3355 3361 3367 3372 3378
- 3383 3388 3394 3399 3405 3410 3416 3421
- 3427 3432 3437 3443 3448 3454 3459 3465
- 3471 3476 3481 3487 3492 3498 3503 3509
- 3514 3520 3525 3531 3536 3542 3548 3553
- 3558 3564 3569 3575 3580 3586 3591 3597
- 3602 3608 3613 3619 3625 3630 3636 3641
- 3647 3652 3658 3663 3669 3675 3680 3686
- 3691 3697 3702 3708 3713 3719 3724 3730
- 3736 3741 3747 3752 3758 3763 3769 3774
- 3780 3786 3791 3797 3802 3808 3813 3819
- 3825 3830 3836 3842 3847 3853 3858 3864
- 3869 3875 3881 3886 3892 3898 3903 3909
- 3915 3920 3926 3931 3937 3942 3948 3954
- 3960 3965 3971 3976 3982 3987 3993 3999
- 4005 4010 4016 4021 4027 4033 4039 4044
- 4050 4055 4061 4067 4073 4078 4084 4089
- 4095 4101 4107 4112 4118 4123 4129 4135
- 4141 4146 4152 4158 4164 4169 4175 4181
- 4187 4192 4198 4203 4209 4215 4221 4226
- 4232 4238 4243 4249 4255 4261 4266 4272
- 4278 4284 4289 4295 4301 4307 4313 4318
- 4324 4330 4336 4341 4347 4353 4359 4364
- 4370 4376 4382 4388 4393 4399 4405 4411
- 4417 4422 4428 4434 4440 4445 4452 4457
- 4463 4469 4474 4481 4486 4492 4498 4504
- 4510 4515 4521 4527 4533 4539 4545 4551
- 4556 4562 4568 4574 4580 4585 4592 4597
- 4603 4609 4615 4621 4627 4633 4638 4644
- 4650 4656 4662 4668 4674 4680 4686 4692
- 4697 4703 4709 4715 4721 4727 4733 4739
- 4745 4751 4757 4762 4769 4774 4780 4786
- 4792 4798 4804 4810 4816 4822 4828 4834
- 4840 4846 4852 4858 4864 4870 4876 4882
- 4888 4894 4900 4906 4912 4918 4924 4930
- 4936 4942 4948 4954 4960 4966 4972 4978
- 4984 4990 4996 5002 5008 5014 5020 5026
- 5032 5038 5045 5050 5057 5063 5069 5075
- 5081 5087 5093 5099 5105 5111 5118 5123
- 5129 5136 5142 5148 5154 5160 5166 5172
- 5179 5185 5191 5197 5203 5209 5215 5221
- 5227 5233 5240 5246 5252 5258 5265 5271
- 5277 5283 5289 5295 5301 5308 5314 5320
- 5326 5333 5339 5345 5351 5357 5363 5369
- 5376 5382 5388 5394 5401 5407 5413 5419
- 5426 5432 5438 5444 5451 5457 5463 5469
- 5476 5482 5488 5494 5501 5507 5513 5520
- 5526 5532 5539 5545 5551 5557 5564 5570
- 5576 5583 5589 5596 5602 5608 5614 5621
- 5627 5634 5640 5646 5652 5659 5665 5672
- 5678 5684 5691 5697 5704 5710 5716 5723
- 5729 5736 5742 5748 5755 5761 5768 5774
- 5780 5787 5793 5800 5806 5813 5819 5826
- 5832 5838 5845 5852 5858 5864 5871 5877
- 5884 5890 5897 5903 5910 5916 5923 5929
- 5936 5942 5949 5956 5962 5968 5975 5981
- 5988 5994 6001 6008 6014 6021 6027 6034
- 6041 6047 6054 6060 6067 6074 6080 6087
- 6093 6100 6107 6113 6120 6126 6133 6140
- 6146 6153 6160 6167 6173 6180 6186 6193
- 6200 6206 6213 6220 6226 6233 6240 6246
- 6253 6260 6266 6273 6280 6287 6294 6300
- 6307 6314 6321 6327 6334 6341 6348 6354
- 6361 6368 6375 6382 6388 6395 6402 6409
- 6416 6422 6429 6436 6443 6450 6457 6463
- 6470 6477 6484 6491 6497 6504 6511 6518
- 6525 6532 6539 6546 6553 6559 6566 6573
- 6580 6587 6594 6601 6608 6615 6622 6629
- 6636 6643 6650 6657 6664 6671 6678 6685
- 6692 6699 6706 6713 6719 6727 6734 6741
- 6748 6755 6762 6769 6776 6783 6790 6797
- 6804 6811 6818 6826 6833 6840 6847 6854
- 6861 6868 6875 6883 6889 6897 6904 6911
- 6918 6925 6932 6939 6947 6954 6961 6969
- 6975 6983 6990 6997 7005 7012 7019 7026
- 7033 7041 7048 7055 7062 7070 7077 7084
- 7091 7099 7106 7114 7121 7128 7135 7143
- 7150 7157 7165 7172 7179 7187 7194 7202
- 7209 7216 7224 7231 7238 7246 7253 7261
- 7268 7276 7283 7290 7298 7306 7313 7320
- 7328 7336 7343 7350 7358 7365 7373 7381
- 7388 7395 7403 7410 7418 7426 7433 7441
- 7448 7456 7463 7471 7479 7486 7494 7501
- 7509 7517 7524 7532 7540 7547 7555 7563
- 7571 7578 7586 7594 7601 7609 7617 7624
- 7632 7640 7648 7655 7663 7671 7679 7687
- 7694 7702 7710 7718 7725 7733 7741 7749
- 7757 7765 7773 7780 7788 7796 7804 7812
- 7820 7828 7836 7843 7852 7859 7868 7875
- 7883 7891 7899 7907 7915 7923 7931 7939
- 7947 7955 7963 7971 7979 7988 7995 8004
- 8012 8020 8028 8036 8044 8052 8061 8069
- 8076 8085 8093 8101 8109 8117 8126 8134
- 8142 8150 8158 8167 8175 8183 8192 8200
- 8208 8217 8225 8233 8241 8250 8258 8266
- 8275 8283 8292 8300 8308 8317 8325 8333
- 8342 8350 8359 8367 8376 8384 8392 8401
- 8409 8418 8426 8435 8443 8452 8461 8469
- 8477 8486 8495 8503 8512 8520 8529 8538
- 8546 8555 8564 8573 8581 8590 8598 8607
- 8616 8625 8633 8642 8651 8659 8668 8677
- 8686 8695 8704 8712 8721 8730 8739 8748
- 8756 8765 8774 8783 8792 8801 8810 8819
- 8828 8837 8846 8855 8864 8873 8882 8891
- 8900 8909 8918 8927 8936 8945 8954 8964
- 8973 8982 8991 9000 9009 9019 9028 9037
- 9046 9055 9064 9074 9083 9092 9102 9111
- 9120 9130 9139 9148 9157 9167 9176 9186
- 9195 9205 9214 9223 9233 9242 9252 9261
- 9271 9280 9290 9300 9309 9318 9328 9338
- 9347 9357 9367 9376 9386 9395 9405 9415
- 9424 9434 9444 9454 9464 9473 9483 9493
- 9503 9513 9522 9532 9542 9552 9562 9572
- 9582 9592 9602 9612 9622 9632 9642 9652
- 9662 9672 9682 9692 9702 9712 9722 9733
- 9743 9753 9763 9773 9783 9794 9804 9814
- 9825 9835 9845 9855 9866 9876 9887 9897
- 9907 9918 9928 9939 9949 9960 9970 9981
- 9991 10002 10012 10023 10034 10044 10055 10066
- 10076 10087 10097 10108 10119 10130 10140 10152
- 10162 10173 10184 10195 10206 10217 10227 10238
- 10249 10260 10271 10282 10293 10304 10315 10326
- 10337 10349 10360 10371 10382 10394 10405 10416
- 10427 10438 10450 10461 10472 10484 10495 10507
- 10518 10530 10541 10553 10564 10575 10587 10598
- 10610 10622 10633 10645 10657 10668 10680 10692
- 10704 10715 10727 10739 10751 10763 10775 10786
- 10798 10811 10822 10834 10847 10858 10870 10883
- 10895 10907 10919 10931 10944 10956 10968 10981
- 10993 11005 11017 11030 11042 11055 11067 11080
- 11092 11105 11117 11130 11142 11155 11168 11180
- 11193 11206 11219 11232 11245 11257 11270 11283
- 11296 11309 11322 11335 11348 11361 11375 11388
- 11401 11414 11427 11441 11454 11467 11481 11494
- 11508 11521 11534 11548 11561 11575 11589 11602
- 11616 11630 11644 11657 11671 11685 11699 11713
- 11727 11741 11755 11769 11783 11797 11811 11826
- 11839 11854 11868 11882 11897 11911 11926 11940
- 11955 11969 11984 11998 12013 12028 12043 12057
- 12072 12087 12102 12117 12132 12147 12162 12177
- 12193 12208 12223 12238 12254 12269 12284 12299
- 12315 12331 12346 12362 12378 12393 12409 12425
- 12441 12457 12473 12489 12505 12521 12537 12553
- 12569 12586 12602 12619 12635 12651 12668 12684
- 12701 12718 12734 12751 12768 12785 12802 12819
- 12836 12853 12870 12888 12905 12922 12940 12957
- 12975 12993 13010 13028 13046 13064 13081 13099
- 13117 13135 13154 13172 13190 13209 13227 13246
- 13264 13283 13301 13320 13339 13358 13377 13396
- 13415 13434 13454 13473 13492 13512 13532 13551
- 13571 13591 13611 13631 13651 13671 13691 13711
- 13732 13752 13773 13793 13814 13835 13856 13877
- 13898 13919 13940 13962 13983 14005 14026 14048
- 14070 14092 14114 14136 14159 14181 14203 14226
- 14249 14272 14294 14318 14341 14364 14387 14411
- 14434 14458 14482 14506 14530 14554 14578 14603
- 14628 14653 14677 14703 14728 14753 14778 14804
- 14830 14855 14882 14908 14934 14961 14987 15014
- 15041 15068 15095 15123 15151 15179 15206 15235
- 15263 15291 15320 15349 15378 15408 15437 15466
- 15496 15527 15557 15587 15618 15649 15680 15712
- 15743 15775 15808 15840 15872 15906 15939 15972
- 16006 16040 16074 16108 16143 16178 16214 16249
- 16285 16322 16358 16395 16433 16470 16508 16547
- 16586 16624 16664 16704 16744 16785 16826 16867
- 16910 16952 16995 17038 17082 17126 17171 17217
- 17263 17309 17356 17403 17452 17501 17550 17600
- 17651 17702 17754 17807 17861 17915 17970 18026
- 18083 18141 18200 18259 18320 18382 18444 18508
- 18573 18639 18706 18775 18845 18917 18989 19064
- 19140 19217 19297 19378 19461 19547 19634 19724
- 19816 19911 20009 20109 20213 20319 20430 20544
- 20663 20786 20914 21047 21186 21331 21484 21644
- 21813 21991 22181 22384 22601 22836 23091 23370
- 23679 24027 24424 24888 25450 26164 27159 28858
diff --git a/netem/pareto b/netem/pareto
deleted file mode 100755 (executable)
index 8030cb8..0000000
Binary files a/netem/pareto and /dev/null differ
diff --git a/netem/pareto.dist b/netem/pareto.dist
deleted file mode 100644 (file)
index 295e6fb..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-# This is the distribution table for the pareto distribution.
- -5461 -5460 -5460 -5459 -5458 -5457 -5456 -5455
- -5454 -5453 -5452 -5452 -5451 -5450 -5449 -5448
- -5447 -5446 -5445 -5444 -5443 -5443 -5442 -5441
- -5440 -5439 -5438 -5437 -5436 -5435 -5435 -5434
- -5433 -5432 -5431 -5430 -5429 -5428 -5427 -5426
- -5426 -5425 -5424 -5423 -5422 -5421 -5420 -5419
- -5418 -5417 -5417 -5416 -5415 -5414 -5413 -5412
- -5411 -5410 -5409 -5408 -5407 -5407 -5406 -5405
- -5404 -5403 -5402 -5401 -5400 -5399 -5398 -5397
- -5397 -5396 -5395 -5394 -5393 -5392 -5391 -5390
- -5389 -5388 -5387 -5387 -5386 -5385 -5384 -5383
- -5382 -5381 -5380 -5379 -5378 -5377 -5376 -5376
- -5375 -5374 -5373 -5372 -5371 -5370 -5369 -5368
- -5367 -5366 -5365 -5365 -5364 -5363 -5362 -5361
- -5360 -5359 -5358 -5357 -5356 -5355 -5354 -5353
- -5353 -5352 -5351 -5350 -5349 -5348 -5347 -5346
- -5345 -5344 -5343 -5342 -5341 -5340 -5340 -5339
- -5338 -5337 -5336 -5335 -5334 -5333 -5332 -5331
- -5330 -5329 -5328 -5327 -5327 -5326 -5325 -5324
- -5323 -5322 -5321 -5320 -5319 -5318 -5317 -5316
- -5315 -5314 -5313 -5312 -5312 -5311 -5310 -5309
- -5308 -5307 -5306 -5305 -5304 -5303 -5302 -5301
- -5300 -5299 -5298 -5297 -5296 -5296 -5295 -5294
- -5293 -5292 -5291 -5290 -5289 -5288 -5287 -5286
- -5285 -5284 -5283 -5282 -5281 -5280 -5279 -5278
- -5278 -5277 -5276 -5275 -5274 -5273 -5272 -5271
- -5270 -5269 -5268 -5267 -5266 -5265 -5264 -5263
- -5262 -5261 -5260 -5259 -5258 -5258 -5257 -5256
- -5255 -5254 -5253 -5252 -5251 -5250 -5249 -5248
- -5247 -5246 -5245 -5244 -5243 -5242 -5241 -5240
- -5239 -5238 -5237 -5236 -5235 -5234 -5233 -5233
- -5232 -5231 -5230 -5229 -5228 -5227 -5226 -5225
- -5224 -5223 -5222 -5221 -5220 -5219 -5218 -5217
- -5216 -5215 -5214 -5213 -5212 -5211 -5210 -5209
- -5208 -5207 -5206 -5205 -5204 -5203 -5202 -5201
- -5200 -5199 -5199 -5198 -5197 -5196 -5195 -5194
- -5193 -5192 -5191 -5190 -5189 -5188 -5187 -5186
- -5185 -5184 -5183 -5182 -5181 -5180 -5179 -5178
- -5177 -5176 -5175 -5174 -5173 -5172 -5171 -5170
- -5169 -5168 -5167 -5166 -5165 -5164 -5163 -5162
- -5161 -5160 -5159 -5158 -5157 -5156 -5155 -5154
- -5153 -5152 -5151 -5150 -5149 -5148 -5147 -5146
- -5145 -5144 -5143 -5142 -5141 -5140 -5139 -5138
- -5137 -5136 -5135 -5134 -5133 -5132 -5131 -5130
- -5129 -5128 -5127 -5126 -5125 -5124 -5123 -5122
- -5121 -5120 -5119 -5118 -5117 -5116 -5115 -5114
- -5113 -5112 -5111 -5110 -5109 -5108 -5107 -5106
- -5105 -5104 -5103 -5102 -5101 -5100 -5099 -5098
- -5097 -5096 -5095 -5094 -5093 -5092 -5091 -5090
- -5089 -5088 -5087 -5086 -5085 -5084 -5083 -5082
- -5081 -5080 -5079 -5078 -5077 -5076 -5075 -5074
- -5073 -5072 -5071 -5069 -5068 -5067 -5066 -5065
- -5064 -5063 -5062 -5061 -5060 -5059 -5058 -5057
- -5056 -5055 -5054 -5053 -5052 -5051 -5050 -5049
- -5048 -5047 -5046 -5045 -5044 -5043 -5042 -5041
- -5040 -5039 -5038 -5037 -5036 -5034 -5033 -5032
- -5031 -5030 -5029 -5028 -5027 -5026 -5025 -5024
- -5023 -5022 -5021 -5020 -5019 -5018 -5017 -5016
- -5015 -5014 -5013 -5012 -5011 -5009 -5008 -5007
- -5006 -5005 -5004 -5003 -5002 -5001 -5000 -4999
- -4998 -4997 -4996 -4995 -4994 -4993 -4992 -4991
- -4990 -4989 -4987 -4986 -4985 -4984 -4983 -4982
- -4981 -4980 -4979 -4978 -4977 -4976 -4975 -4974
- -4973 -4972 -4971 -4969 -4968 -4967 -4966 -4965
- -4964 -4963 -4962 -4961 -4960 -4959 -4958 -4957
- -4956 -4955 -4954 -4952 -4951 -4950 -4949 -4948
- -4947 -4946 -4945 -4944 -4943 -4942 -4941 -4940
- -4939 -4938 -4936 -4935 -4934 -4933 -4932 -4931
- -4930 -4929 -4928 -4927 -4926 -4925 -4924 -4922
- -4921 -4920 -4919 -4918 -4917 -4916 -4915 -4914
- -4913 -4912 -4911 -4909 -4908 -4907 -4906 -4905
- -4904 -4903 -4902 -4901 -4900 -4899 -4898 -4896
- -4895 -4894 -4893 -4892 -4891 -4890 -4889 -4888
- -4887 -4886 -4884 -4883 -4882 -4881 -4880 -4879
- -4878 -4877 -4876 -4875 -4874 -4872 -4871 -4870
- -4869 -4868 -4867 -4866 -4865 -4864 -4863 -4861
- -4860 -4859 -4858 -4857 -4856 -4855 -4854 -4853
- -4852 -4850 -4849 -4848 -4847 -4846 -4845 -4844
- -4843 -4842 -4840 -4839 -4838 -4837 -4836 -4835
- -4834 -4833 -4832 -4830 -4829 -4828 -4827 -4826
- -4825 -4824 -4823 -4822 -4820 -4819 -4818 -4817
- -4816 -4815 -4814 -4813 -4811 -4810 -4809 -4808
- -4807 -4806 -4805 -4804 -4803 -4801 -4800 -4799
- -4798 -4797 -4796 -4795 -4794 -4792 -4791 -4790
- -4789 -4788 -4787 -4786 -4784 -4783 -4782 -4781
- -4780 -4779 -4778 -4777 -4775 -4774 -4773 -4772
- -4771 -4770 -4769 -4767 -4766 -4765 -4764 -4763
- -4762 -4761 -4760 -4758 -4757 -4756 -4755 -4754
- -4753 -4752 -4750 -4749 -4748 -4747 -4746 -4745
- -4743 -4742 -4741 -4740 -4739 -4738 -4737 -4735
- -4734 -4733 -4732 -4731 -4730 -4729 -4727 -4726
- -4725 -4724 -4723 -4722 -4720 -4719 -4718 -4717
- -4716 -4715 -4714 -4712 -4711 -4710 -4709 -4708
- -4707 -4705 -4704 -4703 -4702 -4701 -4700 -4698
- -4697 -4696 -4695 -4694 -4693 -4691 -4690 -4689
- -4688 -4687 -4686 -4684 -4683 -4682 -4681 -4680
- -4679 -4677 -4676 -4675 -4674 -4673 -4672 -4670
- -4669 -4668 -4667 -4666 -4664 -4663 -4662 -4661
- -4660 -4659 -4657 -4656 -4655 -4654 -4653 -4651
- -4650 -4649 -4648 -4647 -4646 -4644 -4643 -4642
- -4641 -4640 -4638 -4637 -4636 -4635 -4634 -4632
- -4631 -4630 -4629 -4628 -4627 -4625 -4624 -4623
- -4622 -4621 -4619 -4618 -4617 -4616 -4615 -4613
- -4612 -4611 -4610 -4609 -4607 -4606 -4605 -4604
- -4603 -4601 -4600 -4599 -4598 -4597 -4595 -4594
- -4593 -4592 -4590 -4589 -4588 -4587 -4586 -4584
- -4583 -4582 -4581 -4580 -4578 -4577 -4576 -4575
- -4574 -4572 -4571 -4570 -4569 -4567 -4566 -4565
- -4564 -4563 -4561 -4560 -4559 -4558 -4556 -4555
- -4554 -4553 -4552 -4550 -4549 -4548 -4547 -4545
- -4544 -4543 -4542 -4541 -4539 -4538 -4537 -4536
- -4534 -4533 -4532 -4531 -4529 -4528 -4527 -4526
- -4525 -4523 -4522 -4521 -4520 -4518 -4517 -4516
- -4515 -4513 -4512 -4511 -4510 -4508 -4507 -4506
- -4505 -4503 -4502 -4501 -4500 -4498 -4497 -4496
- -4495 -4493 -4492 -4491 -4490 -4488 -4487 -4486
- -4485 -4483 -4482 -4481 -4480 -4478 -4477 -4476
- -4475 -4473 -4472 -4471 -4470 -4468 -4467 -4466
- -4465 -4463 -4462 -4461 -4460 -4458 -4457 -4456
- -4455 -4453 -4452 -4451 -4449 -4448 -4447 -4446
- -4444 -4443 -4442 -4441 -4439 -4438 -4437 -4435
- -4434 -4433 -4432 -4430 -4429 -4428 -4427 -4425
- -4424 -4423 -4421 -4420 -4419 -4418 -4416 -4415
- -4414 -4412 -4411 -4410 -4409 -4407 -4406 -4405
- -4404 -4402 -4401 -4400 -4398 -4397 -4396 -4394
- -4393 -4392 -4391 -4389 -4388 -4387 -4385 -4384
- -4383 -4382 -4380 -4379 -4378 -4376 -4375 -4374
- -4372 -4371 -4370 -4369 -4367 -4366 -4365 -4363
- -4362 -4361 -4359 -4358 -4357 -4356 -4354 -4353
- -4352 -4350 -4349 -4348 -4346 -4345 -4344 -4342
- -4341 -4340 -4338 -4337 -4336 -4335 -4333 -4332
- -4331 -4329 -4328 -4327 -4325 -4324 -4323 -4321
- -4320 -4319 -4317 -4316 -4315 -4313 -4312 -4311
- -4309 -4308 -4307 -4305 -4304 -4303 -4301 -4300
- -4299 -4297 -4296 -4295 -4293 -4292 -4291 -4289
- -4288 -4287 -4285 -4284 -4283 -4281 -4280 -4279
- -4277 -4276 -4275 -4273 -4272 -4271 -4269 -4268
- -4267 -4265 -4264 -4263 -4261 -4260 -4259 -4257
- -4256 -4254 -4253 -4252 -4250 -4249 -4248 -4246
- -4245 -4244 -4242 -4241 -4240 -4238 -4237 -4236
- -4234 -4233 -4231 -4230 -4229 -4227 -4226 -4225
- -4223 -4222 -4221 -4219 -4218 -4216 -4215 -4214
- -4212 -4211 -4210 -4208 -4207 -4205 -4204 -4203
- -4201 -4200 -4199 -4197 -4196 -4194 -4193 -4192
- -4190 -4189 -4188 -4186 -4185 -4183 -4182 -4181
- -4179 -4178 -4176 -4175 -4174 -4172 -4171 -4170
- -4168 -4167 -4165 -4164 -4163 -4161 -4160 -4158
- -4157 -4156 -4154 -4153 -4151 -4150 -4149 -4147
- -4146 -4144 -4143 -4142 -4140 -4139 -4137 -4136
- -4135 -4133 -4132 -4130 -4129 -4128 -4126 -4125
- -4123 -4122 -4120 -4119 -4118 -4116 -4115 -4113
- -4112 -4111 -4109 -4108 -4106 -4105 -4103 -4102
- -4101 -4099 -4098 -4096 -4095 -4094 -4092 -4091
- -4089 -4088 -4086 -4085 -4084 -4082 -4081 -4079
- -4078 -4076 -4075 -4073 -4072 -4071 -4069 -4068
- -4066 -4065 -4063 -4062 -4061 -4059 -4058 -4056
- -4055 -4053 -4052 -4050 -4049 -4048 -4046 -4045
- -4043 -4042 -4040 -4039 -4037 -4036 -4035 -4033
- -4032 -4030 -4029 -4027 -4026 -4024 -4023 -4021
- -4020 -4018 -4017 -4016 -4014 -4013 -4011 -4010
- -4008 -4007 -4005 -4004 -4002 -4001 -3999 -3998
- -3997 -3995 -3994 -3992 -3991 -3989 -3988 -3986
- -3985 -3983 -3982 -3980 -3979 -3977 -3976 -3974
- -3973 -3971 -3970 -3968 -3967 -3965 -3964 -3963
- -3961 -3960 -3958 -3957 -3955 -3954 -3952 -3951
- -3949 -3948 -3946 -3945 -3943 -3942 -3940 -3939
- -3937 -3936 -3934 -3933 -3931 -3930 -3928 -3927
- -3925 -3924 -3922 -3921 -3919 -3918 -3916 -3915
- -3913 -3912 -3910 -3909 -3907 -3905 -3904 -3902
- -3901 -3899 -3898 -3896 -3895 -3893 -3892 -3890
- -3889 -3887 -3886 -3884 -3883 -3881 -3880 -3878
- -3877 -3875 -3874 -3872 -3870 -3869 -3867 -3866
- -3864 -3863 -3861 -3860 -3858 -3857 -3855 -3854
- -3852 -3851 -3849 -3847 -3846 -3844 -3843 -3841
- -3840 -3838 -3837 -3835 -3834 -3832 -3830 -3829
- -3827 -3826 -3824 -3823 -3821 -3820 -3818 -3816
- -3815 -3813 -3812 -3810 -3809 -3807 -3805 -3804
- -3802 -3801 -3799 -3798 -3796 -3795 -3793 -3791
- -3790 -3788 -3787 -3785 -3784 -3782 -3780 -3779
- -3777 -3776 -3774 -3772 -3771 -3769 -3768 -3766
- -3765 -3763 -3761 -3760 -3758 -3757 -3755 -3753
- -3752 -3750 -3749 -3747 -3746 -3744 -3742 -3741
- -3739 -3738 -3736 -3734 -3733 -3731 -3730 -3728
- -3726 -3725 -3723 -3722 -3720 -3718 -3717 -3715
- -3713 -3712 -3710 -3709 -3707 -3705 -3704 -3702
- -3701 -3699 -3697 -3696 -3694 -3692 -3691 -3689
- -3688 -3686 -3684 -3683 -3681 -3680 -3678 -3676
- -3675 -3673 -3671 -3670 -3668 -3666 -3665 -3663
- -3662 -3660 -3658 -3657 -3655 -3653 -3652 -3650
- -3648 -3647 -3645 -3644 -3642 -3640 -3639 -3637
- -3635 -3634 -3632 -3630 -3629 -3627 -3625 -3624
- -3622 -3620 -3619 -3617 -3615 -3614 -3612 -3610
- -3609 -3607 -3605 -3604 -3602 -3600 -3599 -3597
- -3595 -3594 -3592 -3590 -3589 -3587 -3585 -3584
- -3582 -3580 -3579 -3577 -3575 -3574 -3572 -3570
- -3569 -3567 -3565 -3564 -3562 -3560 -3558 -3557
- -3555 -3553 -3552 -3550 -3548 -3547 -3545 -3543
- -3542 -3540 -3538 -3536 -3535 -3533 -3531 -3530
- -3528 -3526 -3524 -3523 -3521 -3519 -3518 -3516
- -3514 -3513 -3511 -3509 -3507 -3506 -3504 -3502
- -3501 -3499 -3497 -3495 -3494 -3492 -3490 -3488
- -3487 -3485 -3483 -3482 -3480 -3478 -3476 -3475
- -3473 -3471 -3469 -3468 -3466 -3464 -3462 -3461
- -3459 -3457 -3455 -3454 -3452 -3450 -3448 -3447
- -3445 -3443 -3441 -3440 -3438 -3436 -3434 -3433
- -3431 -3429 -3427 -3426 -3424 -3422 -3420 -3419
- -3417 -3415 -3413 -3412 -3410 -3408 -3406 -3404
- -3403 -3401 -3399 -3397 -3396 -3394 -3392 -3390
- -3388 -3387 -3385 -3383 -3381 -3380 -3378 -3376
- -3374 -3372 -3371 -3369 -3367 -3365 -3363 -3362
- -3360 -3358 -3356 -3354 -3353 -3351 -3349 -3347
- -3345 -3344 -3342 -3340 -3338 -3336 -3335 -3333
- -3331 -3329 -3327 -3326 -3324 -3322 -3320 -3318
- -3316 -3315 -3313 -3311 -3309 -3307 -3305 -3304
- -3302 -3300 -3298 -3296 -3295 -3293 -3291 -3289
- -3287 -3285 -3283 -3282 -3280 -3278 -3276 -3274
- -3272 -3271 -3269 -3267 -3265 -3263 -3261 -3259
- -3258 -3256 -3254 -3252 -3250 -3248 -3246 -3245
- -3243 -3241 -3239 -3237 -3235 -3233 -3232 -3230
- -3228 -3226 -3224 -3222 -3220 -3218 -3217 -3215
- -3213 -3211 -3209 -3207 -3205 -3203 -3202 -3200
- -3198 -3196 -3194 -3192 -3190 -3188 -3186 -3185
- -3183 -3181 -3179 -3177 -3175 -3173 -3171 -3169
- -3167 -3166 -3164 -3162 -3160 -3158 -3156 -3154
- -3152 -3150 -3148 -3146 -3144 -3143 -3141 -3139
- -3137 -3135 -3133 -3131 -3129 -3127 -3125 -3123
- -3121 -3119 -3117 -3116 -3114 -3112 -3110 -3108
- -3106 -3104 -3102 -3100 -3098 -3096 -3094 -3092
- -3090 -3088 -3086 -3084 -3082 -3081 -3079 -3077
- -3075 -3073 -3071 -3069 -3067 -3065 -3063 -3061
- -3059 -3057 -3055 -3053 -3051 -3049 -3047 -3045
- -3043 -3041 -3039 -3037 -3035 -3033 -3031 -3029
- -3027 -3025 -3023 -3021 -3019 -3017 -3015 -3013
- -3011 -3009 -3007 -3005 -3003 -3001 -2999 -2997
- -2995 -2993 -2991 -2989 -2987 -2985 -2983 -2981
- -2979 -2977 -2975 -2973 -2971 -2969 -2967 -2965
- -2963 -2961 -2959 -2957 -2955 -2953 -2951 -2949
- -2947 -2945 -2943 -2941 -2939 -2937 -2935 -2933
- -2931 -2928 -2926 -2924 -2922 -2920 -2918 -2916
- -2914 -2912 -2910 -2908 -2906 -2904 -2902 -2900
- -2898 -2896 -2893 -2891 -2889 -2887 -2885 -2883
- -2881 -2879 -2877 -2875 -2873 -2871 -2869 -2866
- -2864 -2862 -2860 -2858 -2856 -2854 -2852 -2850
- -2848 -2846 -2843 -2841 -2839 -2837 -2835 -2833
- -2831 -2829 -2827 -2825 -2822 -2820 -2818 -2816
- -2814 -2812 -2810 -2808 -2805 -2803 -2801 -2799
- -2797 -2795 -2793 -2791 -2788 -2786 -2784 -2782
- -2780 -2778 -2776 -2773 -2771 -2769 -2767 -2765
- -2763 -2761 -2758 -2756 -2754 -2752 -2750 -2748
- -2745 -2743 -2741 -2739 -2737 -2735 -2733 -2730
- -2728 -2726 -2724 -2722 -2719 -2717 -2715 -2713
- -2711 -2709 -2706 -2704 -2702 -2700 -2698 -2695
- -2693 -2691 -2689 -2687 -2684 -2682 -2680 -2678
- -2676 -2673 -2671 -2669 -2667 -2665 -2662 -2660
- -2658 -2656 -2654 -2651 -2649 -2647 -2645 -2642
- -2640 -2638 -2636 -2633 -2631 -2629 -2627 -2625
- -2622 -2620 -2618 -2616 -2613 -2611 -2609 -2607
- -2604 -2602 -2600 -2598 -2595 -2593 -2591 -2589
- -2586 -2584 -2582 -2579 -2577 -2575 -2573 -2570
- -2568 -2566 -2564 -2561 -2559 -2557 -2554 -2552
- -2550 -2548 -2545 -2543 -2541 -2538 -2536 -2534
- -2532 -2529 -2527 -2525 -2522 -2520 -2518 -2515
- -2513 -2511 -2508 -2506 -2504 -2501 -2499 -2497
- -2495 -2492 -2490 -2488 -2485 -2483 -2481 -2478
- -2476 -2474 -2471 -2469 -2467 -2464 -2462 -2459
- -2457 -2455 -2452 -2450 -2448 -2445 -2443 -2441
- -2438 -2436 -2434 -2431 -2429 -2426 -2424 -2422
- -2419 -2417 -2415 -2412 -2410 -2407 -2405 -2403
- -2400 -2398 -2396 -2393 -2391 -2388 -2386 -2384
- -2381 -2379 -2376 -2374 -2372 -2369 -2367 -2364
- -2362 -2359 -2357 -2355 -2352 -2350 -2347 -2345
- -2343 -2340 -2338 -2335 -2333 -2330 -2328 -2325
- -2323 -2321 -2318 -2316 -2313 -2311 -2308 -2306
- -2303 -2301 -2299 -2296 -2294 -2291 -2289 -2286
- -2284 -2281 -2279 -2276 -2274 -2271 -2269 -2266
- -2264 -2261 -2259 -2257 -2254 -2252 -2249 -2247
- -2244 -2242 -2239 -2237 -2234 -2232 -2229 -2227
- -2224 -2222 -2219 -2216 -2214 -2211 -2209 -2206
- -2204 -2201 -2199 -2196 -2194 -2191 -2189 -2186
- -2184 -2181 -2179 -2176 -2173 -2171 -2168 -2166
- -2163 -2161 -2158 -2156 -2153 -2150 -2148 -2145
- -2143 -2140 -2138 -2135 -2132 -2130 -2127 -2125
- -2122 -2120 -2117 -2114 -2112 -2109 -2107 -2104
- -2101 -2099 -2096 -2094 -2091 -2088 -2086 -2083
- -2081 -2078 -2075 -2073 -2070 -2067 -2065 -2062
- -2060 -2057 -2054 -2052 -2049 -2046 -2044 -2041
- -2038 -2036 -2033 -2031 -2028 -2025 -2023 -2020
- -2017 -2015 -2012 -2009 -2007 -2004 -2001 -1999
- -1996 -1993 -1991 -1988 -1985 -1983 -1980 -1977
- -1974 -1972 -1969 -1966 -1964 -1961 -1958 -1956
- -1953 -1950 -1947 -1945 -1942 -1939 -1937 -1934
- -1931 -1928 -1926 -1923 -1920 -1917 -1915 -1912
- -1909 -1907 -1904 -1901 -1898 -1896 -1893 -1890
- -1887 -1884 -1882 -1879 -1876 -1873 -1871 -1868
- -1865 -1862 -1860 -1857 -1854 -1851 -1848 -1846
- -1843 -1840 -1837 -1834 -1832 -1829 -1826 -1823
- -1820 -1818 -1815 -1812 -1809 -1806 -1804 -1801
- -1798 -1795 -1792 -1789 -1787 -1784 -1781 -1778
- -1775 -1772 -1770 -1767 -1764 -1761 -1758 -1755
- -1752 -1750 -1747 -1744 -1741 -1738 -1735 -1732
- -1729 -1727 -1724 -1721 -1718 -1715 -1712 -1709
- -1706 -1703 -1701 -1698 -1695 -1692 -1689 -1686
- -1683 -1680 -1677 -1674 -1671 -1668 -1666 -1663
- -1660 -1657 -1654 -1651 -1648 -1645 -1642 -1639
- -1636 -1633 -1630 -1627 -1624 -1621 -1618 -1615
- -1612 -1609 -1606 -1603 -1600 -1597 -1594 -1591
- -1589 -1586 -1583 -1580 -1577 -1574 -1571 -1567
- -1564 -1561 -1558 -1555 -1552 -1549 -1546 -1543
- -1540 -1537 -1534 -1531 -1528 -1525 -1522 -1519
- -1516 -1513 -1510 -1507 -1504 -1501 -1498 -1495
- -1491 -1488 -1485 -1482 -1479 -1476 -1473 -1470
- -1467 -1464 -1461 -1458 -1454 -1451 -1448 -1445
- -1442 -1439 -1436 -1433 -1430 -1426 -1423 -1420
- -1417 -1414 -1411 -1408 -1404 -1401 -1398 -1395
- -1392 -1389 -1386 -1382 -1379 -1376 -1373 -1370
- -1367 -1363 -1360 -1357 -1354 -1351 -1347 -1344
- -1341 -1338 -1335 -1331 -1328 -1325 -1322 -1319
- -1315 -1312 -1309 -1306 -1302 -1299 -1296 -1293
- -1290 -1286 -1283 -1280 -1277 -1273 -1270 -1267
- -1263 -1260 -1257 -1254 -1250 -1247 -1244 -1241
- -1237 -1234 -1231 -1227 -1224 -1221 -1218 -1214
- -1211 -1208 -1204 -1201 -1198 -1194 -1191 -1188
- -1184 -1181 -1178 -1174 -1171 -1168 -1164 -1161
- -1158 -1154 -1151 -1147 -1144 -1141 -1137 -1134
- -1131 -1127 -1124 -1120 -1117 -1114 -1110 -1107
- -1103 -1100 -1097 -1093 -1090 -1086 -1083 -1080
- -1076 -1073 -1069 -1066 -1062 -1059 -1056 -1052
- -1049 -1045 -1042 -1038 -1035 -1031 -1028 -1024
- -1021 -1017 -1014 -1010 -1007 -1003 -1000 -996
- -993 -989 -986 -982 -979 -975 -972 -968
- -965 -961 -958 -954 -951 -947 -944 -940
- -936 -933 -929 -926 -922 -919 -915 -911
- -908 -904 -901 -897 -894 -890 -886 -883
- -879 -876 -872 -868 -865 -861 -857 -854
- -850 -847 -843 -839 -836 -832 -828 -825
- -821 -817 -814 -810 -806 -803 -799 -795
- -792 -788 -784 -780 -777 -773 -769 -766
- -762 -758 -754 -751 -747 -743 -740 -736
- -732 -728 -725 -721 -717 -713 -709 -706
- -702 -698 -694 -691 -687 -683 -679 -675
- -672 -668 -664 -660 -656 -653 -649 -645
- -641 -637 -633 -630 -626 -622 -618 -614
- -610 -606 -602 -599 -595 -591 -587 -583
- -579 -575 -571 -567 -564 -560 -556 -552
- -548 -544 -540 -536 -532 -528 -524 -520
- -516 -512 -508 -504 -500 -496 -493 -489
- -485 -481 -477 -473 -469 -465 -461 -456
- -452 -448 -444 -440 -436 -432 -428 -424
- -420 -416 -412 -408 -404 -400 -396 -392
- -388 -383 -379 -375 -371 -367 -363 -359
- -355 -351 -346 -342 -338 -334 -330 -326
- -322 -317 -313 -309 -305 -301 -297 -292
- -288 -284 -280 -276 -271 -267 -263 -259
- -255 -250 -246 -242 -238 -233 -229 -225
- -221 -216 -212 -208 -204 -199 -195 -191
- -186 -182 -178 -173 -169 -165 -160 -156
- -152 -147 -143 -139 -134 -130 -126 -121
- -117 -113 -108 -104 -99 -95 -91 -86
- -82 -77 -73 -69 -64 -60 -55 -51
- -46 -42 -37 -33 -29 -24 -20 -15
- -11 -6 -2 3 7 12 16 21
- 25 30 34 39 44 48 53 57
- 62 66 71 76 80 85 89 94
- 99 103 108 112 117 122 126 131
- 136 140 145 150 154 159 164 168
- 173 178 182 187 192 196 201 206
- 211 215 220 225 230 234 239 244
- 249 253 258 263 268 273 277 282
- 287 292 297 302 306 311 316 321
- 326 331 336 341 345 350 355 360
- 365 370 375 380 385 390 395 400
- 405 409 414 419 424 429 434 439
- 444 449 454 459 464 470 475 480
- 485 490 495 500 505 510 515 520
- 525 530 536 541 546 551 556 561
- 566 572 577 582 587 592 597 603
- 608 613 618 623 629 634 639 644
- 650 655 660 665 671 676 681 687
- 692 697 703 708 713 719 724 729
- 735 740 745 751 756 761 767 772
- 778 783 789 794 799 805 810 816
- 821 827 832 838 843 849 854 860
- 865 871 876 882 887 893 899 904
- 910 915 921 927 932 938 943 949
- 955 960 966 972 977 983 989 994
- 1000 1006 1011 1017 1023 1029 1034 1040
- 1046 1052 1057 1063 1069 1075 1081 1086
- 1092 1098 1104 1110 1116 1121 1127 1133
- 1139 1145 1151 1157 1163 1169 1175 1181
- 1186 1192 1198 1204 1210 1216 1222 1228
- 1234 1240 1246 1252 1258 1265 1271 1277
- 1283 1289 1295 1301 1307 1313 1319 1326
- 1332 1338 1344 1350 1356 1363 1369 1375
- 1381 1387 1394 1400 1406 1412 1419 1425
- 1431 1438 1444 1450 1456 1463 1469 1475
- 1482 1488 1495 1501 1507 1514 1520 1527
- 1533 1539 1546 1552 1559 1565 1572 1578
- 1585 1591 1598 1604 1611 1617 1624 1631
- 1637 1644 1650 1657 1664 1670 1677 1684
- 1690 1697 1704 1710 1717 1724 1730 1737
- 1744 1751 1757 1764 1771 1778 1784 1791
- 1798 1805 1812 1819 1825 1832 1839 1846
- 1853 1860 1867 1874 1881 1888 1895 1902
- 1909 1916 1923 1930 1937 1944 1951 1958
- 1965 1972 1979 1986 1993 2000 2008 2015
- 2022 2029 2036 2043 2051 2058 2065 2072
- 2080 2087 2094 2101 2109 2116 2123 2131
- 2138 2145 2153 2160 2168 2175 2182 2190
- 2197 2205 2212 2220 2227 2235 2242 2250
- 2257 2265 2272 2280 2287 2295 2303 2310
- 2318 2326 2333 2341 2349 2356 2364 2372
- 2379 2387 2395 2403 2410 2418 2426 2434
- 2442 2450 2457 2465 2473 2481 2489 2497
- 2505 2513 2521 2529 2537 2545 2553 2561
- 2569 2577 2585 2593 2601 2609 2618 2626
- 2634 2642 2650 2658 2667 2675 2683 2691
- 2700 2708 2716 2725 2733 2741 2750 2758
- 2766 2775 2783 2792 2800 2809 2817 2826
- 2834 2843 2851 2860 2868 2877 2885 2894
- 2903 2911 2920 2929 2937 2946 2955 2964
- 2972 2981 2990 2999 3008 3016 3025 3034
- 3043 3052 3061 3070 3079 3088 3097 3106
- 3115 3124 3133 3142 3151 3160 3169 3178
- 3187 3197 3206 3215 3224 3233 3243 3252
- 3261 3271 3280 3289 3299 3308 3317 3327
- 3336 3346 3355 3365 3374 3384 3393 3403
- 3412 3422 3432 3441 3451 3461 3470 3480
- 3490 3499 3509 3519 3529 3539 3549 3558
- 3568 3578 3588 3598 3608 3618 3628 3638
- 3648 3658 3668 3678 3688 3699 3709 3719
- 3729 3739 3750 3760 3770 3781 3791 3801
- 3812 3822 3832 3843 3853 3864 3874 3885
- 3895 3906 3917 3927 3938 3948 3959 3970
- 3981 3991 4002 4013 4024 4035 4045 4056
- 4067 4078 4089 4100 4111 4122 4133 4144
- 4155 4167 4178 4189 4200 4211 4223 4234
- 4245 4256 4268 4279 4291 4302 4313 4325
- 4336 4348 4359 4371 4383 4394 4406 4418
- 4429 4441 4453 4465 4476 4488 4500 4512
- 4524 4536 4548 4560 4572 4584 4596 4608
- 4620 4632 4645 4657 4669 4681 4694 4706
- 4718 4731 4743 4756 4768 4781 4793 4806
- 4818 4831 4844 4856 4869 4882 4895 4908
- 4920 4933 4946 4959 4972 4985 4998 5011
- 5024 5037 5051 5064 5077 5090 5104 5117
- 5130 5144 5157 5171 5184 5198 5211 5225
- 5238 5252 5266 5280 5293 5307 5321 5335
- 5349 5363 5377 5391 5405 5419 5433 5447
- 5461 5476 5490 5504 5519 5533 5547 5562
- 5576 5591 5605 5620 5635 5649 5664 5679
- 5694 5709 5724 5738 5753 5768 5783 5799
- 5814 5829 5844 5859 5875 5890 5905 5921
- 5936 5952 5967 5983 5999 6014 6030 6046
- 6062 6078 6094 6110 6126 6142 6158 6174
- 6190 6206 6223 6239 6255 6272 6288 6305
- 6321 6338 6355 6371 6388 6405 6422 6439
- 6456 6473 6490 6507 6524 6541 6559 6576
- 6593 6611 6628 6646 6663 6681 6699 6716
- 6734 6752 6770 6788 6806 6824 6842 6860
- 6879 6897 6915 6934 6952 6971 6989 7008
- 7027 7046 7065 7083 7102 7121 7141 7160
- 7179 7198 7218 7237 7256 7276 7296 7315
- 7335 7355 7375 7395 7415 7435 7455 7475
- 7495 7516 7536 7556 7577 7598 7618 7639
- 7660 7681 7702 7723 7744 7765 7786 7808
- 7829 7851 7872 7894 7916 7938 7959 7981
- 8003 8026 8048 8070 8092 8115 8137 8160
- 8183 8206 8228 8251 8274 8298 8321 8344
- 8367 8391 8415 8438 8462 8486 8510 8534
- 8558 8582 8606 8631 8655 8680 8705 8729
- 8754 8779 8804 8830 8855 8880 8906 8931
- 8957 8983 9009 9035 9061 9087 9113 9140
- 9166 9193 9220 9247 9274 9301 9328 9356
- 9383 9411 9438 9466 9494 9522 9550 9579
- 9607 9636 9664 9693 9722 9751 9780 9810
- 9839 9869 9898 9928 9958 9988 10019 10049
- 10080 10110 10141 10172 10203 10235 10266 10298
- 10329 10361 10393 10426 10458 10490 10523 10556
- 10589 10622 10655 10689 10722 10756 10790 10824
- 10859 10893 10928 10963 10998 11033 11068 11104
- 11139 11175 11211 11248 11284 11321 11358 11395
- 11432 11470 11507 11545 11583 11622 11660 11699
- 11738 11777 11816 11856 11896 11936 11976 12017
- 12058 12098 12140 12181 12223 12265 12307 12349
- 12392 12435 12478 12522 12566 12609 12654 12698
- 12743 12788 12834 12879 12925 12971 13018 13065
- 13112 13159 13207 13255 13303 13352 13401 13450
- 13500 13550 13600 13651 13702 13753 13805 13857
- 13909 13962 14015 14069 14123 14177 14232 14287
- 14342 14398 14454 14511 14568 14626 14684 14742
- 14801 14860 14920 14980 15041 15102 15164 15226
- 15288 15351 15415 15479 15544 15609 15675 15741
- 15808 15875 15943 16011 16080 16150 16220 16291
- 16363 16435 16508 16581 16655 16730 16805 16881
- 16958 17036 17114 17193 17273 17353 17435 17517
- 17600 17683 17768 17853 17939 18027 18115 18203
- 18293 18384 18476 18569 18662 18757 18853 18950
- 19047 19146 19246 19348 19450 19554 19658 19764
- 19872 19980 20090 20201 20314 20428 20543 20660
- 20778 20898 21020 21143 21267 21394 21522 21652
- 21783 21917 22052 22189 22329 22470 22613 22759
- 22907 23056 23209 23363 23521 23680 23842 24007
- 24175 24345 24519 24695 24874 25057 25243 25432
- 25625 25821 26021 26225 26433 26645 26861 27081
- 27307 27537 27771 28011 28257 28508 28764 29027
- 29295 29570 29852 30141 30438 30742 31054 31374
- 31704 32042 32391 32750 32767 32767 32767 32767
- 32767 32767 32767 32767 32767 32767 32767 32767
- 32767 32767 32767 32767 32767 32767 32767 32767
- 32767 32767 32767 32767 32767 32767 32767 32767
- 32767 32767 32767 32767 32767 32767 32767 32767
- 32767 32767 32767 32767 32767 32767 32767 32767
diff --git a/netem/paretonormal b/netem/paretonormal
deleted file mode 100755 (executable)
index 925d18f..0000000
Binary files a/netem/paretonormal and /dev/null differ
diff --git a/netem/paretonormal.dist b/netem/paretonormal.dist
deleted file mode 100644 (file)
index 61be1b8..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-# This is the distribution table for the paretonormal distribution.
- -12305 -11171 -10812 -10586 -10418 -10284 -10172 -10075
- -9990 -9914 -9845 -9783 -9724 -9670 -9620 -9572
- -9527 -9485 -9445 -9406 -9370 -9335 -9302 -9269
- -9238 -9208 -9179 -9151 -9123 -9097 -9072 -9047
- -9023 -8999 -8976 -8954 -8932 -8910 -8889 -8869
- -8849 -8830 -8810 -8792 -8773 -8755 -8737 -8720
- -8702 -8685 -8670 -8653 -8637 -8621 -8606 -8590
- -8575 -8560 -8546 -8531 -8517 -8503 -8489 -8476
- -8462 -8449 -8436 -8423 -8410 -8397 -8384 -8372
- -8360 -8348 -8336 -8324 -8312 -8301 -8289 -8278
- -8266 -8255 -8244 -8234 -8223 -8212 -8201 -8191
- -8180 -8170 -8159 -8149 -8139 -8129 -8119 -8110
- -8100 -8090 -8081 -8071 -8062 -8052 -8043 -8033
- -8024 -8015 -8006 -7998 -7989 -7980 -7971 -7962
- -7954 -7945 -7936 -7928 -7919 -7911 -7903 -7894
- -7887 -7879 -7870 -7862 -7854 -7846 -7838 -7830
- -7822 -7815 -7807 -7799 -7791 -7784 -7777 -7769
- -7762 -7754 -7747 -7739 -7732 -7725 -7717 -7710
- -7703 -7696 -7689 -7682 -7675 -7668 -7661 -7654
- -7647 -7640 -7634 -7627 -7620 -7613 -7606 -7600
- -7593 -7586 -7580 -7573 -7567 -7561 -7554 -7548
- -7541 -7535 -7529 -7522 -7516 -7510 -7503 -7497
- -7491 -7485 -7478 -7472 -7466 -7461 -7455 -7449
- -7443 -7437 -7431 -7425 -7419 -7413 -7407 -7401
- -7395 -7389 -7383 -7378 -7372 -7366 -7360 -7355
- -7350 -7344 -7338 -7333 -7327 -7321 -7316 -7310
- -7305 -7299 -7294 -7288 -7283 -7277 -7272 -7266
- -7261 -7256 -7250 -7245 -7240 -7235 -7230 -7224
- -7219 -7214 -7209 -7204 -7198 -7193 -7188 -7183
- -7178 -7173 -7167 -7162 -7157 -7152 -7147 -7142
- -7137 -7132 -7127 -7122 -7117 -7112 -7107 -7103
- -7098 -7093 -7088 -7083 -7078 -7074 -7069 -7064
- -7059 -7054 -7049 -7045 -7040 -7035 -7030 -7026
- -7021 -7016 -7012 -7007 -7002 -6997 -6993 -6988
- -6984 -6979 -6974 -6970 -6965 -6961 -6956 -6951
- -6947 -6942 -6939 -6934 -6930 -6925 -6921 -6916
- -6912 -6907 -6903 -6898 -6894 -6889 -6885 -6881
- -6876 -6872 -6868 -6863 -6859 -6854 -6850 -6846
- -6842 -6837 -6833 -6829 -6824 -6820 -6816 -6811
- -6807 -6803 -6799 -6795 -6790 -6786 -6782 -6778
- -6774 -6769 -6765 -6761 -6757 -6753 -6749 -6745
- -6740 -6736 -6732 -6728 -6724 -6720 -6716 -6712
- -6708 -6704 -6700 -6696 -6692 -6688 -6684 -6680
- -6676 -6672 -6668 -6664 -6660 -6656 -6652 -6648
- -6644 -6640 -6636 -6632 -6628 -6624 -6620 -6617
- -6613 -6609 -6605 -6601 -6597 -6593 -6590 -6586
- -6582 -6578 -6574 -6570 -6567 -6563 -6559 -6555
- -6551 -6548 -6544 -6540 -6536 -6533 -6529 -6525
- -6521 -6518 -6514 -6510 -6506 -6503 -6499 -6495
- -6492 -6488 -6484 -6481 -6477 -6473 -6470 -6466
- -6462 -6459 -6455 -6451 -6448 -6444 -6441 -6437
- -6433 -6430 -6426 -6422 -6418 -6415 -6411 -6407
- -6404 -6400 -6397 -6393 -6390 -6386 -6383 -6379
- -6375 -6372 -6368 -6365 -6361 -6358 -6354 -6351
- -6347 -6344 -6340 -6337 -6333 -6330 -6326 -6323
- -6320 -6316 -6313 -6309 -6306 -6302 -6298 -6295
- -6291 -6288 -6284 -6281 -6278 -6274 -6271 -6268
- -6264 -6261 -6257 -6254 -6251 -6247 -6244 -6241
- -6237 -6234 -6230 -6227 -6224 -6220 -6216 -6213
- -6210 -6206 -6203 -6200 -6196 -6193 -6190 -6187
- -6183 -6180 -6177 -6173 -6170 -6167 -6164 -6160
- -6157 -6154 -6150 -6147 -6143 -6140 -6137 -6134
- -6130 -6127 -6124 -6121 -6117 -6114 -6111 -6108
- -6105 -6101 -6098 -6094 -6091 -6088 -6085 -6081
- -6078 -6075 -6072 -6069 -6066 -6062 -6059 -6056
- -6053 -6050 -6047 -6043 -6040 -6037 -6033 -6030
- -6027 -6024 -6021 -6018 -6015 -6011 -6008 -6005
- -6002 -5999 -5995 -5992 -5989 -5986 -5983 -5980
- -5977 -5974 -5971 -5967 -5964 -5961 -5958 -5954
- -5951 -5948 -5945 -5942 -5939 -5936 -5933 -5930
- -5927 -5924 -5921 -5917 -5914 -5911 -5908 -5905
- -5902 -5899 -5896 -5893 -5890 -5887 -5884 -5880
- -5877 -5874 -5871 -5868 -5865 -5862 -5859 -5857
- -5854 -5851 -5847 -5844 -5841 -5838 -5835 -5832
- -5829 -5826 -5823 -5820 -5817 -5814 -5811 -5808
- -5805 -5802 -5799 -5796 -5793 -5790 -5787 -5784
- -5781 -5778 -5775 -5772 -5769 -5766 -5763 -5760
- -5758 -5754 -5751 -5748 -5745 -5742 -5740 -5737
- -5734 -5731 -5727 -5724 -5722 -5719 -5716 -5713
- -5710 -5707 -5704 -5701 -5698 -5695 -5692 -5689
- -5687 -5684 -5681 -5678 -5675 -5672 -5669 -5666
- -5663 -5660 -5658 -5655 -5651 -5648 -5646 -5643
- -5640 -5637 -5634 -5632 -5629 -5625 -5622 -5620
- -5617 -5614 -5611 -5609 -5606 -5602 -5600 -5597
- -5594 -5591 -5588 -5586 -5582 -5579 -5577 -5574
- -5571 -5568 -5566 -5563 -5559 -5557 -5554 -5551
- -5548 -5546 -5543 -5539 -5537 -5534 -5531 -5528
- -5526 -5523 -5520 -5517 -5514 -5511 -5509 -5506
- -5503 -5501 -5497 -5494 -5492 -5489 -5486 -5483
- -5480 -5477 -5475 -5472 -5469 -5467 -5464 -5460
- -5458 -5455 -5452 -5450 -5447 -5444 -5441 -5438
- -5436 -5433 -5430 -5428 -5424 -5421 -5419 -5416
- -5414 -5411 -5408 -5405 -5402 -5399 -5397 -5394
- -5392 -5388 -5386 -5383 -5380 -5378 -5375 -5372
- -5369 -5366 -5364 -5361 -5358 -5355 -5352 -5350
- -5347 -5345 -5342 -5339 -5336 -5333 -5331 -5328
- -5326 -5322 -5320 -5317 -5314 -5312 -5309 -5306
- -5303 -5301 -5298 -5296 -5292 -5290 -5287 -5284
- -5282 -5279 -5276 -5273 -5271 -5268 -5266 -5262
- -5260 -5257 -5254 -5252 -5249 -5246 -5243 -5241
- -5238 -5236 -5233 -5230 -5227 -5225 -5222 -5219
- -5216 -5214 -5211 -5209 -5206 -5203 -5200 -5198
- -5195 -5193 -5190 -5187 -5184 -5182 -5179 -5176
- -5174 -5171 -5168 -5166 -5163 -5160 -5158 -5155
- -5153 -5149 -5147 -5144 -5142 -5139 -5136 -5133
- -5131 -5129 -5125 -5123 -5120 -5118 -5115 -5112
- -5109 -5107 -5104 -5102 -5099 -5096 -5094 -5091
- -5089 -5085 -5083 -5080 -5078 -5075 -5072 -5070
- -5067 -5065 -5062 -5059 -5057 -5054 -5051 -5049
- -5046 -5044 -5041 -5038 -5035 -5033 -5030 -5027
- -5025 -5022 -5020 -5017 -5014 -5012 -5009 -5007
- -5004 -5001 -4999 -4996 -4993 -4991 -4988 -4986
- -4983 -4980 -4978 -4975 -4973 -4970 -4967 -4965
- -4962 -4959 -4957 -4954 -4952 -4949 -4946 -4944
- -4941 -4938 -4936 -4933 -4931 -4928 -4925 -4923
- -4920 -4917 -4915 -4912 -4910 -4907 -4904 -4902
- -4900 -4897 -4894 -4892 -4889 -4886 -4884 -4881
- -4879 -4876 -4873 -4871 -4869 -4865 -4863 -4861
- -4858 -4855 -4853 -4850 -4848 -4845 -4842 -4840
- -4838 -4834 -4832 -4830 -4827 -4824 -4822 -4819
- -4816 -4814 -4812 -4809 -4806 -4804 -4801 -4798
- -4796 -4793 -4791 -4788 -4786 -4783 -4781 -4778
- -4775 -4773 -4770 -4767 -4765 -4763 -4760 -4757
- -4755 -4752 -4749 -4747 -4745 -4742 -4739 -4737
- -4735 -4732 -4729 -4727 -4724 -4721 -4719 -4716
- -4714 -4711 -4709 -4706 -4703 -4701 -4698 -4696
- -4693 -4691 -4688 -4686 -4683 -4680 -4678 -4676
- -4672 -4670 -4668 -4665 -4662 -4660 -4658 -4655
- -4652 -4650 -4647 -4645 -4642 -4640 -4637 -4635
- -4632 -4629 -4627 -4625 -4622 -4619 -4617 -4614
- -4612 -4609 -4606 -4604 -4602 -4599 -4596 -4594
- -4592 -4589 -4586 -4584 -4581 -4579 -4576 -4573
- -4571 -4569 -4566 -4563 -4561 -4558 -4556 -4553
- -4550 -4548 -4546 -4543 -4540 -4538 -4535 -4533
- -4530 -4527 -4525 -4523 -4520 -4518 -4515 -4512
- -4510 -4508 -4505 -4502 -4500 -4497 -4495 -4493
- -4490 -4487 -4485 -4482 -4480 -4477 -4474 -4472
- -4470 -4467 -4465 -4462 -4459 -4457 -4455 -4452
- -4449 -4446 -4444 -4442 -4439 -4437 -4434 -4431
- -4429 -4427 -4424 -4422 -4419 -4416 -4414 -4412
- -4409 -4407 -4404 -4401 -4399 -4396 -4394 -4392
- -4389 -4386 -4384 -4381 -4379 -4376 -4374 -4371
- -4368 -4366 -4364 -4361 -4359 -4356 -4353 -4351
- -4348 -4346 -4344 -4341 -4338 -4336 -4333 -4331
- -4328 -4326 -4324 -4321 -4318 -4315 -4313 -4311
- -4308 -4306 -4303 -4300 -4298 -4295 -4293 -4291
- -4288 -4286 -4283 -4280 -4278 -4275 -4273 -4270
- -4268 -4266 -4263 -4261 -4258 -4255 -4253 -4250
- -4248 -4245 -4243 -4241 -4238 -4235 -4232 -4230
- -4228 -4225 -4223 -4220 -4218 -4215 -4213 -4210
- -4207 -4205 -4202 -4200 -4198 -4195 -4193 -4190
- -4187 -4185 -4182 -4180 -4177 -4175 -4172 -4170
- -4168 -4165 -4163 -4160 -4157 -4155 -4152 -4150
- -4147 -4145 -4142 -4140 -4138 -4135 -4133 -4130
- -4127 -4124 -4122 -4119 -4117 -4115 -4112 -4110
- -4107 -4105 -4102 -4100 -4097 -4094 -4092 -4089
- -4087 -4084 -4082 -4079 -4077 -4075 -4072 -4070
- -4067 -4065 -4062 -4060 -4057 -4054 -4052 -4049
- -4047 -4044 -4042 -4039 -4037 -4034 -4032 -4029
- -4027 -4024 -4022 -4020 -4017 -4015 -4012 -4009
- -4006 -4004 -4001 -3999 -3996 -3994 -3991 -3989
- -3987 -3984 -3982 -3979 -3977 -3974 -3972 -3969
- -3967 -3964 -3962 -3959 -3957 -3954 -3952 -3949
- -3947 -3944 -3941 -3939 -3936 -3933 -3931 -3929
- -3926 -3924 -3921 -3919 -3916 -3914 -3911 -3909
- -3906 -3904 -3901 -3899 -3896 -3894 -3891 -3889
- -3886 -3884 -3881 -3879 -3876 -3874 -3871 -3869
- -3866 -3864 -3861 -3859 -3856 -3854 -3851 -3849
- -3846 -3844 -3841 -3839 -3836 -3833 -3831 -3828
- -3826 -3823 -3821 -3818 -3816 -3813 -3811 -3808
- -3806 -3803 -3801 -3798 -3796 -3793 -3791 -3788
- -3786 -3783 -3781 -3778 -3775 -3773 -3770 -3768
- -3765 -3763 -3760 -3758 -3755 -3753 -3750 -3748
- -3745 -3743 -3740 -3737 -3735 -3732 -3730 -3727
- -3725 -3722 -3720 -3717 -3715 -3712 -3709 -3707
- -3704 -3702 -3700 -3697 -3695 -3692 -3689 -3687
- -3685 -3682 -3680 -3677 -3675 -3672 -3669 -3667
- -3664 -3662 -3659 -3657 -3654 -3652 -3649 -3646
- -3644 -3641 -3639 -3636 -3634 -3631 -3629 -3626
- -3624 -3621 -3619 -3616 -3614 -3611 -3609 -3606
- -3604 -3601 -3598 -3596 -3593 -3591 -3588 -3585
- -3583 -3580 -3578 -3575 -3573 -3571 -3568 -3566
- -3563 -3561 -3558 -3555 -3553 -3550 -3548 -3545
- -3542 -3540 -3537 -3535 -3532 -3530 -3528 -3525
- -3522 -3520 -3517 -3515 -3512 -3509 -3507 -3504
- -3502 -3499 -3496 -3494 -3492 -3489 -3487 -3484
- -3482 -3479 -3476 -3474 -3471 -3469 -3466 -3463
- -3461 -3458 -3456 -3454 -3451 -3448 -3446 -3443
- -3441 -3438 -3435 -3433 -3430 -3428 -3425 -3423
- -3420 -3418 -3415 -3413 -3410 -3407 -3405 -3402
- -3399 -3397 -3395 -3392 -3390 -3387 -3384 -3382
- -3379 -3376 -3374 -3371 -3369 -3367 -3364 -3361
- -3359 -3356 -3353 -3351 -3348 -3345 -3343 -3341
- -3338 -3336 -3333 -3330 -3328 -3325 -3322 -3320
- -3318 -3315 -3313 -3310 -3307 -3305 -3302 -3299
- -3297 -3294 -3292 -3290 -3287 -3284 -3281 -3279
- -3276 -3273 -3271 -3269 -3266 -3264 -3261 -3258
- -3256 -3253 -3250 -3248 -3246 -3243 -3240 -3238
- -3235 -3232 -3229 -3227 -3225 -3222 -3220 -3217
- -3214 -3212 -3209 -3206 -3204 -3202 -3199 -3196
- -3194 -3191 -3188 -3186 -3184 -3181 -3178 -3175
- -3173 -3170 -3167 -3165 -3163 -3160 -3157 -3155
- -3152 -3149 -3147 -3144 -3142 -3139 -3136 -3134
- -3131 -3128 -3126 -3124 -3121 -3118 -3115 -3113
- -3110 -3108 -3105 -3103 -3100 -3097 -3094 -3092
- -3090 -3087 -3084 -3082 -3079 -3076 -3074 -3071
- -3069 -3066 -3063 -3061 -3058 -3056 -3053 -3050
- -3048 -3045 -3042 -3040 -3037 -3035 -3032 -3029
- -3026 -3024 -3021 -3019 -3016 -3014 -3011 -3008
- -3005 -3003 -3001 -2998 -2995 -2992 -2990 -2987
- -2985 -2982 -2979 -2976 -2974 -2972 -2969 -2966
- -2963 -2961 -2958 -2956 -2953 -2950 -2948 -2945
- -2942 -2940 -2937 -2935 -2932 -2929 -2926 -2924
- -2921 -2919 -2916 -2913 -2911 -2908 -2905 -2903
- -2900 -2897 -2895 -2892 -2890 -2887 -2884 -2881
- -2879 -2876 -2873 -2871 -2868 -2865 -2863 -2860
- -2857 -2855 -2852 -2850 -2847 -2844 -2841 -2839
- -2836 -2834 -2831 -2828 -2825 -2823 -2820 -2818
- -2815 -2812 -2809 -2807 -2804 -2801 -2799 -2796
- -2794 -2791 -2788 -2785 -2782 -2780 -2778 -2775
- -2772 -2769 -2767 -2764 -2761 -2758 -2756 -2753
- -2751 -2748 -2745 -2742 -2740 -2737 -2734 -2732
- -2729 -2726 -2724 -2721 -2718 -2715 -2713 -2710
- -2707 -2705 -2702 -2700 -2697 -2694 -2691 -2689
- -2686 -2683 -2680 -2677 -2675 -2673 -2670 -2667
- -2664 -2662 -2659 -2656 -2653 -2650 -2648 -2645
- -2642 -2639 -2637 -2635 -2632 -2629 -2626 -2623
- -2621 -2618 -2615 -2612 -2610 -2607 -2604 -2601
- -2599 -2596 -2593 -2590 -2588 -2586 -2583 -2580
- -2577 -2575 -2572 -2569 -2566 -2563 -2561 -2558
- -2555 -2552 -2550 -2547 -2544 -2541 -2539 -2536
- -2533 -2530 -2528 -2525 -2522 -2519 -2516 -2514
- -2511 -2508 -2505 -2503 -2500 -2497 -2494 -2492
- -2489 -2486 -2483 -2481 -2478 -2475 -2472 -2470
- -2467 -2464 -2461 -2458 -2456 -2453 -2450 -2447
- -2445 -2442 -2439 -2436 -2434 -2431 -2428 -2425
- -2423 -2420 -2417 -2414 -2412 -2409 -2406 -2403
- -2401 -2398 -2395 -2392 -2390 -2387 -2384 -2381
- -2379 -2375 -2372 -2369 -2367 -2364 -2361 -2358
- -2356 -2353 -2350 -2347 -2345 -2342 -2339 -2336
- -2334 -2331 -2327 -2325 -2322 -2319 -2316 -2314
- -2311 -2308 -2305 -2303 -2300 -2297 -2294 -2291
- -2288 -2285 -2282 -2280 -2277 -2274 -2271 -2269
- -2266 -2263 -2260 -2257 -2254 -2251 -2249 -2246
- -2243 -2240 -2238 -2235 -2231 -2229 -2226 -2223
- -2220 -2218 -2215 -2212 -2209 -2206 -2203 -2200
- -2198 -2195 -2192 -2189 -2186 -2183 -2180 -2178
- -2175 -2172 -2169 -2166 -2163 -2160 -2158 -2155
- -2152 -2149 -2146 -2143 -2140 -2137 -2135 -2132
- -2129 -2126 -2123 -2120 -2118 -2115 -2112 -2108
- -2106 -2103 -2100 -2097 -2094 -2091 -2088 -2086
- -2083 -2080 -2077 -2074 -2071 -2068 -2066 -2062
- -2059 -2057 -2054 -2051 -2048 -2045 -2042 -2039
- -2037 -2033 -2030 -2028 -2025 -2022 -2019 -2016
- -2013 -2010 -2008 -2004 -2001 -1999 -1996 -1992
- -1990 -1987 -1984 -1981 -1978 -1975 -1972 -1970
- -1966 -1963 -1960 -1958 -1954 -1952 -1949 -1946
- -1942 -1940 -1937 -1934 -1931 -1928 -1925 -1922
- -1919 -1916 -1913 -1910 -1907 -1904 -1902 -1898
- -1895 -1893 -1890 -1886 -1884 -1881 -1877 -1875
- -1872 -1869 -1866 -1863 -1860 -1857 -1854 -1851
- -1848 -1845 -1842 -1839 -1836 -1833 -1830 -1827
- -1824 -1821 -1818 -1815 -1812 -1809 -1806 -1803
- -1801 -1797 -1794 -1792 -1788 -1785 -1783 -1779
- -1776 -1774 -1770 -1767 -1764 -1761 -1758 -1755
- -1752 -1749 -1746 -1743 -1740 -1737 -1734 -1731
- -1728 -1725 -1722 -1719 -1716 -1712 -1710 -1707
- -1703 -1701 -1698 -1694 -1692 -1688 -1685 -1683
- -1679 -1676 -1674 -1670 -1667 -1664 -1661 -1658
- -1655 -1652 -1649 -1646 -1643 -1640 -1637 -1633
- -1631 -1627 -1624 -1621 -1618 -1615 -1612 -1609
- -1606 -1603 -1600 -1596 -1594 -1590 -1587 -1584
- -1581 -1578 -1575 -1572 -1569 -1566 -1562 -1560
- -1556 -1553 -1551 -1547 -1544 -1541 -1538 -1535
- -1532 -1528 -1526 -1522 -1519 -1516 -1513 -1509
- -1507 -1503 -1500 -1498 -1494 -1491 -1488 -1485
- -1482 -1479 -1475 -1473 -1469 -1466 -1463 -1460
- -1457 -1454 -1450 -1447 -1444 -1441 -1438 -1434
- -1432 -1428 -1425 -1422 -1419 -1415 -1413 -1409
- -1406 -1403 -1400 -1397 -1393 -1390 -1387 -1384
- -1381 -1378 -1374 -1372 -1368 -1365 -1362 -1358
- -1355 -1352 -1349 -1346 -1342 -1339 -1336 -1333
- -1330 -1327 -1323 -1320 -1317 -1314 -1311 -1307
- -1304 -1301 -1298 -1295 -1291 -1288 -1285 -1281
- -1279 -1275 -1272 -1269 -1265 -1262 -1259 -1256
- -1253 -1249 -1246 -1243 -1239 -1236 -1233 -1230
- -1226 -1223 -1220 -1217 -1214 -1210 -1207 -1204
- -1200 -1197 -1194 -1190 -1188 -1184 -1181 -1178
- -1174 -1171 -1168 -1165 -1161 -1158 -1155 -1151
- -1148 -1145 -1141 -1138 -1135 -1132 -1128 -1125
- -1122 -1118 -1115 -1112 -1108 -1105 -1102 -1099
- -1095 -1092 -1089 -1085 -1082 -1078 -1075 -1072
- -1068 -1066 -1062 -1059 -1055 -1052 -1049 -1045
- -1042 -1038 -1035 -1032 -1028 -1025 -1022 -1019
- -1015 -1012 -1009 -1005 -1002 -998 -995 -992
- -988 -985 -981 -978 -975 -971 -968 -964
- -961 -958 -955 -951 -947 -944 -941 -938
- -934 -931 -927 -924 -921 -917 -914 -910
- -907 -903 -900 -897 -893 -890 -886 -883
- -879 -876 -873 -869 -866 -862 -859 -855
- -852 -849 -845 -842 -838 -835 -831 -828
- -824 -821 -818 -814 -811 -807 -804 -800
- -797 -793 -790 -786 -782 -779 -776 -773
- -769 -765 -762 -758 -755 -751 -748 -744
- -741 -737 -734 -730 -727 -723 -719 -716
- -712 -709 -705 -702 -698 -695 -691 -688
- -685 -681 -678 -674 -671 -667 -664 -659
- -656 -652 -649 -645 -642 -638 -634 -631
- -627 -624 -620 -617 -613 -610 -606 -603
- -599 -595 -592 -588 -585 -581 -578 -574
- -570 -566 -563 -559 -556 -552 -549 -545
- -541 -538 -534 -531 -527 -523 -519 -516
- -512 -509 -505 -502 -498 -494 -490 -487
- -483 -480 -476 -472 -468 -465 -461 -457
- -454 -450 -447 -443 -439 -435 -432 -428
- -425 -420 -417 -413 -410 -406 -402 -398
- -395 -391 -388 -383 -380 -376 -373 -369
- -365 -361 -358 -354 -350 -346 -343 -339
- -336 -331 -328 -324 -320 -316 -313 -309
- -305 -301 -298 -294 -290 -286 -283 -279
- -275 -271 -268 -263 -260 -256 -253 -248
- -245 -241 -237 -233 -230 -225 -222 -218
- -214 -210 -207 -202 -199 -195 -191 -187
- -184 -179 -176 -171 -168 -164 -160 -156
- -153 -149 -145 -141 -137 -133 -129 -126
- -121 -118 -114 -110 -106 -102 -98 -95
- -90 -87 -82 -79 -75 -71 -67 -63
- -59 -55 -52 -47 -44 -39 -36 -31
- -28 -23 -20 -15 -12 -8 -4 0
- 3 8 11 16 19 23 27 31
- 35 39 43 47 51 55 59 63
- 67 71 75 79 83 87 91 96
- 99 104 107 112 115 119 124 127
- 132 135 140 144 148 152 156 160
- 164 168 172 177 180 185 189 193
- 197 201 205 209 214 217 222 226
- 230 234 238 243 246 251 255 259
- 263 267 272 275 280 284 288 292
- 296 301 304 309 313 317 322 325
- 330 334 338 342 346 351 355 360
- 363 368 372 376 381 384 389 393
- 397 402 406 410 414 419 423 427
- 432 436 440 444 448 453 457 462
- 466 470 475 479 483 487 492 496
- 500 505 509 513 518 522 527 531
- 535 540 544 549 553 557 561 565
- 570 574 579 583 587 592 596 601
- 606 610 614 619 623 628 632 636
- 641 645 650 654 658 663 667 672
- 676 681 686 690 694 699 703 708
- 712 716 722 726 730 735 739 744
- 748 753 758 762 766 771 775 780
- 785 789 794 798 803 808 812 816
- 821 826 830 835 839 844 849 853
- 858 863 867 872 876 881 886 890
- 895 900 904 909 914 918 923 928
- 932 937 942 946 951 956 960 965
- 970 974 979 984 989 994 998 1003
- 1008 1013 1017 1022 1027 1031 1037 1041
- 1046 1051 1056 1060 1065 1070 1074 1079
- 1084 1089 1094 1099 1103 1108 1113 1118
- 1123 1128 1132 1137 1143 1147 1152 1157
- 1162 1166 1171 1177 1181 1186 1191 1196
- 1201 1206 1211 1215 1221 1226 1230 1236
- 1241 1245 1250 1256 1260 1265 1271 1275
- 1280 1285 1290 1295 1300 1305 1310 1315
- 1320 1325 1330 1335 1341 1345 1350 1356
- 1361 1365 1370 1376 1381 1386 1391 1396
- 1401 1406 1412 1417 1421 1426 1432 1437
- 1442 1447 1453 1458 1462 1468 1473 1478
- 1483 1489 1494 1499 1504 1510 1515 1520
- 1525 1530 1535 1540 1546 1551 1556 1561
- 1567 1572 1577 1582 1588 1594 1599 1604
- 1609 1615 1620 1625 1630 1636 1641 1646
- 1651 1657 1663 1668 1673 1679 1684 1689
- 1694 1700 1706 1711 1716 1721 1727 1733
- 1738 1743 1749 1754 1760 1765 1770 1776
- 1782 1787 1792 1798 1804 1809 1814 1820
- 1825 1831 1837 1842 1847 1853 1859 1864
- 1870 1875 1881 1887 1892 1897 1903 1909
- 1915 1920 1926 1931 1937 1943 1948 1954
- 1959 1965 1971 1977 1982 1988 1993 1999
- 2005 2011 2016 2022 2028 2034 2040 2045
- 2051 2056 2062 2068 2074 2080 2085 2091
- 2097 2103 2109 2115 2120 2126 2132 2138
- 2144 2150 2155 2161 2167 2173 2179 2185
- 2191 2197 2202 2208 2214 2221 2227 2232
- 2238 2244 2250 2256 2263 2268 2274 2280
- 2286 2292 2298 2304 2311 2317 2323 2329
- 2334 2340 2346 2353 2359 2365 2371 2377
- 2383 2389 2395 2402 2408 2414 2421 2427
- 2433 2439 2445 2451 2457 2463 2470 2476
- 2483 2489 2495 2501 2507 2514 2520 2526
- 2532 2538 2545 2552 2558 2564 2571 2577
- 2583 2590 2596 2602 2608 2615 2621 2628
- 2634 2641 2648 2654 2660 2667 2673 2680
- 2686 2692 2699 2705 2712 2718 2725 2731
- 2738 2744 2751 2758 2764 2771 2778 2784
- 2791 2798 2804 2811 2818 2824 2831 2838
- 2844 2851 2858 2864 2871 2878 2884 2891
- 2898 2905 2911 2918 2925 2932 2938 2945
- 2952 2959 2966 2973 2979 2986 2993 3000
- 3007 3014 3021 3028 3035 3042 3049 3056
- 3063 3070 3077 3084 3091 3097 3104 3111
- 3118 3125 3132 3139 3146 3153 3161 3168
- 3175 3182 3189 3196 3204 3211 3218 3225
- 3233 3240 3247 3254 3261 3268 3275 3283
- 3290 3297 3305 3312 3320 3327 3334 3341
- 3348 3356 3363 3371 3378 3386 3393 3401
- 3408 3415 3422 3430 3437 3445 3453 3460
- 3468 3475 3482 3490 3498 3505 3513 3521
- 3528 3536 3543 3551 3558 3566 3574 3582
- 3589 3597 3604 3612 3620 3628 3636 3643
- 3651 3659 3667 3675 3683 3690 3698 3706
- 3714 3722 3730 3737 3745 3753 3762 3770
- 3777 3785 3793 3801 3809 3817 3825 3833
- 3842 3850 3857 3866 3874 3882 3890 3898
- 3906 3915 3923 3931 3939 3948 3956 3964
- 3972 3981 3989 3997 4005 4014 4022 4030
- 4039 4047 4055 4064 4072 4081 4089 4098
- 4106 4115 4123 4132 4141 4148 4157 4166
- 4175 4183 4192 4201 4209 4218 4227 4235
- 4244 4253 4261 4270 4279 4287 4296 4305
- 4313 4323 4332 4340 4349 4358 4367 4376
- 4385 4394 4403 4411 4421 4430 4438 4448
- 4457 4466 4475 4484 4493 4502 4511 4521
- 4529 4539 4548 4557 4567 4576 4585 4594
- 4604 4613 4622 4632 4641 4651 4660 4669
- 4679 4688 4698 4707 4717 4726 4736 4745
- 4755 4764 4774 4783 4793 4803 4813 4822
- 4832 4841 4852 4861 4871 4881 4891 4900
- 4911 4920 4930 4940 4950 4960 4970 4980
- 4990 5000 5010 5020 5030 5040 5050 5060
- 5071 5080 5091 5101 5112 5122 5131 5142
- 5152 5163 5173 5183 5194 5204 5215 5225
- 5235 5246 5257 5267 5278 5288 5299 5310
- 5320 5330 5342 5352 5363 5374 5384 5395
- 5406 5417 5427 5438 5450 5460 5471 5482
- 5493 5504 5515 5526 5537 5548 5559 5571
- 5582 5593 5604 5615 5627 5638 5649 5660
- 5672 5683 5695 5706 5717 5729 5741 5752
- 5763 5775 5786 5798 5810 5822 5833 5845
- 5856 5868 5880 5892 5904 5916 5928 5940
- 5951 5963 5975 5987 5999 6011 6024 6036
- 6048 6060 6073 6085 6097 6109 6122 6134
- 6146 6159 6171 6184 6196 6209 6221 6234
- 6246 6259 6272 6285 6297 6309 6322 6335
- 6348 6361 6374 6387 6400 6413 6426 6439
- 6451 6465 6478 6491 6505 6518 6531 6544
- 6557 6571 6584 6598 6611 6624 6638 6652
- 6666 6679 6693 6706 6720 6734 6747 6762
- 6776 6789 6803 6817 6831 6845 6859 6874
- 6887 6902 6916 6930 6945 6959 6973 6988
- 7002 7017 7031 7046 7061 7075 7090 7104
- 7119 7134 7149 7164 7178 7194 7208 7224
- 7238 7254 7269 7284 7299 7314 7330 7345
- 7361 7376 7391 7407 7422 7438 7454 7470
- 7485 7501 7517 7533 7548 7565 7581 7596
- 7612 7629 7645 7661 7677 7694 7710 7726
- 7743 7760 7776 7793 7809 7826 7843 7860
- 7877 7894 7911 7927 7944 7961 7979 7996
- 8013 8031 8048 8066 8083 8100 8118 8135
- 8153 8171 8189 8207 8225 8243 8261 8279
- 8297 8315 8333 8351 8370 8389 8407 8425
- 8444 8463 8482 8500 8519 8538 8557 8576
- 8595 8615 8633 8653 8673 8692 8711 8731
- 8750 8770 8790 8810 8829 8850 8869 8890
- 8910 8930 8950 8970 8991 9012 9032 9053
- 9073 9094 9116 9136 9157 9178 9200 9221
- 9242 9263 9285 9307 9328 9350 9372 9393
- 9415 9437 9459 9482 9504 9526 9549 9571
- 9594 9617 9640 9663 9686 9709 9732 9755
- 9778 9802 9826 9849 9873 9897 9920 9945
- 9969 9993 10017 10041 10066 10090 10115 10140
- 10165 10190 10215 10240 10265 10291 10316 10342
- 10368 10394 10419 10445 10471 10498 10525 10551
- 10578 10604 10631 10658 10685 10713 10740 10767
- 10795 10822 10850 10879 10907 10934 10963 10991
- 11020 11049 11077 11107 11136 11165 11194 11224
- 11254 11284 11314 11344 11374 11405 11435 11466
- 11496 11527 11558 11590 11621 11653 11685 11717
- 11749 11782 11813 11846 11879 11912 11945 11979
- 12012 12046 12079 12114 12148 12182 12217 12252
- 12287 12321 12357 12392 12428 12464 12500 12536
- 12573 12610 12647 12684 12722 12759 12797 12835
- 12873 12911 12950 12989 13028 13067 13107 13147
- 13187 13227 13268 13309 13350 13392 13433 13475
- 13517 13560 13602 13646 13689 13732 13776 13820
- 13864 13909 13954 14000 14045 14091 14138 14184
- 14231 14278 14325 14373 14421 14470 14519 14568
- 14618 14668 14718 14769 14820 14871 14923 14976
- 15028 15081 15134 15188 15243 15297 15353 15408
- 15464 15520 15577 15634 15692 15751 15809 15869
- 15929 15989 16050 16111 16173 16235 16298 16361
- 16426 16490 16556 16621 16688 16755 16823 16891
- 16960 17029 17099 17170 17242 17315 17387 17461
- 17535 17610 17687 17764 17841 17919 17999 18079
- 18159 18241 18323 18407 18492 18577 18663 18751
- 18839 18928 19019 19110 19203 19297 19392 19488
- 19585 19683 19783 19884 19986 20090 20195 20301
- 20408 20518 20628 20740 20855 20970 21086 21206
- 21326 21448 21572 21698 21826 21956 22088 22222
- 22358 22496 22638 22780 22926 23074 23225 23378
- 23534 23693 23854 24019 24187 24359 24533 24710
- 24893 25078 25266 25460 25658 25859 26065 26276
- 26492 26712 26939 27170 27408 27652 27901 28157
- 28421 28691 28969 29256 29286 29304 29322 29341
- 29360 29379 29399 29419 29440 29462 29483 29506
- 29529 29553 29577 29602 29628 29655 29682 29711
- 29741 29771 29803 29837 29871 29908 29946 29986
- 30028 30073 30120 30171 30225 30284 30348 30417
- 30495 30582 30681 30797 30937 31116 31365 31789
diff --git a/tc-cbq-details.8 b/tc-cbq-details.8
new file mode 100644 (file)
index 0000000..e47da62
--- /dev/null
@@ -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 --git a/tc-cbq.8 b/tc-cbq.8
new file mode 100644 (file)
index 0000000..79fb93b
--- /dev/null
+++ b/tc-cbq.8
@@ -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 --git a/tc-htb.8 b/tc-htb.8
new file mode 100644 (file)
index 0000000..f61b818
--- /dev/null
+++ b/tc-htb.8
@@ -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 --git a/tc-pbfifo.8 b/tc-pbfifo.8
new file mode 100644 (file)
index 0000000..8dda4bb
--- /dev/null
@@ -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 --git a/tc-pfifo_fast.8 b/tc-pfifo_fast.8
new file mode 100644 (file)
index 0000000..43ab166
--- /dev/null
@@ -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 --git a/tc-prio.8 b/tc-prio.8
new file mode 100644 (file)
index 0000000..e942e62
--- /dev/null
+++ b/tc-prio.8
@@ -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 --git a/tc-red.8 b/tc-red.8
new file mode 100644 (file)
index 0000000..d02b411
--- /dev/null
+++ b/tc-red.8
@@ -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 --git a/tc-sfq.8 b/tc-sfq.8
new file mode 100644 (file)
index 0000000..337c795
--- /dev/null
+++ b/tc-sfq.8
@@ -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 --git a/tc-tbf.8 b/tc-tbf.8
new file mode 100644 (file)
index 0000000..3abb238
--- /dev/null
+++ b/tc-tbf.8
@@ -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 --git a/tc.8 b/tc.8
new file mode 100644 (file)
index 0000000..b9b8039
--- /dev/null
+++ b/tc.8
@@ -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 --git a/tc/f_fw.o b/tc/f_fw.o
deleted file mode 100644 (file)
index a3d3798..0000000
Binary files a/tc/f_fw.o and /dev/null differ
diff --git a/tc/f_route.o b/tc/f_route.o
deleted file mode 100644 (file)
index d2dc8ab..0000000
Binary files a/tc/f_route.o and /dev/null differ
diff --git a/tc/f_rsvp.o b/tc/f_rsvp.o
deleted file mode 100644 (file)
index 7223bad..0000000
Binary files a/tc/f_rsvp.o and /dev/null differ
diff --git a/tc/f_tcindex.o b/tc/f_tcindex.o
deleted file mode 100644 (file)
index c76dd38..0000000
Binary files a/tc/f_tcindex.o and /dev/null differ
diff --git a/tc/f_u32.o b/tc/f_u32.o
deleted file mode 100644 (file)
index 25f9e21..0000000
Binary files a/tc/f_u32.o and /dev/null differ
diff --git a/tc/libtc.a b/tc/libtc.a
deleted file mode 100644 (file)
index fc0f818..0000000
Binary files a/tc/libtc.a and /dev/null differ
diff --git a/tc/m_action.o b/tc/m_action.o
deleted file mode 100644 (file)
index c09dc34..0000000
Binary files a/tc/m_action.o and /dev/null differ
diff --git a/tc/m_estimator.o b/tc/m_estimator.o
deleted file mode 100644 (file)
index b64697e..0000000
Binary files a/tc/m_estimator.o and /dev/null differ
diff --git a/tc/m_gact.o b/tc/m_gact.o
deleted file mode 100644 (file)
index 6a26b01..0000000
Binary files a/tc/m_gact.o and /dev/null differ
diff --git a/tc/m_ipt.o b/tc/m_ipt.o
deleted file mode 100644 (file)
index 8ee39ea..0000000
Binary files a/tc/m_ipt.o and /dev/null differ
diff --git a/tc/m_mirred.o b/tc/m_mirred.o
deleted file mode 100644 (file)
index f04a755..0000000
Binary files a/tc/m_mirred.o and /dev/null differ
diff --git a/tc/m_pedit.o b/tc/m_pedit.o
deleted file mode 100644 (file)
index b3f95c8..0000000
Binary files a/tc/m_pedit.o and /dev/null differ
diff --git a/tc/m_police.o b/tc/m_police.o
deleted file mode 100644 (file)
index aa67707..0000000
Binary files a/tc/m_police.o and /dev/null differ
diff --git a/tc/p_icmp.o b/tc/p_icmp.o
deleted file mode 100644 (file)
index 06cd4f4..0000000
Binary files a/tc/p_icmp.o and /dev/null differ
diff --git a/tc/p_ip.o b/tc/p_ip.o
deleted file mode 100644 (file)
index 3479e0b..0000000
Binary files a/tc/p_ip.o and /dev/null differ
diff --git a/tc/p_tcp.o b/tc/p_tcp.o
deleted file mode 100644 (file)
index eecab5e..0000000
Binary files a/tc/p_tcp.o and /dev/null differ
diff --git a/tc/p_udp.o b/tc/p_udp.o
deleted file mode 100644 (file)
index 61232d9..0000000
Binary files a/tc/p_udp.o and /dev/null differ
diff --git a/tc/q_cbq.o b/tc/q_cbq.o
deleted file mode 100644 (file)
index 3f043d0..0000000
Binary files a/tc/q_cbq.o and /dev/null differ
diff --git a/tc/q_dsmark.o b/tc/q_dsmark.o
deleted file mode 100644 (file)
index e2b6575..0000000
Binary files a/tc/q_dsmark.o and /dev/null differ
diff --git a/tc/q_fifo.o b/tc/q_fifo.o
deleted file mode 100644 (file)
index bca57fc..0000000
Binary files a/tc/q_fifo.o and /dev/null differ
diff --git a/tc/q_gred.o b/tc/q_gred.o
deleted file mode 100644 (file)
index cb44aad..0000000
Binary files a/tc/q_gred.o and /dev/null differ
diff --git a/tc/q_hfsc.o b/tc/q_hfsc.o
deleted file mode 100644 (file)
index 7f8a979..0000000
Binary files a/tc/q_hfsc.o and /dev/null differ
diff --git a/tc/q_htb.o b/tc/q_htb.o
deleted file mode 100644 (file)
index e00de5b..0000000
Binary files a/tc/q_htb.o and /dev/null differ
diff --git a/tc/q_ingress.o b/tc/q_ingress.o
deleted file mode 100644 (file)
index 5fb4d37..0000000
Binary files a/tc/q_ingress.o and /dev/null differ
diff --git a/tc/q_netem.so b/tc/q_netem.so
deleted file mode 100755 (executable)
index b312dea..0000000
Binary files a/tc/q_netem.so and /dev/null differ
diff --git a/tc/q_prio.o b/tc/q_prio.o
deleted file mode 100644 (file)
index addc84d..0000000
Binary files a/tc/q_prio.o and /dev/null differ
diff --git a/tc/q_red.o b/tc/q_red.o
deleted file mode 100644 (file)
index a53d29a..0000000
Binary files a/tc/q_red.o and /dev/null differ
diff --git a/tc/q_sfq.o b/tc/q_sfq.o
deleted file mode 100644 (file)
index 021c8c9..0000000
Binary files a/tc/q_sfq.o and /dev/null differ
diff --git a/tc/q_tbf.o b/tc/q_tbf.o
deleted file mode 100644 (file)
index b060ba6..0000000
Binary files a/tc/q_tbf.o and /dev/null differ
diff --git a/tc/tc b/tc/tc
deleted file mode 100755 (executable)
index 0962fc7..0000000
Binary files a/tc/tc and /dev/null differ
diff --git a/tc/tc.o b/tc/tc.o
deleted file mode 100644 (file)
index 86a511c..0000000
Binary files a/tc/tc.o and /dev/null differ
diff --git a/tc/tc_cbq.o b/tc/tc_cbq.o
deleted file mode 100644 (file)
index 660babb..0000000
Binary files a/tc/tc_cbq.o and /dev/null differ
diff --git a/tc/tc_class.o b/tc/tc_class.o
deleted file mode 100644 (file)
index 77d3dc1..0000000
Binary files a/tc/tc_class.o and /dev/null differ
diff --git a/tc/tc_core.o b/tc/tc_core.o
deleted file mode 100644 (file)
index 9b7d80e..0000000
Binary files a/tc/tc_core.o and /dev/null differ
diff --git a/tc/tc_estimator.o b/tc/tc_estimator.o
deleted file mode 100644 (file)
index c397f73..0000000
Binary files a/tc/tc_estimator.o and /dev/null differ
diff --git a/tc/tc_filter.o b/tc/tc_filter.o
deleted file mode 100644 (file)
index 5924f02..0000000
Binary files a/tc/tc_filter.o and /dev/null differ
diff --git a/tc/tc_qdisc.o b/tc/tc_qdisc.o
deleted file mode 100644 (file)
index 6b619ec..0000000
Binary files a/tc/tc_qdisc.o and /dev/null differ
diff --git a/tc/tc_red.o b/tc/tc_red.o
deleted file mode 100644 (file)
index 866ee10..0000000
Binary files a/tc/tc_red.o and /dev/null differ
diff --git a/tc/tc_util.o b/tc/tc_util.o
deleted file mode 100644 (file)
index bfe5a31..0000000
Binary files a/tc/tc_util.o and /dev/null differ
diff --git a/testsuite/tests/std-cbq b/testsuite/tests/std-cbq
deleted file mode 100644 (file)
index bff814b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-$TC qdisc del dev $DEV root >/dev/null 2>&1
-$TC qdisc add dev $DEV root handle 10:0 cbq bandwidth 100Mbit avpkt 1400 mpu 64
-$TC class add dev $DEV parent 10:0  classid 10:12   cbq bandwidth 100mbit rate 100mbit allot 1514 prio 3 maxburst 1 avpkt  500 bounded
-$TC qdisc list dev $DEV
-$TC qdisc del dev $DEV root
-$TC qdisc list dev $DEV
-$TC qdisc add dev $DEV root handle 10:0 cbq bandwidth 100Mbit avpkt 1400 mpu 64
-$TC class add dev $DEV parent 10:0  classid 10:12   cbq bandwidth 100mbit rate 100mbit allot 1514 prio 3 maxburst 1 avpkt  500 bounded
-$TC qdisc del dev $DEV root