From andi@fred.muc.de  Thu Apr 29 15:00:23 1999
Return-Path: <andi@fred.muc.de>
Received: from lacrosse.redhat.com (root@lacrosse.redhat.com [207.175.42.154])
	by devserv.devel.redhat.com (8.8.7/8.8.7) with ESMTP id PAA13690
	for <alan@devserv.devel.redhat.com>; Thu, 29 Apr 1999 15:00:21 -0400
Received: from mail.redhat.com (mail.redhat.com [199.183.24.239])
	by lacrosse.redhat.com (8.8.7/8.8.7) with ESMTP id PAA01811
	for <alan@lacrosse.redhat.com>; Thu, 29 Apr 1999 15:00:17 -0400
Received: from fred.muc.de (noidentity@ns2049.munich.netsurf.de [195.180.232.49])
	by mail.redhat.com (8.8.7/8.8.7) with SMTP id OAA26840
	for <alan@redhat.com>; Thu, 29 Apr 1999 14:59:33 -0400
Received: (qmail 421 invoked by uid 500); 30 Apr 1999 03:00:54 -0000
Message-ID: <19990430050054.45055@fred.muc.de>
Date: Fri, 30 Apr 1999 05:00:54 +0200
From: ak@muc.de
To: alan@redhat.com
Subject: Advanced Routing docs
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary=+HP7ph2BbKc20aGI
X-Mailer: Mutt 0.89.1i
Status: RO


--+HP7ph2BbKc20aGI
Content-Type: text/plain; charset=us-ascii


I attached advanced-routing.tex and a useful paper from Werner about the 
queueing disciplines.

-Andi



--+HP7ph2BbKc20aGI
Content-Type: application/x-tex
Content-Disposition: attachment; filename="advanced-routing.tex"

\documentclass[12pt,a4paper]{article}
\usepackage{}
\textwidth=16cm
\hoffset=-1cm
\sloppy

\begin{document}
\title{Advanced routing mini-HOWTO}
\author{Timur~A.~Bolokhov, timur@tepkom.ru}
\maketitle

This document describes new routing features of 2.1.X development
and coming 2.2.X stable linux kernels. Among them are source--based
routing and Network Address Translation (NAT).

\section{Introduction}

Somewhere in the middle of 2.1 development kernel series
routing code was rewriten by
Alexey Kuznetsov (kuznet@ms2.inr.ac.ru), many new features
like policy(source)--based routing,
Network Address Translation, scheduling etc were added. Networking
is now managed by means of \verb|ip|, \verb|tc| and \verb|rtmon| utilities
from \verb|iproute2| package.
I hope this document will help novices to enter new conception.

\subsection{Regrets}

This document is written by a USER, even some basic notions can
be incorrect. The \verb|ip| utility is very powerfull, as you can see by
its syntax in appendix, only a little part of its possibilities
is described. Hope that you can guess the rest.
No word is said about cooperation with \verb|tc| and about \verb|tc| itself.
No picture yet. Bad language, punctuation, general mistakes.

\subsection{Preliminary reading}

Suppose that you already have some experince with linux routing, or
at least just studied NET-3 HOWTO, IP-Alias, IP-Subnetworking,
IP-Masquerading, Proxy-Arp minis.
Kernel-HOWTO will help you to compile new-featured
kernel.


\subsection{Where to find them}
\begin{itemize}
\item
The \verb|iproute2| package is available in
{\tt ftp://ftp.inr.ac.ru/ip-routing/}
There is a mirror(s), but I couldnot even resolve it in DNS. May be
the situation will change?

\item
Howtos are as usual in \verb|/usr/doc/| or in the nearest
mirror of {\tt sunsite.unc.edu}.

\item
Utility \verb|ipchains| is homed in

{\tt http://www.adelaide.net.au/rustcorp/ipfwchains}.

\item
This document: hope that current version will be somewhere under

{\tt ftp://post.tepkom.ru/pub/Linux/}
\end{itemize}

\subsection{Convention}
Value standing in square brackets
[ ]
is just an option to smth.

\section{Software}
Author of this document is using 2.1.121 kernel with
\verb|glibc-2.0.7|,
\verb|iproute2-ss980827| along with \verb|gated-3.5.9|. Also
\verb|iproute2-glibc2-patch??|
was applied.
This combination experienced
only a week uptime, I couldnot test it longer.
%Once it was
%3C905B who completely hang the router, second it was an administrator
%who decided that black screen is rather a hanging router than a screensaver.


\section{How it was before}

I'll try to remind you in brief routing conception from 2.0.X series
kernels. When IP packet hits router's interface kernel, at first, applies
to it rules from input firewall chain. Then if packet survives and in case
that forwarding is enabled
(\verb|/proc/sys/net/ipv4/ip_forward| is nonzero) it
is being passed to another interface according to the routing table and
forward firewall chain. Or just finish its way if its destination is one
of the routers' interfaces. Normally routing table contain description of
paths to all possible IP destinations. The latest are gathered in
groups ---
networks, each of them is uniquelly described by network adress (the first
address in the group) and netmask (masklengh), which characterizes the
number of adresses in the group
($ 2^{32 - {\rm masklen}}$ is the right number).
Routing table has two main columns:
\begin{verbatim}
DESTINATION:            HOWTO_REACH_IT
\end{verbatim}

Indeed, look at the example:
\begin{verbatim}
router># route -n
Kernel IP routing table
Destination   Gateway      Genmask         Flags Metric Ref Use Iface
192.168.1.32  0.0.0.0      255.255.255.224 U     0      0    12 eth1:1
192.168.0.0   0.0.0.0      255.255.255.0   U     0      0    34 eth0
192.168.2.0   0.0.0.0      255.255.255.0   U     0      0     3 eth1
192.168.3.0   192.168.0.3  255.255.255.0   UG    1      0     8 eth0
127.0.0.0     0.0.0.0      255.0.0.0       U     0      0     1 lo
0.0.0.0       192.168.0.4  0.0.0.0         UG    1      0     3 eth0
\end{verbatim}
We have two network devices, three interfaces (without loopback) ---
{\bf eth0}, {\bf eth1} and an alias {\bf eth1:1},
three networks connected directly, so
we have 0.0.0.0 as gateway, one network connected behind the gateway
192.168.0.3 and a wise router 192.168.0.4 which knows how to forward
packets to the rest part of the world. Routing table is scanned by kernel
from top to bottom, when destination is found within some network
(or there is special "host" entry for it) packet is forwarded to
the specified gateway via corresponding interface.

Note that networks are sorted strongly in the direction of decreasing
of netmask (masklen), so that if a smaller network within a bigger one
has its own gateway then it will appear higher in the table and have its
chance to be routed correctly.

Now I want to remind you how to make such a table.
Here is some base syntax:
\begin{verbatim}
ifconfig DEVICE [ADDRESS] [netmask MASK] [broadcast ADDR] [up,down]
route {add,del,flush} [-net,-host] [NETWORK] [netmask MASK] \
>[gw GATEWAY] [dev DEVICE]
\end{verbatim}
and the real commands:
\begin{verbatim}
router># ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255 up
router># ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
router># ifconfig eth1 192.168.2.1 up
router># ifconfig eth1:1 192.168.1.35 netmask 255.255.255.224 \
> broadcast 192.168.1.63 up
router># route add -net 127.0.0.0 dev lo
router># route add -net 192.168.0.0 netmask 255.255.255.0 dev eth0
router># route add -net 192.168.2.0 dev eth1
router># route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.0.3
router># route add -net 192.168.1.32 netmask 255.255.255.224 dev eth1:1
router># route add default gw 192.168.0.4
\end{verbatim}


\section{What it is now}

Short description of a new routing mechanisms you can find in
\verb|linux/Documentation/Policy-routing.txt|.
Below I'll try give it in more detail.

Now we have not only one table (string) of correspondencies
\begin{verbatim}
DESTINATION:            HOWTO_REACH_IT
\end{verbatim}
but a set of such a tables (which are called classes in the
document referenced above), each one being applied to the packets
satisfying certain conditions. These conditions are set by means
of \verb|ip rule| syntaxis of \verb|ip| utility, while routing tables are
filled by means of \verb|ip route|. There are three built-in tables
(classes): local, main and default.
%which exist even before network interfaces are set up.
%??? this need investigation
Here we can see how they are bound by the rules:
\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
\end{verbatim}
Rules are scanned by the kernel in order of their preferense (the
number before semicolon), so in this initial setup for any arrived
packet path to destination will be looked up, at first, in table local and
if it's not found --- in tables main and default.

When an interface has been configured with \verb|ifconfig| (or \verb|ip link|
and \verb|ip addr|) host entries of its ip and broadcast addresses appear
in the table local.
%(this is the right place for them --- they cannot
%be reached with no other way).
Route to its attached network appears in the
table main. All this is done automatically, you should not type
no command now.
% ANK uses other terminology here.
To check up what do we have in table \verb|N| just type
\verb|ip route list table N|.

Utilities \verb|ifconfig| and \verb|route| from net-tools are still available
under 2.1.X,
so set up from the previous section can readily be done as above
(but without dealing with attached networks).
Another variant is to use \verb|ip|:
\begin{verbatim}
router># ip link set eth0 up
router># ip addr add 192.168.0.1/24 broadcast 192.168.0.255 \
> label eth0 dev eth0
router># ip link set eth1 up
router># ip addr add 192.168.2.1/24 broadcast 192.168.2.255 \
> label eth1 dev eth1
router># ip addr add 192.168.1.35/27 broadcast 192.168.1.63 \
> label eth1:1 dev eth1
router># ip route add 192.168.3.0/24 via 192.168.0.3 table main
router># ip route add 0/0 via 192.168.0.4 table main
\end{verbatim}
Static and default routes from this example may have been also put to
any other table which is looked up after table main
(with preference greater than 32766). For example:

\begin{verbatim}
router># ip route add 192.168.3.0/24 via 192.168.0.3 table 1
router># ip route add 0/0 via 192.168.0.4 table 2
router># ip rule add [from 0/0] table 1 pref 32800
router># ip rule add [from 0/0] table 2 pref 32810
\end{verbatim}
so that \verb|ip rule| gives:

\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32800:  from all lookup 1
32810:  from all lookup 2
\end{verbatim}
But we won't consider this variant below.

So what's the difference of the new routing scheme from the previous
one? The main is that ip packets now can be sorted with regards to
their source address, TOS field, and may be in the future --- to special
marks put on them by external classifier (like \verb|ipchains|).
Suppose that we want in our example for the packets [with TOS 0x10
(minimum delay)] coming from 192.168.1.32/27 to be routed thruogh
default gateway 192.168.0.5, then we type (after our interfaces are up):

\begin{verbatim}
router># ip route add 192.168.3.0/24 via 192.168.0.3 table main
router># ip route add 0/0 via 192.168.0.5 table 3
router># ip route add 0/0 via 192.168.0.4 table 4
router># ip rule add from 192.168.1.32/27 [tos 0x10] table 3 pref 32900
router># ip rule add from 0/0 table 4 pref 32910
\end{verbatim}
Rules now looks like this:

\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32900:  from 192.168.1.32/27 [tos 0x10] lookup 3
32910:  from all lookup 4
\end{verbatim}

Similar setup may be usefull for organizations connected
to the net through two or more ISPs via one linux gateway (of course,
we shouldn't check here TOS field --- just route packets from network
assigned by the second ISP to its gateway or ppp interface). It is
even possible to make a script notice
a problems in one link and redirect (in combination with NAT)
critical outgoing connections to another ISPs link. This won't work
for incoming calls as long as you do not change your DNS entries
accordingly or have multihomed servers.

Here is a syntax for \verb|ipchains| to set the TOS field:

\begin{verbatim}
ipchains -A input -p PROTO -s SOURCE [port] -d DEST [port] -t 0x01 0x10
\end{verbatim}

\section{NATs}
You should be extremely careful playing with NAT, even in a network
with complex topology, routed by routing protocols or simply connected
to other network through more than one router.

Translation of a packet's destination address is always done in
routing table local. The syntax is the following:

\begin{verbatim}
ip route add nat WHAT/MASKLEN via WHERE table local
\end{verbatim}
So to translate all packets coming to 192.168.1.50 in the packets
destinned to 192.168.2.25 you type:

\begin{verbatim}
router># ip route add nat 192.168.1.50 via 192.168.2.25 table local
\end{verbatim}
And to translate whole subnet 192.168.1.40/29 into 192.168.2.48/29
command is
\begin{verbatim}
router># ip route add nat 192.168.1.40/29 via 192.168.2.48 table local
\end{verbatim}

Translation of source addresses should be set by means of rules:
\begin{verbatim}
ip rule add from REAL_SOURCE/MASKLEN nat PSEUDO_SOURCE table TABLEID
\end{verbatim}

According to the routing conception ip packets comimg from
{\tt REAL\_SOURCE}
will translate their source addresses to
{\tt PSEUDO\_SOURCE} and routed
according to the table
{\tt TABLEID}. The translation will be valid only
for the packets whos destination is in this table.

Let's illustrate it. Suppose that in our example 192.168.2.0/24
is an address space from ISP with gateway 192.168.0.4 and
192.168.1.32/27 is from ISP with gateway 192.168.0.5.
We suddenly
want to relink hosts in subnetwork 192.168.2.48/29 to another ISP.
We have wisely reserved a spare subnet 192.168.1.40/29 for this.
But we want no translation when 192.168.2.48/29 comes to local
nets, especially to 192.168.1.0.
Next commands provide our needs:
\begin{verbatim}
router># ip route add nat 192.168.1.40/29 via 192.168.2.48 table local
router># ip rule add from 192.168.2.48/29 nat 192.168.1.40 table 3 pref 32820
\end{verbatim}
(Remind that table 3 contains default gw 192.168.0.5). Our setup
now is:
\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32820:  from 192.168.2.48/29 nat 192.168.1.40 lookup 3
32900:  from 192.168.1.32/27 lookup 3
32910:  from all lookup 4
\end{verbatim}

Want the same translation when going to 192.168.1.0 too? Ok, just type
\begin{verbatim}
router># ip rule add from 192.168.2.48/29 nat 192.168.1.40 table 5
router># ip rule add 192.168.1.0/24 via 192.168.0.3 table 5
\end{verbatim}
Then you'll get
\begin{verbatim}
router># ip rule
0:      from all lookup local
32765:  from 192.168.2.48/29 nat 192.168.1.40 lookup 5
32766:  from all lookup main
32767:  from all lookup default
32820:  from 192.168.2.48/29 nat 192.168.1.40 lookup 3
32900:  from 192.168.1.32/27 lookup 3
32910:  from all lookup 4
\end{verbatim}

Note that you should allways think of where your rule appears
in the list, i.e. control its preference. Otherwise result may be
very confusing. Guess why we couldnot just put the route to
192.168.1.0/24 into table 3 with
\begin{verbatim}
router># ip rule add 192.168.1.0/24 via 192.168.0.3 table 5
\end{verbatim}
instead of last two \verb|ip rule add ...| and \verb|ip route add ...|?

Hope that those imaginary examples will help to organize your real system.

\section*{Appendix}
%\begin{appendix}
%\appendixname{Appendix}
Full syntax of \verb|ip| utility is gathered here

\subsection*{ip}
\begin{verbatim}
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
where  OBJECT := { link | addr | route | rule | neigh | tunnel }
       OPTIONS := { -s[tatistics] | -f[amily] { inet | inet6 }}
\end{verbatim}


\subsection*{ip link}
\begin{verbatim}
Usage: ip link set DEVICE { up | down | arp { on | off } |
	                     multicast { on | off } | txqueuelen PACKETS |
	                     name NEWNAME }
       ip link show [ DEVICE ]
\end{verbatim}


\subsection*{ip addr}
\begin{verbatim}
Usage: ip addr [ add | del ] IFADDR dev STRING
       ip addr show [ dev STRING ] [ ipv4 | ipv6 | link | all ] [txqueuelen]
IFADDR := PREFIX [ local ADDR ]
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE ]
SCOPE := [ host | link | global | NUMBER ]
\end{verbatim}


\subsection*{ip route}
\begin{verbatim}
Usage: ip route list SELECTOR
       ip route { change | del | add | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ type TYPE ] [ scope SCOPE ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ rtt NUMBER ] [ window NUMBER ]
           [ flowid CLASSID ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
\end{verbatim}


\subsection*{ip rule}
\begin{verbatim}
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ]
            [ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
          [ prohibit | reject | unreachable ]
          [ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
\end{verbatim}


\subsection*{ip neigh}
\begin{verbatim}
Usage: ip neigh { add | del } { ADDR [ lladdr LLADDR ]
          [ nud { permanent | noarp | stale | reachable } ]
          | proxy ADDR } [ dev DEVICE ]
       ip neigh show [ ipv4 | ipv6 | all ]
\end{verbatim}


\subsection*{ip tunnel}
\begin{verbatim}
Usage: ip tunnel { add | change | del | show } [ NAME ]
          [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]
          [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
          [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev PHYS_DEV ]

Where: NAME := STRING
       ADDR := { IP_ADDRESS | any }
       TOS  := { NUMBER | inherit }
       TTL  := { 1..255 | inherit }
       KEY  := { DOTTED_QUAD | NUMBER }
\end{verbatim}

%\end{appendix}

\end{document}

--+HP7ph2BbKc20aGI
Content-Type: application/postscript
Content-Disposition: attachment; filename="tcio-current.ps"

%!PS-Adobe-2.0
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
%%Title: tc.dvi
%%Pages: 12
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSCommandLine: dvips -o tc.ps tc.dvi
%DVIPSParameters: dpi=600, compressed
%DVIPSSource:  TeX output 1998.11.30:1445
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end

%%EndProcSet
%%BeginProcSet: special.pro
%!
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale true def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end

%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (tc.dvi)
@start
%DVIPSBitmapFont: Fa cmtt12 14.4 6
/Fa 6 117 df<90380FFFC0017F13F848B512FE486E7E4815E04881823A1FFC007FFC49
EB0FFE1507ED01FFA26C486D7F6C48147FC97F163FA60203B5FC147F0103B6FC131F137F
90B7FC0003ECC03F48EBF800481380D81FFCC7FCEA3FF05B485A5B12FF90C8FCA56D147F
127F6D14FF6C6C130301F8010F7F6CB490B612F86C90B7FC18FC6C15CF000115076CDAFC
0313F8013F9038F0007F010790C9FC363679B43E>97 D<913807FFF0023F13FE49B61280
010715C04915E04915F0137F903AFFFC003FF84801E0131F48138091C7FC485A4848EC0F
F049EC07E0484891C7FC5B123F5B127F5BA312FF90CAFCA97F127FA27F123F7F17FC6C6C
EC01FE7F6C7E6C6C14036DEC07FC6C01C0130F6C01F0EB1FF86C01FEEBFFF06DB612E06D
15C0010F15806D1500010114FC6D6C13F0020790C7FC2F3678B43E>99
D<383FFF805AB57EA37E7EEA003FAEED07FC92383FFF8092B512E002C38002C78002CF80
02DF809138FFF80F9238C003FFED00014A7F4A815C177F5CA25CA35CB3A8003FB5D8C07F
B51280486EB612C0B66C15E0A36C4A15C06C4A6C14803B497FC83E>104
D<DA0FC0137E3C7FF07FF003FF8000FF9026FFFC0713E001FBD9FE1F7F90B55B6F487FA2
6C903AF07FFF83FC00039039C03FFE01028013FC020001F87F031F1300495CA2495CA449
5CB3A93D7FFFC0FFFE07FFF0B500E16D4813F802E35CA302E1806C01C0496C13F03D3480
B33E>109 D<903901FFF00F011F9038FE1F8090B612BF000315FF5A5A5A393FFE003F01
F01307D87FC0130190C8FC5A48157FA47EEE3F00D87FC091C7FC13F0EA3FFE381FFFF06C
EBFFC06C14FE6C6E7EC615E0013F14F8010780D9003F7F02007F03071380030013C0003E
ED3FE0007F151F48150F17F06D1407A37FA26D140F6D15E0161F01FCEC3FC06D14FF9026
FFC00F138091B612005E485D013F5C6D14E0D8FC0714802778007FF8C7FC2C3677B43E>
115 D<147C14FC497EAD003FB712FC5AB87EA36C5EA2260001FEC9FCB3A6173FA2EF7F80
A76E14FF6D16006F5A9238C007FE91387FF01F92B55A6E5C6E5C6E5C6E1480020149C7FC
9138003FF031437DC13E>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fb cmmi10 10 1
/Fb 1 59 df<121C127FEAFF80A5EA7F00121C0909798817>58 D
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fc cmti10 10 49
/Fc 49 124 df<04FFEB03F003039038E00FFC923A0FC0F01F1E923A3F00783E0F923A7E
01F87C3FDB7C03EBFC7F03FC14F8DA01F813F905F1137EDC01E1133C913B03F00003F000
A314074B130760A3140F4B130F60A3010FB812C0A3903C001F80001F8000A3023F143F92
C790C7FCA44A5C027E147EA402FE14FE4A5CA413014A13015FA313034A13035FA313074A
495AA44948495AA44948495AA3001CD9038090C8FC007E90380FC03F013E143E00FE011F
5B133C017C5C3AF8780F01E0D878F0EB07C0273FE003FFC9FC390F8000FC404C82BA33>
11 D<EE3FFC4BB51280923907E007C092391F8001E0DB3F0013F0037E13034B1307A24A
5A18E04A48EB038094C7FCA314075DA4140F5DA3010FB7FCA25F903A001F80007EA217FE
023F5C92C7FCA216015F5C147E16035FA214FE4A13075FA30101140F5F4AECC1C0A2161F
1783010316805CA2EF870013074A5CEE0F8EEE079EEE03FC010FEC00F04A91C7FCA35C13
1FA2001C90CAFC127E5BEAFE3E133C137CEAF878EA78F0EA3FE0EA0F80344C82BA2F>I<
150C151C153815F0EC01E0EC03C0EC0780EC0F00141E5C147C5C5C495A1303495A5C130F
49C7FCA2133EA25BA25BA2485AA212035B12075BA2120F5BA2121FA290C8FCA25AA2123E
A2127EA2127CA412FC5AAD1278A57EA3121C121EA2120E7EA26C7E6C7EA212001E5274BD
22>40 D<140C140E80EC0380A2EC01C015E0A2140015F0A21578A4157C153CAB157CA715
FCA215F8A21401A215F0A21403A215E0A21407A215C0140F1580A2141F1500A2143EA25C
A25CA2495AA2495A5C1307495A91C7FC5B133E133C5B5B485A12035B48C8FC120E5A1278
5A12C01E527FBD22>I<387FFFF8A2B5FCA214F0150579941E>45
D<15181538157815F0140114031407EC0FE0141F147FEB03FF90383FEFC0148FEB1C1F13
001580A2143FA21500A25CA2147EA214FEA25CA21301A25CA21303A25CA21307A25CA213
0FA25CA2131FA25CA2133FA291C7FC497EB61280A31D3877B72A>49
D<16E0ED01F01503A3150716E0A3150F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D
14015D14035D14075D140F5D141F92C7FC143EA25CECF81C153E903801F07EEB03E014C0
90380780FE130F49485A133EEB7C01137801F05BEA01E03803C003EA0FFE391FFFC3F048
13FB267C01FF13403AF0003FFFE000601307C71400EC0FE05DA3141F5DA3143F92C7FCA4
143E141C24487DB72A>52 D<157F913803FFC0020F13E0EC3F8191387E00F002F8137090
3903F003F0903807E007EB0FC0EB1F80020013E04914C0017E90C7FC13FE5B485AA21203
485AA2380FE07E9038E3FF809038E783E0391FCE01F09038DC00F813F84848137C5B4913
7EA2485AA290C7FC15FE5A5AA214015D5AA214035DA348495A5D140F5D4A5A6C49C7FC12
7C147C6C485A6C485A6CB45A6C1380D801FCC8FC243A76B72A>54
D<133C137E13FF5AA313FE13FCEA00701300B2120EEA3F80127F12FFA31300127E123C10
2477A319>58 D<EE01C01603A21607160FA2161F83163FA2167F16FF16EF150116CFED03
8FA2ED070FA2150E151E151C1538A203707FA2EDE007A2EC01C014031580EC0700A2140E
A25CA25C027FB5FCA291B6FC9139E00007F849481303A2495A130791C7FC5B130E5BA25B
1378137013F0EA03F8486C4A7EB56C48B512F0A3343C7BBB3E>65
D<0103B612FEEFFFC018F0903B0007F8000FF84BEB03FCEF00FE020F157FF03F804B141F
19C0021F150F19E05D1807143F19F05DA2147FA292C8FCA25C180F5CA2130119E04A151F
A2130319C04A153FA201071780187F4A1600A2010F16FEA24A4A5A60011F15034D5A4A5D
4D5A013F4B5A173F4A4AC7FC17FC017FEC03F84C5A91C7EA1FC04949B45A007F90B548C8
FCB712F016803C397CB83F>68 D<0107B8FCA3903A000FF000034BEB007F183E141F181E
5DA2143FA25D181C147FA29238000380A24A130718004A91C7FC5E13015E4A133E167E49
B512FEA25EECF8000107147C163C4A1338A2010F147818E04A13701701011F16C016004A
14031880013F150718004A5CA2017F151E173E91C8123C177C4915FC4C5A4914070001ED
7FF0B8FCA25F38397BB838>I<0107B712FEA3903A000FF000074B1300187C021F153CA2
5DA2143FA25D1838147FA292C8FCEE03804A130718004A91C7FCA201015CA24A131E163E
010314FE91B5FC5EA2903807F800167C4A1378A2130FA24A1370A2011F14F0A24A90C8FC
A2133FA25CA2137FA291CAFCA25BA25B487EB6FCA337397BB836>I<0103B5D8F80FB512
E0A390260007F8C7381FE0004B5DA2020F153F615DA2021F157F96C7FC5DA2023F5D605D
A2027F14016092C7FCA24A1403605CA249B7FC60A202FCC712070103150F605CA2010715
1F605CA2010F153F605CA2011F157F95C8FC5CA2013F5D5F5CA2017F14015F91C7FC4914
03007FD9FE01B512F8B55BA243397CB83E>72 D<0103B512F8A390390007F8005DA2140F
A25DA2141FA25DA2143FA25DA2147FA292C7FCA25CA25CA21301A25CA21303A25CA21307
A25CA2130FA25CA2131FA25CA2133FA25CA2137FA291C8FC497EB6FCA25C25397CB820>
I<0107B512FCA25E9026000FF8C7FC5D5D141FA25DA2143FA25DA2147FA292C8FCA25CA2
5CA21301A25CA21303A25CA21307A25CA2130F170C4A141CA2011F153C17384A1478A201
3F157017F04A14E01601017F140317C091C71207160F49EC1F80163F4914FF0001020713
00B8FCA25E2E397BB834>76 D<902607FFF8923807FFF0614F13E0D9000FEFF0004F5AA2
021F167FF1EFC0141DDA1CFCEC01CF023C16DF9538039F800238ED071FA20278ED0E3F97
C7FC0270151CA202F04B5AF0707E14E0037E14E0010117FE4D485A02C0EC0380A20103ED
0701610280140EA20107ED1C0305385B14006F137049160705E05B010EEC01C0A2011E91
3803800F61011CEC0700A2013C020E131F4C5C1338ED1FB80178163F04F091C8FC01705C
A201F04A5B187E00015DD807F816FEB500C09039007FFFFC151E150E4C397AB84A>I<90
2603FFF891B512E0A281D90007923807F8006F6E5A61020F5E81DA0E7F5DA2021E6D1307
033F92C7FC141C82DA3C1F5C70130EEC380FA202786D131E0307141C147082DAF003143C
70133814E0150101016E1378030014705C8201036E13F0604A1480163F010715C1041F5B
91C7FC17E149EC0FE360010E15F31607011E15FF95C8FC011C80A2013C805F1338160013
785F01F8157CEA03FC267FFFE0143CB51538A243397CB83E>I<0107B612F817FF188090
3B000FF0003FE04BEB0FF0EF03F8141FEF01FC5DA2023F15FEA25DA2147FEF03FC92C7FC
A24A15F817074A15F0EF0FE01301EF1FC04AEC3F80EFFE0001034A5AEE0FF091B612C04C
C7FCD907F8C9FCA25CA2130FA25CA2131FA25CA2133FA25CA2137FA291CAFCA25BA25B12
01B512FCA337397BB838>80 D<ED03FE92383FFFC09238FC07F0913903E001F891390FC0
007C023FC77E027E804A1580D901F0EC0FC013074948EC07E0495A4A15F049C8FC491503
01FE16F8485AA2485AA2485AA2120F491507121FA2485AA34848ED0FF0A448C9EA1FE0A3
EF3FC0A21880177F4817005F5F16015F007F4B5A5F91380F800791393FE00FE06C903970
601FC0902680E0305B261F81C049C7FC913880187ED80FC35C3A07E30019F00003EC1FE0
D801FB14806CB46C48C8FC90263F81FC13186DB45A01010138133890C7003C1330177017
F05FED3E03ED3F07EEFFC05FA294C7FC5E6F5A6F5AED07E0354B74BA40>I<0103B612F0
17FEEFFF80903B0007F8003FC04BEB0FF01707020FEC03F8EF01FC5DA2021F15FEA25DA2
143FEF03FC5DA2027FEC07F818F092C7120F18E04AEC1FC0EF3F004A14FEEE01F80101EC
0FE091B6128004FCC7FC9138FC003F0103EC0F80834A6D7E8301071403A25C83010F1407
5F5CA2011F140FA25CA2133F161F4AECE007A2017F160F180E91C7FC49020F131C007F01
FE153CB5913807F078040313F0CAEAFFE0EF3F80383B7CB83D>I<92383FC00E913901FF
F01C020713FC91391FC07E3C91393F001F7C027CEB0FF84A130749481303495A4948EB01
F0A2495AA2011F15E091C7FCA34915C0A36E90C7FCA2806D7E14FCECFF806D13F015FE6D
6D7E6D14E0010080023F7F14079138007FFC150F15031501A21500A2167C120EA3001E15
FC5EA3003E4A5AA24B5AA2007F4A5A4B5A6D49C7FC6D133ED8F9F013FC39F8FC03F839F0
7FFFE0D8E01F138026C003FCC8FC2F3D7ABA2F>I<0007B812E0A25AD9F800EB001F01C0
49EB07C0485AD900011403121E001C5C003C17801403123800785C00701607140700F017
00485CA2140FC792C7FC5DA2141FA25DA2143FA25DA2147FA292C9FCA25CA25CA21301A2
5CA21303A25CA21307A25CA2130FA25CEB3FF0007FB512F8B6FCA2333971B83B>I<003F
B539800FFFFEA326007F80C7EA7F8091C8EA3F00173E49153CA2491538A2000116781770
5BA2000316F05F5BA2000715015F5BA2000F15035F5BA2001F150794C7FC5BA2003F5D16
0E5BA2007F151E161C90C8FCA2163C4815385A16781670A216F04B5A5E1503007E4A5A4B
C8FC150E6C143E6C6C5B15F0390FC003E03907F01FC00001B5C9FC38007FFCEB1FE0373B
70B83E>I<B500F8903803FFFEA218FCD803FEC8EA7FC049ED3F000001163E173C17385F
A25F16015F6D4A5AA200004BC7FC5E160E5EA25EA25E5EA26D495A7F4B5A150793C8FC15
0EA25D153C15385D1480013F5B14815DEC8380A20287C9FCA2148E149E149C14F8A26D5A
A25C5CA25CA291CAFC131EA2373B6FB83E>I<14F8EB07FE90381F871C90383E03FE137C
EBF801120148486C5A485A120FEBC001001F5CA2EA3F801403007F5C1300A21407485C5A
A2140F5D48ECC1C0A2141F15831680143F1587007C017F1300ECFF076C485B9038038F8E
391F0F079E3907FE03FC3901F000F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE
5BA312015BA312035BA31207EBE0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013
E0D81FC013F0A21380A2123F1300A214075A127EA2140F12FE4814E0A2141F15C05AEC3F
80A215005C147E5C387801F8007C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C
3B77B926>I<147F903803FFC090380FC1E090381F0070017E13784913383901F801F838
03F003120713E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA31530153815
78007C14F0007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D26
77A426>I<ED01F815FFA3150316F0A21507A216E0A2150FA216C0A2151FA21680A2153F
A202F81300EB07FE90381F877F90383E03FF017C5BEBF80112013803F00048485B120FEB
C001121F5DEA3F801403127F01005BA214075A485CA2140FA248ECC1C0A2141F15C3ED83
80143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000
F0253B77B92A>I<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A
120F4913F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA5
5AA21530007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803
FFE0C690C7FC1D2677A426>I<ED07C0ED1FF0ED3E38ED7C3CEDF8FC15F9140115F10203
13F8EDF0F0160014075DA4140F5DA4141F5D010FB512C05B16809039003F800092C7FCA4
5C147EA414FE5CA413015CA413035CA413075CA4130F5CA3131F5CA391C8FC5B121CEA7E
3EA2EAFE3C137C1378EAF8F01278EA3FC0EA0F80264C82BA19>I<EC07C0EC3FF09138FC
38E0903901F01FF0EB03E0903807C00FEB0F80011F1307D93F0013E05B017E130F13FE49
14C01201151F1203491480A2153F1207491400A25DA249137EA215FEA25D000313011403
14076C6C485A0000131FEB787BEB3FF390380FC3F0EB00031407A25DA2140F5D121C007E
131F5D00FE49C7FC147E5C387801F8387C07E0381FFF80D803FEC8FC24367CA426>I<EB
03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91C8FCA35B90387E07F0EC1FFCEC78
3E9038FFE01F02C01380EC800F1400485A16C05B49EB1F8012035BA2153F000715005BA2
5D000F147E5B15FE5D121FD98001131C15F8163C003F01031338010013F0A216704814E0
007E15F016E0EDE1C000FE903801E38048903800FF000038143C263B7BB92A>I<EB01C0
EB07E014F0130F14E01307EB038090C7FCAB13F0EA03FCEA071EEA0E1F121CA212385B12
70A25BEAF07E12E013FEC65AA212015B1203A25B12075BA2000F13E013C013C1001F13C0
1381A2EB83801303EB0700A2130E6C5AEA07F8EA01E0143879B619>I<150E153F157FA3
157E151C1500ABEC1F80EC7FC0ECF1F0EB01C090380380F813071401130F130E131EEB1C
03133C013813F0A2EB0007A215E0A2140FA215C0A2141FA21580A2143FA21500A25CA214
7EA214FEA25CA21301A25CA213035C121C387E07E0A238FE0FC05C49C7FCEAF83EEA787C
EA3FF0EA0FC0204883B619>I<EB03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91
C8FCA35B017EEB0F80ED3FE015F09039FE01C1F09038FC0387EC0707140E0001011C13E0
EBF83891383003800270C7FC00035BEBF1C0EBF38001FFC8FCEA07FC7FEBFFC0EBE7F838
0FE1FCEBC07E147F80001F809039801F81C0A21583003F013F138001001303A215074815
00007E133EEC1E0E151E00FE6D5A48EB07F80038EB01E0243B7BB926>I<EB0FC0EA07FF
A3EA001F1480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A2
5BA2120FA25BA2121FA25BA2123FA290C7FCA25AA2EA7E0EA212FE131EEAFC1CA2133C13
3812F81378EA7870EA7CE0121FEA0F80123B79B915>I<D801E001FEEB07F03C07F803FF
801FFC3C0E3C0F07C0783E3C1E3E3C03E1E01F261C1F78D9F3C013803C383FF001F7800F
02E01400007801C013FE007018C002805B4A4848EB1F80EAF07FD8E07E5CA20000020714
3F01FE1700495CA2030F5C0001177E495C18FE031F5C120349DA8001131C18F8033F153C
00070403133849020013F0A24B1570000F17E049017E15F019E003FEECE1C0001FEE01E3
4949903800FF000007C70038143C3E2679A444>I<D801E013FE3A07F803FF803A0E3C0F
07C03A1E3E3C03E0261C1F787F39383FF00114E0007813C000708114804A485AEAF07FEA
E07EA20000140701FE5C5BA2150F00015D5B151F5E12034990383F838016031607000702
7F130049137EA2160E000F147C49141E161C5E001FEC3C7849EB1FE00007C7EA07802926
79A42F>I<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E00
07143F5B120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC
07F015E0140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7
FC202677A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787F
C00170497EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA2
4A1400A2010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70
FC90387E3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A
>I<ECF803903807FE0790381F871F90383E03BF017C13FEEBF80112013803F000484813
FC120F5B001F130115F8EA3F80A2007F1303010013F0A34813074814E0A3140F4814C0A3
141F1580143FA2007C137FECFF006C5AEB03BF381F0F7F3807FE7EEA01F0C7FC14FE5CA3
13015CA313035C130748B512C0A3203577A426>I<3903C003F0390FF01FFC391E783C0F
381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FCEAE0FE
5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E212679A423
>I<14FE903807FF8090380F83C090383E00E04913F00178137001F813F00001130313F0
A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C01300143F141F
140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB45AD801FEC7
FC1C267AA422>I<EB0380EB07C0130FA4131F1480A3133F1400A35B137E007FB5FCA2B6
FC3800FC00A312015BA312035BA312075BA3120F5BA3121FEB801CA2143C003F1338EB00
78147014F014E0EB01C0EA3E03381F0780380F0F00EA07FCEA01F0183579B31C>I<13F8
D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C01270013F13
1F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE120349EBFC0E
A20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A00F83C78E0
90393FF03FC090390FC00F00272679A42D>I<01F0130ED803FC133FD8071EEB7F80EA0E
1F121C123C0038143F49131F0070140FA25BD8F07E140000E08013FEC6485B150E12015B
151E0003141C5BA2153C000714385B5DA35DA24A5A140300035C6D48C7FC0001130E3800
F83CEB7FF8EB0FC0212679A426>I<01F01507D803FC903903801F80D8071E903907C03F
C0D80E1F130F121C123C0038021F131F49EC800F00701607A249133FD8F07E168000E0ED
000313FEC64849130718000001147E5B03FE5B0003160E495BA2171E00070101141C01E0
5B173C1738A217781770020314F05F0003010713016D486C485A000190391E7C07802800
FC3C3E0FC7FC90393FF81FFE90390FE003F0322679A437>I<B712FCA2260279962A>123
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmsy10 10 2
/Fd 2 16 df<007FB81280B912C0A26C17803204799641>0 D<EB0FE0EB7FFC497E0003
EBFF804814C04814E04814F04814F8A24814FCA3B612FEA86C14FCA36C14F8A26C14F06C
14E06C14C06C1480C6EBFE006D5AEB0FE01F207BA42A>15 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fe cmtt10 10 60
/Fe 60 123 df<EB0380497EA60020140800F8143E00FE14FE00FF13C1EBC7C7EBE7CF00
3FB512F8000F14E0000314806C140038007FFCA248B5FC481480000F14E0003F14F839FF
E7CFFEEBC7C7EB07C100FE13C000F8143E0020140800001400A66D5A1F247AAA2C>42
D<007FB6FCB71280A46C150021067B9B2C>45 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA
3F80EA1F000B0B708A2C>I<1507ED0F80151FA2153F16005D157E15FE5D14015D14035D
A214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C13075C130F5C131F
5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B123F90C9FC5A12
7E12FE5AA25A127821417BB92C>I<EB03F8EB0FFE90383FFF80497F90B57E3901FE0FF0
3903F803F848486C7EEBE0004848137EA248487FA248C7EA1F80A2003E140F007E15C0A3
007C140700FC15E0AC6C140F007E15C0A46CEC1F80A36C6CEB3F00A26C6C137E6D13FE00
075CEBF0016C6C485A3901FE0FF06CB55A6D5B6D5BD90FFEC7FCEB03F823357CB32C>I<
1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512
E0B612F0A36C14E01C3477B32C>I<EB0FF890387FFF8048B512E00007804814FC391FF8
0FFE393FE001FF903880007F48C7EA3F80007E141F00FE15C0150F6C15E01507A3127E12
3CC8FCA2150F16C0151F1680153F16005D15FE4A5A14034A5A4A5A4A5A4A5AECFF804948
C7FC495A495A495AEB3FE0EB7F8049C8FC485A4848EB03C04848EB07E0EA1FE0485A48B6
FCB7FCA36C15C023347CB32C>I<EB0FFC90387FFF8048B512E0000714F84880391FF807
FEEBC0004848137F6D7F1680151FA26C5A6CC7FCC8FC153F16005D15FE14014A5AEC1FF8
90381FFFF0495BA215F86D7F90380007FEEC00FF81ED3F80ED1FC0150FA216E01507A212
3C127EB4FC150F16C0A248141F007FEC3F806DEB7F006C6C5B391FF807FE6CB55A6C5C6C
14E0C66C1380D90FFCC7FC23357CB32C>I<EC07F04A7E141F143FA2147EA214FCEB01F8
A2EB03F0EB07E0A2EB0FC0EB1F80A2EB3F00137EA25B485AA2485A5B1207485AA2485A48
C7FCA2127E5AB712FC16FEA36C15FCC8EAF800AA91387FFFF091B512F8A36E13F027347E
B32C>I<EC3FC0903801FFF801077F011F7F497F90387FE07F9039FF003F804848137FEA
03F8485A5B000FEC3F004848131E4990C7FC123F90C9FCA25A127EEB03FE90381FFF80D8
FC7F13E000FDB57EB67E9038FE07FC9038F001FE9038C0007F49EB3F8090C7121F16C048
140F16E01507A3127EA47E150F6D14C0001F141F6D1480000F143F6DEB7F003907F801FE
3903FE07FC6CB55A6C5C6D5B011F1380D907FCC7FC23357CB32C>54
D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0
A5EA7FC0EA3F80EA1F000B2470A32C>58 D<1507ED1F80153F15FF14034A1300EC1FFC4A
5AECFFE0491380010790C7FCEB0FFCEB3FF8EB7FE048485A4890C8FCEA0FFEEA1FF8EA7F
F0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC0101
7F6D13E0EC3FF86E7EEC07FF6E13801400153F151FED0700212A7BAD2C>60
D<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7FF0EB1FF8EB0FFEEB03FF6D
13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300EC0FFCEC3FF8EC7FE04948
5A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC485AEA7FF0485A138048C9
FC5A1270212A7BAD2C>62 D<EC7F80903803FFE0010F7F013F7F497F9038FFC0FE3901FE
007FD803F87F4848EB1F809038E00FCF390FC03FFF48484813C091B5FCEA3F01393E03F8
7F903907F03FE0007EEBE01F397C0FC00FEC8007A2EAFC1F00F8EB0003A900FCEB8007D8
7C0F14C0A2ECC00F3A7E07E01F80003EEBF03F903903F87F00393F01FFFED81F805B6E5A
6C6C6C5A3907E00FC09039F00007C06C6CEB0FE0D801FE131F3900FFC0FF6DB512C06D14
80010FEBFE00010313F89038007FC023337CB22C>64 D<14FE497EA4497FA214EFA21307
81A214C7A2010F7FA314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FE
A34880A29038F8003FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15
FC497E27347EB32C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE00
7F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212FE
5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC131F
6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>67
D<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716
F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80ED
FF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E39
03F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8
007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA71678
1600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C
>I<D87FFEEBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E0000FB3D8
7FFEEBFFFCB54813FEA36C486C13FC27337EB22C>72 D<007FB512F8B612FCA36C14F839
000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I<D87FFCEB7FF8486CEBFF
FCA36C48EB7FF8D807C0EB1F80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7
FC147E5CEBC1F813C3EBC7FCA2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF0
0301E07FEBC001816E7EA2157E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB
3FFEA36C48EB1FFC27337EB22C>75 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01
F8A8007FB6FCB7FCA36C15F025337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F
15FC000F15E001BC137BA4019E13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201
831383A214EFA201811303A214FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFE
A36C48EB1FFC27337EB22C>I<D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07
C013DEA213DF13CFA2148013C714C0A213C314E0A213C114F0A213C014F8A2147CA3143E
A2141E141FA2140F1587A2140715C7A2140315E71401A215F71400A215FFD87FFC137F48
7E153FA26C48EB1F8027337EB22C>I<EB7FFF0003B512E0000F14F848804880EBE003EB
800048C7127FA2007E80A300FE158048141FB3A86C143FA2007E1500A3007F5CA26C6C13
FEEBF00790B5FC6C5C6C5C000314E0C66C90C7FC21357BB32C>I<007FB512C0B612F881
15FF6C15802603F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0F
E0ED3FC015FF90B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C
>I<EB7FFF0003B512E0000F14F848804880EBF007EB800048C7127FA2007E80A300FE15
8048141FB3A7EB01F0EB03F800FE143F267E01FC1300A2EB00FE007F5C147FD83F8013FE
EBF03F90B5FC6C5C6C5C000314E0C67E90380007F0A26E7EA26E7EA26E7EA2157FA2153E
21407BB32C>I<387FFFFCB67E15E015F86C803907E007FE1401EC007F6F7E151FA26F7E
A64B5AA2153F4BC7FCEC01FE140790B55A5D15E081819038E007FCEC01FE1400157F81A8
160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381F
F80790B5EA0F804814CF000714FF5A381FF01F383FC003497E48C7FC007E147F00FE143F
5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F0
6C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2ED0FE0A20078140712FCA56C
EC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D870
0790C7FC23357CB32C>I<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF
90383FFFFCA2497F6D5BA227337EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C0
3B03F00001F800B3AF6D130300015DA26D130700005D6D130F017F495A6D6C485AECE0FF
6DB5C7FC6D5B010313F86D5B9038003F802B3480B22C>I<D87FFCEB7FFC486CEBFFFEA3
6C48EB7FFCD80FC0EB07E06D130F000715C0A36D131F00031580A36D133F00011500A36D
5B0000147EA4017E5BA46D485AA490381F83F0A4010F5B14C7A301075BA214EFA201035B
A214FFA26D90C7FCA46D5A27347EB22C>I<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD8
07F0EB0FC0151F000315806D133F12016DEB7F0012006D137E017E13FE017F5BEB3F01EC
81F8131FEC83F0EB0FC314C7903807E7E0A201035B14EF6DB45AA292C7FC7F5C147EB090
3807FFE0497FA36D5B27337EB22C>89 D<007FB6FCB71280A46C150021067B7D2C>95
D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC8
127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F
14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C>
97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13FE90B6FC16809138F07FC09138
801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13
036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F83900F03FC027
337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E
4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F0039
07FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I<EC0FFE4A7EA380EC
003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E497E48487F90C7FC
007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807FC1F6CB612FC6CEC
BFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03FE90381FFFC0017F13F048B57E
48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1FC090C7120F5A007E15E015075A
B7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E06C7ED80FF0130F6C6CEB3FC001
FF13FF000190B512806C1500013F13FC010F13F00101138023247CA32C>I<EC0FF8EC3F
FE91B5FC4914805B903807FC7F14F090390FE03F0014C092C7FCA6007FB512FEB7FCA36C
5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB22C>I<ED03F8903907F80FFC90
391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607F003133E3A0FE001FC1CD9C000
1300001F8049137EA66D13FE000F5CEBE0016C6C485A3903FC0FF048B5FC5D481480D99F
FEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48ECFF804815E04815F03A3FC0001F
F848C7EA03FC007E1400007C157C00FC157E48153EA46C157E007E15FCD87F801303D83F
E0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D8003F13F8010713C028387EA42C>
I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE01FB7F90B6FC9138F03F80ECC0
1F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029337FB22C>I<
1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007F
B512FCB612FEA36C14FC1F3479B32C>I<EA7FE0487EA3127F1201AA91381FFFF04A13F8
A36E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A4AC7FC14FEEBF1FC13F3EBF7FE90B5
FCA2EC9F80EC0FC001FE7FEBFC07496C7E496C7E811400157E811680151F3A7FFFC0FFFC
B500E113FEA36C01C013FC27337EB22C>107 D<387FFFE0B57EA37EEA0003B3B3A5007F
B61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD8
7FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B3
3B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397F
F01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B
5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>I<EB07FCEB1FFF017F
13C048B512F048803907FC07FC390FF001FE48486C7E0180133F003F158090C7121F007E
EC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15806D133F6C6CEB7F006D5B6C6C
485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07FC23247CA32C>I<397FF01FE0
39FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F8
5BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE0
9138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B2736
7FA32C>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF001
48487E49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F
6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A
1480A36E140029367DA32C>I<D87FFEEB3FC0B53801FFF0020713F8021F13FC6C5B3900
3F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391C8FCAF007FB512E0B67EA36C5C
26247EA32C>I<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB
00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00
FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8
148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1
ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE023
2E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F39
00FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514
FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C13
7CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214
FF6D90C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF6EB5FCB515806C16004A7ED807
C0EB01F0A66C6C495AA3143E147FA2D801F0495AECFF87A214F7A201F113C700005D9038
F9E3CFA201FB13EFA3D97BC190C7FC017F13FFA21480A2013F5B90381F007C29247FA32C
>I<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F
83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80
903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01
FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE148314816C01
0113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA2013F13
FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC80A2
143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C90C8
FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED7F80
EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A495A49
5A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA32C>
I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Ff cmr10 10 79
/Ff 79 124 df<DA0FF813FC91397FFF07FF903B01F807DF83C0903A07E001FF0F903B1F
8007FE1FE090393F000FFC137E16F85B9338F007804848010790C7FC1503ACB812F8A328
01F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7FBA30>11
D<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E497EA25B
A2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E267FFFE0B5
12C0A32A3B7FBA2E>I<EC0FFC91387FFF70903901F803F0903807E00790381F800FEB3F
00137EA25B150748481303ADB7FCA33901F80003B3AB486C497E267FFFE0B512C0A32A3B
7FBA2E>I<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F00F903C07E001CFC00380903C
1F8000FF0001C090273F0007FE130F017E4948497EA2495CA248485C03076E5A03030203
C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA486C496C497E267FFFE0B500
C1B51280A3413B7FBA45>I<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C
131C00001300A40001130101801380A20003130301001300485B00061306000E130E485B
485B485B006013601A197DB92A>34 D<121C127FEAFF80A213C0A3127F121C1200A41201
1380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB
0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2
127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB
01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378
A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A2
5B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD
20>I<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A
5A5A12600A19798817>44 D<B512FCA516057F941C>I<121C127FEAFF80A5EA7F00121C
0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0
1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249
5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12
07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I<
EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E
A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F
143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A>
I<EB01C013031307131F13FFB5FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>
I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0000E6D7E486D7E486D7E123000706D7E
126012FCB4EC7F807FA56CC7FC121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A
92C7FC147C5C495A495A495A495A91C8FC011EEB01805B5B49130348481400485A485A00
0EC75A000FB6FC5A5A485CB6FCA321387CB72A>I<EB07F8EB3FFF4913C03901F80FF039
03C007F848486C7E380E0001000F80381FE0006D7FA56C5A6C5AC85A1401A25D4A5AA24A
5A5DEC0F80027EC7FCEB1FFCECFF809038000FE06E7EEC01FC816E7EED7F80A216C0A215
3F16E0A2121EEA7F80487EA416C049137F007F1580007EC7FC0070ECFF006C495A121E39
0F8003F83907F00FF00001B512C06C6C90C7FCEB0FF8233A7DB72A>I<1538A2157815F8
A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13
1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7
3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5
FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038
8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060
5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB
1FE0213A7CB72A>I<EC3FC0903801FFF0010713FC90380FE03E90383F800790387E001F
49EB3F804848137F485AA2485A000FEC3F0049131E001F91C7FCA2485AA3127F90C9FCEB
01FC903807FF8039FF1E07E090383801F0496C7E01607F01E0137E497FA249148016C015
1FA290C713E0A57EA56C7E16C0A2121FED3F807F000F15006C6C5B15FE6C6C5B6C6C485A
3900FE07F090383FFFC06D90C7FCEB03FC233A7DB72A>I<12301238123E003FB612E0A3
16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C
140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8
FC131E233B7BB82A>I<EB03F8EB1FFF017F13C09038FC07F03901E001F848486C7E4848
137C90C77E48141E000E141F001E80A3121FA27F5D01E0131E6C6C133E01FC133C6D5B6C
6C6C5AECC1E06CEBF3C06C01FFC7FC6C5BEB3FFF6D13C081017F13F801F07F3903E07FFE
3907801FFF48486C1380481303003E6D13C0003CEB007F007C143F0078EC0FE000F81407
5A1503A21501A36C15C012781503007C15806CEC07006C5C6C6C131ED807E0137C3903F8
03F0C6B55A013F1380D907FCC7FC233A7DB72A>I<EB03F8EB1FFF017F13C09038FC07E0
3903F803F048486C7E48486C7E49137E121F48487FA2007F158090C7FCA248EC1FC0A616
E0A56C143FA27F123F001F147FA26C6C13FF6C6C13DF000313013901F0039F3900FC0F1F
D93FFC13C0EB07F090C7FC153F1680A316005D000F147E487E486C5BA24A5A4A5A49485A
6C48485A001C495A260F807FC7FC3807FFFC000113F038003FC0233A7DB72A>I<121C12
7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12
7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206
A2120E5A121812385A1260093479A317>I<1538A3157CA315FEA34A7EA34A6C7EA20207
7FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F
1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA349
6E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>
65 D<B712E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707EA2707EA283A7
5F16035F4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E70
7E83707EA21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C0
94C7FC16F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A01FF807E0790
3A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F1201484815
1F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180
A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD9
1FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380
313D7BBA3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E
707E177FA2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2
171F18C0EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036
397DB83F>I<B812FCA30001903880000F6C90C71201EE007E173E171E170EA31706A317
078316C0A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318E0
93C712C0A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397DB839
>I<B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2
ED0180A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0
B612C0A32F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC00
0787D90FF0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507A2
48481503A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3FC0
A2123F7F121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03
C7D903FEEB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41>
I<B648B512FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D49
7EB648B512FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397E
B81E>I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D8
7F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I<B6
49B5FCA3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8FC
160E5E5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C7E
14704A6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA2707E
707F8484486D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9FC
B3AD1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB8
34>I<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563
A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A2
6E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8C
A2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED01804539
7DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7
FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC016
E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0F
FEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA2170637397D
B83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80EB
07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F17
E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A26C
6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C
495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC36
3D7BBA41>I<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F8
17FC17FE1601A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512
FC16F091C9FCB3A5487FB6FCA330397DB839>I<EC03FF021F13E09138FE01FC903901F8
007ED907E0EB1F8049486D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F00
07178049153F000F17C049151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF17
FCAC007F17F8A26D150FA2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4FC
3C03F80383807F003B01FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77F0
D91FCCEB3FE0D907EE14806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E131C
161F183CEF807CEFC0F8EE0FFFA318F08218E07013C07013809338007E00364B7BBA41>
I<B612FEEDFFE016F8000190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283A6
5FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE82
707E707EA2161F83A583A6F00180A217F8160F1803486D01071400B66D6C5A0401130693
3800FE0ECAEA3FFCEF07F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F807
E33907E000F74848137F4848133F48C7121F003E140F007E1407A2007C140312FC1501A3
6C1400A37E6D14006C7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F14
80010714C0EB007F020713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37EA2
16F07E15036C15E06C14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFF
F8010F13E0D8C00190C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE13
0348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807FF
80011FB612E0A335397DB83C>I<B6903807FFFEA3000101809038007FE06C90C8EA1F80
EF0F001706B3B2170E6D150C80171C133F17186D6C14385F6D6C14F06D6C5C6D6C495A6D
6CEB07806D6C49C7FC91387F807E91381FFFF8020713E09138007F80373B7DB83E>I<B5
00FC91387FFF80A30003018091380FFC006C90C8EA07E0715A6C705A6E1403017F93C7FC
A280013F1506A26E140E011F150C80010F5DA28001075DA26E147001031560A26D6C5CA2
806D4A5AA2ED8003027F91C8FCA291383FC006A215E0021F5BA2EDF01C020F1318A26E6C
5AA215FC02035BA2EDFEE002015BA26E6C5AA36FC9FCA3153EA2151CA3393B7EB83E>I<
B5D8FC07B5D8F001B5FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307
ED03C01B807F6C6F6C1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE06
7FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE
6007A26D6C4CC7FC9338C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF
0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA2
02015E4B1407A2020093C8FC4B80503B7EB855>I<B500FE91383FFFE0A3000301E09138
07FE00C649EC03F0017F6F5A606D6C5D6D6C140395C7FC6D6C1406A26D6C5C6D6C141C17
186D6C143817306D6D5B6E6C13E05F91383FE0015F91381FF003DA0FF890C8FC16069138
07FC0E160C913803FE1C913801FF185E6E13B016E0157F6F5AB3A24B7E023FB512C0A33B
397FB83E>89 D<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E0038
141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F4A5A
A24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC5B12
03485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>I<EAFF
F8A4EAF000B3B3B3B3A3EAFFF8A40D5378BD17>I<390180018000031303390700070000
0E130E485B0018131800381338003013300070137000601360A200E013E0485BA400CE13
CE39FF80FF806D13C0A3007F137FA2393F803F80390E000E001A1974B92A>I<EAFFF8A4
EA0078B3B3B3B3A3EAFFF8A40D537FBD17>I<EB1FE0EBFFFC3803E03F3907000F80390F
8007E0486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA
0FF0EA1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383FC0
1E3A0FE0781FF03A03FFF00FE03A007F8007C026277DA52A>97 D<EA03F012FFA3120F12
03B0EC1FE0EC7FF89038F1E03E9039F3801F809039F7000FC001FEEB07E049EB03F049EB
01F85BED00FCA216FEA2167E167FAA167E16FEA216FC15016D14F8ED03F07F01EEEB07E0
01C6EB0FC09039C7801F00903881E07E903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90
381FFF8090387E03E03901F80070484813F83907E001FC380FC003A2EA1F80123F903800
01F848EB00F01500A2127E12FEAA127E127FA26C14067F001F140E6D130C000F141C6C6C
13386C6C13706C6C13E039007C07C090381FFF00EB07F81F277DA525>I<ED0FC0EC03FF
A3EC003F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0007F4848133F4848131F
A24848130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C131FA26C6C133F6C6C13
7F6C6CEBEFF03A01F801CFFF39007C078F90381FFE0FD907F813C0283B7DB92E>I<EB07
F8EB1FFF90387C0FC03901F803E03903F001F0D807E013F8380FC0004848137CA248C712
7E153E5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14037F001F14076C6C1306
0007140E6D131CD801F013386C6C137090387E03E090381FFF80903803FC0020277EA525
>I<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FC
ADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I<ED03F090390FF00FF890
393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E010000FECF000A248486C
7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38060FF0000EC9FCA4120F
A213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048C7EA0FF0003E14034814
0116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB0F80D807E0EB3F003901
FC01FC39007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3120F1203B0EC0FF0EC3F
FCECF03F9039F1C01F809039F3800FC0EBF70013FE496D7EA25BA35BB3A3486C497EB500
C1B51280A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312
071203B3AA487EB512C0A312387EB717>I<EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7
FCAAEB01F813FFA313071301B3B3A2123C127E00FF13F01303A214E038FE07C0127C383C
0F00EA0FFEEA03F8154984B719>I<EA03F012FFA3120F1203B1913801FFFCA39138007F
C01600157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EBF3FEEBF73F01FE7FEBF8
1F496C7E8114076E7E6E7E811400157E157F811680ED1FC0486CEB3FF0B500C0B5FCA328
3A7EB92C>I<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0
EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F8026
03F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B500
83B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC0
3803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>I<EB03FE
90380FFF8090383E03E09038F800F84848137C48487F48487F4848EB0F80001F15C090C7
12074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A26C6CEB0FC000
0F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D903FEC7FC2527
7EA52A>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A07F7000FC0D803FEEB
07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D
13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB5
12C0A328357EA42E>I<D903F813C090381FFE0190387E07819038FC01C33903F000E300
0714774848133749133F001F141F485A150F48C7FCA312FEAA127FA37E6D131F121F6D13
3F120F6C6C137F6C6C13EF3901F801CF39007E078F90381FFE0FEB07F890C7FCABED1FE0
0203B5FCA328357DA42C>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA
03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>I<EBFF
03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7FE013FF
6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303A37E15
806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A51338A3
1378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580EB7C03
017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E000FFEB01FFA3000FEB001F
00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7FF8090383F03C790381FFF
87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF8000FF06C48EB07E00003EC03
C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2EC8038011F1330A26D6C5A
A214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA2147CA31438A227257EA32C>
I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E018C00003023EEB0180A26C
6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C7A2D93F016D5A15830281EBF0
38D91F831430150102C3EBF87090260FC6001360A2D907E66D5A02EC137CA2D903FCEB7F
804A133FA2010192C7FC4A7FA20100141E4A130E0260130C37257EA33C>I<B538807FFF
A33A03FE003FF00001EC1F80000092C7FC017E131C6D13186D6C5AECC070010F5B6D6C5A
ECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF903801C7E090380383F090380703F8
EB0601496C7E011C137E49137F01787F496D7E486C80000FEC3FF0D8FFFE90B51280A329
247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C00003EC03806C7E16007F000014
06A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A26D6C5AA214F101035BA2D901FB
C7FCA214FF6D5AA2147CA31438A21430A214701460A25CA2EA7C0100FE5B130391C8FC13
06EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I<003FB512FCA2EB8003D83E0013F8
003CEB07F00038EB0FE012300070EB1FC0EC3F800060137F150014FE495AA2C6485A495A
A2495A495A495AA290387F000613FEA2485A485A0007140E5B4848130C4848131CA24848
133C48C7127C48EB03FC90B5FCA21F247EA325>I<B81280A2290280962A>I
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fg cmbx12 14.4 43
/Fg 43 122 df<B712F0AB240B7F9F2D>45 D<913803FFC0023F13FC91B6FC010315C001
0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248
17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600
3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913
006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313
C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF8
00C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14FC013F14FF
90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F0
1680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218
C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A
48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F8014
0749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<91
380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED8
03F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC
1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80
DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218
FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001
F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F158001
0302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F16
7FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580
EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A120748
5A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D803
80150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093
C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077F
DAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0F
E0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D
5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F80103
14C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE
903A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01
FF5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA2150891
3801FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A2
4A15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E
6E4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC02
3F13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A2606060
485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC8
12014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141F
A2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13
FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E484880
48486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE49
13806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C
4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9
007F14E04848011F14F048487F48481303030014F8484880161F4848020713FC16018248
48157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F
6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F158001
0102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E4901
037F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A
7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D
13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05E
A3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A
49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8
FC010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7F
A34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C
7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B80020783
5D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103
854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65
D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203
DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901
F8824949824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA248
49181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D19
80A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A
6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE0
01FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>67
D<BB12FEA5D8000701F8C700077FF0007F191F190785858586861B80A21A1FA31A0FA41B
C006F81307A497C7FCA31701A317031707170F177F92B6FCA59238F8007F170F17071703
1701A31700A795C9FCB3B812F8A54A517CD055>70 D<B812C0A5D8000701F8C7FCB3B3B3
B2B812C0A52A527CD132>73 D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013
FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49
496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B804A83
481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F
6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D
6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F002
0F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479D265
>79 D<BAFC19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F13
E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C0
4F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>
I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90
C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49496F7F49496F7F4990C96C7F
4948707F4948707F01FF854A177F48864849717EA24849711380A2481BC04A83481BE0A2
4A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5FA36C1BF0A36C6D4D13E0A36C
1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A4C13E06C6D013F6D495A017F
91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01806E485B6D6D48D91F8F5B6D
01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0020F6D4913C0020301FF90B5
C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7EA01FF74133E74137E7413FE
F2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314C0731480731400735B963800
7FF8F21FE0576A79D265>I<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F06
0113FE727F737F737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06
035B060F13F095B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80727F72
7F727F727F727F8684A28684A787A71D1C75133EA38575137E73157C7513FC731401B86C
6D9038F803F807039038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>
I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919
3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5
53517BD05E>84 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F048
6C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020F
B6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A
5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C
9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641
>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301
017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285
A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7
FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C0
41547BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE
0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F130070
5A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C
6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49
C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13
FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48
4980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D
5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE
0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0
4901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C048
8191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06C
EE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB
03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3F
FC0203B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC49
5A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A700
7FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF
7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83F
F813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D
495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91
CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC1207
4848C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D00
3F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280
010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4
EE1FFC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081
ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F
497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017E
B3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003FFE
00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8ED
1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F6F
7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537CD2
47>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFF
E0B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A
3F001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3
C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03F
B512FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC92
393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3
ACB6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F90
38807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890
C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5F
A26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF
807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B501
0F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D
7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F
616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F
1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<912601FFE0EB078002
1F01F8130F91B500FE131F0103ECFF80010F9039F03FC03F499039800FE07F903A7FFE00
03F04948903801F8FF4849EB00FD4849147F4A805A4849805A4A805AA291C87E5AA35B12
FFAC6C7EA37EA2806C5EA26C6D5CA26C6D5C6C6D5C6C93B5FC6C6D5B6D6C5B6DB4EB0FEF
010F9038C07FCF6D90B5120F010114FED9003F13F80203138091C8FCB1040FB61280A541
4D7CB547>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC
0003D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FC
A55CB3AAB612FCA52F367CB537>I<903903FFF00F013FEBFE1F90B7FC120348EB003FD8
0FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC0
6C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC
003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F
8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC
2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90
B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEB
F0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<D93FF8913801FFC0B50207B5FC
A50003ED001FC61607B3AE5FA35FA2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3
EBFFC0903A0FFFC03F836D90B51203010114FE6D6C13F8020701E091C7FC42377BB54B>
I<B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15
FC6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E
177E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA2
6F5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A500
0101F0C701F0C7381FF8006E027FED07E06C715DA26E023F150F017F705DA26E181F013F
4B6C92C7FC6E606D70143E94B5FC6F177E6D4A6E137C03C001F315FC6D715B160303E001
E114016D020702E05B03F013C06D71485A160F03F8D9807F13076D05F85B93381F003F03
FC160F027F4902FC5BDBFE3E011F131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF
3E4C6D137E6E5FA24C7F6E5F4C7F6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E
6FC9FC5A367DB461>I<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E
013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC
6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF
6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0
133E486C137E486C137C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB
81FE6CB45A6C13F000035BC690CBFC404D7DB447>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fh cmtt12 12 16
/Fh 16 116 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46
D<EC07F8EC3FFF91B57E010314E0010F80498090383FFC0F90397FE003FC9038FF800148
90C77ED803FC147E49EB7E7F0007903801FFBFD9F00713FF4848481480495A001F5B0180
13C3003FEB7F810100010013C002FE137F4849133FEA7E014A131FA212FEEAFC034A130F
A96E131FD8FE011580127EA26E133FD87F0015006C6D5B027F13FE01801381001F90383F
C3FC01C013FF000F6D5B6D6C5B6C6C6C5BD9F80113800003D9007EC7FC6D9038000F806C
B4EC1FC06C6D133FD97FE013FF90263FFC0713806DB612006D5C010314F801005C023F13
80DA07FCC7FC2A3F7CBD33>64 D<EC1F804A7E4A7EA34A7EA314F901017FA501037FA214
F0A201077FA4ECE07E010F137FA449486C7EA549486C7EA4017F80EC000FA291B5FCA290
B67EA43A01FE0007F8491303A4000381491301A3000781491300D87FFF90380FFFE0B56C
4813F06E5AA24A7E6C496C13E02C3E7DBD33>I<D83FFCEC3FFC486CEC7FFEB591B5FCA2
6C48EC7FFE6C48EC3FFCD80FC0EC03F0A76D1407000716E0A86C6CEC0FC0A2EC07E0EC0F
F0EC1FF8A3000116809039F83FFC1FEC3E7CA4EC7E7EA200001600A2EC7C3E01FC5CECFC
3FA3ECF81F017C143EA590397DF00FBEA3013D14BC90393FE007FCA5ECC003011F5C6D48
6C5A303E7FBC33>87 D<EA3FFC487E12FFA2127F123F1200ABEC01FE91380FFFC04A13F0
027F7F91B512FE90B7FCECFE07DAF800138002E0EB7FC04AEB3FE04A131FEE0FF091C7FC
16074915F81603A217FC1601A9160317F8A26D140717F06E130F17E06E131FEE3FC06E13
7F9139F801FF80DAFE07130091B55A495C6E5BD97E3F13E0D93C0F138090260003FEC7FC
2E3E7FBC33>98 D<ECFFF0010713FE011FEBFF804914C04914E048B612F048EBC01F9038
FE000F485A485A4848EB07E049EB03C0484890C7FC5BA2127F90C9FCA25A5AA97E7EA27F
003FEC01F06DEB03F86C7E6D13076C6C14F06C6C130F01FFEB1FE06CEBE07F6C90B512C0
6C1580013F14006D13FC01075B010013C0252E79AC33>I<ECFF80010713F0011F13FC49
7F90B6FC48158048018013C03A07FE003FE001F8EB0FF048481307484814F8491303003F
15FC491301127F90C7FC16FE15005A5AB7FCA516FC48C9FC7E7EA36C7E167C6C6C14FE7F
6C7E6D13016C6CEB03FC6CB4130F6C9038C03FF86C90B512F06D14E06D14C0010F140001
0313FC9038007FE0272E7BAC33>101 D<ED3FE0913801FFFC020713FE141F4A13FF5CEC
FFC015004948137E4A133C010314005CA8003FB612F84815FCB7FCA36C15F8260003F8C7
FCB3AD003FB612804815C0A46C1580283E7DBD33>I<D901FEEB1FE0903A0FFFC0FFF001
3F01F313F84990B512FC90B7FC5A48010313E12607FC00EB80F849017F1360484890383F
C00049131FA2001F8149130FA66D131F000F5DA26D133F6C6C495A6D13FF2603FF0390C7
FCECFFFE485C5D5DD80FCF13C0D981FEC8FC0180C9FCA27FA26C7E7F90B512FC6CECFFC0
6C15F0000715FC4815FF4816809038E0000748489038007FC090C8EA1FE048150F007E15
0700FE16F0481503A56C1507007E16E0007F150F6C6CEC1FC001E0147FD81FF8903801FF
80270FFF801F13006C90B55A6C5DC615F0013F14C0010F91C7FC010013F02E447DAB33>
I<EA3FFC487E12FFA2127F123F1200AB4AB4FC020713C0021F13F0027F7F91B5FC90B67E
ED07FEECF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFFF80FFFFC486D4813FEB56C
4813FFA26C496C13FE6C496C13FC303D7FBC33>I<383FFFFC487FB5FCA27E7EC7FCB3B3
AD003FB612F84815FCB712FEA26C15FC6C15F8273D7ABC33>108
D<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE
07130301FC01FE7F9039F803FC01A201F013F8A401E013F0B3A53C7FFE0FFF07FF80B548
018F13C0A46C486C01071380322C80AB33>I<4AB4FC263FFC0713C0267FFE1F13F000FF
017F7F91B5FC6CB67E6CEC07FEC6EBF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFF
F80FFFFC486D4813FEB56C4813FFA26C496C13FE6C496C13FC302C7FAB33>I<EC01FE3A
3FFC0FFFC0486C4813F000FF017F7F91B512FE6CB7FC6CEBFE07C6D9F800138002E0EB7F
C04AEB3FE04A131FEE0FF091C7FC16074915F81603A217FC1601A9160317F8A26D140717
F06E130F17E06E131FEE3FC06E137F9139F801FF80DAFE07130091B55A495C6E5B6E13E0
020F1380DA03FEC7FC91C9FCAF383FFFF8487FB57EA26C5B6C5B2E427FAB33>112
D<ED03FE3B7FFF801FFF80B5D8C07F13E002C1B5FC02C314F014C76C9038CFFE0F39001F
DFF09139FFC007E092388003C092C8FC5C5C5CA25CA25CA35CB2007FB512FEB7FCA46C5C
2C2C7DAB33>114 D<90381FFE0F90B5EA8F80000314FF120F5A5AEBF007387F800190C7
FC00FE147F5A153FA37E007FEC1F0001C090C7FCEA3FF8EBFFC06C13FF6C14E0000314F8
C680011F13FF01001480020713C0EC007FED1FE0007C140F00FEEC07F01503A27EA27F15
076D14E06D130F6DEB3FC09038FE01FF90B61280160000FD5C00FC14F8D8F83F13E0D878
0790C7FC242E79AC33>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fi cmr12 12 25
/Fi 25 119 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
80120313005A1206120E5A5A5A12600B1D78891B>44 D<14FF010713E090381F81F89038
3E007C01FC133F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F15
F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A2
6C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81
F8903807FFE0010090C7FC28447CC131>48 D<143014F013011303131F13FFB5FC13E713
071200B3B3B0497E497E007FB6FCA3204278C131>I<49B4FC010F13E0013F13FC9038FE
01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8A215077F5B
A26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1FC0D90F
FFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC150316FEA21501
16FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F80038140F6C15
F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E0010190C7FC
28447CC131>51 D<14FF010713E0011F13F890387F00FE01FC133FD801F0EB1F804848EB
0FC049EB07E00007EC03F048481301A290C713F8481400A47FA26D130116F07F6C6CEB03
E013FC6C6CEB07C09039FF800F806C9038C01F006CEBF03EECF87839007FFEF090383FFF
C07F01077F6D13F8497F90381E7FFFD97C1F1380496C13C02601E00313E048486C13F000
079038007FF84848EB3FFC48C7120F003EEC07FE150148140016FF167F48153FA2161FA5
6C151E007C153EA2007E153C003E157C6C15F86DEB01F06C6CEB03E06C6CEB07C0D803F8
EB1F80C6B4EBFF0090383FFFFC010F13F00101138028447CC131>56
D<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848EB0FC0000F
EC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA46C5CA36C7E
5D121F7F000F5C6C6C1306150E6C6C5B6C6C5BD8007C5B90383F01E090390FFF80FE9038
01FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F16C0ED1F80A2
49EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649C7FCEB1FF028
447CC131>I<16C04B7EA34B7EA34B7EA34B7EA3ED19FEA3ED30FFA203707FED607FA203
E07FEDC03FA2020180ED801FA2DA03007F160FA20206801607A24A6D7EA34A6D7EA34A6D
7EA20270810260147FA202E08191B7FCA249820280C7121FA249C87F170FA20106821707
A2496F7EA3496F7EA3496F7EA201788313F8486C83D80FFF03037FB500E0027FEBFFC0A3
42477DC649>65 D<DB0FFE146092B500C013E0020314F0913A0FFC01FC0191393FC0003E
02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948151F49C9
120F485A491607120348481603A248481601A248481600A2123FA2491760127FA3190048
5AAE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C160119806C6C160312016DEE
07006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D6C4A5AD900FFEC0780DA3FC0
011FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B487BC546>67
D<B912F8A3000101C0C7127F6C6C48EC07FC17011700187C183C181CA284A31806A41807
04067FA395C7FCA4160EA2161E163E16FE91B5FCA3EC8000163E161E160EA21606A319C0
A3F0018093C7FCA41803A21900A260A260A2181EA2183E187EEF01FE170748486C147FB9
5AA33A447CC342>69 D<B912F0A3000101C0C7127F6C6C48EC0FF8170317011700187818
38A2181CA3180CA4180E1806160CA21800A5161CA2163C167CED01FC91B5FCA3EC8001ED
007C163C161CA2160CA793C8FCB08048487EB612F8A337447CC340>I<B612F0A3C6EBF0
006D5A6D5AB3B3B3A4497E497EB612F0A31C447DC323>73 D<B612F8A3000101E0C9FC6C
6C5A5CB3B31830A418701860A518E0A3EF01C0A217031707A2170F173F177FEE01FF4848
6C011F1380B9FCA334447CC33D>76 D<B56C020FB5FC8080C6040013F06D6CED1F80D96F
F8ED0F00A2D967FC1506EB63FEA2EB61FF01607FA26E7E6E7EA26E7E6E7EA26E7E6E7EA2
6E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0
EE0FF8A2EE07FCEE03FEA2EE01FF701386A2EF7FC6EF3FE6A2EF1FF6EF0FFEA217071703
A217011700A201F0167E183E487ED80FFF161EB500F0150EA2180640447CC349>78
D<B712FCEEFFC017F800019039C0000FFC6C6C48EB01FF9338007F80EF1FE0170FEF07F0
18F8EF03FCA218FE1701A218FFA718FEA2170318FCA2EF07F818F0EF0FE0EF1FC0EF7F80
933801FE00EE0FFC91B612F017800280C9FCB3AA3801FFE0B612C0A338447CC342>80
D<B60107B500F890380FFFFEA3000301E0D9001F90C813F06C0180DA0FFCED3FC091C86C
48ED1F006C871C0E6D6C6E7E1C0CA26D6C6F5DA36EDA06FF1538011F1A30A26E020E6D14
70010FDB0C7F1560A26E021C7F0107DB183F5DA2856D6CDA301F4A5AA36D6C4A6C6C49C7
FCA36D6C4A6C6C1306A3DB80016E130E027FDA8003140CA2DBC00380023FDA00015CA203
E081021F01066D5CA36E6C486E6C5AA36E6C486E6C5AA36F48EC1FE1020360A2DBFE7015
F302010160020F90C8FCA2DBFFE015FB6E49EC07FEA36F486E5AA36FC86C5AA3031E6F5A
A4030C16605F467EC364>87 D<EA01FC12FFA3120712031201B3EC03FC91380FFF809138
3C07E091387001F89039FDE0007E02807F01FFEC1F8091C713C049EC0FE049140717F0A2
EE03F8A217FCA2160117FEAB17FC1603A217F8A2EE07F0A26DEC0FE017C06D141F01FBEC
3F80D9F380EB7E00D9E1C05B9039E0F001F89039C03C07E09039801FFF80C7D803FCC7FC
2F467DC436>98 D<EB01FE903807FFC090381F03F090387E00FC49137E48487F485A4848
EB1F80000F15C049130F121F484814E01507A2007F15F090C7FCA25AA390B6FCA290C9FC
A67EA27FA2123F16306C7E1670000F15606D14E06C6C14C0000314016C6CEB03806C6CEB
0700013E131E90381F80F8903803FFE0010090C7FC242E7DAC2B>101
D<EE0F80D901FCEB7FE0903A0FFF81F0F090393F07E3819039FC01FF033A01F800FE0148
48017E13E00007027FC7FC497F000F8149131F001F81A9000F5D6D133F000792C7FC6D5B
0003147E6C6C5B6D485A3903BF07E090380FFF80260701FCC8FC90CAFCA25AA37F6C7E7F
90B512F86C14FF16E06C15F86C6C8048B67E3A07C0000FFF48481300003FC8EA3F80003E
151F48ED0FC0A2481507A56C150F007C1680007E151F003E16006C153E6C6C5CD807E049
5AD801F8EB07E0D8007FEB3F8090261FFFFEC7FC010113E02C427DAC31>103
D<EA01FC12FFA3120712031201B3B3B3A5487EB512F8A315457DC41C>108
D<D801FC01FFEC1FE000FF010701E0EBFFFC913B0F03F801E07F913C3C01FC07803F8000
07903C7000FE0E001FC0000349D97E1C130F2601FDC0D97F38804A143001FFDA3FF06D7E
91C75BA2495DA3495DB3A8486C4A6C497EB5D8F81FB50003B512E0A34B2C7DAB52>I<39
01FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0002601FDC07F
5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80
903803FFF090380FC0FC90383E001F496D7E496D7E48486D7E48486D7E48486D7E000F81
A24848147E003F157FA290C87E481680A44816C0AA6C1680A26D147F003F1600A2001F15
7E6D14FE000F5D6D130100075D6C6C495A6C6C495A6C6C495A013E49C7FC90381FC0FE90
3807FFF89038007F802A2E7DAC31>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0
FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26
>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C147812
7800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0
C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15
786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<B539
F001FFFCA3000790C7EA7FE06C48EC1F8000011600160E1200160C017F5CA280013F5CA2
6E1370011F146080010F5CA2ECF00101075CA26D6C48C7FCA26E5A01011306A26D6C5AA2
14FF6E5AA215B8EC3FB015F06E5AA36E5AA26E5AA36EC8FC2E2C7EAA33>118
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fj cmr17 17.28 22
/Fj 22 125 df<DC3FF0EC07FE922603FFFC91387FFFC0031F01FF0103B512F0923D7FC0
1FC00FF803F8913E01FE0003E03FC0007CDA07F86D6CB4C7121E4A4890260079FE804A48
DA7BFC6E7EDA3F8049B448143F027F020749ECFFC04AC7485B49484C5B495A6113074A93
C7FC716F5B010F6F70C7FC4A6E48151C99C8FCB3F47FC0BEFCA426000FF0C7D801FEC712
01F3007FA21C3FB3B3AD496C4A6C4B7E496C4A6D4A7E003FB5D8FC07B66CB612F0A46465
7EE46B>14 D<DD7FF81560040FB56C14E0047F14E00303B600FC1301030F9038E003FEDB
3FFEC7383F8003DBFFF0EC07C04A01C0913803F007020790C9EAF80FDA0FFC167C4A48EE
1E1FDA7FE0160F4A48EE07BF4949EE03FF4990CAFC4948834948834A187F495A013F193F
4948181F5C01FF190F485BA24890CC1207A248481903A2485A1B01121FA25B123F1B005B
A2127F1C00A4485AB06C7EA5123F1CE07FA2121F7FA2000F1A011CC06C7EA26C7E1B036C
6D19801B076C7F017F1A006E606D6C181E131F6D6C606E18386D6C18786D6C606D6D4C5A
6D6D4C5A6E6C1607DA1FF84C5A6E6C4CC7FC6EB4167C020101C04A5A6E01F0EC07F0DB3F
FEEC1FC092280FFFE001FFC8FC030390B512FCDB007F14F0040F14809326007FF8C9FC53
667AE360>67 D<B712C0A4C66CEB8000D91FFEC7FC6D5AB3B3B3B3AE497E90387FFF80B7
12C0A422627AE12F>73 D<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA61A3C
1A38A61A78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F043F
13E0D9FFFC0203B5FCBBFCA4466279E153>76 D<933801FFE0043F13FF4BB612E0030790
38003FF8DB1FF0EB03FEDB7FC0903800FF804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC
4A486F7E4A486F7E4A48707E4ACA6C7E4948717E4948717E4948717E4948717E4948717E
013F854A83017F864948727EA24890CC6C7EA24848737EA24848737EA2000F8749190700
1F87A34848737EA4007F1C80A24985A400FF1CC0AF6C6C4F1380A5003F1C006D61A3001F
63A26D190F000F63A26C6C4F5AA36C6C4F5AA26C6D4E5A6C636E18FF017F626D6C4D90C7
FC6E5F011F616D6C4D5A6D6C4D5A0103616E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1F
F0ED03FE6E6C4B5A6E6C4B5ADA01FFED3FE09126007FC0ECFF80DB1FF0D903FEC9FCDB07
FFEB3FF8030190B512E0DB003F91CAFC040113E05A667AE367>79
D<003FBC12F8A49126C000039038C0000301FCC76C49EB007F01F0190F01C019074848F1
03FC90C81701007E1A00007C1B7CA300781B3CA400701B1CA600F01B1E481B0EA7C91800
B3B3B3A54C7FA2041F13F84AB87EA457627CE160>84 D<EC3FF0903803FFFE010F6D7E90
393FC03FE090397E0007F801F86D7ED801E06D7E48486D7E48486E7E48C86C7E7F01F06E
7E487E6D6E7EA3707EA36C5AEA03E0C9FCA6167FED7FFF020FB5FC91387FF807903801FF
80903807FC00EB1FF0EB7FC0495AD803FEC7FC485A120F5B485A485AA2484817E0A312FF
5BA2160FA3161F6D141B007F153B16736D913971FC01C06C6C14E1001FEC01C1D80FFC90
3A0780FE03806C6C903A0F00FF07002701FF807E6DB4FC27007FFFF86D5A011F01E0EB1F
F8010190C7EA07E03B417ABF42>97 D<4AB47E020F13F8023F13FE9139FF007F80D903FC
EB07E0D907F0EB01F0D91FE0EB007849488049488049C87E48485D4915FF00034B138048
485CA2485AA2485AA2003F6F130049EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2
001FEE01C07F000F16036D168012076C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D
6C5CD90FF8495AD903FCEB07C0903A00FF803F8091263FFFFEC7FC020F13F80201138032
417CBF3A>99 D<EC03FE91381FFFE091B512F8903901FE03FE903A07F0007F8049486D7E
D93FC06D7E49C76C7E496E7E49140348488148481401000782491400000F8283485A1880
123F49153FA2007F17C0A35BA212FF90B8FCA30180CAFCA9127F7FA3123FA27F121FEF01
C06C7E17036C6C1680A26C6C15070001EE0F006D150E6C6C151E6D6C5C6D6C5C6D6C5CD9
07F0EB03E0D903FC495A902700FF803FC7FC91383FFFFC020F13F00201138032417CBF3A
>101 D<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA412
01EA007FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>105 D<EB03C0EA07FFB5FCA4
1201EA007FA2133FB3B3B3B3AD497E497EB612F0A41C647DE323>108
D<D903C0D9FFC0EC07FED807FF010301F891381FFFC0B5010F01FE027F13F0923D3F00FF
8001F807FC0378903B3FC003C001FEDAC1E090261FE00FC77E0001D9C3C090260FF01E6E
7ED8007F49902607F81C6E7E02C7C75CD93FCE6E6C486E7E02CC166002DC16E002D85E02
F8DA01FF6F7E4A5EA24A93C8FCA44A5DB3B3496C4A6C4B7E496C4A6D4A7EB6D8F007B6D8
803FB512FCA4663F7CBE6F>I<D903C0EB7FE0D807FF903803FFFCB5010F13FFDB3F0013
C00378EB1FE04B6D7E0001D9C1C06D7E27007FC3808002C7C71203D93FCE81170114DC14
D802F86E7E5CA35CA35CB3B3496C4A7F496C4A7FB6D8F003B612C0A4423F7DBE49>I<ED
FF80020F13F8023F13FE9139FF007F80D903FCEB1FE0D907F0EB07F0D90FC0EB01F8D93F
80EB00FE49C8127F017E81496F7E48486F7E00038349150700078348486F7EA2001F8349
1501A2003F83A348486F7EA400FF1880AC007F1800A26D5DA2003F5FA36C6C4B5AA36C6C
4B5A00075FA26C6C4B5A6C6C4B5AA26C6C4B5A017F4BC7FC6D6C14FE6D6C495AD90FF0EB
07F8D903FCEB1FE0D900FFEB7F806EB5C8FC020F13F8020113C039417CBF42>I<D903C0
EB7FC0D807FF903807FFFCB5011F13FFDB7F0013C003F8EB1FF0DAC3E0EB07F80001D9C7
806D7E26007FCFC76C7E02DE6E7ED93FFC6F7E4A6F7E4A82181F4A82727E5C727EA2727E
A3727EA41A8084AC4E1300A54E5AA2611807A24E5A6E5E181F6E4B5A6E5E187F6E4B5A02
DE4A90C7FC02CF4A5ADAC780495ADAC3C0EB0FF0DAC1F0EB3FE0913AC07E01FF806FB448
C8FC030F13F80300138093CAFCB3A3497E497EB612F0A4415B7DBE49>I<9039078003F8
D807FFEB0FFFB5013F13C092387C0FE0913881F01F9238E03FF00001EB838039007F8700
148FEB3F8E029CEB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497E
EBFFF8B612FCA42C3F7CBE33>114 D<1438A71478A414F8A31301A31303A21307130F13
1FA2137F13FF1203000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D
6C148016076D6C14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B59
7FD733>116 D<D903C0150FD807FFED1FFFB50203B5FCA40001ED0007D8007F1501A201
3F81B3B25FA35FA35F011F15066E140E5F130F6E4A7F01075D6D6C494813E0D901FE4948
EBFFC0903A00FFC01F8091393FFFFE00020F13F8020001C0EC800042407DBE49>I<B66C
49B512E0A4000101F8C8387FFE0026007FE0ED1FF819E0013F705A61131F6E93C7FC130F
180E6E151E0107161C8001035EA26E157801011670806D5EA26F1301027F5DA26E6C495A
A26F1307021F92C8FCA26E6C130EA26F131E0207141CA26F133C020314388102015CA26F
13F06E5C168092387F81C0A216C3033F5B16E3DB1FE7C9FCA216FF6F5AA26F5AA36F5AA2
6F5AA36F5A433F7FBD46>I<B6D8801FB500E090B512F8A4000301F0C7D87FFCC7001F13
80C601C0DA3FF0913807FE00051F6F5A017F030F6F5A64133F05075E6E81011F030F5EA2
6E6F1403010F031F5E171D6E6F14070107033D93C7FC17386E6F5C01030378150EEF707F
6E70131E010103F0151CEFE03F6E70133C6D02011638EFC01F03806F1378027F01031670
EF800F03C06F13F0023F01075EEF000703E0EDF801021F495E040E130303F0EDFC03020F
011E5E041C130103F8EDFE070207013C93C8FC0438130003FC6F5A02030178150E047014
7F03FE169E020101F0159C4C143F03FF16FC6E5F4C141FA2037F5E4C140FA2033F5E93C8
1207A26F5E031E1503030E5E5D3F7FBD60>I<007FB500C0010FB512E0A4C691C70003EB
FC00D93FFE6E13E0D90FFC16807148C7FC01075E6D6C4A5A6D6C5D6D6D495A606E6C495A
6E6C49C8FC6E6C130E171E6E6C5B6E6C5B6E6C5B5F913801FF016EEB83C092387FC78003
3F90C9FC16EFED1FFE6F5A6F5A826F7E6F7E5D834B7F92380F3FE0ED1E1F033C7F923838
0FF892387807FCEDF003DA01E07F4A486C7E707F4A486D7E4AC7FC021E6E7E021C6E7E02
3C6E7E5C4A6E7E01016F7E49486E7E1307010F6F7F013F83D9FFF04A7F00076D4A13FCB5
6C020FEBFFF8A4453E80BD46>I<C312FEA3870382A784>124 D E
%EndDVIPSBitmapFont
end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4

%%EndSetup
%%Page: 1 1
1 0 bop 371 499 a Fj(Lin)l(ux)44 b(T)-11 b(ra\016c)43
b(Con)l(trol)h(|)f(Implemen)l(tation)i(Ov)l(erview)1132
739 y Fi(W)-8 b(erner)34 b(Almesb)s(erger,)e(EPFL)h(ICA)1166
856 y Fh(Werner.Almesberger@epfl)q(.ch)1426 1051 y Fi(No)m(v)m(em)m(b)s
(er)h(30,)e(1998)-114 2045 y Fg(Abstract)-114 2232 y
Ff(Lin)n(ux)42 b(o\013ers)g(a)g(ric)n(h)g(set)g(of)h(tra\016c)f(con)n
(trol)f(functions.)-114 2331 y(This)24 b(do)r(cumen)n(t)h(giv)n(es)e
(an)h(o)n(v)n(erview)f(of)h(the)h(design)f(of)g(the)-114
2431 y(resp)r(ectiv)n(e)f(k)n(ernel)g(co)r(de,)i(describ)r(es)e(its)h
(structure,)h(and)f(il-)-114 2531 y(lustrates)29 b(the)g(addition)g(of)
h(new)f(elemen)n(ts)g(b)n(y)g(describing)-114 2630 y(a)e(new)h(queuing)
f(discipline.)-114 2919 y Fg(1)135 b(In)l(tro)t(duction)-114
3106 y Ff(Recen)n(t)45 b(Lin)n(ux)f(k)n(ernels)g(o\013er)g(a)h(wide)f
(v)-5 b(ariet)n(y)44 b(of)h(traf-)-114 3206 y(\014c)g(con)n(trol)f
(functions.)90 b(The)45 b(k)n(ernel)f(parts)g(for)h(tra\016c)-114
3305 y(con)n(trol,)37 b(and)f(sev)n(eral)e(user-space)g(programs)g(to)i
(con)n(trol)-114 3405 y(them)g(ha)n(v)n(e)e(b)r(een)i(implemen)n(ted)g
(b)n(y)f(Alexey)g(Kuznetso)n(v)-114 3504 y Fe(<)t(kuznet@ms2.inr.a)o
(c.)o(ru)o(>)t Ff(.)42 b(That)31 b(w)n(ork)f(w)n(as)g(inspired)-114
3604 y(b)n(y)23 b(the)h(arc)n(hitecture)e(describ)r(ed)h(in)h([1],)g
(but)g(it)g(also)f(co)n(v)n(ers)-114 3704 y(the)h(mec)n(hanisms)f
(required)g(for)g(supp)r(orting)h(the)g(arc)n(hitec-)-114
3803 y(ture)29 b(dev)n(elop)r(ed)g(in)g(the)h(IETF)f(\\in)n(tserv")e
(group)h([2],)i(and)-114 3903 y(will)39 b(serv)n(e)e(as)h(the)h(basis)f
(for)g(supp)r(orting)g(the)h(more)e(re-)-114 4003 y(cen)n(t)g(w)n(ork)e
(of)i(\\di\013serv")e([3)o(].)65 b(See)36 b(also)g([4])g(for)h(further)
-114 4102 y(details)29 b(on)g(ho)n(w)g(in)n(tserv)g(and)g(di\013serv)g
(are)g(related.)41 b(This)-114 4202 y(do)r(cumen)n(t)26
b(illustrates)f(the)g(underlying)g(arc)n(hitecture)g(and)-114
4301 y(describ)r(es)40 b(ho)n(w)h(new)f(tra\016c)h(con)n(trol)e
(functions)j(can)e(b)r(e)-114 4401 y(added)f(to)f(the)h(Lin)n(ux)g(k)n
(ernel.)69 b(The)39 b(k)n(ernel)f(v)n(ersion)f(w)n(e)-114
4501 y(used)28 b(is)f(2.1.130.)-14 4603 y(Figure)33 b(1)g(sho)n(ws)f
(roughly)g(ho)n(w)h(the)h(k)n(ernel)f(pro)r(cesses)-114
4703 y(data)23 b(receiv)n(ed)e(from)i(the)h(net)n(w)n(ork,)e(and)h(ho)n
(w)f(it)i(generates)-114 4802 y(new)19 b(data)g(to)h(b)r(e)f(sen)n(t)h
(on)f(the)g(net)n(w)n(ork:)32 b(incoming)19 b(pac)n(k)n(ets)-114
4902 y(are)33 b(examined)h(and)g(then)g(either)g(directly)g(forw)n
(arded)f(to)-114 5001 y(the)d(net)n(w)n(ork)e(\(e.g.)43
b(on)29 b(a)h(di\013eren)n(t)f(in)n(terface,)h(if)g(the)g(ma-)-114
5101 y(c)n(hine)j(is)f(acting)h(as)f(a)g(router)g(or)g(a)g(bridge\),)i
(or)d(they)i(are)-114 5201 y(passed)27 b(up)g(to)h(higher)e(la)n(y)n
(ers)g(in)h(the)h(proto)r(col)e(stac)n(k)h(\(e.g.)-114
5300 y(to)c(a)g(transp)r(ort)g(proto)r(col)f(lik)n(e)h(UDP)h(or)e
(TCP\))i(for)f(further)-114 5400 y(pro)r(cessing.)69
b(Those)38 b(higher)g(la)n(y)n(ers)f(ma)n(y)h(also)g(generate)2061
2045 y(data)g(on)g(their)h(o)n(wn)f(and)g(hand)h(it)g(to)f(the)h(lo)n
(w)n(er)e(la)n(y)n(ers)2061 2144 y(for)31 b(tasks)g(lik)n(e)g
(encapsulation,)h(routing,)g(and)f(ev)n(en)n(tually)2061
2244 y(transmission.)2160 2349 y(\\F)-7 b(orw)n(arding")26
b(includes)i(the)h(selection)f(of)g(the)h(output)2061
2448 y(in)n(terface,)19 b(the)g(selection)f(of)g(the)h(next)g(hop,)h
(encapsulation,)2061 2548 y(etc.)37 b(Once)27 b(all)g(this)h(is)f
(done,)g(pac)n(k)n(ets)g(are)f(queued)i(on)f(the)2061
2648 y(resp)r(ectiv)n(e)j(output)i(in)n(terface.)47 b(This)31
b(is)h(the)f(p)r(oin)n(t)h(where)2061 2747 y(tra\016c)k(con)n(trol)f
(comes)h(in)n(to)g(pla)n(y)-7 b(.)63 b(T)-7 b(ra\016c)35
b(con)n(trol)g(can,)2061 2847 y(among)30 b(other)g(things,)i(decide)f
(if)h(pac)n(k)n(ets)e(are)g(queued)h(or)2061 2947 y(if)37
b(they)h(are)e(dropp)r(ed)h(\(e.g.)65 b(if)38 b(the)g(queue)f(has)f
(reac)n(hed)2061 3046 y(some)28 b(length)h(limit,)h(or)e(if)h(the)h
(tra\016c)e(exceeds)g(some)h(rate)2061 3146 y(limit\),)k(it)e(can)g
(decide)h(in)f(whic)n(h)g(order)f(pac)n(k)n(ets)g(are)g(sen)n(t)2061
3245 y(\(e.g.)k(to)20 b(giv)n(e)f(priorit)n(y)g(to)h(certain)g(\015o)n
(ws\),)h(it)g(can)e(dela)n(y)h(the)2061 3345 y(sending)j(of)h(pac)n(k)n
(ets)e(\(e.g.)35 b(to)24 b(limit)g(the)g(rate)f(of)h(outb)r(ound)2061
3445 y(tra\016c\),)j(etc.)2160 3550 y(Once)c(tra\016c)g(con)n(trol)f
(has)h(released)f(a)g(pac)n(k)n(et)h(for)f(send-)2061
3649 y(ing,)27 b(the)h(device)g(driv)n(er)e(pic)n(ks)h(it)i(up)f(and)f
(emits)h(it)g(on)g(the)2061 3749 y(net)n(w)n(ork.)2160
3854 y(Sections)e(2)f(to)h(4)g(giv)n(e)f(an)g(o)n(v)n(erview)f(and)i
(explain)g(some)2061 3953 y(terminology)-7 b(.)62 b(Sections)37
b(5)f(to)h(8)f(describ)r(e)g(the)h(elemen)n(ts)2061 4053
y(of)32 b(tra\016c)f(con)n(trol)g(in)h(the)h(Lin)n(ux)e(k)n(ernel)g(in)
i(more)e(detail.)2061 4152 y(Section)21 b(9)g(describ)r(es)g(a)g
(queuing)g(discipline)g(that)h(has)f(b)r(een)2061 4252
y(implemen)n(ted)28 b(b)n(y)f(the)h(author.)2061 4554
y Fg(2)134 b(Ov)l(erview)2061 4745 y Ff(The)30 b(tra\016c)h(con)n(trol)
e(co)r(de)i(in)f(the)i(Lin)n(ux)e(k)n(ernel)g(consists)2061
4845 y(of)d(the)h(follo)n(wing)f(ma)5 b(jor)26 b(conceptual)h(comp)r
(onen)n(ts:)2144 5027 y Fd(\017)41 b Ff(queuing)27 b(disciplines)2144
5213 y Fd(\017)41 b Ff(classes)26 b(\(within)j(a)e(queuing)g
(discipline\))2144 5400 y Fd(\017)41 b Ff(\014lters)1905
5649 y(1)p eop
%%Page: 2 2
2 1 bop 118 692 a @beginspecial 0 @llx 0 @lly 434 @urx
65 @ury 4340 @rwi @setspecial
%%BeginDocument: sys.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: sys.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Mon Sep 14 13:39:58 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 434 65
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-53.0 109.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/reencdict 12 dict def /ReEncode { reencdict begin
/newcodesandnames exch def /newfontname exch def /basefontname exch def
/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
basefontdict { exch dup /FID ne { dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
newfont /FontName newfontname put newcodesandnames aload pop
128 1 255 { newfont /Encoding get exch /.notdef put } for
newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
newfontname newfont definefont pop end } def
/isovec [
8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
8#220 /dotlessi 8#230 /oe 8#231 /OE
8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
/Times-Roman /Times-Roman-iso isovec ReEncode
/Times-Bold /Times-Bold-iso isovec ReEncode
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 2812 m -1000 -1000 l 9112 -1000 l 9112 2812 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1350 1500 m 3150 1500 l 3150 1800 l 1350 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3600 1500 m 5400 1500 l 5400 1800 l 3600 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5850 1500 m 7650 1500 l 7650 1800 l 5850 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3300 750 m 5700 750 l 5700 1050 l 3300 1050 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
1203 1620 m 1323 1650 l 1203 1680 l 1365 1680 l 1365 1620 l cp
clip
n 900 1650 m 1350 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 1203 1620 m 1323 1650 l 1203 1680 l 1203 1650 l 1203 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3453 1620 m 3573 1650 l 3453 1680 l 3615 1680 l 3615 1620 l cp
clip
n 3150 1650 m 3600 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 3453 1620 m 3573 1650 l 3453 1680 l 3453 1650 l 3453 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5703 1620 m 5823 1650 l 5703 1680 l 5865 1680 l 5865 1620 l cp
clip
n 5400 1650 m 5850 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 5703 1620 m 5823 1650 l 5703 1680 l 5703 1650 l 5703 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 1620 m 8073 1650 l 7953 1680 l 8115 1680 l 8115 1620 l cp
clip
n 7650 1650 m 8100 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 1620 m 8073 1650 l 7953 1680 l 7953 1650 l 7953 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3459 1100 m 3576 1063 l 3489 1151 l 3628 1068 l 3597 1017 l cp
clip
n 2850 1500 m 3600 1050 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 3459 1100 m 3576 1063 l 3489 1151 l 3474 1126 l 3459 1100 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4530 1353 m 4500 1473 l 4470 1353 l 4470 1515 l 4530 1515 l cp
clip
n 4500 1050 m 4500 1500 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 4530 1353 m 4500 1473 l 4470 1353 l 4500 1353 l 4530 1353 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 6750 1200 m 6750 1425 l gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman-iso ff 180.00 scf sf
2250 1725 m
gs 1 -1 sc (Input de-multiplexing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4500 1725 m
gs 1 -1 sc (Forwarding) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
6750 1725 m
gs 1 -1 sc (Output queuing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4500 975 m
gs 1 -1 sc (Upper layers \(TCP, UDP, ...\)) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
6750 1125 m
gs 1 -1 sc (Traffic control) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 1241 957 a Ff(Figure)27 b(1:)37 b(Pro)r(cessing)25
b(of)j(net)n(w)n(ork)e(data.)-31 1223 y Fd(\017)41 b
Ff(p)r(olicing)-14 1411 y(Eac)n(h)21 b(net)n(w)n(ork)g(device)i(has)f
(a)g Fc(queuing)j(discipline)g Ff(asso-)-114 1511 y(ciated)k(with)h
(it,)f(whic)n(h)h(con)n(trols)d(ho)n(w)i(pac)n(k)n(ets)e(enqueued)-114
1611 y(on)36 b(that)h(device)f(are)f(treated.)63 b(A)36
b(v)n(ery)f(simple)i(queuing)-114 1710 y(discipline)e(ma)n(y)e(just)i
(consist)f(of)g(a)g(single)g(queue,)i(where)-114 1810
y(all)24 b(pac)n(k)n(ets)f(are)g(stored)h(in)g(the)h(order)e(in)h(whic)
n(h)g(they)h(ha)n(v)n(e)-114 1910 y(b)r(een)32 b(enqueued,)i(and)d
(whic)n(h)h(is)g(emptied)h(as)e(fast)h(as)f(the)-114
2009 y(resp)r(ectiv)n(e)k(device)h(can)f(send.)62 b(See)36
b(\014gure)f(2)g(for)g(suc)n(h)h(a)-114 2109 y(queuing)27
b(discipline)g(without)g(externally)f(visible)h(in)n(ternal)-114
2208 y(structure.)305 2490 y @beginspecial 0 @llx 0 @lly
128 @urx 20 @ury 1280 @rwi @setspecial
%%BeginDocument: single.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: single.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:16:58 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 128 20
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-215.0 127.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3112 m -1000 -1000 l 6712 -1000 l 6712 3112 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 3900 1800 m 5400 1800 l 5400 2100 l 3900 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
5580 1920 m 5700 1950 l 5580 1980 l 5715 1980 l 5715 1920 l cp
clip
n 5400 1950 m 5700 1950 l gs col0 s gr gr

% arrowhead
n 5580 1920 m 5700 1950 l 5580 1980 l 5580 1950 l 5580 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3780 1920 m 3900 1950 l 3780 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3780 1920 m 3900 1950 l 3780 1980 l 3780 1950 l 3780 1920 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4650 2025 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2756 a(Figure)19 b(2:)33 b(A)20 b(simple)f(queuing)h
(discipline)g(without)g(classes.)-14 2986 y(More)25 b(elab)r(orate)h
(queuing)g(disciplines)g(ma)n(y)g(use)h Fc(\014lters)-114
3086 y Ff(to)g(distinguish)g(among)f(di\013eren)n(t)i
Fc(classes)g Ff(of)f(pac)n(k)n(ets)f(and)-114 3185 y(pro)r(cess)21
b(eac)n(h)g(class)g(in)h(a)f(sp)r(eci\014c)h(w)n(a)n(y)-7
b(,)22 b(e.g.)34 b(b)n(y)22 b(giving)f(one)-114 3285
y(class)27 b(priorit)n(y)f(o)n(v)n(er)g(other)h(classes.)-14
3392 y(Figure)g(3)h(sho)n(ws)e(an)i(example)g(of)g(suc)n(h)f(a)h
(queuing)g(dis-)-114 3492 y(cipline.)65 b(Note)37 b(that)g(m)n(ultiple)
g(\014lters)g(ma)n(y)f(map)g(to)h(the)-114 3592 y(same)27
b(class.)-14 3699 y(Queuing)c(disciplines)h(and)f(classes)f(are)h(in)n
(timately)h(tied)-114 3798 y(together:)36 b(the)29 b(presence)e(of)g
(classes)g(and)g(their)h(seman)n(tics)-114 3898 y(are)c(fundamen)n(tal)
i(prop)r(erties)f(of)g(the)h(queuing)f(discipline.)-114
3998 y(In)20 b(con)n(trast)e(to)h(that,)i(\014lters)e(can)g(b)r(e)h
(com)n(bined)f(arbitrarily)-114 4097 y(with)38 b(queuing)g(disciplines)
g(and)g(classes)e(as)i(long)f(as)g(the)-114 4197 y(queuing)d
(discipline)h(has)g(classes)e(at)h(all.)58 b(But)35 b(\015exibilit)n(y)
-114 4297 y(do)r(esn't)28 b(end)g(y)n(et)f({)g(classes)g(normally)f
(don't)i(tak)n(e)f(care)f(of)-114 4396 y(storing)17 b(their)i(pac)n(k)n
(ets)e(themselv)n(es,)j(but)f(they)f(use)g(another)-114
4496 y(queuing)24 b(discipline)g(to)g(tak)n(e)g(care)f(of)h(that.)36
b(That)24 b(queuing)-114 4595 y(discipline)37 b(can)g(b)r(e)g
(arbitrarily)e(c)n(hosen)h(from)g(the)i(set)e(of)-114
4695 y(a)n(v)-5 b(ailable)37 b(queuing)h(disciplines,)i(and)e(it)h(ma)n
(y)e(w)n(ell)h(ha)n(v)n(e)-114 4795 y(classes,)26 b(whic)n(h)i(in)g
(turn)f(use)h(queuing)f(disciplines,)h(etc.)-14 4902
y(Figure)i(4)g(sho)n(ws)g(an)h(example)f(of)h(suc)n(h)g(a)f(stac)n(k:)
43 b(\014rst,)-114 5001 y(there)37 b(is)g(a)f(queuing)h(discipline)g
(with)h(t)n(w)n(o)e(dela)n(y)g(priori-)-114 5101 y(ties.)62
b(P)n(ac)n(k)n(ets)34 b(whic)n(h)i(are)f(selected)h(b)n(y)f(the)i
(\014lter)e(go)h(to)-114 5201 y(the)c(high-priorit)n(y)e(class,)h
(while)h(all)g(other)f(pac)n(k)n(ets)f(go)h(to)-114 5300
y(the)25 b(lo)n(w-priorit)n(y)d(class.)35 b(Whenev)n(er)24
b(there)h(are)f(pac)n(k)n(ets)f(in)-114 5400 y(the)28
b(high-priorit)n(y)f(queue,)h(they)g(are)f(sen)n(t)h(b)r(efore)g(pac)n
(k)n(ets)2061 1223 y(in)35 b(the)g(lo)n(w-priorit)n(y)d(queue)j(\(e.g.)
58 b(the)35 b Fe(sch_prio)c Ff(queu-)2061 1322 y(ing)k(discipline)h(w)n
(orks)d(this)j(w)n(a)n(y\).)60 b(In)35 b(order)g(to)g(prev)n(en)n(t)
2061 1422 y(high-priorit)n(y)21 b(tra\016c)h(from)h(starving)f(lo)n
(w-priorit)n(y)f(tra\016c,)2061 1521 y(w)n(e)28 b(use)h(a)g
Fc(token)i(bucket)g(\014lter)e Ff(\(TBF\),)g(whic)n(h)g(enforces)f(a)
2061 1621 y(rate)f(of)h(at)g(most)g(1)g(Mbps.)39 b(Finally)-7
b(,)28 b(the)h(queuing)f(of)g(lo)n(w-)2061 1721 y(priorit)n(y)19
b(pac)n(k)n(ets)h(is)g(done)h(b)n(y)f(a)h(FIF)n(O)f(queuing)h
(discipline.)2061 1820 y(Note)30 b(that)g(there)g(are)f(b)r(etter)h(w)n
(a)n(ys)f(to)h(accomplish)f(what)2061 1920 y(w)n(e'v)n(e)37
b(done)g(here,)j(e.g.)68 b(b)n(y)37 b(using)h Fc(class-b)l(ase)l(d)i
(queuing)2061 2020 y Ff(\(CBQ\))27 b([5].)2160 2242 y(P)n(ac)n(k)n(ets)
63 b(are)h(enqueued)g(as)h(follo)n(ws:)110 b(when)65
b(the)2061 2342 y Fe(enqueue)26 b Ff(function)j(of)g(a)f(queuing)h
(discipline)g(is)g(called,)g(it)2061 2441 y(runs)d(one)g(\014lter)h
(after)g(the)g(other)f(un)n(til)h(one)g(of)g(them)g(indi-)2061
2541 y(cates)e(a)g(matc)n(h.)36 b(It)26 b(then)h(queues)e(the)h(pac)n
(k)n(et)f(for)g(the)h(cor-)2061 2641 y(resp)r(onding)j(class,)g(whic)n
(h)h(usually)f(means)h(to)f(in)n(v)n(ok)n(e)g(the)2061
2740 y Fe(enqueue)f Ff(function)k(of)f(the)h(queuing)f(discipline)h
(\\o)n(wned")2061 2840 y(b)n(y)23 b(that)h(class.)35
b(P)n(ac)n(k)n(ets)21 b(whic)n(h)j(do)f(not)h(matc)n(h)f(an)n(y)g(of)h
(the)2061 2939 y(\014lters)j(are)g(t)n(ypically)g(attributed)g(to)h
(some)f(default)h(class.)2160 3162 y(T)n(ypically)-7
b(,)23 b(eac)n(h)e(class)g(\\o)n(wns")f(one)i(queue,)h(but)f(it)h(is)f
(in)2061 3261 y(principle)32 b(also)g(p)r(ossible)g(that)h(sev)n(eral)e
(classes)g(share)h(the)2061 3361 y(same)k(queue)g(or)g(ev)n(en)g(that)h
(a)f(single)h(queue)f(is)h(used)f(b)n(y)2061 3461 y(all)29
b(classes)g(of)h(the)g(resp)r(ectiv)n(e)f(queuing)h(discipline.)44
b(Note)2061 3560 y(ho)n(w)n(ev)n(er)18 b(that)i(pac)n(k)n(ets)f(do)h
(not)h(carry)d(an)n(y)i(explicit)h(indica-)2061 3660
y(tion)27 b(of)f(whic)n(h)h(class)f(they)h(w)n(ere)f(attributed)h(to.)
37 b(Queuing)2061 3760 y(disciplines)42 b(that)h(c)n(hange)e(p)r
(er-class)g(information)h(when)2061 3859 y(dequeuing)19
b(pac)n(k)n(ets)g(\(e.g.)34 b(CBQ\))20 b(will)g(therefore)f(not)i(w)n
(ork)2061 3959 y(prop)r(erly)g(if)i(the)f(\\inner")f(queues)h(are)f
(shared,)i(unless)f(they)2061 4058 y(are)28 b(able)h(either)g(to)g(rep)
r(eat)f(the)i(classi\014cation)e(or)g(to)h(pass)2061
4158 y(the)e(classi\014cation)e(result)i(from)g Fe(enqueue)d
Ff(to)i Fe(dequeue)e Ff(b)n(y)2061 4258 y(some)j(other)g(means.)2160
4480 y(Usually)j(when)g(enqueuing)g(pac)n(k)n(ets,)f(the)h(corresp)r
(ond-)2061 4580 y(ing)25 b(\015o)n(w\(s\))g(can)g(b)r(e)h(p)r(oliced,)g
(e.g.)36 b(b)n(y)25 b(discarding)f(pac)n(k)n(ets)2061
4679 y(whic)n(h)j(exceed)g(a)h(certain)f(rate.)2160 4902
y(W)-7 b(e)50 b(will)f(not)g(try)f(to)h(in)n(tro)r(duce)g(new)g
(terminology)2061 5001 y(to)33 b(distinguish)h(among)f(algorithms,)h
(their)g(implemen)n(ta-)2061 5101 y(tions,)27 b(and)g(instances)g(of)h
(suc)n(h)f(elemen)n(ts,)h(but)g(rather)e(use)2061 5201
y(the)19 b(terms)f(queuing)g(discipline,)j(class,)e(and)g(\014lter)f
(through-)2061 5300 y(out)25 b(most)g(of)g(this)g(do)r(cumen)n(t,)h(to)
f(refer)f(to)h(all)g(three)g(lev)n(els)2061 5400 y(of)i(abstraction)f
(at)i(the)g(same)f(time.)1905 5649 y(2)p eop
%%Page: 3 3
3 2 bop 380 992 a @beginspecial 0 @llx 0 @lly 371 @urx
101 @ury 3710 @rwi @setspecial
%%BeginDocument: simple.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: simple.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:33:53 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 371 101
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-53.0 208.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4462 m -1000 -1000 l 8062 -1000 l 8062 4462 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1200 1800 m 1500 1800 l 1500 3150 l 6450 3150 l 6450 1800 l 6750 1800 l
 6750 3450 l 1200 3450 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 2700 m 2700 2700 l 2700 3000 l 2100 3000 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 1800 m 2700 1800 l 2700 2100 l 2100 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 2250 m 2700 2250 l 2700 2550 l 2100 2550 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 2850 m 3000 2400 l 3600 2400 l 3600 2775 l 5700 2775 l 5700 2400 l
 5850 2400 l 5850 2850 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 2250 m 3000 1800 l 3600 1800 l 3600 2175 l 5700 2175 l 5700 1800 l
 5850 1800 l 5850 2250 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2400 m 5400 2400 l 5400 2700 l 3900 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1800 m 5400 1800 l 5400 2100 l 3900 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
1953 1920 m 2073 1950 l 1953 1980 l 2115 1980 l 2115 1920 l cp
clip
n 1800 1950 m 2100 1950 l gs col0 s gr gr

% arrowhead
n 1953 1920 m 2073 1950 l 1953 1980 l 1953 1950 l 1953 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2370 m 2073 2400 l 1953 2430 l 2115 2430 l 2115 2370 l cp
clip
n 1800 2400 m 2100 2400 l gs col0 s gr gr

% arrowhead
n 1953 2370 m 2073 2400 l 1953 2430 l 1953 2400 l 1953 2370 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2820 m 2073 2850 l 1953 2880 l 2115 2880 l 2115 2820 l cp
clip
n 1500 1950 m 1800 1950 l 1800 2850 l 2100 2850 l gs col0 s gr gr

% arrowhead
n 1953 2820 m 2073 2850 l 1953 2880 l 1953 2850 l 1953 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1053 2595 m 1173 2625 l 1053 2655 l 1215 2655 l 1215 2595 l cp
clip
n 900 2625 m 1200 2625 l gs col0 s gr gr

% arrowhead
n 1053 2595 m 1173 2625 l 1053 2655 l 1053 2625 l 1053 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2865 1960 m 2973 2018 l 2850 2018 l 3007 2058 l 3022 2000 l cp
clip
n 2700 1950 m 3000 2025 l gs col0 s gr gr

% arrowhead
n 2865 1960 m 2973 2018 l 2850 2018 l 2857 1989 l 2865 1960 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2855 2739 m 2975 2712 l 2882 2793 l 3027 2720 l 3000 2666 l cp
clip
n 2700 2850 m 3000 2700 l gs col0 s gr gr

% arrowhead
n 2855 2739 m 2975 2712 l 2882 2793 l 2869 2766 l 2855 2739 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2883 2449 m 2980 2525 l 2859 2504 l 3006 2571 l 3031 2516 l cp
clip
n 2700 2400 m 3005 2537 l gs col0 s gr gr

% arrowhead
n 2883 2449 m 2980 2525 l 2859 2504 l 2871 2477 l 2883 2449 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5553 1920 m 5673 1950 l 5553 1980 l 5715 1980 l 5715 1920 l cp
clip
n 5400 1950 m 5700 1950 l gs col0 s gr gr

% arrowhead
n 5553 1920 m 5673 1950 l 5553 1980 l 5553 1950 l 5553 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 1920 m 3873 1950 l 3753 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3753 1920 m 3873 1950 l 3753 1980 l 3753 1950 l 3753 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 2520 m 3873 2550 l 3753 2580 l 3915 2580 l 3915 2520 l cp
clip
n 3600 2550 m 3900 2550 l gs col0 s gr gr

% arrowhead
n 3753 2520 m 3873 2550 l 3753 2580 l 3753 2550 l 3753 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5553 2520 m 5673 2550 l 5553 2580 l 5715 2580 l 5715 2520 l cp
clip
n 5400 2550 m 5700 2550 l gs col0 s gr gr

% arrowhead
n 5553 2520 m 5673 2550 l 5553 2580 l 5553 2550 l 5553 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6903 2595 m 7023 2625 l 6903 2655 l 7065 2655 l 7065 2595 l cp
clip
n 6750 2625 m 7050 2625 l gs col0 s gr gr

% arrowhead
n 6903 2595 m 7023 2625 l 6903 2655 l 6903 2625 l 6903 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6303 2820 m 6423 2850 l 6303 2880 l 6465 2880 l 6465 2820 l cp
clip
n 5850 1950 m 6150 1950 l 6150 2850 l 6450 2850 l gs col0 s gr gr

% arrowhead
n 6303 2820 m 6423 2850 l 6303 2880 l 6303 2850 l 6303 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6003 2520 m 6123 2550 l 6003 2580 l 6165 2580 l 6165 2520 l cp
clip
n 5850 2550 m 6150 2550 l gs col0 s gr gr

% arrowhead
n 6003 2520 m 6123 2550 l 6003 2580 l 6003 2550 l 6003 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2400 2925 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2400 2475 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2400 2025 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2700 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
1500 3375 m
gs 1 -1 sc (Queuing discipline) col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2100 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2025 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2625 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 845 1257 a Ff(Figure)27 b(3:)36 b(A)28 b(simple)g(queuing)
f(discipline)h(with)g(m)n(ultiple)g(classes.)118 2140
y @beginspecial 0 @llx 0 @lly 434 @urx 92 @ury 4340 @rwi
@setspecial
%%BeginDocument: complex.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: complex.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:50:09 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 434 92
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-107.0 199.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
 /DrawEllipse {
	/endangle exch def
	/startangle exch def
	/yrad exch def
	/xrad exch def
	/y exch def
	/x exch def
	/savematrix mtrx currentmatrix def
	x y tr xrad yrad sc 0 0 1 startangle endangle arc
	closepath
	savematrix setmatrix
	} def

/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4312 m -1000 -1000 l 10012 -1000 l 10012 4312 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 4800 1800 m 7500 1800 l 7500 2100 l 4800 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
6978 1920 m 7098 1950 l 6978 1980 l 7140 1980 l 7140 1920 l cp
clip
n 6900 1950 m 7125 1950 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6978 1920 m 7098 1950 l 6978 1980 l 6978 1950 l 6978 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 6450 1875 m 6900 1875 l 6900 2025 l 6450 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 6825 1875 m 6825 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 6750 1875 m 6750 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 4800 2400 m 6300 2400 l 6300 2700 l 4800 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 1800 m 2400 1800 l 2400 3000 l 8400 3000 l 8400 1800 l 8700 1800 l
 8700 3300 l 2100 3300 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 1800 m 3600 1800 l 3600 2100 l 3000 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2250 m 3900 1800 l 4500 1800 l 4500 2175 l 7800 2175 l 7800 1800 l
 7950 1800 l 7950 2250 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2850 m 3900 2400 l 4500 2400 l 4500 2775 l 6600 2775 l 6600 2400 l
 6750 2400 l 6750 2850 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Ellipse
n 7275 1950 106 106 0 360 DrawEllipse gs col0 s gr

% Polyline
n 7200 1875 m 7275 1950 l 7350 1950 l gs col0 s gr 
/Times-Roman ff 180.00 scf sf
4875 2025 m
gs 1 -1 sc (TBF, rate = 1 Mbps) col0 sh gr
% Polyline
n 5550 2475 m 6000 2475 l 6000 2625 l 5550 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5925 2475 m 5925 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5850 2475 m 5850 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5700 2475 m 5700 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5775 2475 m 5775 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
6078 2520 m 6198 2550 l 6078 2580 l 6240 2580 l 6240 2520 l cp
clip
n 6000 2550 m 6225 2550 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6078 2520 m 6198 2550 l 6078 2580 l 6078 2550 l 6078 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4875 2625 m
gs 1 -1 sc (FIFO) col0 sh gr
% Polyline
gs  clippath
3753 2595 m 3873 2625 l 3753 2655 l 3915 2655 l 3915 2595 l cp
clip
n 2700 1950 m 2700 2625 l 3900 2625 l gs col0 s gr gr

% arrowhead
n 3753 2595 m 3873 2625 l 3753 2655 l 3753 2625 l 3753 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 1920 m 3873 1950 l 3753 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3753 1920 m 3873 1950 l 3753 1980 l 3753 1950 l 3753 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2853 1920 m 2973 1950 l 2853 1980 l 3015 1980 l 3015 1920 l cp
clip
n 2400 1950 m 3000 1950 l gs col0 s gr gr

% arrowhead
n 2853 1920 m 2973 1950 l 2853 1980 l 2853 1950 l 2853 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
8253 2520 m 8373 2550 l 8253 2580 l 8415 2580 l 8415 2520 l cp
clip
n 7950 1950 m 8100 1950 l 8100 2550 l 8400 2550 l gs col0 s gr gr

% arrowhead
n 8253 2520 m 8373 2550 l 8253 2580 l 8253 2550 l 8253 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4653 1920 m 4773 1950 l 4653 1980 l 4815 1980 l 4815 1920 l cp
clip
n 4500 1950 m 4800 1950 l gs col0 s gr gr

% arrowhead
n 4653 1920 m 4773 1950 l 4653 1980 l 4653 1950 l 4653 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7653 1920 m 7773 1950 l 7653 1980 l 7815 1980 l 7815 1920 l cp
clip
n 7500 1950 m 7800 1950 l gs col0 s gr gr

% arrowhead
n 7653 1920 m 7773 1950 l 7653 1980 l 7653 1950 l 7653 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2520 m 2073 2550 l 1953 2580 l 2115 2580 l 2115 2520 l cp
clip
n 1800 2550 m 2100 2550 l gs col0 s gr gr

% arrowhead
n 1953 2520 m 2073 2550 l 1953 2580 l 1953 2550 l 1953 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4653 2520 m 4773 2550 l 4653 2580 l 4815 2580 l 4815 2520 l cp
clip
n 4500 2550 m 4800 2550 l gs col0 s gr gr

% arrowhead
n 4653 2520 m 4773 2550 l 4653 2580 l 4653 2550 l 4653 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6453 2520 m 6573 2550 l 6453 2580 l 6615 2580 l 6615 2520 l cp
clip
n 6300 2550 m 6600 2550 l gs col0 s gr gr

% arrowhead
n 6453 2520 m 6573 2550 l 6453 2580 l 6453 2550 l 6453 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 2520 m 8073 2550 l 7953 2580 l 8115 2580 l 8115 2520 l cp
clip
n 6750 2550 m 8100 2550 l gs col0 s gr gr

% arrowhead
n 7953 2520 m 8073 2550 l 7953 2580 l 7953 2550 l 7953 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
8853 2520 m 8973 2550 l 8853 2580 l 9015 2580 l 9015 2520 l cp
clip
n 8700 2550 m 9000 2550 l gs col0 s gr gr

% arrowhead
n 8853 2520 m 8973 2550 l 8853 2580 l 8853 2550 l 8853 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2400 3225 m
gs 1 -1 sc (Queuing discipline with two delay priorities) col0 sh gr
/Times-Italic ff 180.00 scf sf
3300 2550 m
gs 1 -1 sc (Default) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2025 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4200 2100 m
gs 1 -1 sc ("high") dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4200 2700 m
gs 1 -1 sc ("low") dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 632 2405 a(Figure)f(4:)36 b(Com)n(bination)27
b(of)h(priorit)n(y)-7 b(,)26 b(TBF,)i(and)f(FIF)n(O)h(queuing)f
(disciplines.)-114 2671 y Fg(3)135 b(Resources)-114 2871
y Ff(Lin)n(ux)19 b(tra\016c)f(con)n(trol)g(is)g(spread)g(o)n(v)n(er)f
(a)i(comparably)e(large)-114 2970 y(n)n(um)n(b)r(er)22
b(of)h(\014les.)35 b(Note)23 b(that)g(all)g(path)g(names)f(are)g
(relativ)n(e)-114 3070 y(to)39 b(the)g(base)g(directory)e(of)i(the)g
(resp)r(ectiv)n(e)g(comp)r(onen)n(t,)-114 3169 y(e.g.)60
b(for)35 b(the)h(Lin)n(ux)f(k)n(ernel)f(this)i(is)f Fe(/usr/src/linux/)
p Ff(,)-114 3269 y(for)27 b(the)h Fe(tc)f Ff(program)e
Fe(iproute2/tc/)p Ff(.)-14 3378 y Fe(tc)42 b Ff(is)i(a)f(user-space)e
(program)h(used)h(to)g(manipulate)-114 3478 y(individual)52
b(tra\016c)f(con)n(trol)f(elemen)n(ts.)109 b(Its)51 b(source)g(is)-114
3578 y(in)36 b(the)f(\014le)h Fe(iproute2-)p Fc(version)p
Fe(.tar.gz)p Ff(,)c(whic)n(h)j(can)g(b)r(e)-114 3677
y(obtained)57 b(from)h Fe(ftp://linux.wauu)o(g.)o(or)o(g/p)o(ub)o(/ne)o
(t/)-114 3777 y(ip-)t(routing/)p Ff(.)-14 3886 y(The)40
b(k)n(ernel)g(co)r(de)g(resides)g(mainly)g(in)h(the)g(directory)-114
3986 y Fe(net/sched/)p Ff(.)95 b(The)48 b(in)n(terfaces)f(b)r(et)n(w)n
(een)i(k)n(ernel)e(traf-)-114 4085 y(\014c)h(con)n(trol)f(elemen)n(ts)i
(and)f(user)f(space)h(programs)e(us-)-114 4185 y(ing)34
b(them)h(are)e(declared)g(in)h Fe(include/linux/pkt)o(_cl)o(s.)-114
4285 y(h)42 b Ff(and)f Fe(include/linux/pkt)o(_s)o(che)o(d.)o(h)p
Ff(.)74 b(Declarations)-114 4384 y(used)20 b(only)f(inside)h(the)g(k)n
(ernel)f(and)g(the)h(de\014nitions)g(of)g(some)-114 4484
y(inline)33 b(functions)g(can)f(b)r(e)h(found)f(in)h
Fe(include/net/pkt_)-114 4584 y(cls.h)26 b Ff(and)h Fe
(include/net/pkt_)o(sch)o(ed)o(.h)p Ff(.)-14 4693 y(The)52
b Fc(rtnetlink)f Ff(mec)n(hanism)g(used)h(for)f(comm)n(unica-)-114
4793 y(tion)42 b(b)r(et)n(w)n(een)h(tra\016c)e(con)n(trol)g(elemen)n
(ts)i(in)f(user-space)-114 4892 y(and)55 b(in)h(the)g(k)n(ernel)f(is)g
(implemen)n(ted)h(in)g Fe(net/core/)-114 4992 y(rtnetlink.c)21
b Ff(and)k Fe(include/linux/rt)o(net)o(li)o(nk)o(.h)p
Ff(.)30 b(rt-)-114 5091 y(netlink)39 b(is)e(based)h(on)g
Fc(netlink)p Ff(,)j(whic)n(h)d(can)f(b)r(e)i(found)f(in)-114
5191 y Fe(net/netlink/)23 b Ff(and)k Fe(include/linux/net)o(li)o(nk)o
(.h)p Ff(.)-14 5300 y(The)g(k)n(ernel)g(source)g(can)g(b)r(e)h
(obtained)f(from)h(the)g(usual)-114 5400 y(w)n(ell-kno)n(wn)43
b(places,)49 b(e.g.)88 b(from)44 b Fe(ftp://ftp.kernel.)2061
2671 y(org/pub/linux/k)o(ern)o(el)o(/v2)o(.1)o(/)p Ff(.)2160
2798 y(Finally)-7 b(,)45 b(the)c(example)g(in)g(section)g(9)f(is)h
(included)h(in)2061 2897 y(the)27 b(A)-7 b(TM)27 b(on)g(Lin)n(ux)f
(distribution,)h(whic)n(h)g(can)g(b)r(e)g(do)n(wn-)2061
2997 y(loaded)50 b(from)h Fe(http://lrcwww.ep)o(fl.)o(ch)o(/li)o(nu)o
(x-)t(a)o(tm)o(/)2061 3097 y(dist.html)p Ff(.)2061 3518
y Fg(4)134 b(T)-11 b(erminology)2061 3751 y Ff(Unfortunately)k(,)24
b(the)g(terminology)f(used)h(to)f(describ)r(e)h(traf-)2061
3850 y(\014c)36 b(con)n(trol)f(elemen)n(ts)h(is)g(far)g(from)g
(consisten)n(t)f(in)i(litera-)2061 3950 y(ture,)22 b(and)f(there)g(are)
f(some)g(v)-5 b(ariations)20 b(ev)n(en)h(within)g(Lin)n(ux)2061
4050 y(tra\016c)27 b(con)n(trol.)35 b(The)28 b(purp)r(ose)f(of)h(this)g
(section)f(is)g(to)h(help)2061 4149 y(to)f(put)h(things)g(in)n(to)f
(con)n(text.)2160 4277 y(Figure)34 b(5)h(sho)n(ws)e(the)i(arc)n
(hitectural)f(mo)r(dels)g(and)h(the)2061 4376 y(terminology)i(used)h
(in)h(the)g(IETF)f(groups)g(\\in)n(tserv")e([6])2061
4476 y(and)18 b(\\di\013serv")g([7)o(,)h(8],)h(and)f(ho)n(w)f(elemen)n
(ts)g(of)h(Lin)n(ux)g(tra\016c)2061 4575 y(con)n(trol)33
b(are)g(related)h(to)g(them.)58 b(Note)34 b(that)h(classes)e(pla)n(y)
2061 4675 y(an)27 b(am)n(biv)-5 b(alen)n(t)27 b(role,)h(b)r(ecause)f
(they)h(determine)g(the)g(\014nal)2061 4775 y(outcome)e(of)g(a)h
(classi\014cation)e(and)i(they)g(can)f(also)f(b)r(e)j(part)2061
4874 y(of)e(the)g(mec)n(hanism)g(that)g(implemen)n(ts)h(a)f(certain)f
(queuing)2061 4974 y(or)h(sc)n(heduling)h(b)r(eha)n(viour.)2160
5101 y(T)-7 b(able)32 b(1)g(summarizes)e(the)j(k)n(eyw)n(ords)d(used)i
(at)f(the)i Fe(tc)2061 5201 y Ff(command)e(line,)j(the)e(\014le)g
(names)g(used)g(in)g(the)g(k)n(ernel)g(\(in)2061 5300
y Fe(net/sched/)p Ff(\),)d(and)j(the)h(\014le)f(names)g(used)g(in)h
(the)f(source)2061 5400 y(of)27 b Fe(tc)p Ff(.)1905 5649
y(3)p eop
%%Page: 4 4
4 3 bop 272 4663 a @beginspecial 0 @llx 0 @lly 397 @urx
487 @ury 3970 @rwi @setspecial
%%BeginDocument: term3.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: term3.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov 30 13:19:24 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 397 487
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-36.0 532.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 9851 m -1000 -1000 l 8212 -1000 l 8212 9851 l cp clip
 0.06000 0.06000 sc
% Polyline
n 4725 1200 m 6075 1200 l 7050 1200 l 7050 8850 l 2250 8850 l 2250 7050 l
 4725 6150 l 4725 1875 l cp gs col7 0.70 shd ef gr 
% Polyline
n 3375 1200 m 3375 1950 l 3375 6075 l 6300 8250 l 2850 8250 l 2850 7050 l
 2250 5850 l 2250 1200 l cp gs col7 0.90 shd ef gr 
% Polyline
7.500 slw
n 3000 7200 m 5250 7200 l 5250 8100 l 3000 8100 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5925 5550 m 5850 5550 l 5850 5100 l 6750 5100 l 6750 5250 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5625 7800 m 5550 7800 l 5550 7200 l 6150 7200 l 6150 7350 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3525 7650 m 3450 7650 l 3450 7350 l 4950 7350 l 4950 7500 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 7800 m 3525 7800 l 3525 7500 l 5025 7500 l 5025 7650 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 5700 m 5925 5700 l 5925 5250 l 6825 5250 l 6825 5400 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5700 7950 m 5625 7950 l 5625 7350 l 6225 7350 l 6225 7500 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5100 7650 m 3600 7650 l 3600 7950 l 5100 7950 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
0.000 slw
n 3525 1200 m 4575 1200 l 4650 6750 l 4800 7500 l 5175 7575 l 5175 8025 l
 4275 8025 l 4275 7800 l 4500 7500 l 3525 4425 l cp gs col7 0.80 shd ef gr 
% Polyline
7.500 slw
n 2400 5250 m 3300 5250 l 3300 5700 l 2400 5700 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 1350 m 3300 1350 l 3300 1800 l 2400 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 5400 m 6900 5400 l 6900 5850 l 6000 5850 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5700 7500 m 6300 7500 l 6300 8100 l 5700 8100 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 4500 7650 m 5100 7650 l 5100 7950 l 4350 7950 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 8700 m 2400 7200 l 2700 7200 l 2700 8400 l 6600 8400 l 6600 7200 l
 6900 7200 l 6900 8700 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 3675 m 3300 3675 l 3300 4125 l 2400 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 1350 m 4500 1350 l 4500 1800 l 3600 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 1350 m 6900 1350 l 6900 1800 l 6000 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 4800 3675 m 5700 3675 l 5700 4125 l 4800 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 3675 m 6900 3675 l 6900 4125 l 6000 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 3000 m 4500 3000 l 4500 3450 l 3600 3450 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
gs  clippath
2280 5445 m 2400 5475 l 2280 5505 l 2415 5505 l 2415 5445 l cp
clip
n 2100 5475 m 2400 5475 l gs col0 s gr gr

% arrowhead
n 2280 5445 m 2400 5475 l 2280 5505 l 2280 5475 l 2280 5445 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2850 5625 m
gs 1 -1 sc (classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2850 5475 m
gs 1 -1 sc (\(BA\)) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
2280 1545 m 2400 1575 l 2280 1605 l 2415 1605 l 2415 1545 l cp
clip
n 2100 1575 m 2400 1575 l gs col0 s gr gr

% arrowhead
n 2280 1545 m 2400 1575 l 2280 1605 l 2280 1575 l 2280 1545 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2850 1650 m
gs 1 -1 sc (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
7080 5445 m 7200 5475 l 7080 5505 l 7215 5505 l 7215 5445 l cp
clip
n 6900 5475 m 7200 5475 l gs col0 s gr gr

% arrowhead
n 7080 5445 m 7200 5475 l 7080 5505 l 7080 5475 l 7080 5445 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
6450 5700 m
gs 1 -1 sc (Mechanism) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
6480 7620 m 6600 7650 l 6480 7680 l 6615 7680 l 6615 7620 l cp
clip
n 6300 7650 m 6600 7650 l gs col0 s gr gr

% arrowhead
n 6480 7620 m 6600 7650 l 6480 7680 l 6480 7650 l 6480 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 7470 m 6600 7500 l 6480 7530 l 6615 7530 l 6615 7470 l cp
clip
n 6300 7500 m 6600 7500 l gs col0 s gr gr

% arrowhead
n 6480 7470 m 6600 7500 l 6480 7530 l 6480 7500 l 6480 7470 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 7770 m 6600 7800 l 6480 7830 l 6615 7830 l 6615 7770 l cp
clip
n 6300 7800 m 6600 7800 l gs col0 s gr gr

% arrowhead
n 6480 7770 m 6600 7800 l 6480 7830 l 6480 7800 l 6480 7770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5505 7620 m 5625 7650 l 5505 7680 l 5640 7680 l 5640 7620 l cp
clip
n 5250 7650 m 5625 7650 l gs col0 s gr gr

% arrowhead
n 5505 7620 m 5625 7650 l 5505 7680 l 5505 7650 l 5505 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 7470 m 5550 7500 l 5430 7530 l 5565 7530 l 5565 7470 l cp
clip
n 5250 7500 m 5550 7500 l gs col0 s gr gr

% arrowhead
n 5430 7470 m 5550 7500 l 5430 7530 l 5430 7500 l 5430 7470 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5580 7770 m 5700 7800 l 5580 7830 l 5715 7830 l 5715 7770 l cp
clip
n 5250 7800 m 5700 7800 l gs col0 s gr gr

% arrowhead
n 5580 7770 m 5700 7800 l 5580 7830 l 5580 7800 l 5580 7770 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
6000 7875 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
2880 7620 m 3000 7650 l 2880 7680 l 3015 7680 l 3015 7620 l cp
clip
n 2700 7650 m 3000 7650 l gs col0 s gr gr

% arrowhead
n 2880 7620 m 3000 7650 l 2880 7680 l 2880 7650 l 2880 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2280 7845 m 2400 7875 l 2280 7905 l 2415 7905 l 2415 7845 l cp
clip
n 2100 7875 m 2400 7875 l gs col0 s gr gr

% arrowhead
n 2280 7845 m 2400 7875 l 2280 7905 l 2280 7875 l 2280 7845 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 4425 7500 m 4350 7650 l gs col0 s gr 
% Polyline
n 4350 7350 m 4275 7500 l gs col0 s gr 
/Times-Roman ff 180.00 scf sf
3300 7650 m
gs 1 -1 sc  90.0 rot (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4050 7875 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4800 7875 m
gs 1 -1 sc (Police) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
600 7800 m
gs 1 -1 sc (Linux kernel) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 5550 m
gs 1 -1 sc (Diffserv node) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 1650 m
gs 1 -1 sc (Intserv node) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 3975 m
gs 1 -1 sc (traffic) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 3750 m
gs 1 -1 sc (Diffserv) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 4200 m
gs 1 -1 sc (conditioner) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 8025 m
gs 1 -1 sc (traffic control) col0 sh gr
% Polyline
gs  clippath
3480 1545 m 3600 1575 l 3480 1605 l 3615 1605 l 3615 1545 l cp
clip
n 3300 1575 m 3600 1575 l gs col0 s gr gr

% arrowhead
n 3480 1545 m 3600 1575 l 3480 1605 l 3480 1575 l 3480 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 1695 m 3600 1725 l 3480 1755 l 3615 1755 l 3615 1695 l cp
clip
n 3300 1725 m 3600 1725 l gs col0 s gr gr

% arrowhead
n 3480 1695 m 3600 1725 l 3480 1755 l 3480 1725 l 3480 1695 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 1395 m 3600 1425 l 3480 1455 l 3615 1455 l 3615 1395 l cp
clip
n 3300 1425 m 3600 1425 l gs col0 s gr gr

% arrowhead
n 3480 1395 m 3600 1425 l 3480 1455 l 3480 1425 l 3480 1395 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2280 3870 m 2400 3900 l 2280 3930 l 2415 3930 l 2415 3870 l cp
clip
n 2100 3900 m 2400 3900 l gs col0 s gr gr

% arrowhead
n 2280 3870 m 2400 3900 l 2280 3930 l 2280 3900 l 2280 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3045 m 3600 3075 l 3480 3105 l 3615 3105 l 3615 3045 l cp
clip
n 2700 3675 m 2700 3075 l 3600 3075 l gs col0 s gr gr

% arrowhead
n 3480 3045 m 3600 3075 l 3480 3105 l 3480 3075 l 3480 3045 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5805 5445 m 5925 5475 l 5805 5505 l 5940 5505 l 5940 5445 l cp
clip
n 3300 5475 m 5925 5475 l gs col0 s gr gr

% arrowhead
n 5805 5445 m 5925 5475 l 5805 5505 l 5805 5475 l 5805 5445 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 5595 m 6000 5625 l 5880 5655 l 6015 5655 l 6015 5595 l cp
clip
n 3300 5625 m 6000 5625 l gs col0 s gr gr

% arrowhead
n 5880 5595 m 6000 5625 l 5880 5655 l 5880 5625 l 5880 5595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5730 5295 m 5850 5325 l 5730 5355 l 5865 5355 l 5865 5295 l cp
clip
n 3300 5325 m 5850 5325 l gs col0 s gr gr

% arrowhead
n 5730 5295 m 5850 5325 l 5730 5355 l 5730 5325 l 5730 5295 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1545 m 6000 1575 l 5880 1605 l 6015 1605 l 6015 1545 l cp
clip
n 4500 1575 m 6000 1575 l gs col0 s gr gr

% arrowhead
n 5880 1545 m 6000 1575 l 5880 1605 l 5880 1575 l 5880 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7080 1545 m 7200 1575 l 7080 1605 l 7215 1605 l 7215 1545 l cp
clip
n 6900 1575 m 7200 1575 l gs col0 s gr gr

% arrowhead
n 7080 1545 m 7200 1575 l 7080 1605 l 7080 1575 l 7080 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1395 m 6000 1425 l 5880 1455 l 6015 1455 l 6015 1395 l cp
clip
n 4500 1425 m 6000 1425 l gs col0 s gr gr

% arrowhead
n 5880 1395 m 6000 1425 l 5880 1455 l 5880 1425 l 5880 1395 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1695 m 6000 1725 l 5880 1755 l 6015 1755 l 6015 1695 l cp
clip
n 4500 1725 m 6000 1725 l gs col0 s gr gr

% arrowhead
n 5880 1695 m 6000 1725 l 5880 1755 l 5880 1725 l 5880 1695 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 4020 m 6000 4050 l 5880 4080 l 6015 4080 l 6015 4020 l cp
clip
n 5700 4050 m 6000 4050 l gs col0 s gr gr

% arrowhead
n 5880 4020 m 6000 4050 l 5880 4080 l 5880 4050 l 5880 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 3870 m 4800 3900 l 4680 3930 l 4815 3930 l 4815 3870 l cp
clip
n 3300 3900 m 4800 3900 l gs col0 s gr gr

% arrowhead
n 4680 3870 m 4800 3900 l 4680 3930 l 4680 3900 l 4680 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 3720 m 4800 3750 l 4680 3780 l 4815 3780 l 4815 3720 l cp
clip
n 3300 3750 m 4800 3750 l gs col0 s gr gr

% arrowhead
n 4680 3720 m 4800 3750 l 4680 3780 l 4680 3750 l 4680 3720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 4020 m 4800 4050 l 4680 4080 l 4815 4080 l 4815 4020 l cp
clip
n 3300 4050 m 4800 4050 l gs col0 s gr gr

% arrowhead
n 4680 4020 m 4800 4050 l 4680 4080 l 4680 4050 l 4680 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6330 3555 m 6300 3675 l 6270 3555 l 6270 3690 l 6330 3690 l cp
clip
n 4500 3375 m 6300 3375 l 6300 3675 l gs col0 s gr gr

% arrowhead
n 6330 3555 m 6300 3675 l 6270 3555 l 6300 3555 l 6330 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 3555 m 6450 3675 l 6420 3555 l 6420 3690 l 6480 3690 l cp
clip
n 4500 3225 m 6450 3225 l 6450 3675 l gs col0 s gr gr

% arrowhead
n 6480 3555 m 6450 3675 l 6420 3555 l 6450 3555 l 6480 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6630 3555 m 6600 3675 l 6570 3555 l 6570 3690 l 6630 3690 l cp
clip
n 4500 3075 m 6600 3075 l 6600 3675 l gs col0 s gr gr

% arrowhead
n 6630 3555 m 6600 3675 l 6570 3555 l 6600 3555 l 6630 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5130 3555 m 5100 3675 l 5070 3555 l 5070 3690 l 5130 3690 l cp
clip
n 5100 3375 m 5100 3675 l gs col0 s gr gr

% arrowhead
n 5130 3555 m 5100 3675 l 5070 3555 l 5100 3555 l 5130 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5280 3555 m 5250 3675 l 5220 3555 l 5220 3690 l 5280 3690 l cp
clip
n 5250 3225 m 5250 3675 l gs col0 s gr gr

% arrowhead
n 5280 3555 m 5250 3675 l 5220 3555 l 5250 3555 l 5280 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 3555 m 5400 3675 l 5370 3555 l 5370 3690 l 5430 3690 l cp
clip
n 5400 3075 m 5400 3675 l gs col0 s gr gr

% arrowhead
n 5430 3555 m 5400 3675 l 5370 3555 l 5400 3555 l 5430 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 3720 m 6000 3750 l 5880 3780 l 6015 3780 l 6015 3720 l cp
clip
n 5700 3750 m 6000 3750 l gs col0 s gr gr

% arrowhead
n 5880 3720 m 6000 3750 l 5880 3780 l 5880 3750 l 5880 3720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 3870 m 6000 3900 l 5880 3930 l 6015 3930 l 6015 3870 l cp
clip
n 5700 3900 m 6000 3900 l gs col0 s gr gr

% arrowhead
n 5880 3870 m 6000 3900 l 5880 3930 l 5880 3900 l 5880 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7080 3870 m 7200 3900 l 7080 3930 l 7215 3930 l 7215 3870 l cp
clip
n 6900 3900 m 7200 3900 l gs col0 s gr gr

% arrowhead
n 7080 3870 m 7200 3900 l 7080 3930 l 7080 3900 l 7080 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3195 m 3600 3225 l 3480 3255 l 3615 3255 l 3615 3195 l cp
clip
n 2850 3675 m 2850 3225 l 3600 3225 l gs col0 s gr gr

% arrowhead
n 3480 3195 m 3600 3225 l 3480 3255 l 3480 3225 l 3480 3195 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3345 m 3600 3375 l 3480 3405 l 3615 3405 l 3615 3345 l cp
clip
n 3000 3675 m 3000 3375 l 3600 3375 l gs col0 s gr gr

% arrowhead
n 3480 3345 m 3600 3375 l 3480 3405 l 3480 3375 l 3480 3345 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 3525 1800 m 3825 2175 l gs col0 s gr 
% Polyline
n 4425 2175 m 4950 1800 l gs col0 s gr 
% Polyline
n 5775 4125 m 5550 4575 l gs col0 s gr 
% Polyline
n 4125 4125 m 4275 4500 l gs col0 s gr 
% Polyline
n 4425 4800 m 4350 5250 l gs col0 s gr 
% Polyline
gs  clippath
7080 7845 m 7200 7875 l 7080 7905 l 7215 7905 l 7215 7845 l cp
clip
n 6900 7875 m 7200 7875 l gs col0 s gr gr

% arrowhead
n 7080 7845 m 7200 7875 l 7080 7905 l 7080 7875 l 7080 7845 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4050 1650 m
gs 1 -1 sc (Policing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2850 3975 m
gs 1 -1 sc (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 1575 m
gs 1 -1 sc (Packet) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 1725 m
gs 1 -1 sc (scheduler) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 4050 m
gs 1 -1 sc (dropper) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
5250 3975 m
gs 1 -1 sc (Marker) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 3900 m
gs 1 -1 sc (Shaper/) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4050 3300 m
gs 1 -1 sc (Meter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4125 2325 m
gs 1 -1 sc (Flows) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 4725 m
gs 1 -1 sc (\(Behaviour\) aggregates) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
4050 900 m
gs 1 -1 sc (Metering) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
5850 900 m
gs 1 -1 sc (Queuing/scheduling) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 8625 m
gs 1 -1 sc (Queuing discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 900 m
gs 1 -1 sc (Classification) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -19 4929 a Ff(Figure)27 b(5:)36 b(Relation)28
b(of)f(elemen)n(ts)h(of)f(the)h(in)n(tserv)f(and)g(di\013serv)h(arc)n
(hitecture)e(to)h(tra\016c)h(con)n(trol)e(in)i(the)g(Lin)n(ux)f(k)n
(ernel.)1905 5649 y(4)p eop
%%Page: 5 5
5 4 bop 939 153 1975 4 v 937 253 4 100 v 1174 223 a Ff(Elemen)n(t)p
1706 253 V 284 w Fe(tc)27 b Ff(k)n(eyw)n(ord)p 2220 253
V 98 w(File)h(name)f(pre\014x)p 2912 253 V 937 353 V
1706 353 V 2220 353 V 2272 323 a(Kernel)p 2560 353 V
181 w Fe(tc)p 2912 353 V 939 356 1975 4 v 937 456 4 100
v 988 426 a Ff(Queuing)h(discipline)99 b Fe(qdisc)328
b(sch_)213 b(q_)p 2912 456 V 937 555 V 988 525 a Ff(Class)578
b Fe(class)295 b Ff(\()p Fe(sch_)p Ff(\))150 b(\()p Fe(q_)p
Ff(\))p 2912 555 V 937 655 V 988 625 a(Filter)567 b Fe(filter)284
b(cls_)213 b(f_)p 2912 655 V 939 658 1975 4 v 709 890
a Ff(T)-7 b(able)28 b(1:)36 b(Keyw)n(ords)26 b(and)h(\014le)h(names)f
(used)g(for)h(tra\016c)f(con)n(trol)f(elemen)n(ts.)-114
1155 y Fg(5)135 b(Queuing)45 b(disciplines)-114 1337
y Ff(Eac)n(h)72 b(queuing)h(discipline)h(pro)n(vides)e(the)h(follo)n
(wing)-114 1437 y(set)g(of)g(functions)g(to)f(con)n(trol)g(its)h(op)r
(eration)f(\(see)-114 1536 y Fe(struct)41 b(Qdisc_ops)24
b Ff(in)k Fe(include/net/pkt_)o(sc)o(hed)o(.h)o Ff(\):)-114
1690 y Fe(enqueue)39 b Ff(enqueues)34 b(a)g(pac)n(k)n(et)g(with)h(the)g
(queuing)g(disci-)52 1790 y(pline.)54 b(If)33 b(the)h(queuing)f
(discipline)g(has)g(classes,)g(the)52 1889 y Fe(enqueue)17
b Ff(function)k(\014rst)f(selects)f(a)h(class)f(and)h(then)g(in-)52
1989 y(v)n(ok)n(es)h(the)j Fe(enqueue)c Ff(function)k(of)f(the)g
(corresp)r(onding)52 2089 y(queuing)k(discipline)h(for)f(further)h
(enqueuing.)-114 2249 y Fe(dequeue)39 b Ff(returns)h(the)i(next)g(pac)n
(k)n(et)f(eligible)g(for)g(send-)52 2348 y(ing.)47 b(If)32
b(the)g(queuing)f(discipline)g(has)g(no)g(pac)n(k)n(ets)f(to)52
2448 y(send)21 b(\(e.g.)34 b(b)r(ecause)21 b(the)g(queue)f(is)h(empt)n
(y)g(or)f(b)r(ecause)52 2548 y(they're)34 b(not)h(sc)n(heduled)f(to)g
(b)r(e)h(sen)n(t)f(y)n(et\),)i Fe(dequeue)52 2647 y Ff(returns)27
b(NULL.)-114 2807 y Fe(requeue)39 b Ff(puts)47 b(a)f(pac)n(k)n(et)f
(bac)n(k)h(in)n(to)g(the)h(queue)g(after)52 2907 y(dequeuing)40
b(it)h(with)g Fe(dequeue)p Ff(.)72 b(This)41 b(di\013ers)f(from)52
3006 y Fe(enqueue)e Ff(in)j(that)h(the)f(pac)n(k)n(et)f(should)h(b)r(e)
g(queued)52 3106 y(at)30 b(exactly)f(the)h(place)g(from)f(whic)n(h)h
(it)g(w)n(as)f(remo)n(v)n(ed)52 3206 y(b)n(y)g Fe(dequeue)p
Ff(,)e(and)j(that)f(it)h(should)g(not)f(b)r(e)h(included)52
3305 y(in)42 b(the)f(statistics)g(of)g(cum)n(ulativ)n(e)g(tra\016c)f
(that)i(has)52 3405 y(passed)21 b(the)i(queue,)g(b)r(ecause)e(that)h(w)
n(as)f(already)g(done)52 3504 y(in)28 b(the)g Fe(enqueue)d
Ff(function.)-114 3664 y Fe(drop)40 b Ff(drops)27 b(one)g(pac)n(k)n(et)
f(from)i(the)g(queue.)-114 3824 y Fe(init)40 b Ff(initializes)18
b(and)h(con\014gures)e(the)j(queuing)e(discipline.)-114
3984 y Fe(reset)39 b Ff(returns)46 b(the)g(queuing)g(discipline)g(to)g
(its)g(initial)52 4084 y(state.)34 b(All)21 b(queues)f(are)f(cleared,)h
(timers)g(are)f(stopp)r(ed,)52 4184 y(etc.)35 b(Also,)24
b(the)f Fe(reset)e Ff(functions)i(of)g(all)f(queuing)h(dis-)52
4283 y(ciplines)37 b(asso)r(ciated)e(with)j(classes)d(of)i(this)g
(queuing)52 4383 y(discipline)28 b(are)e(in)n(v)n(ok)n(ed.)-114
4543 y Fe(destroy)39 b Ff(remo)n(v)n(es)e(a)j(queuing)f(discipline.)74
b(It)40 b(remo)n(v)n(es)52 4642 y(all)24 b(classes)f(and)h(p)r(ossibly)
g(also)f(all)h(\014lters,)g(cancels)g(all)52 4742 y(p)r(ending)i(ev)n
(en)n(ts)e(and)h(returns)g(all)g(resources)e(held)j(b)n(y)52
4842 y(the)c(queuing)g(discipline)g(\(except)g(for)f(the)i(data)e
(struc-)52 4941 y(ture)28 b(describing)e(the)i(queuing)g(discipline)f
(itself)6 b(\).)-114 5101 y Fe(dump)40 b Ff(returns)32
b(diagnostic)g(data)h(used)g(for)f(main)n(tenance.)52
5201 y(T)n(ypically)-7 b(,)42 b(the)e Fe(dump)e Ff(functions)i(returns)
f(all)h(su\016-)52 5300 y(cien)n(tly)d(imp)r(ortan)n(t)g
(con\014guration)e(and)i(state)g(v)-5 b(ari-)52 5400
y(ables.)2160 1155 y(F)e(or)20 b(all)f(these)h(functions,)i(queuing)e
(disciplines)f(are)g(usu-)2061 1255 y(ally)45 b(referenced)h(b)n(y)g(a)
g(p)r(oin)n(ter)f(to)h(the)h(corresp)r(onding)2061 1355
y Fe(struct)41 b(Qdisc)p Ff(.)2160 1463 y(When)30 b(a)e(pac)n(k)n(et)g
(is)g(enqueued)h(on)g(an)f(in)n(terface)g(\()p Fe(dev_)2061
1562 y(queue_xmit)22 b Ff(in)k Fe(net/core/dev.c)p Ff(\),)c(the)k
Fe(enqueue)e Ff(func-)2061 1662 y(tion)i(of)g(the)h(device's)f(queuing)
g(discipline)g(\(\014eld)h Fe(qdisc)d Ff(of)2061 1762
y Fe(struct)41 b(device)28 b Ff(in)j Fe(include/linux/n)o(etd)o(ev)o
(ice)o(.c)o Ff(\))25 b(is)2061 1861 y(in)n(v)n(ok)n(ed.)52
b(Afterw)n(ards,)34 b Fe(dev_queue_xmit)28 b Ff(calls)k
Fe(qdisc_)2061 1961 y(wakeup)19 b Ff(in)j Fe(include/net/pkt_)o(sc)o
(hed)o(.h)15 b Ff(on)21 b(that)h(device)2061 2061 y(to)27
b(try)g(sending)h(the)g(pac)n(k)n(et)e(that)i(w)n(as)f(just)h
(enqueued.)2160 2169 y Fe(qdisc_wakeup)33 b Ff(immediately)38
b(calls)f Fe(qdisc_restart)2061 2268 y Ff(in)49 b Fe(net/sched/sch_ge)o
(ne)o(ri)o(c.c)o Ff(,)f(whic)n(h)h(is)g(the)g(main)2061
2368 y(function)23 b(to)f(p)r(oll)h(queuing)f(disciplines)h(and)f(to)h
(send)f(pac)n(k-)2061 2468 y(ets.)34 b Fe(qdisc_restart)13
b Ff(\014rst)18 b(tries)h(to)f(obtain)g(a)h(pac)n(k)n(et)e(from)2061
2567 y(the)i(queuing)g(discipline)g(of)g(the)h(device,)h(and)d(if)i(it)
g(succeeds,)2061 2667 y(it)28 b(in)n(v)n(ok)n(es)e(the)j(device's)f
Fe(hard_start_xmit)22 b Ff(function)28 b(to)2061 2767
y(actually)19 b(send)g(the)h(pac)n(k)n(et.)33 b(If)21
b(sending)e(fails)g(for)g(some)g(rea-)2061 2866 y(son,)29
b(the)h(pac)n(k)n(et)f(is)h(returned)f(to)g(the)h(queuing)g(discipline)
2061 2966 y(via)d(its)g Fe(requeue)e Ff(function.)2160
3074 y Fe(qdisc_wakeup)31 b Ff(can)j(also)g(b)r(e)i(in)n(v)n(ok)n(ed)e
(b)n(y)h(a)f(queuing)2061 3174 y(discipline)g(when)g(that)g(queuing)g
(discipline)g(notices)g(that)2061 3273 y(a)c(pac)n(k)n(et)f(ma)n(y)h(b)
r(e)h(due)f(for)g(sending,)h(e.g.)45 b(on)30 b(expiration)2061
3373 y(of)38 b(a)g(timer.)69 b(TBF)38 b(is)g(an)g(example)g(of)g(suc)n
(h)g(a)g(queuing)2061 3473 y(discipline.)48 b Fe(qdisc_restart)27
b Ff(is)k(also)f(called)i(via)e Fe(qdisc_)2061 3572 y(run_queues)25
b Ff(from)30 b Fe(net_bh)d Ff(in)j Fe(net/core/dev.c)p
Ff(.)38 b Fe(net_)2061 3672 y(bh)g Ff(is)h(the)h(\\b)r(ottom-half)6
b(")38 b(handler)h(of)g(the)h(net)n(w)n(orking)2061 3771
y(stac)n(k)f(and)g(is)h(executed)g(whenev)n(er)f(pac)n(k)n(ets)g(ha)n
(v)n(e)g(b)r(een)2061 3871 y(queued)27 b(up)h(for)f(further)h(pro)r
(cessing.)2160 3979 y(Figure)h(6)g(illustrates)g(the)g(pro)r(cedure.)41
b(F)-7 b(or)29 b(simplicit)n(y)-7 b(,)2061 4079 y(calls)29
b(made)h(b)n(y)g(the)h(queuing)f(discipline)g(\(e.g.)45
b(for)29 b(classi-)2061 4179 y(\014cation\))e(are)g(not)g(sho)n(wn.)
2160 4287 y(Note)40 b(that)f(queuing)g(disciplines)g(nev)n(er)g(mak)n
(e)f(direct)2061 4386 y(calls)22 b(to)h(deliv)n(ery)f(functions.)35
b(Instead,)24 b(they)f(ha)n(v)n(e)f(to)g(w)n(ait)2061
4486 y(un)n(til)28 b(they)f(are)g(p)r(olled.)2160 4594
y(If)c(a)e(queuing)h(discipline)h(is)f(compiled)g(in)n(to)f(the)i(the)f
(k)n(er-)2061 4694 y(nel,)e(it)f(should)f(b)r(e)h(registered)e(b)n(y)i
Fe(pktsched_init)13 b Ff(in)19 b Fe(net/)2061 4794 y(sched/sch_api.c)o
Ff(.)29 b(Alternativ)n(ely)-7 b(,)21 b(is)g(can)f(also)f(b)r(e)i
(regis-)2061 4893 y(tered)29 b(from)f(some)h(other)f(place)h(using)g
Fe(register_qdisc)p Ff(,)2061 4993 y(e.g.)59 b(from)35
b(the)h Fe(init_module)31 b Ff(function)36 b(if)g(the)f(queuing)2061
5092 y(discipline)27 b(is)h(compiled)g(as)e(a)i(mo)r(dule.)2160
5201 y(When)49 b(creating)d(an)i(instance)g(of)f(a)h(queuing)f(disci-)
2061 5300 y(pline,)d(a)39 b(v)n(ector)g(of)i(options)e(\(t)n(yp)r(e)i
Fe(struct)g(rtattr)g(*)p Ff(,)2061 5400 y(declared)29
b(in)i Fe(include/linux/rt)o(net)o(li)o(nk)o(.h)p Ff(\))24
b(is)31 b(passed)1905 5649 y(5)p eop
%%Page: 6 6
6 5 bop -15 1975 a @beginspecial 0 @llx 0 @lly 205 @urx
219 @ury 2050 @rwi @setspecial
%%BeginDocument: send.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: send.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:07:33 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 205 219
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-18.0 342.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6700 m -1000 -1000 l 4715 -1000 l 4715 6700 l cp clip
 0.06000 0.06000 sc
/Courier ff 180.00 scf sf
1500 4050 m
gs 1 -1 sc (qdisc_restart) col0 sh gr
/Courier ff 180.00 scf sf
1500 3450 m
gs 1 -1 sc (qdisc_wakeup) col0 sh gr
/Courier ff 180.00 scf sf
2475 4425 m
gs 1 -1 sc (_dequeue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2475 4425 m
gs 1 -1 sc (qdisc) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2100 4725 m
gs 1 -1 sc (hard_start_xmit) col0 sh gr
/Courier ff 180.00 scf sf
1200 2625 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
1200 2625 m
gs 1 -1 sc (qdisc) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
300 2175 m
gs 1 -1 sc (dev_queue_xmit) col0 sh gr
/Courier ff 180.00 scf sf
450 5700 m
gs 1 -1 sc (net_bh) col0 sh gr
% Polyline
7.500 slw
gs  clippath
1305 3345 m 1425 3375 l 1305 3405 l 1440 3405 l 1440 3345 l cp
clip
n 450 2250 m 450 3375 l 1425 3375 l gs col0 s gr gr

% arrowhead
n 1305 3345 m 1425 3375 l 1305 3405 l 1305 3375 l 1305 3345 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2130 3180 m 2100 3300 l 2070 3180 l 2070 3315 l 2130 3315 l cp
clip
n 3300 3000 m 2100 3000 l 2100 3300 l gs col0 s gr gr

% arrowhead
n 2130 3180 m 2100 3300 l 2070 3180 l 2100 3180 l 2130 3180 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2130 3780 m 2100 3900 l 2070 3780 l 2070 3915 l 2130 3915 l cp
clip
n 2100 3525 m 2100 3900 l gs col0 s gr gr

% arrowhead
n 2130 3780 m 2100 3900 l 2070 3780 l 2100 3780 l 2130 3780 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1905 4620 m 2025 4650 l 1905 4680 l 2040 4680 l 2040 4620 l cp
clip
n 1650 4125 m 1650 4650 l 2025 4650 l gs col0 s gr gr

% arrowhead
n 1905 4620 m 2025 4650 l 1905 4680 l 1905 4650 l 1905 4620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1905 4320 m 2025 4350 l 1905 4380 l 2040 4380 l 2040 4320 l cp
clip
n 1650 4350 m 2025 4350 l gs col0 s gr gr

% arrowhead
n 1905 4320 m 2025 4350 l 1905 4380 l 1905 4350 l 1905 4320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3300 2700 m 3300 3300 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
630 2520 m 750 2550 l 630 2580 l 765 2580 l 765 2520 l cp
clip
n 450 2550 m 750 2550 l gs col0 s gr gr

% arrowhead
n 630 2520 m 750 2550 l 630 2580 l 630 2550 l 630 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [15 45] 45 sd
gs  clippath
2880 2520 m 3000 2550 l 2880 2580 l 3015 2580 l 3015 2520 l cp
clip
n 2100 2550 m 3000 2550 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 2880 2520 m 3000 2550 l 2880 2580 l 2880 2550 l 2880 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1305 3945 m 1425 3975 l 1305 4005 l 1440 4005 l 1440 3945 l cp
clip
n 825 4950 m 825 3975 l 1425 3975 l gs col0 s gr gr

% arrowhead
n 1305 3945 m 1425 3975 l 1305 4005 l 1305 3975 l 1305 3945 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
795 5295 m 825 5175 l 855 5295 l 855 5160 l 795 5160 l cp
clip
n 825 5550 m 825 5175 l gs col0 s gr gr

% arrowhead
n 795 5295 m 825 5175 l 855 5295 l 825 5295 l 795 5295 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
3075 2625 m
gs 1 -1 sc (Timer) col0 sh gr
/Courier ff 180.00 scf sf
300 5100 m
gs 1 -1 sc (qdisc_run_queues) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2241 a Ff(Figure)22 b(6:)33 b(F)-7
b(unctions)23 b(called)f(when)g(enqueuing)g(and)g(send-)-114
2340 y(ing)27 b(pac)n(k)n(ets.)-114 2614 y(to)35 b(the)g
Fe(init)e Ff(function.)59 b(Eac)n(h)33 b(option)i(is)f(enco)r(ded)h
(with)-114 2713 y(its)51 b(t)n(yp)r(e,)56 b(the)51 b(length)f(of)h(the)
f(v)-5 b(alue,)57 b(and)50 b(the)h(v)-5 b(alue)-114 2813
y(\(i.e.)72 b(zero)38 b(or)h(more)f(data)h(b)n(ytes\).)71
b(Option)39 b(t)n(yp)r(es)h(and)-114 2913 y(the)f(data)e(structures)h
(used)g(for)g(v)-5 b(alues)38 b(are)f(declared)g(in)-114
3012 y Fe(include/linux/pk)o(t_s)o(ch)o(ed)o(.h)p Ff(.)k(The)32
b(option)f(v)n(ector)f(is)-114 3112 y(parsed)39 b(b)n(y)h(calling)f
Fe(rtattr_parse)p Ff(,)f(whic)n(h)i(returns)g(an)-114
3212 y(arra)n(y)25 b(of)i(p)r(oin)n(ters)g(to)h(the)f(individual)h
(elemen)n(ts,)f(indexed)-114 3311 y(b)n(y)37 b(the)h(option)f(t)n(yp)r
(e.)66 b(The)37 b(length)g(and)h(con)n(ten)n(t)e(of)i(an)-114
3411 y(option)29 b(can)g(b)r(e)h(accessed)e(via)h(the)h(macros)e
Fe(RTA_PAYLOAD)-114 3511 y Ff(and)f Fe(RTA_DATA)p Ff(,)e(resp)r(ectiv)n
(ely)-7 b(.)-14 3614 y(Option)23 b(v)n(ectors)e(are)h(passed)h(b)r(et)n
(w)n(een)g(user-space)f(pro-)-114 3714 y(grams)i(and)h(the)h(k)n(ernel)
e(using)h(the)h(rtnetlink)g(mec)n(hanism.)-114 3814 y(Explaining)19
b(rtnetlink)i(and)f(the)h(underlying)f(netlink)h(is)f(b)r(e-)-114
3913 y(y)n(ond)38 b(the)g(scop)r(e)g(of)g(this)h(pap)r(er.)68
b(The)38 b(lo)r(cation)g(of)g(the)-114 4013 y(resp)r(ectiv)n(e)27
b(source)f(\014les)i(is)f(describ)r(ed)h(in)f(section)h(3.)-14
4117 y(Instances)35 b(of)h(queuing)g(disciplines)g(are)f(iden)n
(ti\014ed)i(b)n(y)-114 4216 y(32-bit)d(n)n(um)n(b)r(ers,)h(whic)n(h)g
(are)e(split)i(in)n(to)f(a)g(ma)5 b(jor)34 b(and)g(a)-114
4316 y(minor)d(n)n(um)n(b)r(er.)48 b(The)31 b(usual)g(notation)g(is)g
Fc(major)p Fe(:)p Fc(minor)p Ff(.)-114 4416 y(F)-7 b(or)29
b(queuing)h(disciplines,)h(the)f(minor)g(n)n(um)n(b)r(er)f(is)h(alw)n
(a)n(ys)-114 4515 y(zero.)40 b(Note)29 b(that)h(these)f(ma)5
b(jor)27 b(and)i(minor)g(n)n(um)n(b)r(ers)f(are)-114
4615 y(not)39 b(related)f(to)h(the)g(n)n(um)n(b)r(ers)g(used)g(for)f
(device)h(sp)r(ecial)-114 4714 y(\014les.)-114 5011 y
Fg(6)135 b(Classes)-114 5201 y Ff(Classes)20 b(can)h(b)r(e)h(iden)n
(ti\014ed)g(in)g(t)n(w)n(o)f(w)n(a)n(ys:)32 b(\(1\))22
b(b)n(y)f(the)h Fc(class)-114 5300 y(ID)p Ff(,)27 b(whic)n(h)h(is)f
(assigned)f(b)n(y)h(the)h(user,)f(and)g(\(2\))h(b)n(y)f(the)h
Fc(in-)-114 5400 y(ternal)23 b(ID)p Ff(,)d(whic)n(h)g(is)f(assigned)g
(b)n(y)h(the)g(queuing)g(discipline.)2061 233 y(The)33
b(latter)f(has)h(to)f(b)r(e)i(unique)f(within)h(a)e(giv)n(en)g(queuing)
2061 333 y(discipline)c(and)g(ma)n(y)g(b)r(e)g(an)g(index,)g(a)g(p)r
(oin)n(ter,)g(etc.)39 b(Note)2061 432 y(that)f(the)g(v)-5
b(alue)38 b(0)g(is)g(sp)r(ecial)f(and)h(means)g(\\not)f(found")2061
532 y(when)31 b(returned)f(b)n(y)h Fe(get)p Ff(.)46 b(The)31
b(class)f(ID)h(is)g(of)g(t)n(yp)r(e)g Fe(u32)p Ff(,)2061
632 y(while)f(the)g(in)n(ternal)f(ID)h(is)g(of)g(t)n(yp)r(e)g
Fe(unsigned)40 b(long)p Ff(.)i(In-)2061 731 y(side)25
b(the)g(k)n(ernel,)g(the)g(usual)g(w)n(a)n(y)f(to)h(refer)f(to)h(a)f
(class)g(is)h(b)n(y)2061 831 y(its)d(in)n(ternal)g(ID.)h(Only)g
Fe(get)e Ff(and)h Fe(change)f Ff(use)h(the)h(class)f(ID)2061
930 y(instead.)2160 1034 y(Note)39 b(that,)j(although)d(the)g(curren)n
(t)f(implemen)n(tation)2061 1134 y(do)r(es)33 b(not)h(mak)n(e)f(use)g
(of)h(this)g(p)r(ossibilit)n(y)-7 b(,)35 b(m)n(ultiple)f(class)2061
1233 y(IDs)f(ma)n(y)f(map)g(to)h(the)g(same)f(in)n(ternal)g(class)g
(ID.)h(In)g(this)2061 1333 y(case,)52 b(the)d(class)e(ID)i(con)n(v)n
(eys)d(additional)i(information)2061 1433 y(from)27 b(the)h
(classi\014er)e(to)i(the)g(queuing)f(discipline)h(or)e(class.)2160
1536 y(Class)42 b(IDs)i(are)e(structured)g(lik)n(e)h(queuing)g
(discipline)2061 1636 y(IDs,)35 b(with)g(the)f(ma)5 b(jor)33
b(n)n(um)n(b)r(er)g(corresp)r(onding)f(to)i(their)2061
1735 y(instance)45 b(of)g(the)h(queuing)f(discipline,)50
b(and)45 b(the)h(minor)2061 1835 y(n)n(um)n(b)r(er)27
b(iden)n(tifying)h(the)g(class)e(within)j(that)f(instance.)2160
1939 y(Queuing)70 b(disciplines)g(with)g(classes)f(pro)n(vide)g(the)
2061 2038 y(follo)n(wing)60 b(set)h(of)g(functions)g(to)g(manipulate)g
(classes)2061 2138 y(\(see)71 b Fe(struct)41 b(Qdisc_class_ops)66
b Ff(in)72 b Fe(include/net/)2061 2237 y(pkt_sched.h)p
Ff(\):)2061 2415 y Fe(graft)39 b Ff(attac)n(hes)d(a)h(new)g(queuing)g
(discipline)g(to)g(a)g(class)2227 2515 y(and)g(returns)g(the)h
(previously)e(used)i(queuing)f(disci-)2227 2615 y(pline.)2061
2797 y Fe(get)j Ff(lo)r(oks)29 b(up)i(a)f(class)f(b)n(y)h(its)g(class)f
(ID)i(and)f(returns)g(the)2227 2896 y(in)n(ternal)23
b(ID.)h(If)g(the)f(class)g(main)n(tains)g(a)g(usage)f(coun)n(t,)2227
2996 y Fe(get)k Ff(should)h(incremen)n(t)h(it.)2061 3178
y Fe(put)40 b Ff(is)29 b(in)n(v)n(ok)n(ed)e(whenev)n(er)h(a)h(class)f
(that)h(w)n(as)f(previously)2227 3277 y(referenced)g(with)h
Fe(get)f Ff(is)g(dereferenced.)40 b(If)29 b(the)g(class)2227
3377 y(main)n(tains)h(a)g(usage)f(coun)n(t,)i Fe(put)e
Ff(should)h(decremen)n(t)2227 3477 y(it.)42 b(If)30 b(the)g(usage)e
(coun)n(t)h(reac)n(hes)f(zero,)h Fe(put)f Ff(ma)n(y)h(re-)2227
3576 y(mo)n(v)n(e)d(the)i(class.)2061 3758 y Fe(change)39
b Ff(c)n(hanges)19 b(the)i(prop)r(erties)e(of)i(a)f(class)f(and)i(it)g
(is)f(also)2227 3858 y(used)37 b(to)h(create)e(new)i(classes,)h(where)e
(applicable)f({)2227 3958 y(some)19 b(queuing)g(disciplines)h(ha)n(v)n
(e)e(a)h(constan)n(t)g(n)n(um)n(b)r(er)2227 4057 y(of)37
b(classes)g(whic)n(h)g(are)g(created)g(when)g(the)h(queuing)2227
4157 y(discipline)28 b(is)f(initialized.)2061 4339 y
Fe(delete)39 b Ff(handles)30 b(requests)f(to)h(delete)h(a)f(class.)44
b(It)30 b(c)n(hec)n(ks)2227 4438 y(if)37 b(the)f(class)g(is)g(not)g(in)
h(use,)h(and)f(de-activ)-5 b(ates)35 b(and)2227 4538
y(remo)n(v)n(es)25 b(it)j(in)g(this)g(case.)2061 4720
y Fe(walk)40 b Ff(iterates)30 b(o)n(v)n(er)f(all)i(classes)e(of)i(a)g
(queuing)g(discipline)2227 4820 y(and)22 b(in)n(v)n(ok)n(es)f(a)h
(callbac)n(k)g(function)h(for)f(eac)n(h)g(of)g(them.)2227
4919 y(This)42 b(is)h(used)g(to)f(obtain)g(diagnostic)g(data)g(for)g
(all)2227 5019 y(classes)26 b(of)i(a)f(queuing)g(discipline.)2061
5201 y Fe(tcf_chain)37 b Ff(returns)23 b(a)g(p)r(oin)n(ter)g(to)g(the)h
(anc)n(hor)e(of)h(the)h(list)2227 5300 y(of)j(\014lters)g(asso)r
(ciated)f(with)h(a)g(class.)36 b(This)27 b(is)g(used)g(to)2227
5400 y(manipulate)g(the)h(\014lter)g(list.)1905 5649
y(6)p eop
%%Page: 7 7
7 6 bop -114 233 a Fe(bind_tcf)38 b Ff(binds)d(an)g(instance)f(of)h(a)g
(\014lter)f(to)h(the)g(class.)52 333 y Fe(bind_tcf)48
b Ff(is)i(usually)h(iden)n(tical)f(to)h Fe(get)p Ff(,)k(except)52
432 y(when)29 b(the)h(queuing)f(discipline)h(needs)f(to)g(b)r(e)h(able)
f(to)52 532 y(explicitly)19 b(refuse)f(class)f(deletion.)34
b(\(E.g.)g Fe(sch_cbq)15 b Ff(re-)52 632 y(fuses)31 b(to)g(delete)g
(classes)e(while)i(they)g(are)f(referenced)52 731 y(b)n(y)d
(\014lters.\))-114 920 y Fe(unbind_tcf)37 b Ff(remo)n(v)n(es)26
b(an)h(instance)g(of)h(a)f(\014lter)g(from)g(the)52 1020
y(class.)36 b Fe(unbind_tcf)24 b Ff(is)j(usually)g(iden)n(tical)h(to)f
Fe(put)p Ff(.)-114 1209 y Fe(dump_class)37 b Ff(returns)32
b(diagnostic)e(data,)j(lik)n(e)e Fe(dump)g Ff(do)r(es)52
1308 y(for)c(queuing)g(disciplines.)-14 1492 y(Classes)59
b(are)h(selected)h(in)g(the)h Fe(enqueue)c Ff(function)-114
1591 y(of)46 b(the)g(queuing)g(discipline)h(usually)e(b)n(y)h(in)n(v)n
(oking)f Fe(tc_)-114 1691 y(classify)16 b Ff(in)k Fe(include/net/pkt_)o
(cls)o(.h)o Ff(,)c(whic)n(h)j(returns)-114 1791 y(a)24
b Fe(struct)41 b(tcf_result)21 b Ff(\(in)k Fe(include/net/pkt_)o(cl)o
(s.)o(h)p Ff(\))-114 1890 y(con)n(taining)30 b(the)i(class)e(ID)i(\()p
Fe(classid)p Ff(\))d(and)j(p)r(ossibly)f(also)-114 1990
y(the)49 b(in)n(ternal)g(ID)h(\()p Fe(class)p Ff(\),)j(see)48
b(section)h(7.)101 b(The)49 b(re-)-114 2089 y(turn)25
b(v)-5 b(alue)26 b(of)f Fe(tc_classify)c Ff(is)k(either)g
Fd(\000)p Ff(1)f(\()p Fe(TC_POLICE_)-114 2189 y(UNSPEC)p
Ff(\))k(or)i(the)g(p)r(olicing)g(decision)g(returned)g(b)n(y)g(the)g
(\014l-)-114 2289 y(ter)21 b(\(see)g(section)g(8\).)34
b(The)21 b(return)g(v)-5 b(alues)21 b(of)g Fe(tc_classify)-114
2388 y Ff(are)27 b(declared)f(in)i Fe(include/linux/pkt)o(_c)o(ls)o(.h)
p Ff(.)-14 2494 y(There)42 b(is)g(also)f(a)h(shortcut)h(for)f
(classi\014cation)f(of)h(lo-)-114 2593 y(cally)f(generated)f(tra\016c:)
63 b(if)42 b Fe(skb-)t(>)t(priority)36 b Ff(con)n(tains)-114
2693 y(the)h(ID)h(of)f(a)g(class)f(of)h(the)g(curren)n(t)f(queuing)h
(discipline,)-114 2793 y(that)48 b(class)f(is)g(used)h(and)f(no)h
(further)f(classi\014cation)g(is)-114 2892 y(attempted.)115
b Fe(skb-)t(>)t(priority)49 b Ff(\()p Fe(struct)41 b(sk_buff)51
b Ff(in)-114 2992 y Fe(include/linux/sk)o(buf)o(f.)o(h)p
Ff(\))32 b(is)38 b(set)f(to)h Fe(sk-)t(>)t(priority)-114
3091 y Ff(\()p Fe(struct)j(sock)20 b Ff(in)h Fe(include/net/soc)o(k.h)o
Ff(\))15 b(when)21 b(lo)r(cally)-114 3191 y(generating)29
b(a)g(pac)n(k)n(et.)43 b Fe(sk-)t(>)t(priority)26 b Ff(can)j(b)r(e)i
(set)f(with)-114 3291 y(the)21 b Fe(SO_PRIORITY)16 b
Ff(so)r(c)n(k)n(et)j(option)i(\()p Fe(sock_setsockopt)14
b Ff(in)-114 3390 y Fe(net/core/sock.c)p Ff(\).)65 b(This)39
b(t)n(yp)r(e)g(of)f(classi\014cation)g(can)-114 3490
y(b)r(e)28 b(useful)h(for)e(implemen)n(ting)h(functionalit)n(y)g(lik)n
(e)g(the)g(one)-114 3590 y(pro)n(vided)f(b)n(y)g(Arequipa)g([9)o(].)-14
3695 y(Note)k(that)h(k)n(ernels)e(up)i(to)g(at)f(least)g(2.1.130)f
(limit)i(the)-114 3795 y(v)-5 b(alue)25 b(that)g(can)g(b)r(e)g(set)g
(with)h Fe(SO_PRIORITY)20 b Ff(to)25 b(the)h(range)-114
3894 y(0)14 b Fb(:)g(:)g(:)f Ff(7,)42 b(so)c(that)h(this)h(shortcut)e
(classi\014cation)g(do)r(es)g(not)-114 3994 y(w)n(ork.)73
b(Ho)n(w)n(ev)n(er,)41 b(all)e(queuing)h(disciplines)g(supp)r(ort)g
(it.)-114 4093 y(Also)21 b(note)h(that)g Fe(skb-)t(>)t(priority)17
b Ff(can)22 b(con)n(tain)f(other)g(pri-)-114 4193 y(orit)n(y)j(v)-5
b(alues,)25 b(e.g.)35 b(the)26 b(priorit)n(y)d(obtained)i(from)f(the)i
(TOS)-114 4293 y(b)n(yte)34 b(of)f(the)h(IPv4)f(header.)54
b(All)34 b(suc)n(h)g(v)-5 b(alues)33 b(are)g(b)r(elo)n(w)-114
4392 y(the)28 b(smallest)f(v)-5 b(alid)28 b(class)e(n)n(um)n(b)r(er,)i
(65536.)-14 4498 y(After)j(selecting)f(the)h(class,)g(the)g
Fe(enqueue)d Ff(function)j(of)-114 4597 y(the)46 b(resp)r(ectiv)n(e)e
(inner)i(queuing)f(discipline)h(is)f(in)n(v)n(ok)n(ed.)-114
4697 y(The)29 b(w)n(a)n(y)e(ho)n(w)h(this)h(queuing)g(discipline)g(is)f
(stored)g(in)h(the)-114 4797 y(data)j(structure\(s\))g(asso)r(ciated)e
(with)j(the)f(class)g(can)f(v)-5 b(ary)-114 4896 y(among)27
b(queuing)g(discipline)h(implemen)n(tations.)-14 5001
y(The)k(option)g(v)n(ector)f(passed)g(to)h(the)h Fe(change)d
Ff(function)-114 5101 y(is)45 b(of)g(the)g(same)f(structure)h(as)f(the)
h(v)n(ectors)e(passed)i(to)-114 5201 y(the)34 b Fe(init)f
Ff(functions)h(of)g(queuing)g(disciplines.)56 b(The)34
b(cor-)-114 5300 y(resp)r(onding)28 b(declarations)g(are)g(also)h(in)g
Fe(include/linux/)-114 5400 y(pkt_sched.h)p Ff(.)2061
233 y Fg(7)134 b(Filters)2061 415 y Ff(Filters)28 b(are)g(used)h(b)n(y)
f(a)h(queuing)f(discipline)h(to)g(assign)e(in-)2061 514
y(coming)34 b(pac)n(k)n(ets)h(to)g(one)g(of)g(its)h(classes.)59
b(This)35 b(happ)r(ens)2061 614 y(during)i(the)g(enqueue)h(op)r
(eration)e(of)h(the)h(queuing)f(disci-)2061 714 y(pline.)2067
2115 y @beginspecial 0 @llx 0 @lly 227 @urx 155 @ury
2270 @rwi @setspecial
%%BeginDocument: filter.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: filter.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Wed Oct 28 20:55:07 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 227 155
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-17.0 190.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4162 m -1000 -1000 l 5062 -1000 l 5062 4162 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1500 1800 m 3150 1800 l 3150 2100 l 1500 2100 l cp gs col0 s gr 
/Times-Roman ff 180.00 scf sf
1575 2025 m
gs 1 -1 sc (Element) col0 sh gr
/Times-Roman ff 180.00 scf sf
3075 2025 m
gs 1 -1 sc (handle=X) dup sw pop neg 0 rm  col0 sh gr
% Polyline
gs  clippath
1830 2253 m 1800 2373 l 1770 2253 l 1770 2415 l 1830 2415 l cp
clip
n 1800 2100 m 1800 2400 l gs col0 s gr gr

% arrowhead
n 1830 2253 m 1800 2373 l 1770 2253 l 1800 2253 l 1830 2253 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1800 2700 m 1800 2850 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 1800 2850 m 1800 3150 l gs col0 s gr  [] 0 sd
% Polyline
n 1500 2400 m 3150 2400 l 3150 2700 l 1500 2700 l cp gs col0 s gr 
/Times-Roman ff 180.00 scf sf
1575 2625 m
gs 1 -1 sc (Element) col0 sh gr
/Times-Roman ff 180.00 scf sf
3075 2625 m
gs 1 -1 sc (handle=Y) dup sw pop neg 0 rm  col0 sh gr
% Polyline
gs  clippath
753 1320 m 873 1350 l 753 1380 l 915 1380 l 915 1320 l cp
clip
n 600 900 m 600 1350 l 900 1350 l gs col0 s gr gr

% arrowhead
n 753 1320 m 873 1350 l 753 1380 l 753 1350 l 753 1320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 300 600 m 2100 600 l 2100 900 l 300 900 l cp gs col0 s gr 
% Polyline
n 900 1200 m 2100 1200 l 2100 1500 l 900 1500 l cp gs col0 s gr 
% Polyline
gs  clippath
2253 1320 m 2373 1350 l 2253 1380 l 2415 1380 l 2415 1320 l cp
clip
n 2100 1350 m 2400 1350 l gs col0 s gr gr

% arrowhead
n 2253 1320 m 2373 1350 l 2253 1380 l 2253 1350 l 2253 1320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 2400 1200 m 3600 1200 l 3600 1500 l 2400 1500 l cp gs col0 s gr 
% Polyline
n 3600 1350 m 3750 1350 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3750 1350 m 4050 1350 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
1353 1920 m 1473 1950 l 1353 1980 l 1515 1980 l 1515 1920 l cp
clip
n 1200 1500 m 1200 1950 l 1500 1950 l gs col0 s gr gr

% arrowhead
n 1353 1920 m 1473 1950 l 1353 1980 l 1353 1950 l 1353 1920 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
1200 825 m
gs 1 -1 sc (Qdisc/class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
975 1425 m
gs 1 -1 sc (Filter) col0 sh gr
/Times-Roman ff 180.00 scf sf
2025 1425 m
gs 1 -1 sc (prio=1) dup sw pop neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2475 1425 m
gs 1 -1 sc (Filter) col0 sh gr
/Times-Roman ff 180.00 scf sf
3525 1425 m
gs 1 -1 sc (prio=2) dup sw pop neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2061 2380 a(Figure)29 b(7:)40 b(Structure)29
b(of)h(\014lters,)g(with)g(a)f(list)h(of)f(elemen)n(ts)2061
2480 y(b)r(elonging)24 b(to)h(the)g(\014rst)g(\014lter,)h(and)e(no)h
(in)n(ternal)g(structure)2061 2580 y(for)i(the)h(second)f(\014lter.)
2160 2756 y(Filters)32 b(are)g(k)n(ept)g(in)h(\014lter)f(lists)g(whic)n
(h)h(can)f(b)r(e)g(main-)2061 2856 y(tained)38 b(p)r(er)g(queuing)g
(discipline)g(or)g(p)r(er)g(class,)i(dep)r(end-)2061
2956 y(ing)45 b(on)g(the)h(design)g(of)f(the)h(queuing)g(discipline.)91
b(Fil-)2061 3055 y(ter)33 b(lists)g(are)f(ordered)g(b)n(y)g(priorit)n
(y)-7 b(,)34 b(in)f(ascending)f(order.)2061 3155 y(F)-7
b(urthermore,)38 b(the)f(en)n(tries)f(are)g(k)n(ey)n(ed)g(b)n(y)g(the)h
(proto)r(col)2061 3254 y(for)f(whic)n(h)h(they)g(apply)-7
b(.)65 b(Those)36 b(proto)r(col)g(n)n(um)n(b)r(ers)g(are)2061
3354 y(also)27 b(used)i(in)g Fe(skb-)t(>)t(protocol)23
b Ff(and)29 b(they)f(are)g(de\014ned)h(in)2061 3454 y
Fe(include/linux/i)o(f_e)o(th)o(er.)o(h)p Ff(.)74 b(Filters)42
b(for)f(the)i(same)2061 3553 y(proto)r(col)36 b(on)h(the)h(same)f
(\014lter)g(list)h(m)n(ust)g(ha)n(v)n(e)e(di\013eren)n(t)2061
3653 y(priorities.)2160 3753 y(A)41 b(\014lter)f(ma)n(y)f(also)h(ha)n
(v)n(e)f(an)h(in)n(ternal)f(structure:)62 b(it)2061 3852
y(ma)n(y)29 b(con)n(trol)g(in)n(ternal)h(elemen)n(ts,)h(whic)n(h)f(are)
f(then)i(refer-)2061 3952 y(enced)22 b(b)n(y)g(32-bit)g(handles.)34
b(These)22 b(handles)g(are)g(similar)f(to)2061 4051 y(class)f(IDs,)j
(but)f(they)g(are)e(not)h(split)h(in)n(to)f(ma)5 b(jor)20
b(and)i(minor)2061 4151 y(n)n(um)n(b)r(ers.)53 b(Handle)33
b(0)g(alw)n(a)n(ys)e(refers)h(to)h(the)g(\014lter)h(itself.)2061
4251 y(Lik)n(e)28 b(classes,)h(also)f(\014lters)i(ha)n(v)n(e)e(in)n
(ternal)h(IDs,)h(whic)n(h)f(are)2061 4350 y(obtained)c(with)g(the)h
Fe(get)e Ff(function.)36 b(The)26 b(in)n(ternal)e(organi-)2061
4450 y(zation)30 b(of)h(a)f(\014lter)h(can)f(b)r(e)i(arbitrary)-7
b(.)44 b(Figure)30 b(7)h(sho)n(ws)e(a)2061 4550 y(\014lter)e(with)h(a)f
(list)h(of)g(in)n(ternal)f(elemen)n(ts.)2160 4649 y(Filters)38
b(are)e(con)n(trolled)g(via)h(the)h(follo)n(wing)f(functions)2061
4749 y(\(see)42 b Fe(struct)f(tcf_proto_ops)d Ff(in)43
b Fe(include/net/pkt)o(_)2061 4848 y(cls.h)p Ff(\):)2061
5001 y Fe(classify)38 b Ff(p)r(erforms)20 b(the)i(classi\014cation)d
(and)i(returns)f(one)2227 5101 y(of)k(the)h Fe(TC_POLICE_)p
Fb(:)14 b(:)g(:)20 b Ff(v)-5 b(alues)24 b(describ)r(ed)g(in)g(section)
2227 5201 y(8.)35 b(If)25 b(the)g(result)g(is)f(not)h
Fe(TC_POLICE_UNSPEC)p Ff(,)19 b(it)25 b(also)2227 5300
y(returns)h(the)h(selected)g(class)e(ID)j(and)e(optionally)g(also)2227
5400 y(the)g(in)n(ternal)g(class)g(ID)h(in)f(the)h Fe(struct)41
b(tcf_result)1905 5649 y Ff(7)p eop
%%Page: 8 8
8 7 bop 52 233 a Ff(p)r(oin)n(ted)39 b(to)h(b)n(y)e Fe(res)p
Ff(.)71 b(If)40 b(the)f(in)n(ternal)g(class)f(ID)i(is)52
333 y(omitted,)26 b(the)g(v)-5 b(alue)25 b(zero)g(m)n(ust)g(b)r(e)h
(stored)e(in)i Fe(res-)t(>)52 432 y(class)p Ff(.)-114
597 y Fe(init)40 b Ff(initializes)27 b(the)h(\014lter.)-114
762 y Fe(destroy)39 b Ff(is)48 b(in)n(v)n(ok)n(ed)e(to)i(remo)n(v)n(e)f
(a)h(\014lter.)98 b(Also)48 b(the)52 861 y(queuing)d(disciplines)g
Fe(sch_cbq)d Ff(and)j Fe(sch_atm)e Ff(use)52 961 y Fe(destroy)d
Ff(to)j(remo)n(v)n(e)f(stale)g(\014lters)h(when)g(deleting)52
1061 y(classes.)-114 1225 y Fe(get)d Ff(lo)r(oks)35 b(up)g(a)g
(\014lter)g(elemen)n(t)h(b)n(y)f(its)g(handle)g(and)g(re-)52
1325 y(turns)28 b(the)f(in)n(ternal)g(\014lter)h(ID.)-114
1490 y Fe(put)40 b Ff(is)33 b(in)n(v)n(ok)n(ed)e(when)i(a)g(\014lter)f
(elemen)n(t)h(previously)f(ref-)52 1589 y(erenced)27
b(with)h Fe(get)f Ff(is)g(no)g(longer)g(used.)-114 1754
y Fe(change)39 b Ff(con\014gures)20 b(a)h(new)h(\014lter)g(or)e(c)n
(hanges)h(the)h(prop)r(er-)52 1853 y(ties)30 b(of)g(an)f(existing)g
(\014lter.)44 b(Con\014guration)28 b(parame-)52 1953
y(ters)20 b(are)g(passed)f(with)j(the)f(same)e(mec)n(hanism)i(as)e
(used)52 2053 y(for)27 b(queuing)g(disciplines)h(and)f(classes.)-114
2217 y Fe(delete)39 b Ff(deletes)31 b(an)g(elemen)n(t)g(of)g(a)g
(\014lter.)48 b(T)-7 b(o)31 b(delete)g(the)52 2317 y(en)n(tire)h
(\014lter,)h Fe(destroy)d Ff(has)i(to)g(b)r(e)h(used.)50
b(This)33 b(dis-)52 2417 y(tinction)g(is)g(transparen)n(t)e(to)i(the)g
(user)f(and)h(is)g(made)52 2516 y(in)28 b Fe(net/sched/cls_ap)o(i:)o
(tc_)o(ct)o(l_t)o(fi)o(lt)o(er)p Ff(.)-114 2681 y Fe(walk)40
b Ff(iterates)24 b(o)n(v)n(er)f(all)h(elemen)n(ts)g(of)h(a)f(\014lter)h
(and)f(in)n(v)n(ok)n(es)52 2781 y(a)c(callbac)n(k)f(function)i(for)e
(eac)n(h)h(of)g(them.)35 b(This)20 b(is)g(used)52 2880
y(to)28 b(obtain)f(diagnostic)f(data.)-114 3045 y Fe(dump)40
b Ff(returns)26 b(diagnostic)f(data)h(for)g(a)g(\014lter)g(or)g(one)g
(of)g(its)52 3145 y(elemen)n(ts.)-14 3308 y(Note)48 b(that)g(the)g(co)r
(de)g(for)f(the)i(RSVP)f(\014lters)f(is)h(in)-114 3407
y Fe(cls_rsvp.h)p Ff(.)94 b Fe(cls_rsvp.c)44 b Ff(and)k
Fe(cls_rsvp6.c)c Ff(only)-114 3507 y(con)n(tain)39 b(the)i(righ)n(t)e
(set)h(of)g(includes)g(and)g(set)g(some)f(pa-)-114 3607
y(rameters)30 b(\(mainly)h Fe(RSVP_DST_LEN)p Ff(\),)c(whic)n(h)k(con)n
(trol)f(the)-114 3706 y(t)n(yp)r(e)e(of)f(\014lter)h(generated)e(from)i
Fe(cls_rsvp.h)p Ff(.)-14 3806 y(Filters)d(v)-5 b(ary)24
b(in)h(the)g(scop)r(e)g(of)g(pac)n(k)n(ets)f(their)h(instances)-114
3906 y(can)g(classify:)36 b(When)26 b(using)g(the)g Fe(cls_fw)d
Ff(and)j Fe(cls_route)-114 4005 y Ff(\014lters,)21 b(one)d(instance)h
(p)r(er)g(queuing)g(discipline)g(can)g(classify)-114
4105 y(pac)n(k)n(ets)37 b(for)h(all)g(classes.)67 b(Those)38
b(\014lters)g(tak)n(e)g(the)g(class)-114 4204 y(ID)e(from)g(the)g(pac)n
(k)n(et)f(descriptor,)i(where)e(it)h(w)n(as)f(stored)-114
4304 y(b)r(efore)40 b(b)n(y)h(some)f(other)g(en)n(tit)n(y)h(in)g(the)g
(proto)r(col)e(stac)n(k,)-114 4404 y(e.g.)74 b Fe(cls_fw)38
b Ff(uses)i(the)h(marking)e(functionalit)n(y)h(of)g(the)-114
4503 y(\014rew)n(all)29 b(co)r(de.)46 b(W)-7 b(e)30 b(call)g(suc)n(h)h
(\014lters)f Fc(generic)p Ff(.)46 b(They)30 b(are)-114
4603 y(illustrated)d(in)h(\014gure)f(8.)-14 4703 y(The)g(other)g(t)n
(yp)r(e)g(of)g(\014lters)g(\()p Fe(cls_rsvp)e Ff(and)i
Fe(cls_u32)p Ff(\))-114 4802 y(needs)i(one)f(or)g(more)g(instances)g
(of)h(the)g(\014lter)f(or)g(its)h(in)n(ter-)-114 4902
y(nal)34 b(elemen)n(ts)g(p)r(er)f(class.)55 b(W)-7 b(e)35
b(call)e(suc)n(h)h(\014lters)g Fc(sp)l(e)l(ci\014c)p
Ff(.)-114 5001 y(Multiple)24 b(instances)e(of)g(suc)n(h)h(a)f(\014lter)
h(\(or)f(its)h(elemen)n(ts\))g(on)-114 5101 y(the)32
b(same)f(\014lter)h(list)g(\(e.g.)49 b(for)32 b(the)g(same)f(class\))g
(are)g(dis-)-114 5201 y(tinguished)j(b)n(y)g(an)g Fc(internal)h
(\014lter)h(ID)p Ff(,)d(whic)n(h)h(is)g(similar)-114
5300 y(to)e(the)g(in)n(ternal)g(ID)g(used)g(for)g(classes.)48
b(Ho)n(w)n(ev)n(er,)32 b(unlik)n(e)-114 5400 y(classes,)g(\014lters)g
(ha)n(v)n(e)f(no)h(\\\014lter)g(ID".)h(Instead,)g(they)f(are)2105
1817 y @beginspecial 0 @llx 0 @lly 218 @urx 200 @ury
2180 @rwi @setspecial
%%BeginDocument: fwild.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fwild.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Thu Nov  5 17:20:41 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 200
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
/col32 {0.502 0.502 0.502 srgb} bind def

end
save
-62.0 253.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 5212 m -1000 -1000 l 5665 -1000 l 5665 5212 l cp clip
 0.06000 0.06000 sc
/Times-Italic ff 180.00 scf sf
1575 2175 m
gs 1 -1 sc (filter) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1575 2175 m
gs 1 -1 sc (_classify) col0 sh gr
% Polyline
7.500 slw
n 1125 1950 m 2625 1950 l 2625 2250 l 1125 2250 l cp gs col0 s gr 
% Polyline
n 1950 3000 m 2400 3000 l gs col0 s gr 
% Polyline
n 3300 3750 m 3300 2100 l 3600 2100 l 3600 3750 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3300 4200 m 3300 3750 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3600 4200 m 3600 3750 l gs col0 s gr  [] 0 sd
% Polyline
n 1950 2700 m 2400 2700 l 2400 3300 l 1950 3300 l cp gs col0 s gr 
% Polyline
gs  clippath
1803 2820 m 1923 2850 l 1803 2880 l 1965 2880 l 1965 2820 l cp
clip
n 1650 1425 m 1650 2850 l 1950 2850 l gs col0 s gr gr

% arrowhead
n 1803 2820 m 1923 2850 l 1803 2880 l 1803 2850 l 1803 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3078 2970 m 3198 3000 l 3078 3030 l 3240 3030 l 3240 2970 l cp
clip
n 2475 3000 m 3225 3000 l gs col0 s gr gr

% arrowhead
n 3078 2970 m 3198 3000 l 3078 3030 l 3078 3000 l 3078 2970 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3780 3753 m 3750 3873 l 3720 3753 l 3720 3915 l 3780 3915 l cp
clip
n 3750 2250 m 3750 3900 l gs col0 s gr gr

% arrowhead
n 3780 3753 m 3750 3873 l 3720 3753 l 3750 3753 l 3780 3753 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 4425 2625 m 4050 2625 l 4050 2325 l 4425 2325 l gs col0 s gr 
% Polyline
n 4425 3075 m 4050 3075 l 4050 2775 l 4425 2775 l gs col0 s gr 
% Polyline
n 4425 3750 m 4050 3750 l 4050 3450 l 4425 3450 l gs col0 s gr 
% Polyline
gs  clippath
2550 1054 m 2673 1056 l 2564 1112 l 2721 1076 l 2708 1017 l cp
clip
n 1725 1275 m 2700 1050 l gs col0 s gr gr

% arrowhead
n 2550 1054 m 2673 1056 l 2564 1112 l 2557 1083 l 2550 1054 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 2700 900 m 4650 900 l 4650 1200 l 2700 1200 l cp gs col0 s gr 
% Polyline
 [60] 0 sd
n 4425 2325 m 4650 2325 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 2625 m 4650 2625 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 2775 m 4650 2775 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3075 m 4650 3075 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3450 m 4650 3450 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3750 m 4650 3750 l gs col0 s gr  [] 0 sd
% Polyline
n 1050 1200 m 1950 1200 l 1950 1500 l 1050 1500 l cp gs col0 s gr 
% Polyline
60.000 slw
n 1575 1425 m 1875 1425 l gs col32 s gr 
% Polyline
n 1575 1275 m 1875 1275 l gs col32 s gr 
% Polyline
7.500 slw
n 3825 3675 m 3825 3525 l 3975 3600 l cp gs col32 1.00 shd ef gr gs col32 s gr 
/Times-Roman ff 180.00 scf sf
3525 3000 m
gs 1 -1 sc  90.0 rot (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3450 2025 m
gs 1 -1 sc (x:0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3975 3000 m
gs 1 -1 sc  90.0 rot (Search) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 3225 m
gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 3525 m
gs 1 -1 sc (tcf_result) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 2925 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2475 3225 m
gs 1 -1 sc (class) col0 sh gr
/Courier ff 180.00 scf sf
2475 2925 m
gs 1 -1 sc (classid) col0 sh gr
/Courier ff 180.00 scf sf
4350 2550 m
gs 1 -1 sc (x:a) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 3000 m
gs 1 -1 sc (x:b) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 3675 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier-Bold ff 180.00 scf sf
4350 3300 m
gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3675 1125 m
gs 1 -1 sc (Packet content) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4350 2100 m
gs 1 -1 sc (Classes) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1275 1425 m
gs 1 -1 sc (skb) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2582 2082 a(Figure)27 b(8:)36 b(Generic)28
b(\014lter.)2061 2348 y(iden)n(ti\014ed)d(b)n(y)f(the)h(queuing)f
(discipline)h(or)f(class)f(for)h(whic)n(h)2061 2448 y(they)29
b(are)f(registered,)f(and)i(their)g(priorit)n(y)e(among)h(the)h(\014l-)
2061 2548 y(ters)e(there.)2160 2648 y(Because)18 b(sp)r(eci\014c)h
(\014lters)g(ha)n(v)n(e)f(at)h(least)g(one)f(instance)h(or)2061
2747 y(elemen)n(t)f(p)r(er)h(class,)h(they)f(can)f(of)g(course)g(store)
g(the)h(in)n(ternal)2061 2847 y(ID)29 b(of)g(that)g(class)f(and)h(pro)n
(vide)f(it)h(as)f(a)h(result)f(of)h(classi\014-)2061
2947 y(cation.)35 b(This)23 b(then)g(allo)n(ws)f(quic)n(k)h(retriev)-5
b(al)22 b(of)h(class)g(infor-)2061 3046 y(mation)f(b)n(y)h(the)g
(queuing)g(discipline.)35 b(Figure)22 b(9)h(illustrates)2061
3146 y(this)f(scenario,)g(where)g(a)g(p)r(oin)n(ter)g(to)h(the)g(class)
e(structure)h(is)2061 3246 y(used)i(as)h(the)g(in)n(ternal)f(ID.)h
(Unfortunately)-7 b(,)26 b(generic)d(\014lters)2061 3345
y(ha)n(v)n(e)33 b(no)h(means)h(to)f(pro)n(vide)g(this)h(information.)57
b(There-)2061 3445 y(fore,)26 b(they)h(set)g(the)h Fe(class)d
Ff(\014eld)i(in)g Fe(struct)41 b(tcf_result)2061 3544
y Ff(to)21 b(zero)g(and)g(lea)n(v)n(e)g(the)h(lo)r(okup)f(op)r(eration)
g(to)g(the)h(queuing)2061 3644 y(discipline.)2061 3921
y Fg(8)134 b(P)l(olicing)2061 4104 y Ff(The)27 b(purp)r(ose)f(of)h(p)r
(olicing)f(is)h(to)g(ensure)f(that)h(tra\016c)f(do)r(es)2061
4204 y(not)38 b(exceed)g(certain)g(b)r(ounds.)69 b(F)-7
b(or)38 b(simplicit)n(y)-7 b(,)41 b(w)n(e)d(will)2061
4303 y(assume)26 b(a)h(broad)g(de\014nition)g(of)h(p)r(olicing)f(and)g
(consider)g(it)2061 4403 y(to)36 b(comprise)g(all)h(kinds)g(of)g
(tra\016c)f(con)n(trol)g(actions)g(that)2061 4502 y(dep)r(end)28
b(in)g(some)f(w)n(a)n(y)f(on)h(the)h(tra\016c)g(v)n(olume.)2160
4603 y(W)-7 b(e)19 b(consider)f(four)g(t)n(yp)r(es)h(of)g(p)r(olicing)f
(mec)n(hanisms:)32 b(\(1\))2061 4702 y(p)r(olicing)38
b(decisions)h(b)n(y)g(\014lters,)i(\(2\))f(refusal)e(to)h(enqueue)2061
4802 y(a)34 b(pac)n(k)n(et,)h(\(3\))g(dropping)f(of)g(a)g(pac)n(k)n(et)
g(from)g(an)g(\\inner")2061 4901 y(queuing)20 b(discipline,)j(and)d
(\(4\))h(dropping)f(of)h(a)f(pac)n(k)n(et)g(when)2061
5001 y(enqueuing)27 b(a)h(new)g(one.)37 b(Figures)27
b(10)g(to)g(13)g(illustrate)h(the)2061 5101 y(four)f(mec)n(hanisms.)
2160 5201 y(The)41 b(\014rst)f(t)n(yp)r(e)g(of)g(actions)g(are)f
(decisions)h(tak)n(en)f(b)n(y)2061 5300 y(\014lters)30
b(\(\014gure)g(10\).)45 b(The)30 b Fe(classify)e Ff(function)j(of)f(a)g
(\014lter)2061 5400 y(can)g(return)f(three)h(t)n(yp)r(es)h(of)f(v)-5
b(alues)30 b(to)g(indicate)g(a)g(p)r(olicy)1905 5649
y(8)p eop
%%Page: 9 9
9 8 bop 343 1817 a @beginspecial 0 @llx 0 @lly 380 @urx
200 @ury 3800 @rwi @setspecial
%%BeginDocument: pol1.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol1.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:25:52 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 380 200
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-71.0 442.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 8351 m -1000 -1000 l 8512 -1000 l 8512 8351 l cp clip
 0.06000 0.06000 sc
% Polyline
n 1200 5625 m 7500 5625 l 7500 7350 l 1200 7350 l cp gs col7 0.90 shd ef gr 
% Polyline
n 1200 5625 m 7500 5625 l 7500 4050 l 1200 4050 l cp gs col7 0.95 shd ef gr 
/Courier-Oblique ff 180.00 scf sf
6300 4950 m
gs 1 -1 sc (filter2) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6300 4950 m
gs 1 -1 sc (_classify) col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6300 4350 m
gs 1 -1 sc (filter1) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6300 4350 m
gs 1 -1 sc (_classify) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 6675 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3900 6675 m
gs 1 -1 sc (OK) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 6975 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3900 6975 m
gs 1 -1 sc (UNSPEC,RECLASSIFY) col0 sh gr
/Courier ff 180.00 scf sf
3900 7275 m
gs 1 -1 sc (UNSPEC,SHOT) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 7275 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6600 6600 m
gs 1 -1 sc (high) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6600 6600 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6450 6900 m
gs 1 -1 sc (low) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6450 6900 m
gs 1 -1 sc (_enqueue) col0 sh gr
% Polyline
7.500 slw
gs  clippath
2634 5879 m 2700 5775 l 2691 5898 l 2733 5770 l 2676 5751 l cp
clip
n 2400 6675 m 2700 5775 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 2634 5879 m 2700 5775 l 2691 5898 l 2662 5889 l 2634 5879 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5280 4170 m 5400 4200 l 5280 4230 l 5415 4230 l 5415 4170 l cp
clip
n 2775 5550 m 3300 4200 l 5400 4200 l gs col0 s gr gr

% arrowhead
n 5280 4170 m 5400 4200 l 5280 4230 l 5280 4200 l 5280 4170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3295 5448 m 3225 5550 l 3239 5427 l 3192 5554 l 3248 5575 l cp
clip
n 5400 4950 m 3450 4950 l 3225 5550 l gs col0 s gr gr

% arrowhead
n 3295 5448 m 3225 5550 l 3239 5427 l 3267 5438 l 3295 5448 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
gs  clippath
2995 5448 m 2925 5550 l 2939 5427 l 2892 5554 l 2948 5575 l cp
clip
n 5400 4350 m 3375 4350 l 2925 5550 l gs col0 s gr gr

% arrowhead
n 2995 5448 m 2925 5550 l 2939 5427 l 2967 5438 l 2995 5448 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
gs  clippath
5205 4770 m 5325 4800 l 5205 4830 l 5340 4830 l 5340 4770 l cp
clip
n 3075 5550 m 3375 4800 l 5325 4800 l gs col0 s gr gr

% arrowhead
n 5205 4770 m 5325 4800 l 5205 4830 l 5205 4800 l 5205 4770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2914 6644 m 2850 6750 l 2857 6626 l 2817 6756 l 2874 6773 l cp
clip
n 3150 5775 m 2850 6750 l gs col0 s gr gr

% arrowhead
n 2914 6644 m 2850 6750 l 2857 6626 l 2885 6635 l 2914 6644 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
 [60] 0 sd
n 2325 5625 m 1200 5625 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3675 5625 m 7500 5625 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
5880 6495 m 6000 6525 l 5880 6555 l 6015 6555 l 6015 6495 l cp
clip
n 3300 6750 m 3600 6525 l 6000 6525 l gs col0 s gr gr

% arrowhead
n 5880 6495 m 6000 6525 l 5880 6555 l 5880 6525 l 5880 6495 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 6795 m 6000 6825 l 5880 6855 l 6015 6855 l 6015 6795 l cp
clip
n 3300 6825 m 6000 6825 l gs col0 s gr gr

% arrowhead
n 5880 6795 m 6000 6825 l 5880 6855 l 5880 6825 l 5880 6795 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 7095 m 6000 7125 l 5880 7155 l 6015 7155 l 6015 7095 l cp
clip
n 3300 6900 m 3600 7125 l 6000 7125 l gs col0 s gr gr

% arrowhead
n 5880 7095 m 6000 7125 l 5880 7155 l 5880 7125 l 5880 7095 l  cp gs 0.00 setgray ef gr  col0 s
/Courier-Oblique ff 180.00 scf sf
2400 6900 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2400 6900 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier ff 180.00 scf sf
3000 5700 m
gs 1 -1 sc (tc_classify) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4500 4575 m
gs 1 -1 sc (UNSPEC) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4500 5175 m
gs 1 -1 sc (OK,RECLASSIFY,SHOT) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3150 6225 m
gs 1 -1 sc (UNSPEC,OK,RECLASSIFY,SHOT) col0 sh gr
/Courier ff 180.00 scf sf
6600 7200 m
gs 1 -1 sc (kfree_skb) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 6300 m
gs 1 -1 sc (discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 6075 m
gs 1 -1 sc (Queuing) col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 4800 m
gs 1 -1 sc (Filter\(s\)) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 823 2082 a Ff(Figure)27 b(10:)36 b(P)n(olicing)26
b(when)i(enqueuing;)f(decision)h(tak)n(en)f(b)n(y)g(\014lter.)-114
2348 y(decision)f(\(the)i(v)-5 b(alues)26 b(are)g(declared)g(in)h
Fe(include/linux/)-114 2447 y(pkt_cls.h)p Ff(:)-114 2633
y Fe(TC_POLICE_OK)37 b Ff(No)27 b(sp)r(ecial)g(treatmen)n(t)h
(requested.)-114 2824 y Fe(TC_POLICE_RECLAS)o(SIF)o(Y)35
b Ff(P)n(ac)n(k)n(et)18 b(w)n(as)h(selected)g(b)n(y)g(\014lter)52
2924 y(but)29 b(it)g(exceeds)e(certain)h(b)r(ounds)g(and)h(should)f(b)r
(e)g(re-)52 3024 y(classi\014ed)f(\(see)g(b)r(elo)n(w\).)-114
3216 y Fe(TC_POLICE_SHOT)36 b Ff(P)n(ac)n(k)n(et)j(w)n(as)h(selected)h
(b)n(y)g(\014lter)h(and)52 3315 y(found)30 b(to)g(violate)f(the)h(b)r
(ounds)g(suc)n(h)f(that)h(it)h(should)52 3415 y(b)r(e)d(discarded.)-14
3600 y(Curren)n(tly)-7 b(,)40 b(the)e(\014lters)g Fe(cls_rsvp)p
Ff(,)f Fe(cls_rsvp6)p Ff(,)h(and)-114 3700 y Fe(cls_u32)44
b Ff(supp)r(ort)i(p)r(olicing.)94 b(The)46 b(p)r(olicing)g(informa-)
-114 3800 y(tion)31 b(is)f(returned)h(via)f Fe(tc_classify)c
Ff(\(in)31 b Fe(include/net/)-114 3899 y(pkt_cls.h)p
Ff(\))40 b(to)k(the)g Fe(enqueue)d Ff(function)j(of)g(the)g(queu-)-114
3999 y(ing)c(discipline.)76 b(It)41 b(is)f(then)h(up)g(to)g(the)g
(queuing)f(disci-)-114 4098 y(pline)i(to)f(tak)n(e)f(an)h(appropriate)e
(action.)77 b(The)42 b(queuing)-114 4198 y(disciplines)23
b Fe(sch_cbq)d Ff(and)j Fe(sch_atm)d Ff(handle)j Fe(TC_POLICE_)-114
4298 y(RECLASSIFY)33 b Ff(and)j Fe(sch_atm)e Ff(also)h(handles)h
Fe(TC_POLICE_)-114 4397 y(SHOT)p Ff(.)49 b(The)32 b Fe(sch_prio)d
Ff(queuing)j(discipline)h(ignores)d(an)n(y)-114 4497
y(p)r(olicing)d(information)g(returned)g(b)n(y)h Fe(tc_classify)p
Ff(.)-14 4603 y(Filters)h(can)g(use)g(the)h(function)g
Fe(tcf_police)25 b Ff(\(in)30 b Fe(net/)-114 4703 y(sched/police.c)p
Ff(\))18 b(to)23 b(determine)g(if)g(the)h(\015o)n(w)e(they)i(select)
-114 4802 y(conforms)29 b(to)g(a)h(tok)n(en)f(buc)n(k)n(et.)43
b(The)30 b(buc)n(k)n(et)f(parameters)-114 4902 y(\(declared)i(in)h
Fe(struct)41 b(tc_police)28 b Ff(in)k Fe(include/linux/)-114
5001 y(pkt_cls.h)p Ff(\))c(are)h(roughly)h(the)h(same)g(as)f(for)g
(TBF:)h(max-)-114 5101 y(im)n(um)39 b(pac)n(k)n(et)e(size)h(\()p
Fe(mtu)p Ff(\),)i(a)n(v)n(erage)35 b(rate)j(\()p Fe(rate)p
Ff(\),)i(p)r(eak)-114 5201 y(rate)29 b(\()p Fe(peakrate)p
Ff(\),)f(and)i(buc)n(k)n(et)f(size)h(\()p Fe(burst)p
Ff(\).)42 b(The)30 b(\014eld)-114 5300 y Fe(action)40
b Ff(con)n(tains)h(the)i(p)r(olicy)f(decision)g(co)r(de)g(returned)-114
5400 y(when)28 b(accepting)f(the)h(pac)n(k)n(et)e(w)n(ould)h(exceed)h
(the)g(limits.)2160 2348 y(If)k(no)f(matc)n(hing)g(\014lter)g(w)n(as)f
(found,)j Fe(tc_classify)27 b Ff(re-)2061 2447 y(turns)41
b Fe(TC_POLICE_UNSPEC)o Ff(.)72 b(In)42 b(this)f(case,)j(a)d(queuing)
2061 2547 y(discipline)34 b(will)g(t)n(ypically)g(either)f(discard)h
(the)g(pac)n(k)n(et)f(or)2061 2646 y(treat)27 b(it)h(with)g(lo)n(w)f
(priorit)n(y)-7 b(.)2160 2767 y(The)21 b(second)g(t)n(yp)r(e)g(of)g(p)r
(olicing)g(o)r(ccurs)f(when)i(a)e(queuing)2061 2867 y(discipline)g
(fails)g(to)g(enqueue)h(a)e(pac)n(k)n(et)h(\(\014gure)g(11\).)33
b(In)21 b(this)2061 2967 y(case,)29 b(it)i(normally)d(simply)i
(discards)f(the)h(pac)n(k)n(et)f(\(i.e.)44 b(b)n(y)2061
3066 y(calling)39 b Fe(kfree_skb)p Ff(\).)72 b(Some)40
b(queuing)g(disciplines)g(also)2061 3166 y(pro)n(vide)g(more)h
(sophisticated)g(feedbac)n(k)g(to)h(the)g(calling)2061
3265 y(queuing)19 b(discipline)g(and)g(giv)n(en)f(them)i(a)f(second)f
(c)n(hance)h(for)2061 3365 y(enqueuing)29 b(the)h(pac)n(k)n(et:)40
b(if)31 b(the)f Fe(reshape_fail)24 b Ff(callbac)n(k)2061
3465 y(function)e(has)f(b)r(een)h(set)g(\(in)h Fe(struct)41
b(Qdisc)p Ff(\),)21 b(the)h(\\inner")2061 3564 y(queuing)k(discipline)h
(ma)n(y)f(in)n(v)n(ok)n(e)f(it)i(instead)g(to)f(allo)n(w)g(the)2061
3664 y(\\outer")i(queuing)h(discipline)h(to)f(select)h(a)f(di\013eren)n
(t)h(class.)2061 3764 y(If)41 b Fe(reshape_fail)36 b
Ff(is)41 b(not)f(set)h(or)f(if)i(it)f(returns)f(a)h(non-)2061
3863 y(zero)26 b(v)-5 b(alue,)28 b(the)g(pac)n(k)n(et)f(m)n(ust)g(b)r
(e)i(discarded.)36 b(Curren)n(tly)-7 b(,)2061 3963 y(only)51
b Fe(sch_cbq)e Ff(pro)n(vides)i(a)g Fe(reshape_fail)c
Ff(function.)2061 4062 y Fe(sch_fifo)22 b Ff(and)j Fe(sch_tbf)d
Ff(mak)n(e)i(calls)h(to)g Fe(reshape_fail)p Ff(,)2061
4162 y(if)j(a)n(v)-5 b(ailable.)2160 4283 y(The)24 b(third)g(p)r
(olicing)f(mec)n(hanism)h(is)f(applied)h(if)g(a)f(queu-)2061
4383 y(ing)32 b(discipline)g(decides)g(to)g(drop)f(a)h(pac)n(k)n(et)f
(from)h(an)g(\\in-)2061 4482 y(ner")46 b(queuing)h(discipline)g(after)g
(that)h(pac)n(k)n(et)e(w)n(as)g(en-)2061 4582 y(queued,)27
b(e.g.)37 b(in)27 b(order)f(to)i(create)e(space)h(for)g(pac)n(k)n(ets)f
(of)h(a)2061 4681 y(more)h(imp)r(ortan)n(t)g(class)g(\(\014gure)g
(12\).)40 b(This)28 b(is)h(done)f(using)2061 4781 y(the)h
Fe(drop)e Ff(function.)42 b(The)29 b Fe(cbq_dequeue_prio)23
b Ff(function)2061 4881 y(of)f Fe(sch_cbq)e Ff(uses)i(this)h(via)f
Fe(cbq_under_limit)16 b Ff(to)23 b(remo)n(v)n(e)2061
4980 y(pac)n(k)n(ets)j(from)h(classes)g(whic)n(h)g(are)g(o)n(v)n(er)e
(limit.)2160 5101 y(Also)44 b(the)g(fourth)h(mec)n(hanism)e(\(\014gure)
h(13\))f(discards)2061 5201 y(pac)n(k)n(ets)17 b(that)i(ha)n(v)n(e)e
(already)g(b)r(een)i(successfully)f(enqueued:)2061 5300
y(if)32 b(the)h Fe(enqueue)c Ff(function)k(of)f(a)g(queuing)f
(discipline)i(con-)2061 5400 y(siders)25 b(a)g(new)h(pac)n(k)n(et)f(to)
h(b)r(e)g(more)f(imp)r(ortan)n(t)h(than)g(some)1905 5649
y(9)p eop
%%Page: 10 10
10 9 bop -70 2417 a @beginspecial 0 @llx 0 @lly 218 @urx
272 @ury 2180 @rwi @setspecial
%%BeginDocument: fspec.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fspec.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Thu Nov  5 17:19:45 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 272
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
/col32 {0.502 0.502 0.502 srgb} bind def

end
save
-62.0 325.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
 /DrawEllipse {
	/endangle exch def
	/startangle exch def
	/yrad exch def
	/xrad exch def
	/y exch def
	/x exch def
	/savematrix mtrx currentmatrix def
	x y tr xrad yrad sc 0 0 1 startangle endangle arc
	closepath
	savematrix setmatrix
	} def

/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6412 m -1000 -1000 l 5665 -1000 l 5665 6412 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
gs  clippath
3912 4667 m 4023 4719 l 3900 4726 l 4059 4757 l 4071 4699 l cp
clip
n 1575 3375 m 1575 4350 l 2175 4350 l 4050 4725 l gs col0 s gr gr

% arrowhead
n 3912 4667 m 4023 4719 l 3900 4726 l 3906 4696 l 3912 4667 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
60.000 slw
n 1500 3375 m 1800 3375 l gs col32 s gr 
/Times-Italic ff 180.00 scf sf
1500 2775 m
gs 1 -1 sc (filter) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1500 2775 m
gs 1 -1 sc (_classify) col0 sh gr
7.500 slw
% Ellipse
n 2175 4350 75 75 0 360 DrawEllipse gs col32 1.00 shd ef gr gs col32 s gr

% Polyline
gs  clippath
2550 1054 m 2673 1056 l 2564 1112 l 2721 1076 l 2708 1017 l cp
clip
n 1725 1275 m 2700 1050 l gs col0 s gr gr

% arrowhead
n 2550 1054 m 2673 1056 l 2564 1112 l 2557 1083 l 2550 1054 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
gs  clippath
1593 2326 m 1572 2448 l 1533 2331 l 1546 2492 l 1606 2487 l cp
clip
n 1500 1575 m 1575 2475 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 1593 2326 m 1572 2448 l 1533 2331 l  col0 s
% Polyline
 [60] 0 sd
gs  clippath
2010 2410 m 1896 2458 l 1974 2362 l 1845 2460 l 1881 2508 l cp
clip
n 3450 1275 m 1875 2475 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 2010 2410 m 1896 2458 l 1974 2362 l  col0 s
% Polyline
n 1950 4200 m 2400 4200 l gs col0 s gr 
% Polyline
n 3300 4950 m 3300 3300 l 3600 3300 l 3600 4950 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3300 5400 m 3300 4950 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3600 5400 m 3600 4950 l gs col0 s gr  [] 0 sd
% Polyline
n 1950 3900 m 2400 3900 l 2400 4500 l 1950 4500 l cp gs col0 s gr 
% Polyline
gs  clippath
1803 4020 m 1923 4050 l 1803 4080 l 1965 4080 l 1965 4020 l cp
clip
n 1725 3225 m 1725 4050 l 1950 4050 l gs col0 s gr gr

% arrowhead
n 1803 4020 m 1923 4050 l 1803 4080 l 1803 4050 l 1803 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1050 2550 m 2550 2550 l 2550 2850 l 1050 2850 l cp gs col0 s gr 
% Polyline
n 4425 3825 m 4050 3825 l 4050 3525 l 4425 3525 l gs col0 s gr 
% Polyline
n 4425 4275 m 4050 4275 l 4050 3975 l 4425 3975 l gs col0 s gr 
% Polyline
n 4425 4950 m 4050 4950 l 4050 4650 l 4425 4650 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 4425 4950 m 4650 4950 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 4650 m 4650 4650 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 4275 m 4650 4275 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3975 m 4650 3975 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3825 m 4650 3825 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3525 m 4650 3525 l gs col0 s gr  [] 0 sd
% Polyline
n 2700 900 m 4650 900 l 4650 1200 l 2700 1200 l cp gs col0 s gr 
% Polyline
n 1425 3150 m 1875 3150 l 1875 3450 l 1425 3450 l cp gs col0 s gr 
% Polyline
n 1425 3375 m 1350 3375 l 1350 3075 l 1800 3075 l 1800 3150 l gs col0 s gr 
% Polyline
n 1350 3300 m 1275 3300 l 1275 3000 l 1725 3000 l 1725 3075 l gs col0 s gr 
% Polyline
gs  clippath
2055 3378 m 2025 3498 l 1995 3378 l 1995 3540 l 2055 3540 l cp
clip
n 2025 2925 m 2025 3525 l gs col0 s gr gr

% arrowhead
n 2055 3378 m 2025 3498 l 1995 3378 l 2025 3378 l 2055 3378 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1575 3000 m 1575 2850 l gs col0 s gr 
% Polyline
n 1050 1200 m 1950 1200 l 1950 1500 l 1050 1500 l cp gs col0 s gr 
% Polyline
60.000 slw
n 1500 3225 m 1800 3225 l gs col32 s gr 
% Polyline
n 1575 1275 m 1875 1275 l gs col32 s gr 
/Times-Roman ff 180.00 scf sf
3525 4200 m
gs 1 -1 sc  90.0 rot (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3450 3225 m
gs 1 -1 sc (x:0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 4725 m
gs 1 -1 sc (tcf_result) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 4125 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2475 4350 m
gs 1 -1 sc (class) col0 sh gr
/Courier ff 180.00 scf sf
2475 4125 m
gs 1 -1 sc (classid) col0 sh gr
/Times-Roman ff 180.00 scf sf
1200 2100 m
gs 1 -1 sc (Filter can use all packet information) col0 sh gr
/Courier ff 180.00 scf sf
4350 3750 m
gs 1 -1 sc (x:a) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 4200 m
gs 1 -1 sc (x:b) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 4875 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier-Bold ff 180.00 scf sf
4350 4500 m
gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4350 3300 m
gs 1 -1 sc (Classes) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3675 1125 m
gs 1 -1 sc (Packet content) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
1200 3225 m
gs 1 -1 sc  90.0 rot (Filters) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2250 3225 m
gs 1 -1 sc  90.0 rot (Search) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1275 1425 m
gs 1 -1 sc (skb) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2682 a Ff(Figure)33 b(9:)49 b(Sp)r(eci\014c)34
b(\014lter,)h(with)f(a)g(p)r(oin)n(ter)f(to)g(the)h(class)-114
2782 y(used)28 b(as)e(the)i(in)n(ternal)f(class)g(ID.)-114
3045 y(older)g(one,)h(it)h(can)e(discard)g(the)i(old)f(pac)n(k)n(et)f
(and)g(enqueue)-114 3144 y(the)e(new)f(one)g(instead.)35
b(It)25 b(indicates)f(this)h(to)f(the)g(caller)g(b)n(y)-114
3244 y(returning)j(zero.)-114 3555 y Fg(9)135 b(The)97
b Fa(sch)p 608 3555 37 4 v 43 w(atm)f Fg(queuing)h(disci-)88
3704 y(pline)-114 3899 y Ff(The)22 b(A)-7 b(TM)22 b(queuing)g
(discipline)g(is)g(used)g(to)f(re-direct)g(\015o)n(ws)-114
3998 y(from)h(the)g(default)g(path)g(\(e.g.)35 b(through)21
b(a)h(giv)n(en)f(in)n(terface\))-114 4098 y(to)27 b(A)-7
b(TM)28 b(V)n(Cs.)37 b(Eac)n(h)26 b(\015o)n(w)h(can)g(ha)n(v)n(e)f(its)
i(o)n(wn)e(A)-7 b(TM)28 b(V)n(C,)-114 4198 y(but)20 b(m)n(ultiple)h
(\015o)n(ws)e(can)g(also)g(share)g(the)h(same)f(V)n(C.)h(Figure)-114
4297 y(14)k(illustrates)h(the)h(structure)e(of)i(this)f(queuing)g
(discipline.)-14 4404 y(While)33 b(its)g(classi\014cation)f(and)g
(queuing)h(part)f(is)h(fairly)-114 4503 y(generic,)56
b(the)51 b(A)-7 b(TM)52 b(queuing)f(discipline)g(di\013ers)g(from)-114
4603 y(other)39 b(queuing)g(disciplines)g(in)h(that)f(pac)n(k)n(ets)f
(enqueued)-114 4703 y(on)60 b(it)h(ma)n(y)f(lea)n(v)n(e)f(via)h(other)f
(paths)i(than)f(through)-114 4802 y(the)40 b Fe(dequeue)d
Ff(function)j(or)f(b)r(eing)h(dropp)r(ed:)60 b(whenev)n(er)-114
4902 y Fe(dequeue)19 b Ff(is)j(called,)h(it)g(\014rst)e(c)n(hec)n(ks)g
(all)h(inner)g(queuing)g(dis-)-114 5001 y(ciplines)k(for)g(pac)n(k)n
(ets)e(to)i(send,)h(and)e(sends)h(them)h(o)n(v)n(er)d(the)-114
5101 y(resp)r(ectiv)n(e)37 b(A)-7 b(TM)37 b(V)n(Cs.)66
b(After)38 b(that,)i(it)e(returns)f(what-)-114 5201 y(ev)n(er)f(it)i
(gets)f(from)h(the)f(default)h(queue,)i(whic)n(h)e(receiv)n(es)-114
5300 y(the)e(pac)n(k)n(ets)e(that)h(don't)h(get)f(attributed)g(to)g(an)
n(y)g(of)g(the)-114 5400 y(classes.)2061 1600 y @beginspecial
0 @llx 0 @lly 245 @urx 173 @ury 2450 @rwi @setspecial
%%BeginDocument: pol2.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol2.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:26:37 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 245 173
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-161.0 406.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/reencdict 12 dict def /ReEncode { reencdict begin
/newcodesandnames exch def /newfontname exch def /basefontname exch def
/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
basefontdict { exch dup /FID ne { dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
newfont /FontName newfontname put newcodesandnames aload pop
128 1 255 { newfont /Encoding get exch /.notdef put } for
newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
newfontname newfont definefont pop end } def
/isovec [
8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
8#220 /dotlessi 8#230 /oe 8#231 /OE
8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
/Times-Roman /Times-Roman-iso isovec ReEncode
/Times-Bold /Times-Bold-iso isovec ReEncode
/Courier /Courier-iso isovec ReEncode
/Courier-Oblique /Courier-Oblique-iso isovec ReEncode
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 7751 m -1000 -1000 l 7762 -1000 l 7762 7751 l cp clip
 0.06000 0.06000 sc
% Polyline
n 2700 5625 m 6750 5625 l 6750 3900 l 2700 3900 l cp gs col7 0.95 shd ef gr 
% Polyline
n 2700 6750 m 6750 6750 l 6750 5625 l 2700 5625 l cp gs col7 0.90 shd ef gr 
/Courier-Oblique-iso ff 180.00 scf sf
3300 4875 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
3300 4875 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique-iso ff 180.00 scf sf
3300 6000 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
3300 6000 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique-iso ff 180.00 scf sf
5025 6000 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
5025 6000 m
gs 1 -1 sc (_reclassify) col0 sh gr
% Polyline
7.500 slw
gs  clippath
4901 5737 m 4950 5850 l 4853 5773 l 4935 5880 l 4983 5844 l cp
clip
n 4200 4875 m 4950 5850 l gs col0 s gr gr

% arrowhead
n 4901 5737 m 4950 5850 l 4853 5773 l 4877 5755 l 4901 5737 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 4770 m 5550 4800 l 5430 4830 l 5565 4830 l 5565 4770 l cp
clip
n 4200 4800 m 5550 4800 l gs col0 s gr gr

% arrowhead
n 5430 4770 m 5550 4800 l 5430 4830 l 5430 4800 l 5430 4770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4677 4514 m 4800 4500 l 4698 4570 l 4825 4523 l 4804 4467 l cp
clip
n 4200 4725 m 4800 4500 l gs col0 s gr gr

% arrowhead
n 4677 4514 m 4800 4500 l 4698 4570 l 4688 4542 l 4677 4514 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 2775 5625 m 6750 5625 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
3384 5054 m 3450 4950 l 3441 5073 l 3483 4945 l 3426 4926 l cp
clip
n 3150 5850 m 3450 4950 l gs col0 s gr gr

% arrowhead
n 3384 5054 m 3450 4950 l 3441 5073 l 3412 5064 l 3384 5054 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman-iso ff 180.00 scf sf
5700 4500 m
gs 1 -1 sc (Successfully enqueued) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
2850 6600 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
2850 4200 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
/Courier-iso ff 180.00 scf sf
5625 4875 m
gs 1 -1 sc (kfree_skb) col0 sh gr
/Courier-iso ff 180.00 scf sf
4875 5550 m
gs 1 -1 sc (!= NULL) col0 sh gr
/Courier-iso ff 180.00 scf sf
4875 5400 m
gs 1 -1 sc (sch->reshape_fail) col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4875 5400 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4575 5025 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
4575 5025 m
gs 1 -1 sc (sch->reshape_fail) col0 sh gr
/Courier-iso ff 180.00 scf sf
4575 5175 m
gs 1 -1 sc (== NULL) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 266 x(Figure)d(11:)45 b(P)n(olicing)31 b(when)i
(enqueuing;)i(decision)d(tak)n(en)2061 1965 y(b)n(y)27
b(\\inner")f(queuing)i(discipline.)2067 3264 y @beginspecial
0 @llx 0 @lly 227 @urx 141 @ury 2270 @rwi @setspecial
%%BeginDocument: pol3.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol3.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:27:24 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 227 141
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-161.0 311.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6176 m -1000 -1000 l 7462 -1000 l 7462 6176 l cp clip
 0.06000 0.06000 sc
% Polyline
n 2700 4050 m 6450 4050 l 6450 5175 l 2700 5175 l cp gs col7 0.90 shd ef gr 
% Polyline
n 2700 4050 m 6450 4050 l 6450 2850 l 2700 2850 l cp gs col7 0.95 shd ef gr 
/Times-Italic ff 180.00 scf sf
3300 4500 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3300 4500 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
3600 3675 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3600 3675 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
5550 4500 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
5550 4500 m
gs 1 -1 sc (_...) col0 sh gr
/Times-Italic ff 180.00 scf sf
5850 3675 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
5850 3675 m
gs 1 -1 sc (_drop) col0 sh gr
% Polyline
7.500 slw
gs  clippath
5770 3844 m 5850 3750 l 5823 3871 l 5884 3750 l 5830 3723 l cp
clip
n 5550 4350 m 5850 3750 l gs col0 s gr gr

% arrowhead
n 5770 3844 m 5850 3750 l 5823 3871 l 5796 3857 l 5770 3844 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3520 3844 m 3600 3750 l 3573 3871 l 3634 3750 l 3580 3723 l cp
clip
n 3300 4350 m 3600 3750 l gs col0 s gr gr

% arrowhead
n 3520 3844 m 3600 3750 l 3573 3871 l 3546 3857 l 3520 3844 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 4425 4050 m 2700 4050 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 5100 4050 m 6450 4050 l gs col0 s gr  [] 0 sd
/Times-Roman ff 180.00 scf sf
4800 4125 m
gs 1 -1 sc (later ...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 5025 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 3150 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2061 3529 a(Figure)34 b(12:)51 b(P)n(olicing)34
b(after)h(enqueuing;)k(decision)c(tak)n(en)2061 3629
y(b)n(y)27 b(\\outer")f(queuing)h(discipline.)2160 3902
y(In)d(order)e(to)h(prev)n(en)n(t)g(V)n(Cs)g(from)g(b)r(eing)g(remo)n
(v)n(ed)f(while)2061 4001 y(the)34 b(queuing)g(discipline)g(is)g(still)
h(using)e(them,)k(the)d(refer-)2061 4101 y(ence)h(coun)n(t)g(of)h(the)g
(corresp)r(onding)d(so)r(c)n(k)n(et)i(is)g(increased)2061
4201 y(when)h(attac)n(hing)f(a)g(V)n(C)h(to)g(a)f(class)g(of)h(the)g(A)
-7 b(TM)36 b(queu-)2061 4300 y(ing)25 b(discipline.)36
b(This)25 b(happ)r(ens)g(in)h(the)f(function)h Fe(sockfd_)2061
4400 y(lookup)21 b Ff(in)i Fe(net/socket.c)c Ff(whic)n(h)24
b Fe(atm_tc_change)18 b Ff(calls)2061 4500 y(to)i(translate)g(the)h(so)
r(c)n(k)n(et)f(descriptor)f(n)n(um)n(b)r(er)i(to)f(a)g(p)r(oin)n(ter)
2061 4599 y(to)31 b(the)g(so)r(c)n(k)n(et)f(structure.)47
b(When)31 b(the)h(class)e(is)h(remo)n(v)n(ed,)2061 4699
y(it)i(returns)g(the)g(so)r(c)n(k)n(et)f(using)h Fe(sockfd_put)p
Ff(,)d(whic)n(h)k(then)2061 4798 y(decremen)n(ts)i(the)h(reference)f
(coun)n(t.)65 b(This)37 b(pair)f(of)h(func-)2061 4898
y(tions)27 b(p)r(erforms)f(roughly)g(the)i(equiv)-5 b(alen)n(t)27
b(of)g Fe(fdopen)e Ff(and)2061 4998 y Fe(close)p Ff(.)2160
5101 y(The)37 b(A)-7 b(TM)38 b(queuing)e(discipline)i(supp)r(orts)e
(the)h(p)r(olic-)2061 5201 y(ing)68 b(resp)r(onses)f
Fe(TC_POLICE_SHOT)c Ff(and)68 b Fe(TC_POLICE_)2061 5300
y(RECLASSIFY)p Ff(.)31 b(The)23 b(latter)f(can)h(b)r(e)g(handled)g(in)g
(t)n(w)n(o)f(di\013er-)2061 5400 y(en)n(t)29 b(w)n(a)n(ys:)38
b(\(1\))29 b(b)n(y)f(assigning)g(the)h(pac)n(k)n(et)f(to)h(a)f(new)h
(class)1884 5649 y(10)p eop
%%Page: 11 11
11 10 bop 193 1217 a @beginspecial 0 @llx 0 @lly 416
@urx 128 @ury 4160 @rwi @setspecial
%%BeginDocument: schatm.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: schatm.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:50:05 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 416 128
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-71.0 163.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3712 m -1000 -1000 l 9112 -1000 l 9112 3712 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 2400 1500 m 3000 1500 l 3000 1800 l 2400 1800 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1500 m 3300 1500 l 3300 1800 l 3900 1800 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 1500 m 5700 1500 l 5700 1800 l 5400 1800 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 1500 2700 m 1500 600 l 1800 600 l 1800 2400 l 6000 2400 l 6000 600 l
 6300 600 l 6300 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2400 1050 m 3000 1050 l 3000 1350 l 2400 1350 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1050 m 3300 1050 l 3300 1350 l 3900 1350 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 1050 m 5700 1050 l 5700 1350 l 5400 1350 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2400 600 m 3000 600 l 3000 900 l 2400 900 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 600 m 3300 600 l 3300 900 l 3900 900 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 600 m 5700 600 l 5700 900 l 5400 900 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
2253 1620 m 2373 1650 l 2253 1680 l 2415 1680 l 2415 1620 l cp
clip
n 2100 1650 m 2400 1650 l gs col0 s gr gr

% arrowhead
n 2253 1620 m 2373 1650 l 2253 1680 l 2253 1650 l 2253 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 1620 m 3273 1650 l 3153 1680 l 3315 1680 l 3315 1620 l cp
clip
n 3000 1650 m 3300 1650 l gs col0 s gr gr

% arrowhead
n 3153 1620 m 3273 1650 l 3153 1680 l 3153 1650 l 3153 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1500 m 5400 1500 l 5400 1800 l 3900 1800 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
/Times-Roman ff 180.00 scf sf
2700 1725 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 1725 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 1725 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
n 6855 600 m 6750 600 6750 795 105 arcto 4 {pop} repeat
  6750 900 7395 900 105 arcto 4 {pop} repeat
  7500 900 7500 705 105 arcto 4 {pop} repeat
  7500 600 6855 600 105 arcto 4 {pop} repeat
 cp gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman ff 180.00 scf sf
7125 825 m
gs 1 -1 sc (ATM VC) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
n 6855 1050 m 6750 1050 6750 1245 105 arcto 4 {pop} repeat
  6750 1350 7395 1350 105 arcto 4 {pop} repeat
  7500 1350 7500 1155 105 arcto 4 {pop} repeat
  7500 1050 6855 1050 105 arcto 4 {pop} repeat
 cp gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman ff 180.00 scf sf
7125 1275 m
gs 1 -1 sc (ATM VC) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
3753 2070 m 3873 2100 l 3753 2130 l 3915 2130 l 3915 2070 l cp
clip
n 2100 750 m 2100 2100 l 3900 2100 l gs col0 s gr gr

% arrowhead
n 3753 2070 m 3873 2100 l 3753 2130 l 3753 2100 l 3753 2070 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1950 m 5400 1950 l 5400 2250 l 3900 2250 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6601 1104 m 6723 1126 l 6605 1164 l 6767 1154 l 6763 1094 l cp
clip
n 5550 1200 m 6750 1125 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6601 1104 m 6723 1126 l 6605 1164 l 6603 1134 l 6601 1104 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6601 1290 m 6724 1283 l 6619 1347 l 6773 1299 l 6755 1242 l cp
clip
n 5550 1650 m 6750 1275 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6601 1290 m 6724 1283 l 6619 1347 l 6610 1319 l 6601 1290 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2253 1170 m 2373 1200 l 2253 1230 l 2415 1230 l 2415 1170 l cp
clip
n 2100 1200 m 2400 1200 l gs col0 s gr gr

% arrowhead
n 2253 1170 m 2373 1200 l 2253 1230 l 2253 1200 l 2253 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 1170 m 3273 1200 l 3153 1230 l 3315 1230 l 3315 1170 l cp
clip
n 3000 1200 m 3300 1200 l gs col0 s gr gr

% arrowhead
n 3153 1170 m 3273 1200 l 3153 1230 l 3153 1200 l 3153 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1050 m 5400 1050 l 5400 1350 l 3900 1350 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6603 720 m 6723 750 l 6603 780 l 6765 780 l 6765 720 l cp
clip
n 5550 750 m 6750 750 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6603 720 m 6723 750 l 6603 780 l 6603 750 l 6603 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2253 720 m 2373 750 l 2253 780 l 2415 780 l 2415 720 l cp
clip
n 1800 750 m 2400 750 l gs col0 s gr gr

% arrowhead
n 2253 720 m 2373 750 l 2253 780 l 2253 750 l 2253 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 720 m 3273 750 l 3153 780 l 3315 780 l 3315 720 l cp
clip
n 3000 750 m 3300 750 l gs col0 s gr gr

% arrowhead
n 3153 720 m 3273 750 l 3153 780 l 3153 750 l 3153 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 600 m 5400 600 l 5400 900 l 3900 900 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6453 1770 m 6573 1800 l 6453 1830 l 6615 1830 l 6615 1770 l cp
clip
n 6300 1800 m 6600 1800 l gs col0 s gr gr

% arrowhead
n 6453 1770 m 6573 1800 l 6453 1830 l 6453 1800 l 6453 1770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1353 1770 m 1473 1800 l 1353 1830 l 1515 1830 l 1515 1770 l cp
clip
n 1200 1800 m 1500 1800 l gs col0 s gr gr

% arrowhead
n 1353 1770 m 1473 1800 l 1353 1830 l 1353 1800 l 1353 1770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 720 m 8073 750 l 7953 780 l 8115 780 l 8115 720 l cp
clip
n 7500 750 m 8100 750 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 720 m 8073 750 l 7953 780 l 7953 750 l 7953 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 1170 m 8073 1200 l 7953 1230 l 8115 1230 l 8115 1170 l cp
clip
n 7500 1200 m 8100 1200 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 1170 m 8073 1200 l 7953 1230 l 7953 1200 l 7953 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5853 2070 m 5973 2100 l 5853 2130 l 6015 2130 l 6015 2070 l cp
clip
n 5400 2100 m 6000 2100 l gs col0 s gr gr

% arrowhead
n 5853 2070 m 5973 2100 l 5853 2130 l 5853 2100 l 5853 2070 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
1800 2625 m
gs 1 -1 sc (ATM queuing discipline) col0 sh gr
/Times-Italic ff 180.00 scf sf
2700 2025 m
gs 1 -1 sc (Default) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 1275 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 1275 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 1275 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 825 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 825 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 825 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2175 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 1193 1482 a Ff(Figure)27 b(14:)36 b(The)27
b(A)-7 b(TM)29 b(queuing)e(discipline.)-70 2915 y @beginspecial
0 @llx 0 @lly 218 @urx 150 @ury 2180 @rwi @setspecial
%%BeginDocument: pol4.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol4.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov 30 14:04:27 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 150
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-17.0 167.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3776 m -1000 -1000 l 4912 -1000 l 4912 3776 l cp clip
 0.06000 0.06000 sc
% Polyline
n 300 1650 m 3900 1650 l 3900 2775 l 300 2775 l cp gs col7 0.90 shd ef gr 
% Polyline
n 300 1650 m 3900 1650 l 3900 300 l 300 300 l cp gs col7 0.95 shd ef gr 
/Times-Italic ff 180.00 scf sf
750 2100 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
750 2100 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
1050 1275 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1050 1275 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2925 1275 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2925 1275 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2625 2100 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2625 2100 m
gs 1 -1 sc (_enqueue) col0 sh gr
% Polyline
7.500 slw
 [60] 0 sd
n 1800 1650 m 300 1650 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 2475 1650 m 3900 1650 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
970 1444 m 1050 1350 l 1023 1471 l 1084 1350 l 1030 1323 l cp
clip
n 750 1950 m 1050 1350 l gs col0 s gr gr

% arrowhead
n 970 1444 m 1050 1350 l 1023 1471 l 996 1457 l 970 1444 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2920 1444 m 3000 1350 l 2973 1471 l 3034 1350 l 2980 1323 l cp
clip
n 2700 1950 m 3000 1350 l gs col0 s gr gr

% arrowhead
n 2920 1444 m 3000 1350 l 2973 1471 l 2946 1457 l 2920 1444 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 1125 1200 m 1125 825 l 3450 825 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
3420 1044 m 3450 900 l 3480 1044 l 3480 885 l 3420 885 l cp
clip
n 3450 1125 m 3450 900 l gs col0 s gr gr

% arrowhead
n 3420 1044 m 3450 900 l 3480 1044 l 3450 1020 l 3420 1044 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
30.000 slw
n 3300 675 m 3600 975 l gs col0 s gr 
% Polyline
n 3300 975 m 3600 675 l gs col0 s gr 
/Times-Bold ff 180.00 scf sf
450 2625 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Roman ff 180.00 scf sf
2175 1725 m
gs 1 -1 sc (later ...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
450 525 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 3180 a(Figure)33 b(13:)47 b(Older)32
b(pac)n(k)n(et)g(is)i(discarded)e(to)h(mak)n(e)f(ro)r(om)-114
3280 y(for)27 b(new)h(pac)n(k)n(et.)-114 3546 y(\(as)f(con\014gured)e
(b)n(y)i(the)g(user\),)g(or)f(\(2\))h(b)n(y)g(setting)g(the)g(cell)-114
3645 y(loss)g(priorit)n(y)f(bit)i(in)g(outgoing)e(A)-7
b(TM)28 b(cells.)-14 3745 y(The)34 b(co)r(de)f(the)i(A)-7
b(TM)34 b(queuing)g(discipline)g(is)g(in)g Fe(net/)-114
3845 y(sched/sch_atm.c)p Ff(.)29 b(In)23 b(addition)f(to)g(that)h
(\014le,)h Fe(include/)-114 3945 y(linux/pkt_sched.)o(h)h
Ff(con)n(tains)k(the)i(option)f(t)n(yp)r(es)h(\(pre-)-114
4044 y(\014x)37 b Fe(TCA_ATM_)p Ff(\),)g(and)g Fe(net/sched/sch_ap)o
(i.c)30 b Ff(con)n(tains)-114 4144 y(the)42 b(initialization.)79
b(F)-7 b(urthermore,)44 b(the)e(usual)f(c)n(hanges)-114
4243 y(had)30 b(to)f(b)r(e)h(made)g(to)f Fe(net/sched/Config.)o(in)23
b Ff(and)30 b Fe(net/)-114 4343 y(sched/Makefile)j Ff(to)38
b(include)h(the)g(new)g(queuing)f(disci-)-114 4443 y(pline)28
b(in)g(the)g(con\014guration)e(and)h(build)h(pro)r(cess.)-14
4543 y(The)19 b(use)h(of)f(the)h(A)-7 b(TM)20 b(queuing)f(discipline)h
(is)g(describ)r(ed)-114 4642 y(in)46 b(the)h(\014le)f
Fe(atm/extra/tc/REA)o(DME)39 b Ff(in)47 b(the)f(A)-7
b(TM)47 b(on)-114 4742 y(Lin)n(ux)27 b(distribution.)-114
5018 y Fg(10)135 b(Conclusion)-114 5201 y Ff(Lin)n(ux)26
b(tra\016c)f(con)n(trol)f(consists)h(of)h(a)f(large)f(v)-5
b(ariet)n(y)25 b(of)h(ele-)-114 5300 y(men)n(ts,)g(whic)n(h)f(in)n
(teract)g(with)h(eac)n(h)f(other)f(in)i(man)n(y)f(w)n(a)n(ys.)-114
5400 y(The)d(mo)r(dular)g(approac)n(h)e(c)n(hosen)h(results)h(in)g(a)g
(v)n(ery)e(v)n(ersa-)2061 1748 y(tile)g(design)g(that)g(can)g(b)r(e)g
(readily)f(applied)h(to)g(most)g(curren)n(t)2061 1847
y(tra\016c)e(con)n(trol)g(tasks,)i(and)f(whic)n(h)g(can)g(b)r(e)h
(easily)e(extended)2061 1947 y(to)k(accommo)r(date)g(less)g(t)n(ypical)
g(applications,)h(suc)n(h)f(as)g(the)2061 2046 y(link-la)n(y)n(er)e
(selection)i(implemen)n(ted)i(in)e(the)h(A)-7 b(TM)23
b(queuing)2061 2146 y(discipline.)34 b(It)20 b(will)g(also)e(form)i
(the)g(basis)f(for)g(the)h(Lin)n(ux)f(im-)2061 2246 y(plemen)n(tation)
32 b(of)g(Di\013eren)n(tiated)g(Services,)g(whic)n(h)h(unify)2061
2345 y(and)25 b(adv)-5 b(ance)25 b(man)n(y)h(of)f(the)i(existing)e
(tra\016c)g(con)n(trol)g(con-)2061 2445 y(cepts.)2160
2545 y(W)-7 b(e)26 b(ha)n(v)n(e)e(describ)r(ed)h(queuing)h
(disciplines,)g(classes,)e(\014l-)2061 2644 y(ters,)31
b(and)f(elemen)n(ts)h(within)g(\014lters,)g(w)n(e)g(ha)n(v)n(e)e
(illustrated)2061 2744 y(the)g(most)g(imp)r(ortan)n(t)f(in)n
(teractions)g(b)r(et)n(w)n(een)h(these)g(com-)2061 2843
y(p)r(onen)n(ts,)23 b(and)g(w)n(e)f(ha)n(v)n(e)g(brie\015y)g(in)n(tro)r
(duced)h(the)g(design)f(of)2061 2943 y(a)30 b(new)h(queuing)g
(discipline.)46 b(W)-7 b(e)32 b(hop)r(e)f(this)g(information)2061
3043 y(to)e(b)r(e)h(useful)g(for)f(p)r(eople)h(aiming)f(to)g
(understand)g(the)h(in-)2061 3142 y(ner)18 b(w)n(orkings)e(of)i(Lin)n
(ux)h(tra\016c)f(con)n(trol,)g(and)h(in)f(particular)2061
3242 y(also)24 b(to)h(implemen)n(tors)g(of)g(new)h(tra\016c)f(con)n
(trol)f(functions.)2061 3513 y Fg(11)135 b(Ac)l(kno)l(wledgemen)l(ts)
2061 3694 y Ff(The)38 b(author)f(w)n(ould)h(lik)n(e)g(to)g(thank)g
(Jamal)f(Hadi)h(Salim)2061 3794 y(for)c(v)n(ery)h(helpful)h
(discussions)e(and)h(suggestions)f(on)h(this)2061 3894
y(pap)r(er,)21 b(and)e(Alexey)h(Kuznetso)n(v)e(for)i(a)f(critical)g
(review)g(and)2061 3993 y(for)33 b(explaining)h(man)n(y)f(of)h(his)g
(design)g(decisions)f(and)h(the)2061 4093 y(deep)r(er)27
b(details)g(of)h(tra\016c)f(con)n(trol.)2061 4364 y Fg(References)2061
4546 y Ff([1])41 b(Clark,)f(Da)n(vid)e(D.;)45 b(Shenk)n(er,)40
b(Scott;)k(Zhang,)d(Lixia.)2190 4645 y Fc(Supp)l(orting)47
b(R)l(e)l(al-Time)g(Applic)l(ations)h(in)f(an)g(Inte-)2190
4745 y(gr)l(ate)l(d)26 b(Servic)l(es)g(Packet)g(Network:)37
b(A)n(r)l(chite)l(ctur)l(e)24 b(and)2190 4844 y(Me)l(chanism)p
Ff(,)43 b(Pro)r(ceedings)37 b(of)i(SigComm'92,)i(Balti-)2190
4944 y(more,)32 b(MD,)g(August)g(1992.)e Fe(http://ana-)t(www.l)o(cs)o
(.)2190 5044 y(mit.edu/anaweb/p)o(s-)s(pap)o(er)o(s/c)o(sz)o(.ps)2061
5201 y Ff([2])41 b(IETF,)73 b(In)n(tegrated)f(Services)h(\(in)n
(tserv\))g(w)n(orking)2190 5300 y(group.)62 b Fe(http://www.ietf.)o
(org)o(/h)o(tml)o(.c)o(ha)o(rte)o(rs)o(/)2190 5400 y(intserv-)t
(charter.)o(ht)o(ml)1884 5649 y Ff(11)p eop
%%Page: 12 12
12 11 bop -114 233 a Ff([3])41 b(IETF,)d(Di\013eren)n(tiated)g
(Services)f(\(di\013serv\))h(w)n(orking)15 333 y(group.)62
b Fe(http://www.ietf.o)o(rg/)o(ht)o(ml)o(.ch)o(ar)o(ter)o(s/)15
432 y(diffserv-)t(charter.)o(ht)o(ml)-114 598 y Ff([4])41
b(Bernet,)65 b(Y)-7 b(oram;)72 b(Y)-7 b(a)n(v)i(atk)g(ar,)64
b(Ra)5 b(j;)72 b(F)-7 b(ord,)64 b(P)n(eter;)15 698 y(Bak)n(er,)49
b(F)-7 b(red;)56 b(Zhang,)50 b(Lixia;)55 b(Nic)n(hols,)50
b(Kathleen;)15 798 y(Sp)r(eer,)38 b(Mic)n(hael.)d Fc(A)h(F)-6
b(r)l(amework)38 b(for)g(Use)f(of)h(RSVP)15 897 y(with)27
b(Di\013-serv)f(Networks)e Ff(\(w)n(ork)e(in)i(progress\),)e(In)n(ter-)
15 997 y(net)38 b(Draft)g Fe(draft-)t(ietf-)t(diffs)o(er)o(v-)t(r)o(sv)
o(p-)t(0)o(0.t)o(xt)o Ff(,)15 1096 y(June)28 b(1998.)-114
1262 y([5])41 b(Flo)n(yd,)48 b(Sally;)53 b(Jacobson,)47
b(V)-7 b(an.)44 b Fc(Link-sharing)j(and)15 1362 y(R)l(esour)l(c)l(e)i
(Management)g(Mo)l(dels)i(for)f(Packet)g(Net-)15 1462
y(works)p Ff(,)33 b(IEEE/A)n(CM)c(T)-7 b(ransactions)29
b(on)i(Net)n(w)n(orking,)15 1561 y(V)-7 b(ol.)28 b(3)f(No.)g(4,)h(pp.)g
(365-386,)c(August)k(1995.)-114 1727 y([6])41 b(RF)n(C2205;)66
b(Braden,)61 b(Bob)54 b(\(Ed.\);)68 b(Zhang,)61 b(Lixia;)15
1827 y(Berson,)38 b(Stev)n(e;)j(Herzog,)d(Shai;)j(Jamin,)e(Sugih.)e
Fc(R)l(e-)15 1927 y(sour)l(c)l(e)25 b(R)l(eSerV)-6 b(ation)24
b(Pr)l(oto)l(c)l(ol)i(\(RSVP\))e({)i(V)-6 b(ersion)25
b(1)15 2026 y(F)-6 b(unctional)30 b(Sp)l(e)l(ci\014c)l(ation)p
Ff(,)e(IETF,)g(Septem)n(b)r(er)f(1997.)-114 2192 y([7])41
b(Nic)n(hols,)j(Kathleen;)k(Blak)n(e,)c(Stev)n(en;)k(Bak)n(er,)43
b(F)-7 b(red;)15 2292 y(Blac)n(k,)63 b(Da)n(vid)57 b(L.)f
Fc(De\014nition)h(of)g(the)g(Di\013er)l(enti-)15 2392
y(ate)l(d)65 b(Servic)l(es)g(Field)h(\(DS)d(Field\))j(in)f(the)f(IPv4)
15 2491 y(and)58 b(IPv6)h(He)l(aders)g Ff(\(w)n(ork)e(in)h(progress\),)
64 b(In)n(ter-)15 2591 y(net)71 b(Draft)g Fe(draft-)t(ietf-)t(diffse)o
(rv-)s(hea)o(de)o(r-)s(04.)15 2690 y(txt)p Ff(,)27 b(Octob)r(er)f
(1998.)-114 2857 y([8])41 b(Blak)n(e,)58 b(Stev)n(en;)65
b(Blac)n(k,)58 b(Da)n(vid;)65 b(Carlson,)57 b(Mark;)15
2956 y(Da)n(vies,)73 b(Elwyn;)83 b(W)-7 b(ang,)74 b(Zheng;)83
b(W)-7 b(eiss,)74 b(W)-7 b(al-)15 3056 y(ter.)74 b Fc(A)n(n)d(A)n(r)l
(chite)l(ctur)l(e)h(for)h(Di\013er)l(entiate)l(d)g(Ser-)15
3155 y(vic)l(es)96 b Ff(\(w)n(ork)e(in)h(progress\),)109
b(In)n(ternet)95 b(Draft)15 3255 y Fe(draft-)t(ietf-)t(diffse)o(rv-)s
(ar)o(ch-)s(02.)o(tx)o(t)p Ff(,)176 b(Octo-)15 3355 y(b)r(er)28
b(1998.)-114 3521 y([9])41 b(RF)n(C2170;)72 b(Almesb)r(erger,)66
b(W)-7 b(erner;)73 b(Le)59 b(Boudec,)15 3620 y(Jean-Yv)n(es;)45
b(Oec)n(hslin,)d(Philipp)r(e.)e Fc(Applic)l(ation)j(RE-)15
3720 y(Queste)l(d)24 b(IP)h(over)g(A)-6 b(TM)25 b(\(AREQUIP)-6
b(A\))p Ff(,)21 b(IETF,)h(July)15 3820 y(1997.)1884 5649
y(12)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

--+HP7ph2BbKc20aGI--

From andi@fred.muc.de  Thu Apr 29 15:00:23 1999
Return-Path: <andi@fred.muc.de>
Received: from lacrosse.redhat.com (root@lacrosse.redhat.com [207.175.42.154])
	by devserv.devel.redhat.com (8.8.7/8.8.7) with ESMTP id PAA13690
	for <alan@devserv.devel.redhat.com>; Thu, 29 Apr 1999 15:00:21 -0400
Received: from mail.redhat.com (mail.redhat.com [199.183.24.239])
	by lacrosse.redhat.com (8.8.7/8.8.7) with ESMTP id PAA01811
	for <alan@lacrosse.redhat.com>; Thu, 29 Apr 1999 15:00:17 -0400
Received: from fred.muc.de (noidentity@ns2049.munich.netsurf.de [195.180.232.49])
	by mail.redhat.com (8.8.7/8.8.7) with SMTP id OAA26840
	for <alan@redhat.com>; Thu, 29 Apr 1999 14:59:33 -0400
Received: (qmail 421 invoked by uid 500); 30 Apr 1999 03:00:54 -0000
Message-ID: <19990430050054.45055@fred.muc.de>
Date: Fri, 30 Apr 1999 05:00:54 +0200
From: ak@muc.de
To: alan@redhat.com
Subject: Advanced Routing docs
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary=+HP7ph2BbKc20aGI
X-Mailer: Mutt 0.89.1i
Status: RO


--+HP7ph2BbKc20aGI
Content-Type: text/plain; charset=us-ascii


I attached advanced-routing.tex and a useful paper from Werner about the 
queueing disciplines.

-Andi



--+HP7ph2BbKc20aGI
Content-Type: application/x-tex
Content-Disposition: attachment; filename="advanced-routing.tex"

\documentclass[12pt,a4paper]{article}
\usepackage{}
\textwidth=16cm
\hoffset=-1cm
\sloppy

\begin{document}
\title{Advanced routing mini-HOWTO}
\author{Timur~A.~Bolokhov, timur@tepkom.ru}
\maketitle

This document describes new routing features of 2.1.X development
and coming 2.2.X stable linux kernels. Among them are source--based
routing and Network Address Translation (NAT).

\section{Introduction}

Somewhere in the middle of 2.1 development kernel series
routing code was rewriten by
Alexey Kuznetsov (kuznet@ms2.inr.ac.ru), many new features
like policy(source)--based routing,
Network Address Translation, scheduling etc were added. Networking
is now managed by means of \verb|ip|, \verb|tc| and \verb|rtmon| utilities
from \verb|iproute2| package.
I hope this document will help novices to enter new conception.

\subsection{Regrets}

This document is written by a USER, even some basic notions can
be incorrect. The \verb|ip| utility is very powerfull, as you can see by
its syntax in appendix, only a little part of its possibilities
is described. Hope that you can guess the rest.
No word is said about cooperation with \verb|tc| and about \verb|tc| itself.
No picture yet. Bad language, punctuation, general mistakes.

\subsection{Preliminary reading}

Suppose that you already have some experince with linux routing, or
at least just studied NET-3 HOWTO, IP-Alias, IP-Subnetworking,
IP-Masquerading, Proxy-Arp minis.
Kernel-HOWTO will help you to compile new-featured
kernel.


\subsection{Where to find them}
\begin{itemize}
\item
The \verb|iproute2| package is available in
{\tt ftp://ftp.inr.ac.ru/ip-routing/}
There is a mirror(s), but I couldnot even resolve it in DNS. May be
the situation will change?

\item
Howtos are as usual in \verb|/usr/doc/| or in the nearest
mirror of {\tt sunsite.unc.edu}.

\item
Utility \verb|ipchains| is homed in

{\tt http://www.adelaide.net.au/rustcorp/ipfwchains}.

\item
This document: hope that current version will be somewhere under

{\tt ftp://post.tepkom.ru/pub/Linux/}
\end{itemize}

\subsection{Convention}
Value standing in square brackets
[ ]
is just an option to smth.

\section{Software}
Author of this document is using 2.1.121 kernel with
\verb|glibc-2.0.7|,
\verb|iproute2-ss980827| along with \verb|gated-3.5.9|. Also
\verb|iproute2-glibc2-patch??|
was applied.
This combination experienced
only a week uptime, I couldnot test it longer.
%Once it was
%3C905B who completely hang the router, second it was an administrator
%who decided that black screen is rather a hanging router than a screensaver.


\section{How it was before}

I'll try to remind you in brief routing conception from 2.0.X series
kernels. When IP packet hits router's interface kernel, at first, applies
to it rules from input firewall chain. Then if packet survives and in case
that forwarding is enabled
(\verb|/proc/sys/net/ipv4/ip_forward| is nonzero) it
is being passed to another interface according to the routing table and
forward firewall chain. Or just finish its way if its destination is one
of the routers' interfaces. Normally routing table contain description of
paths to all possible IP destinations. The latest are gathered in
groups ---
networks, each of them is uniquelly described by network adress (the first
address in the group) and netmask (masklengh), which characterizes the
number of adresses in the group
($ 2^{32 - {\rm masklen}}$ is the right number).
Routing table has two main columns:
\begin{verbatim}
DESTINATION:            HOWTO_REACH_IT
\end{verbatim}

Indeed, look at the example:
\begin{verbatim}
router># route -n
Kernel IP routing table
Destination   Gateway      Genmask         Flags Metric Ref Use Iface
192.168.1.32  0.0.0.0      255.255.255.224 U     0      0    12 eth1:1
192.168.0.0   0.0.0.0      255.255.255.0   U     0      0    34 eth0
192.168.2.0   0.0.0.0      255.255.255.0   U     0      0     3 eth1
192.168.3.0   192.168.0.3  255.255.255.0   UG    1      0     8 eth0
127.0.0.0     0.0.0.0      255.0.0.0       U     0      0     1 lo
0.0.0.0       192.168.0.4  0.0.0.0         UG    1      0     3 eth0
\end{verbatim}
We have two network devices, three interfaces (without loopback) ---
{\bf eth0}, {\bf eth1} and an alias {\bf eth1:1},
three networks connected directly, so
we have 0.0.0.0 as gateway, one network connected behind the gateway
192.168.0.3 and a wise router 192.168.0.4 which knows how to forward
packets to the rest part of the world. Routing table is scanned by kernel
from top to bottom, when destination is found within some network
(or there is special "host" entry for it) packet is forwarded to
the specified gateway via corresponding interface.

Note that networks are sorted strongly in the direction of decreasing
of netmask (masklen), so that if a smaller network within a bigger one
has its own gateway then it will appear higher in the table and have its
chance to be routed correctly.

Now I want to remind you how to make such a table.
Here is some base syntax:
\begin{verbatim}
ifconfig DEVICE [ADDRESS] [netmask MASK] [broadcast ADDR] [up,down]
route {add,del,flush} [-net,-host] [NETWORK] [netmask MASK] \
>[gw GATEWAY] [dev DEVICE]
\end{verbatim}
and the real commands:
\begin{verbatim}
router># ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255 up
router># ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
router># ifconfig eth1 192.168.2.1 up
router># ifconfig eth1:1 192.168.1.35 netmask 255.255.255.224 \
> broadcast 192.168.1.63 up
router># route add -net 127.0.0.0 dev lo
router># route add -net 192.168.0.0 netmask 255.255.255.0 dev eth0
router># route add -net 192.168.2.0 dev eth1
router># route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.0.3
router># route add -net 192.168.1.32 netmask 255.255.255.224 dev eth1:1
router># route add default gw 192.168.0.4
\end{verbatim}


\section{What it is now}

Short description of a new routing mechanisms you can find in
\verb|linux/Documentation/Policy-routing.txt|.
Below I'll try give it in more detail.

Now we have not only one table (string) of correspondencies
\begin{verbatim}
DESTINATION:            HOWTO_REACH_IT
\end{verbatim}
but a set of such a tables (which are called classes in the
document referenced above), each one being applied to the packets
satisfying certain conditions. These conditions are set by means
of \verb|ip rule| syntaxis of \verb|ip| utility, while routing tables are
filled by means of \verb|ip route|. There are three built-in tables
(classes): local, main and default.
%which exist even before network interfaces are set up.
%??? this need investigation
Here we can see how they are bound by the rules:
\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
\end{verbatim}
Rules are scanned by the kernel in order of their preferense (the
number before semicolon), so in this initial setup for any arrived
packet path to destination will be looked up, at first, in table local and
if it's not found --- in tables main and default.

When an interface has been configured with \verb|ifconfig| (or \verb|ip link|
and \verb|ip addr|) host entries of its ip and broadcast addresses appear
in the table local.
%(this is the right place for them --- they cannot
%be reached with no other way).
Route to its attached network appears in the
table main. All this is done automatically, you should not type
no command now.
% ANK uses other terminology here.
To check up what do we have in table \verb|N| just type
\verb|ip route list table N|.

Utilities \verb|ifconfig| and \verb|route| from net-tools are still available
under 2.1.X,
so set up from the previous section can readily be done as above
(but without dealing with attached networks).
Another variant is to use \verb|ip|:
\begin{verbatim}
router># ip link set eth0 up
router># ip addr add 192.168.0.1/24 broadcast 192.168.0.255 \
> label eth0 dev eth0
router># ip link set eth1 up
router># ip addr add 192.168.2.1/24 broadcast 192.168.2.255 \
> label eth1 dev eth1
router># ip addr add 192.168.1.35/27 broadcast 192.168.1.63 \
> label eth1:1 dev eth1
router># ip route add 192.168.3.0/24 via 192.168.0.3 table main
router># ip route add 0/0 via 192.168.0.4 table main
\end{verbatim}
Static and default routes from this example may have been also put to
any other table which is looked up after table main
(with preference greater than 32766). For example:

\begin{verbatim}
router># ip route add 192.168.3.0/24 via 192.168.0.3 table 1
router># ip route add 0/0 via 192.168.0.4 table 2
router># ip rule add [from 0/0] table 1 pref 32800
router># ip rule add [from 0/0] table 2 pref 32810
\end{verbatim}
so that \verb|ip rule| gives:

\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32800:  from all lookup 1
32810:  from all lookup 2
\end{verbatim}
But we won't consider this variant below.

So what's the difference of the new routing scheme from the previous
one? The main is that ip packets now can be sorted with regards to
their source address, TOS field, and may be in the future --- to special
marks put on them by external classifier (like \verb|ipchains|).
Suppose that we want in our example for the packets [with TOS 0x10
(minimum delay)] coming from 192.168.1.32/27 to be routed thruogh
default gateway 192.168.0.5, then we type (after our interfaces are up):

\begin{verbatim}
router># ip route add 192.168.3.0/24 via 192.168.0.3 table main
router># ip route add 0/0 via 192.168.0.5 table 3
router># ip route add 0/0 via 192.168.0.4 table 4
router># ip rule add from 192.168.1.32/27 [tos 0x10] table 3 pref 32900
router># ip rule add from 0/0 table 4 pref 32910
\end{verbatim}
Rules now looks like this:

\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32900:  from 192.168.1.32/27 [tos 0x10] lookup 3
32910:  from all lookup 4
\end{verbatim}

Similar setup may be usefull for organizations connected
to the net through two or more ISPs via one linux gateway (of course,
we shouldn't check here TOS field --- just route packets from network
assigned by the second ISP to its gateway or ppp interface). It is
even possible to make a script notice
a problems in one link and redirect (in combination with NAT)
critical outgoing connections to another ISPs link. This won't work
for incoming calls as long as you do not change your DNS entries
accordingly or have multihomed servers.

Here is a syntax for \verb|ipchains| to set the TOS field:

\begin{verbatim}
ipchains -A input -p PROTO -s SOURCE [port] -d DEST [port] -t 0x01 0x10
\end{verbatim}

\section{NATs}
You should be extremely careful playing with NAT, even in a network
with complex topology, routed by routing protocols or simply connected
to other network through more than one router.

Translation of a packet's destination address is always done in
routing table local. The syntax is the following:

\begin{verbatim}
ip route add nat WHAT/MASKLEN via WHERE table local
\end{verbatim}
So to translate all packets coming to 192.168.1.50 in the packets
destinned to 192.168.2.25 you type:

\begin{verbatim}
router># ip route add nat 192.168.1.50 via 192.168.2.25 table local
\end{verbatim}
And to translate whole subnet 192.168.1.40/29 into 192.168.2.48/29
command is
\begin{verbatim}
router># ip route add nat 192.168.1.40/29 via 192.168.2.48 table local
\end{verbatim}

Translation of source addresses should be set by means of rules:
\begin{verbatim}
ip rule add from REAL_SOURCE/MASKLEN nat PSEUDO_SOURCE table TABLEID
\end{verbatim}

According to the routing conception ip packets comimg from
{\tt REAL\_SOURCE}
will translate their source addresses to
{\tt PSEUDO\_SOURCE} and routed
according to the table
{\tt TABLEID}. The translation will be valid only
for the packets whos destination is in this table.

Let's illustrate it. Suppose that in our example 192.168.2.0/24
is an address space from ISP with gateway 192.168.0.4 and
192.168.1.32/27 is from ISP with gateway 192.168.0.5.
We suddenly
want to relink hosts in subnetwork 192.168.2.48/29 to another ISP.
We have wisely reserved a spare subnet 192.168.1.40/29 for this.
But we want no translation when 192.168.2.48/29 comes to local
nets, especially to 192.168.1.0.
Next commands provide our needs:
\begin{verbatim}
router># ip route add nat 192.168.1.40/29 via 192.168.2.48 table local
router># ip rule add from 192.168.2.48/29 nat 192.168.1.40 table 3 pref 32820
\end{verbatim}
(Remind that table 3 contains default gw 192.168.0.5). Our setup
now is:
\begin{verbatim}
router># ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32820:  from 192.168.2.48/29 nat 192.168.1.40 lookup 3
32900:  from 192.168.1.32/27 lookup 3
32910:  from all lookup 4
\end{verbatim}

Want the same translation when going to 192.168.1.0 too? Ok, just type
\begin{verbatim}
router># ip rule add from 192.168.2.48/29 nat 192.168.1.40 table 5
router># ip rule add 192.168.1.0/24 via 192.168.0.3 table 5
\end{verbatim}
Then you'll get
\begin{verbatim}
router># ip rule
0:      from all lookup local
32765:  from 192.168.2.48/29 nat 192.168.1.40 lookup 5
32766:  from all lookup main
32767:  from all lookup default
32820:  from 192.168.2.48/29 nat 192.168.1.40 lookup 3
32900:  from 192.168.1.32/27 lookup 3
32910:  from all lookup 4
\end{verbatim}

Note that you should allways think of where your rule appears
in the list, i.e. control its preference. Otherwise result may be
very confusing. Guess why we couldnot just put the route to
192.168.1.0/24 into table 3 with
\begin{verbatim}
router># ip rule add 192.168.1.0/24 via 192.168.0.3 table 5
\end{verbatim}
instead of last two \verb|ip rule add ...| and \verb|ip route add ...|?

Hope that those imaginary examples will help to organize your real system.

\section*{Appendix}
%\begin{appendix}
%\appendixname{Appendix}
Full syntax of \verb|ip| utility is gathered here

\subsection*{ip}
\begin{verbatim}
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
where  OBJECT := { link | addr | route | rule | neigh | tunnel }
       OPTIONS := { -s[tatistics] | -f[amily] { inet | inet6 }}
\end{verbatim}


\subsection*{ip link}
\begin{verbatim}
Usage: ip link set DEVICE { up | down | arp { on | off } |
	                     multicast { on | off } | txqueuelen PACKETS |
	                     name NEWNAME }
       ip link show [ DEVICE ]
\end{verbatim}


\subsection*{ip addr}
\begin{verbatim}
Usage: ip addr [ add | del ] IFADDR dev STRING
       ip addr show [ dev STRING ] [ ipv4 | ipv6 | link | all ] [txqueuelen]
IFADDR := PREFIX [ local ADDR ]
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE ]
SCOPE := [ host | link | global | NUMBER ]
\end{verbatim}


\subsection*{ip route}
\begin{verbatim}
Usage: ip route list SELECTOR
       ip route { change | del | add | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ type TYPE ] [ scope SCOPE ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ rtt NUMBER ] [ window NUMBER ]
           [ flowid CLASSID ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
\end{verbatim}


\subsection*{ip rule}
\begin{verbatim}
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ]
            [ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
          [ prohibit | reject | unreachable ]
          [ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
\end{verbatim}


\subsection*{ip neigh}
\begin{verbatim}
Usage: ip neigh { add | del } { ADDR [ lladdr LLADDR ]
          [ nud { permanent | noarp | stale | reachable } ]
          | proxy ADDR } [ dev DEVICE ]
       ip neigh show [ ipv4 | ipv6 | all ]
\end{verbatim}


\subsection*{ip tunnel}
\begin{verbatim}
Usage: ip tunnel { add | change | del | show } [ NAME ]
          [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]
          [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
          [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev PHYS_DEV ]

Where: NAME := STRING
       ADDR := { IP_ADDRESS | any }
       TOS  := { NUMBER | inherit }
       TTL  := { 1..255 | inherit }
       KEY  := { DOTTED_QUAD | NUMBER }
\end{verbatim}

%\end{appendix}

\end{document}

--+HP7ph2BbKc20aGI
Content-Type: application/postscript
Content-Disposition: attachment; filename="tcio-current.ps"

%!PS-Adobe-2.0
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
%%Title: tc.dvi
%%Pages: 12
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSCommandLine: dvips -o tc.ps tc.dvi
%DVIPSParameters: dpi=600, compressed
%DVIPSSource:  TeX output 1998.11.30:1445
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end

%%EndProcSet
%%BeginProcSet: special.pro
%!
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale true def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end

%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (tc.dvi)
@start
%DVIPSBitmapFont: Fa cmtt12 14.4 6
/Fa 6 117 df<90380FFFC0017F13F848B512FE486E7E4815E04881823A1FFC007FFC49
EB0FFE1507ED01FFA26C486D7F6C48147FC97F163FA60203B5FC147F0103B6FC131F137F
90B7FC0003ECC03F48EBF800481380D81FFCC7FCEA3FF05B485A5B12FF90C8FCA56D147F
127F6D14FF6C6C130301F8010F7F6CB490B612F86C90B7FC18FC6C15CF000115076CDAFC
0313F8013F9038F0007F010790C9FC363679B43E>97 D<913807FFF0023F13FE49B61280
010715C04915E04915F0137F903AFFFC003FF84801E0131F48138091C7FC485A4848EC0F
F049EC07E0484891C7FC5B123F5B127F5BA312FF90CAFCA97F127FA27F123F7F17FC6C6C
EC01FE7F6C7E6C6C14036DEC07FC6C01C0130F6C01F0EB1FF86C01FEEBFFF06DB612E06D
15C0010F15806D1500010114FC6D6C13F0020790C7FC2F3678B43E>99
D<383FFF805AB57EA37E7EEA003FAEED07FC92383FFF8092B512E002C38002C78002CF80
02DF809138FFF80F9238C003FFED00014A7F4A815C177F5CA25CA35CB3A8003FB5D8C07F
B51280486EB612C0B66C15E0A36C4A15C06C4A6C14803B497FC83E>104
D<DA0FC0137E3C7FF07FF003FF8000FF9026FFFC0713E001FBD9FE1F7F90B55B6F487FA2
6C903AF07FFF83FC00039039C03FFE01028013FC020001F87F031F1300495CA2495CA449
5CB3A93D7FFFC0FFFE07FFF0B500E16D4813F802E35CA302E1806C01C0496C13F03D3480
B33E>109 D<903901FFF00F011F9038FE1F8090B612BF000315FF5A5A5A393FFE003F01
F01307D87FC0130190C8FC5A48157FA47EEE3F00D87FC091C7FC13F0EA3FFE381FFFF06C
EBFFC06C14FE6C6E7EC615E0013F14F8010780D9003F7F02007F03071380030013C0003E
ED3FE0007F151F48150F17F06D1407A37FA26D140F6D15E0161F01FCEC3FC06D14FF9026
FFC00F138091B612005E485D013F5C6D14E0D8FC0714802778007FF8C7FC2C3677B43E>
115 D<147C14FC497EAD003FB712FC5AB87EA36C5EA2260001FEC9FCB3A6173FA2EF7F80
A76E14FF6D16006F5A9238C007FE91387FF01F92B55A6E5C6E5C6E5C6E1480020149C7FC
9138003FF031437DC13E>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fb cmmi10 10 1
/Fb 1 59 df<121C127FEAFF80A5EA7F00121C0909798817>58 D
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fc cmti10 10 49
/Fc 49 124 df<04FFEB03F003039038E00FFC923A0FC0F01F1E923A3F00783E0F923A7E
01F87C3FDB7C03EBFC7F03FC14F8DA01F813F905F1137EDC01E1133C913B03F00003F000
A314074B130760A3140F4B130F60A3010FB812C0A3903C001F80001F8000A3023F143F92
C790C7FCA44A5C027E147EA402FE14FE4A5CA413014A13015FA313034A13035FA313074A
495AA44948495AA44948495AA3001CD9038090C8FC007E90380FC03F013E143E00FE011F
5B133C017C5C3AF8780F01E0D878F0EB07C0273FE003FFC9FC390F8000FC404C82BA33>
11 D<EE3FFC4BB51280923907E007C092391F8001E0DB3F0013F0037E13034B1307A24A
5A18E04A48EB038094C7FCA314075DA4140F5DA3010FB7FCA25F903A001F80007EA217FE
023F5C92C7FCA216015F5C147E16035FA214FE4A13075FA30101140F5F4AECC1C0A2161F
1783010316805CA2EF870013074A5CEE0F8EEE079EEE03FC010FEC00F04A91C7FCA35C13
1FA2001C90CAFC127E5BEAFE3E133C137CEAF878EA78F0EA3FE0EA0F80344C82BA2F>I<
150C151C153815F0EC01E0EC03C0EC0780EC0F00141E5C147C5C5C495A1303495A5C130F
49C7FCA2133EA25BA25BA2485AA212035B12075BA2120F5BA2121FA290C8FCA25AA2123E
A2127EA2127CA412FC5AAD1278A57EA3121C121EA2120E7EA26C7E6C7EA212001E5274BD
22>40 D<140C140E80EC0380A2EC01C015E0A2140015F0A21578A4157C153CAB157CA715
FCA215F8A21401A215F0A21403A215E0A21407A215C0140F1580A2141F1500A2143EA25C
A25CA2495AA2495A5C1307495A91C7FC5B133E133C5B5B485A12035B48C8FC120E5A1278
5A12C01E527FBD22>I<387FFFF8A2B5FCA214F0150579941E>45
D<15181538157815F0140114031407EC0FE0141F147FEB03FF90383FEFC0148FEB1C1F13
001580A2143FA21500A25CA2147EA214FEA25CA21301A25CA21303A25CA21307A25CA213
0FA25CA2131FA25CA2133FA291C7FC497EB61280A31D3877B72A>49
D<16E0ED01F01503A3150716E0A3150F16C0A2151F1680A2ED3F00A3157EA2157C15FC5D
14015D14035D14075D140F5D141F92C7FC143EA25CECF81C153E903801F07EEB03E014C0
90380780FE130F49485A133EEB7C01137801F05BEA01E03803C003EA0FFE391FFFC3F048
13FB267C01FF13403AF0003FFFE000601307C71400EC0FE05DA3141F5DA3143F92C7FCA4
143E141C24487DB72A>52 D<157F913803FFC0020F13E0EC3F8191387E00F002F8137090
3903F003F0903807E007EB0FC0EB1F80020013E04914C0017E90C7FC13FE5B485AA21203
485AA2380FE07E9038E3FF809038E783E0391FCE01F09038DC00F813F84848137C5B4913
7EA2485AA290C7FC15FE5A5AA214015D5AA214035DA348495A5D140F5D4A5A6C49C7FC12
7C147C6C485A6C485A6CB45A6C1380D801FCC8FC243A76B72A>54
D<133C137E13FF5AA313FE13FCEA00701300B2120EEA3F80127F12FFA31300127E123C10
2477A319>58 D<EE01C01603A21607160FA2161F83163FA2167F16FF16EF150116CFED03
8FA2ED070FA2150E151E151C1538A203707FA2EDE007A2EC01C014031580EC0700A2140E
A25CA25C027FB5FCA291B6FC9139E00007F849481303A2495A130791C7FC5B130E5BA25B
1378137013F0EA03F8486C4A7EB56C48B512F0A3343C7BBB3E>65
D<0103B612FEEFFFC018F0903B0007F8000FF84BEB03FCEF00FE020F157FF03F804B141F
19C0021F150F19E05D1807143F19F05DA2147FA292C8FCA25C180F5CA2130119E04A151F
A2130319C04A153FA201071780187F4A1600A2010F16FEA24A4A5A60011F15034D5A4A5D
4D5A013F4B5A173F4A4AC7FC17FC017FEC03F84C5A91C7EA1FC04949B45A007F90B548C8
FCB712F016803C397CB83F>68 D<0107B8FCA3903A000FF000034BEB007F183E141F181E
5DA2143FA25D181C147FA29238000380A24A130718004A91C7FC5E13015E4A133E167E49
B512FEA25EECF8000107147C163C4A1338A2010F147818E04A13701701011F16C016004A
14031880013F150718004A5CA2017F151E173E91C8123C177C4915FC4C5A4914070001ED
7FF0B8FCA25F38397BB838>I<0107B712FEA3903A000FF000074B1300187C021F153CA2
5DA2143FA25D1838147FA292C8FCEE03804A130718004A91C7FCA201015CA24A131E163E
010314FE91B5FC5EA2903807F800167C4A1378A2130FA24A1370A2011F14F0A24A90C8FC
A2133FA25CA2137FA291CAFCA25BA25B487EB6FCA337397BB836>I<0103B5D8F80FB512
E0A390260007F8C7381FE0004B5DA2020F153F615DA2021F157F96C7FC5DA2023F5D605D
A2027F14016092C7FCA24A1403605CA249B7FC60A202FCC712070103150F605CA2010715
1F605CA2010F153F605CA2011F157F95C8FC5CA2013F5D5F5CA2017F14015F91C7FC4914
03007FD9FE01B512F8B55BA243397CB83E>72 D<0103B512F8A390390007F8005DA2140F
A25DA2141FA25DA2143FA25DA2147FA292C7FCA25CA25CA21301A25CA21303A25CA21307
A25CA2130FA25CA2131FA25CA2133FA25CA2137FA291C8FC497EB6FCA25C25397CB820>
I<0107B512FCA25E9026000FF8C7FC5D5D141FA25DA2143FA25DA2147FA292C8FCA25CA2
5CA21301A25CA21303A25CA21307A25CA2130F170C4A141CA2011F153C17384A1478A201
3F157017F04A14E01601017F140317C091C71207160F49EC1F80163F4914FF0001020713
00B8FCA25E2E397BB834>76 D<902607FFF8923807FFF0614F13E0D9000FEFF0004F5AA2
021F167FF1EFC0141DDA1CFCEC01CF023C16DF9538039F800238ED071FA20278ED0E3F97
C7FC0270151CA202F04B5AF0707E14E0037E14E0010117FE4D485A02C0EC0380A20103ED
0701610280140EA20107ED1C0305385B14006F137049160705E05B010EEC01C0A2011E91
3803800F61011CEC0700A2013C020E131F4C5C1338ED1FB80178163F04F091C8FC01705C
A201F04A5B187E00015DD807F816FEB500C09039007FFFFC151E150E4C397AB84A>I<90
2603FFF891B512E0A281D90007923807F8006F6E5A61020F5E81DA0E7F5DA2021E6D1307
033F92C7FC141C82DA3C1F5C70130EEC380FA202786D131E0307141C147082DAF003143C
70133814E0150101016E1378030014705C8201036E13F0604A1480163F010715C1041F5B
91C7FC17E149EC0FE360010E15F31607011E15FF95C8FC011C80A2013C805F1338160013
785F01F8157CEA03FC267FFFE0143CB51538A243397CB83E>I<0107B612F817FF188090
3B000FF0003FE04BEB0FF0EF03F8141FEF01FC5DA2023F15FEA25DA2147FEF03FC92C7FC
A24A15F817074A15F0EF0FE01301EF1FC04AEC3F80EFFE0001034A5AEE0FF091B612C04C
C7FCD907F8C9FCA25CA2130FA25CA2131FA25CA2133FA25CA2137FA291CAFCA25BA25B12
01B512FCA337397BB838>80 D<ED03FE92383FFFC09238FC07F0913903E001F891390FC0
007C023FC77E027E804A1580D901F0EC0FC013074948EC07E0495A4A15F049C8FC491503
01FE16F8485AA2485AA2485AA2120F491507121FA2485AA34848ED0FF0A448C9EA1FE0A3
EF3FC0A21880177F4817005F5F16015F007F4B5A5F91380F800791393FE00FE06C903970
601FC0902680E0305B261F81C049C7FC913880187ED80FC35C3A07E30019F00003EC1FE0
D801FB14806CB46C48C8FC90263F81FC13186DB45A01010138133890C7003C1330177017
F05FED3E03ED3F07EEFFC05FA294C7FC5E6F5A6F5AED07E0354B74BA40>I<0103B612F0
17FEEFFF80903B0007F8003FC04BEB0FF01707020FEC03F8EF01FC5DA2021F15FEA25DA2
143FEF03FC5DA2027FEC07F818F092C7120F18E04AEC1FC0EF3F004A14FEEE01F80101EC
0FE091B6128004FCC7FC9138FC003F0103EC0F80834A6D7E8301071403A25C83010F1407
5F5CA2011F140FA25CA2133F161F4AECE007A2017F160F180E91C7FC49020F131C007F01
FE153CB5913807F078040313F0CAEAFFE0EF3F80383B7CB83D>I<92383FC00E913901FF
F01C020713FC91391FC07E3C91393F001F7C027CEB0FF84A130749481303495A4948EB01
F0A2495AA2011F15E091C7FCA34915C0A36E90C7FCA2806D7E14FCECFF806D13F015FE6D
6D7E6D14E0010080023F7F14079138007FFC150F15031501A21500A2167C120EA3001E15
FC5EA3003E4A5AA24B5AA2007F4A5A4B5A6D49C7FC6D133ED8F9F013FC39F8FC03F839F0
7FFFE0D8E01F138026C003FCC8FC2F3D7ABA2F>I<0007B812E0A25AD9F800EB001F01C0
49EB07C0485AD900011403121E001C5C003C17801403123800785C00701607140700F017
00485CA2140FC792C7FC5DA2141FA25DA2143FA25DA2147FA292C9FCA25CA25CA21301A2
5CA21303A25CA21307A25CA2130FA25CEB3FF0007FB512F8B6FCA2333971B83B>I<003F
B539800FFFFEA326007F80C7EA7F8091C8EA3F00173E49153CA2491538A2000116781770
5BA2000316F05F5BA2000715015F5BA2000F15035F5BA2001F150794C7FC5BA2003F5D16
0E5BA2007F151E161C90C8FCA2163C4815385A16781670A216F04B5A5E1503007E4A5A4B
C8FC150E6C143E6C6C5B15F0390FC003E03907F01FC00001B5C9FC38007FFCEB1FE0373B
70B83E>I<B500F8903803FFFEA218FCD803FEC8EA7FC049ED3F000001163E173C17385F
A25F16015F6D4A5AA200004BC7FC5E160E5EA25EA25E5EA26D495A7F4B5A150793C8FC15
0EA25D153C15385D1480013F5B14815DEC8380A20287C9FCA2148E149E149C14F8A26D5A
A25C5CA25CA291CAFC131EA2373B6FB83E>I<14F8EB07FE90381F871C90383E03FE137C
EBF801120148486C5A485A120FEBC001001F5CA2EA3F801403007F5C1300A21407485C5A
A2140F5D48ECC1C0A2141F15831680143F1587007C017F1300ECFF076C485B9038038F8E
391F0F079E3907FE03FC3901F000F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE
5BA312015BA312035BA31207EBE0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013
E0D81FC013F0A21380A2123F1300A214075A127EA2140F12FE4814E0A2141F15C05AEC3F
80A215005C147E5C387801F8007C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C
3B77B926>I<147F903803FFC090380FC1E090381F0070017E13784913383901F801F838
03F003120713E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA31530153815
78007C14F0007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D26
77A426>I<ED01F815FFA3150316F0A21507A216E0A2150FA216C0A2151FA21680A2153F
A202F81300EB07FE90381F877F90383E03FF017C5BEBF80112013803F00048485B120FEB
C001121F5DEA3F801403127F01005BA214075A485CA2140FA248ECC1C0A2141F15C3ED83
80143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000
F0253B77B92A>I<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A
120F4913F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA5
5AA21530007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803
FFE0C690C7FC1D2677A426>I<ED07C0ED1FF0ED3E38ED7C3CEDF8FC15F9140115F10203
13F8EDF0F0160014075DA4140F5DA4141F5D010FB512C05B16809039003F800092C7FCA4
5C147EA414FE5CA413015CA413035CA413075CA4130F5CA3131F5CA391C8FC5B121CEA7E
3EA2EAFE3C137C1378EAF8F01278EA3FC0EA0F80264C82BA19>I<EC07C0EC3FF09138FC
38E0903901F01FF0EB03E0903807C00FEB0F80011F1307D93F0013E05B017E130F13FE49
14C01201151F1203491480A2153F1207491400A25DA249137EA215FEA25D000313011403
14076C6C485A0000131FEB787BEB3FF390380FC3F0EB00031407A25DA2140F5D121C007E
131F5D00FE49C7FC147E5C387801F8387C07E0381FFF80D803FEC8FC24367CA426>I<EB
03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91C8FCA35B90387E07F0EC1FFCEC78
3E9038FFE01F02C01380EC800F1400485A16C05B49EB1F8012035BA2153F000715005BA2
5D000F147E5B15FE5D121FD98001131C15F8163C003F01031338010013F0A216704814E0
007E15F016E0EDE1C000FE903801E38048903800FF000038143C263B7BB92A>I<EB01C0
EB07E014F0130F14E01307EB038090C7FCAB13F0EA03FCEA071EEA0E1F121CA212385B12
70A25BEAF07E12E013FEC65AA212015B1203A25B12075BA2000F13E013C013C1001F13C0
1381A2EB83801303EB0700A2130E6C5AEA07F8EA01E0143879B619>I<150E153F157FA3
157E151C1500ABEC1F80EC7FC0ECF1F0EB01C090380380F813071401130F130E131EEB1C
03133C013813F0A2EB0007A215E0A2140FA215C0A2141FA21580A2143FA21500A25CA214
7EA214FEA25CA21301A25CA213035C121C387E07E0A238FE0FC05C49C7FCEAF83EEA787C
EA3FF0EA0FC0204883B619>I<EB03F0EA01FFA3EA00075CA3130F5CA3131F5CA3133F91
C8FCA35B017EEB0F80ED3FE015F09039FE01C1F09038FC0387EC0707140E0001011C13E0
EBF83891383003800270C7FC00035BEBF1C0EBF38001FFC8FCEA07FC7FEBFFC0EBE7F838
0FE1FCEBC07E147F80001F809039801F81C0A21583003F013F138001001303A215074815
00007E133EEC1E0E151E00FE6D5A48EB07F80038EB01E0243B7BB926>I<EB0FC0EA07FF
A3EA001F1480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A2
5BA2120FA25BA2121FA25BA2123FA290C7FCA25AA2EA7E0EA212FE131EEAFC1CA2133C13
3812F81378EA7870EA7CE0121FEA0F80123B79B915>I<D801E001FEEB07F03C07F803FF
801FFC3C0E3C0F07C0783E3C1E3E3C03E1E01F261C1F78D9F3C013803C383FF001F7800F
02E01400007801C013FE007018C002805B4A4848EB1F80EAF07FD8E07E5CA20000020714
3F01FE1700495CA2030F5C0001177E495C18FE031F5C120349DA8001131C18F8033F153C
00070403133849020013F0A24B1570000F17E049017E15F019E003FEECE1C0001FEE01E3
4949903800FF000007C70038143C3E2679A444>I<D801E013FE3A07F803FF803A0E3C0F
07C03A1E3E3C03E0261C1F787F39383FF00114E0007813C000708114804A485AEAF07FEA
E07EA20000140701FE5C5BA2150F00015D5B151F5E12034990383F838016031607000702
7F130049137EA2160E000F147C49141E161C5E001FEC3C7849EB1FE00007C7EA07802926
79A42F>I<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E00
07143F5B120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC
07F015E0140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7
FC202677A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787F
C00170497EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA2
4A1400A2010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70
FC90387E3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A
>I<ECF803903807FE0790381F871F90383E03BF017C13FEEBF80112013803F000484813
FC120F5B001F130115F8EA3F80A2007F1303010013F0A34813074814E0A3140F4814C0A3
141F1580143FA2007C137FECFF006C5AEB03BF381F0F7F3807FE7EEA01F0C7FC14FE5CA3
13015CA313035C130748B512C0A3203577A426>I<3903C003F0390FF01FFC391E783C0F
381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FCEAE0FE
5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E212679A423
>I<14FE903807FF8090380F83C090383E00E04913F00178137001F813F00001130313F0
A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C01300143F141F
140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB45AD801FEC7
FC1C267AA422>I<EB0380EB07C0130FA4131F1480A3133F1400A35B137E007FB5FCA2B6
FC3800FC00A312015BA312035BA312075BA3120F5BA3121FEB801CA2143C003F1338EB00
78147014F014E0EB01C0EA3E03381F0780380F0F00EA07FCEA01F0183579B31C>I<13F8
D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C01270013F13
1F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE120349EBFC0E
A20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A00F83C78E0
90393FF03FC090390FC00F00272679A42D>I<01F0130ED803FC133FD8071EEB7F80EA0E
1F121C123C0038143F49131F0070140FA25BD8F07E140000E08013FEC6485B150E12015B
151E0003141C5BA2153C000714385B5DA35DA24A5A140300035C6D48C7FC0001130E3800
F83CEB7FF8EB0FC0212679A426>I<01F01507D803FC903903801F80D8071E903907C03F
C0D80E1F130F121C123C0038021F131F49EC800F00701607A249133FD8F07E168000E0ED
000313FEC64849130718000001147E5B03FE5B0003160E495BA2171E00070101141C01E0
5B173C1738A217781770020314F05F0003010713016D486C485A000190391E7C07802800
FC3C3E0FC7FC90393FF81FFE90390FE003F0322679A437>I<B712FCA2260279962A>123
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmsy10 10 2
/Fd 2 16 df<007FB81280B912C0A26C17803204799641>0 D<EB0FE0EB7FFC497E0003
EBFF804814C04814E04814F04814F8A24814FCA3B612FEA86C14FCA36C14F8A26C14F06C
14E06C14C06C1480C6EBFE006D5AEB0FE01F207BA42A>15 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fe cmtt10 10 60
/Fe 60 123 df<EB0380497EA60020140800F8143E00FE14FE00FF13C1EBC7C7EBE7CF00
3FB512F8000F14E0000314806C140038007FFCA248B5FC481480000F14E0003F14F839FF
E7CFFEEBC7C7EB07C100FE13C000F8143E0020140800001400A66D5A1F247AAA2C>42
D<007FB6FCB71280A46C150021067B9B2C>45 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA
3F80EA1F000B0B708A2C>I<1507ED0F80151FA2153F16005D157E15FE5D14015D14035D
A214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C13075C130F5C131F
5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B123F90C9FC5A12
7E12FE5AA25A127821417BB92C>I<EB03F8EB0FFE90383FFF80497F90B57E3901FE0FF0
3903F803F848486C7EEBE0004848137EA248487FA248C7EA1F80A2003E140F007E15C0A3
007C140700FC15E0AC6C140F007E15C0A46CEC1F80A36C6CEB3F00A26C6C137E6D13FE00
075CEBF0016C6C485A3901FE0FF06CB55A6D5B6D5BD90FFEC7FCEB03F823357CB32C>I<
1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512
E0B612F0A36C14E01C3477B32C>I<EB0FF890387FFF8048B512E00007804814FC391FF8
0FFE393FE001FF903880007F48C7EA3F80007E141F00FE15C0150F6C15E01507A3127E12
3CC8FCA2150F16C0151F1680153F16005D15FE4A5A14034A5A4A5A4A5A4A5AECFF804948
C7FC495A495A495AEB3FE0EB7F8049C8FC485A4848EB03C04848EB07E0EA1FE0485A48B6
FCB7FCA36C15C023347CB32C>I<EB0FFC90387FFF8048B512E0000714F84880391FF807
FEEBC0004848137F6D7F1680151FA26C5A6CC7FCC8FC153F16005D15FE14014A5AEC1FF8
90381FFFF0495BA215F86D7F90380007FEEC00FF81ED3F80ED1FC0150FA216E01507A212
3C127EB4FC150F16C0A248141F007FEC3F806DEB7F006C6C5B391FF807FE6CB55A6C5C6C
14E0C66C1380D90FFCC7FC23357CB32C>I<EC07F04A7E141F143FA2147EA214FCEB01F8
A2EB03F0EB07E0A2EB0FC0EB1F80A2EB3F00137EA25B485AA2485A5B1207485AA2485A48
C7FCA2127E5AB712FC16FEA36C15FCC8EAF800AA91387FFFF091B512F8A36E13F027347E
B32C>I<EC3FC0903801FFF801077F011F7F497F90387FE07F9039FF003F804848137FEA
03F8485A5B000FEC3F004848131E4990C7FC123F90C9FCA25A127EEB03FE90381FFF80D8
FC7F13E000FDB57EB67E9038FE07FC9038F001FE9038C0007F49EB3F8090C7121F16C048
140F16E01507A3127EA47E150F6D14C0001F141F6D1480000F143F6DEB7F003907F801FE
3903FE07FC6CB55A6C5C6D5B011F1380D907FCC7FC23357CB32C>54
D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0
A5EA7FC0EA3F80EA1F000B2470A32C>58 D<1507ED1F80153F15FF14034A1300EC1FFC4A
5AECFFE0491380010790C7FCEB0FFCEB3FF8EB7FE048485A4890C8FCEA0FFEEA1FF8EA7F
F0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC0101
7F6D13E0EC3FF86E7EEC07FF6E13801400153F151FED0700212A7BAD2C>60
D<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7FF0EB1FF8EB0FFEEB03FF6D
13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300EC0FFCEC3FF8EC7FE04948
5A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC485AEA7FF0485A138048C9
FC5A1270212A7BAD2C>62 D<EC7F80903803FFE0010F7F013F7F497F9038FFC0FE3901FE
007FD803F87F4848EB1F809038E00FCF390FC03FFF48484813C091B5FCEA3F01393E03F8
7F903907F03FE0007EEBE01F397C0FC00FEC8007A2EAFC1F00F8EB0003A900FCEB8007D8
7C0F14C0A2ECC00F3A7E07E01F80003EEBF03F903903F87F00393F01FFFED81F805B6E5A
6C6C6C5A3907E00FC09039F00007C06C6CEB0FE0D801FE131F3900FFC0FF6DB512C06D14
80010FEBFE00010313F89038007FC023337CB22C>64 D<14FE497EA4497FA214EFA21307
81A214C7A2010F7FA314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FE
A34880A29038F8003FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15
FC497E27347EB32C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE00
7F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212FE
5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC131F
6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>67
D<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716
F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80ED
FF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E39
03F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8
007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA71678
1600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C
>I<D87FFEEBFFFCB54813FEA36C486C13FCD807E0EB0FC0B190B6FCA59038E0000FB3D8
7FFEEBFFFCB54813FEA36C486C13FC27337EB22C>72 D<007FB512F8B612FCA36C14F839
000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I<D87FFCEB7FF8486CEBFF
FCA36C48EB7FF8D807C0EB1F80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7
FC147E5CEBC1F813C3EBC7FCA2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF0
0301E07FEBC001816E7EA2157E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB
3FFEA36C48EB1FFC27337EB22C>75 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01
F8A8007FB6FCB7FCA36C15F025337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F
15FC000F15E001BC137BA4019E13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201
831383A214EFA201811303A214FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFE
A36C48EB1FFC27337EB22C>I<D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07
C013DEA213DF13CFA2148013C714C0A213C314E0A213C114F0A213C014F8A2147CA3143E
A2141E141FA2140F1587A2140715C7A2140315E71401A215F71400A215FFD87FFC137F48
7E153FA26C48EB1F8027337EB22C>I<EB7FFF0003B512E0000F14F848804880EBE003EB
800048C7127FA2007E80A300FE158048141FB3A86C143FA2007E1500A3007F5CA26C6C13
FEEBF00790B5FC6C5C6C5C000314E0C66C90C7FC21357BB32C>I<007FB512C0B612F881
15FF6C15802603F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0F
E0ED3FC015FF90B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C
>I<EB7FFF0003B512E0000F14F848804880EBF007EB800048C7127FA2007E80A300FE15
8048141FB3A7EB01F0EB03F800FE143F267E01FC1300A2EB00FE007F5C147FD83F8013FE
EBF03F90B5FC6C5C6C5C000314E0C67E90380007F0A26E7EA26E7EA26E7EA2157FA2153E
21407BB32C>I<387FFFFCB67E15E015F86C803907E007FE1401EC007F6F7E151FA26F7E
A64B5AA2153F4BC7FCEC01FE140790B55A5D15E081819038E007FCEC01FE1400157F81A8
160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381F
F80790B5EA0F804814CF000714FF5A381FF01F383FC003497E48C7FC007E147F00FE143F
5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F0
6C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2ED0FE0A20078140712FCA56C
EC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D870
0790C7FC23357CB32C>I<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF
90383FFFFCA2497F6D5BA227337EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C0
3B03F00001F800B3AF6D130300015DA26D130700005D6D130F017F495A6D6C485AECE0FF
6DB5C7FC6D5B010313F86D5B9038003F802B3480B22C>I<D87FFCEB7FFC486CEBFFFEA3
6C48EB7FFCD80FC0EB07E06D130F000715C0A36D131F00031580A36D133F00011500A36D
5B0000147EA4017E5BA46D485AA490381F83F0A4010F5B14C7A301075BA214EFA201035B
A214FFA26D90C7FCA46D5A27347EB22C>I<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD8
07F0EB0FC0151F000315806D133F12016DEB7F0012006D137E017E13FE017F5BEB3F01EC
81F8131FEC83F0EB0FC314C7903807E7E0A201035B14EF6DB45AA292C7FC7F5C147EB090
3807FFE0497FA36D5B27337EB22C>89 D<007FB6FCB71280A46C150021067B7D2C>95
D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC8
127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F
14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C>
97 D<EA7FF0487EA3127F1201AAEC1FE0ECFFF801FB13FE90B6FC16809138F07FC09138
801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13
036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F813F83900F03FC027
337FB22C>I<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E
4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F0039
07FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I<EC0FFE4A7EA380EC
003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E497E48487F90C7FC
007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807FC1F6CB612FC6CEC
BFFE6C143FEB3FFC90390FF01FFC27337DB22C>I<EB03FE90381FFFC0017F13F048B57E
48803907FE03FE390FF800FFD81FE0EB3F805B4848EB1FC090C7120F5A007E15E015075A
B7FCA416C000FCC9FC7E127EA2127F6CEC03C06DEB07E06C7ED80FF0130F6C6CEB3FC001
FF13FF000190B512806C1500013F13FC010F13F00101138023247CA32C>I<EC0FF8EC3F
FE91B5FC4914805B903807FC7F14F090390FE03F0014C092C7FCA6007FB512FEB7FCA36C
5C26000FC0C7FCB3A8003FB512F04880A36C5C21337DB22C>I<ED03F8903907F80FFC90
391FFE3FFE017FB6FC48B7FC48ECFE7F9038FC0FF82607F003133E3A0FE001FC1CD9C000
1300001F8049137EA66D13FE000F5CEBE0016C6C485A3903FC0FF048B5FC5D481480D99F
FEC7FCEB87F80180C8FCA37F6C7E90B512F06C14FE48ECFF804815E04815F03A3FC0001F
F848C7EA03FC007E1400007C157C00FC157E48153EA46C157E007E15FCD87F801303D83F
E0EB0FF8D81FFCEB7FF06CB612E0000315806C1500D8003F13F8010713C028387EA42C>
I<EA7FF0487EA3127F1201AAEC1FE0EC7FFC9038F9FFFE01FB7F90B6FC9138F03F80ECC0
1F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029337FB22C>I<
1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007F
B512FCB612FEA36C14FC1F3479B32C>I<EA7FE0487EA3127F1201AA91381FFFF04A13F8
A36E13F0913800FE004A5A4A5A4A5A4A5A4A5A4A5A4AC7FC14FEEBF1FC13F3EBF7FE90B5
FCA2EC9F80EC0FC001FE7FEBFC07496C7E496C7E811400157E811680151F3A7FFFC0FFFC
B500E113FEA36C01C013FC27337EB22C>107 D<387FFFE0B57EA37EEA0003B3B3A5007F
B61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD8
7FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B3
3B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397F
F01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B
5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>I<EB07FCEB1FFF017F
13C048B512F048803907FC07FC390FF001FE48486C7E0180133F003F158090C7121F007E
EC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15806D133F6C6CEB7F006D5B6C6C
485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07FC23247CA32C>I<397FF01FE0
39FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F8
5BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE0
9138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B2736
7FA32C>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF001
48487E49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F
6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A
1480A36E140029367DA32C>I<D87FFEEB3FC0B53801FFF0020713F8021F13FC6C5B3900
3F7FE1ECFF019138FC00F84A13704A13005CA25C5CA391C8FCAF007FB512E0B67EA36C5C
26247EA32C>I<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB
00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00
FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8
148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1
ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE023
2E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F39
00FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514
FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C13
7CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214
FF6D90C7FCA26D5A147C27247EA32C>I<D87FFFEB7FFF6EB5FCB515806C16004A7ED807
C0EB01F0A66C6C495AA3143E147FA2D801F0495AECFF87A214F7A201F113C700005D9038
F9E3CFA201FB13EFA3D97BC190C7FC017F13FFA21480A2013F5B90381F007C29247FA32C
>I<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F
83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF80
903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01
FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE148314816C01
0113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA2013F13
FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC80A2
143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C90C8
FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED7F80
EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A495A49
5A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA32C>
I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Ff cmr10 10 79
/Ff 79 124 df<DA0FF813FC91397FFF07FF903B01F807DF83C0903A07E001FF0F903B1F
8007FE1FE090393F000FFC137E16F85B9338F007804848010790C7FC1503ACB812F8A328
01F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7FBA30>11
D<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E497EA25B
A2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E267FFFE0B5
12C0A32A3B7FBA2E>I<EC0FFC91387FFF70903901F803F0903807E00790381F800FEB3F
00137EA25B150748481303ADB7FCA33901F80003B3AB486C497E267FFFE0B512C0A32A3B
7FBA2E>I<DA0FF0EB1FF0DA7FFEEBFFFC903B01F80F83F00F903C07E001CFC00380903C
1F8000FF0001C090273F0007FE130F017E4948497EA2495CA248485C03076E5A03030203
C7FC95C8FCA9F007E0BAFCA33C01F80003F0001F1807B3AA486C496C497E267FFFE0B500
C1B51280A3413B7FBA45>I<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C
131C00001300A40001130101801380A20003130301001300485B00061306000E130E485B
485B485B006013601A197DB92A>34 D<121C127FEAFF80A213C0A3127F121C1200A41201
1380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB
0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2
127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB
01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378
A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A2
5B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD
20>I<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A
5A5A12600A19798817>44 D<B512FCA516057F941C>I<121C127FEAFF80A5EA7F00121C
0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0
1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249
5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12
07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I<
EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E
A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F
143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A>
I<EB01C013031307131F13FFB5FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>
I<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0000E6D7E486D7E486D7E123000706D7E
126012FCB4EC7F807FA56CC7FC121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A
92C7FC147C5C495A495A495A495A91C8FC011EEB01805B5B49130348481400485A485A00
0EC75A000FB6FC5A5A485CB6FCA321387CB72A>I<EB07F8EB3FFF4913C03901F80FF039
03C007F848486C7E380E0001000F80381FE0006D7FA56C5A6C5AC85A1401A25D4A5AA24A
5A5DEC0F80027EC7FCEB1FFCECFF809038000FE06E7EEC01FC816E7EED7F80A216C0A215
3F16E0A2121EEA7F80487EA416C049137F007F1580007EC7FC0070ECFF006C495A121E39
0F8003F83907F00FF00001B512C06C6C90C7FCEB0FF8233A7DB72A>I<1538A2157815F8
A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13
1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7
3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5
FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038
8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060
5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB
1FE0213A7CB72A>I<EC3FC0903801FFF0010713FC90380FE03E90383F800790387E001F
49EB3F804848137F485AA2485A000FEC3F0049131E001F91C7FCA2485AA3127F90C9FCEB
01FC903807FF8039FF1E07E090383801F0496C7E01607F01E0137E497FA249148016C015
1FA290C713E0A57EA56C7E16C0A2121FED3F807F000F15006C6C5B15FE6C6C5B6C6C485A
3900FE07F090383FFFC06D90C7FCEB03FC233A7DB72A>I<12301238123E003FB612E0A3
16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C
140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8
FC131E233B7BB82A>I<EB03F8EB1FFF017F13C09038FC07F03901E001F848486C7E4848
137C90C77E48141E000E141F001E80A3121FA27F5D01E0131E6C6C133E01FC133C6D5B6C
6C6C5AECC1E06CEBF3C06C01FFC7FC6C5BEB3FFF6D13C081017F13F801F07F3903E07FFE
3907801FFF48486C1380481303003E6D13C0003CEB007F007C143F0078EC0FE000F81407
5A1503A21501A36C15C012781503007C15806CEC07006C5C6C6C131ED807E0137C3903F8
03F0C6B55A013F1380D907FCC7FC233A7DB72A>I<EB03F8EB1FFF017F13C09038FC07E0
3903F803F048486C7E48486C7E49137E121F48487FA2007F158090C7FCA248EC1FC0A616
E0A56C143FA27F123F001F147FA26C6C13FF6C6C13DF000313013901F0039F3900FC0F1F
D93FFC13C0EB07F090C7FC153F1680A316005D000F147E487E486C5BA24A5A4A5A49485A
6C48485A001C495A260F807FC7FC3807FFFC000113F038003FC0233A7DB72A>I<121C12
7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12
7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206
A2120E5A121812385A1260093479A317>I<1538A3157CA315FEA34A7EA34A6C7EA20207
7FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F
1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA349
6E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>
65 D<B712E016FC16FF0001903980007FC06C90C7EA1FE0707E707E707EA2707EA283A7
5F16035F4C5A4C5A4C5A4C5AEEFF8091B500FCC7FCA291C7EA7F80EE1FE0EE07F0707E70
7E83707EA21880177F18C0A7188017FFA24C13005F16034C5AEE1FF8486DEB7FF0B812C0
94C7FC16F832397DB83B>I<913A01FF800180020FEBE003027F13F8903A01FF807E0790
3A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F1201484815
1F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180
A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD9
1FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380
313D7BBA3C>I<B712C016F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E
707E177FA2EF3F8018C0171F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2
171F18C0EF3F80A2EF7F0017FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036
397DB83F>I<B812FCA30001903880000F6C90C71201EE007E173E171E170EA31706A317
078316C0A394C7FCA31501A21503150F91B5FCA3EC000F15031501A21500A21860A318E0
93C712C0A41701A3EF0380A21707A2170F173F177F486D903807FF00B9FCA333397DB839
>I<B812F8A30001903880001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2
ED0180A21700A41503A21507151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0
B612C0A32F397DB836>I<DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC00
0787D90FF0EB03CF4948EB00EF4948147F4948143F49C8121F485A4848150F48481507A2
48481503A2485A1701123F5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3FC0
A2123F7F121FA26C7EA26C7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03
C7D903FEEB0783903A00FFC03F0191393FFFFC00020F01F0130002001380383D7CBA41>
I<B648B512FEA30001902680000313006C90C76C5AB3A491B6FCA391C71201B3A6486D49
7EB648B512FEA337397DB83E>I<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397E
B81E>I<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D8
7F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>I<B6
49B5FCA3000101809038007FF06C90C8EA3F80053EC7FC173C17385F5F4C5A4C5A4CC8FC
160E5E5E5E5E4B5AED0780030EC9FC5D153E157E15FF5C4A7F4A6C7E140E4A6C7E4A6C7E
14704A6C7E4A6C7E14804A6C7E6F7EA26F7F707EA2707E707EA2707EA2707E707EA2707E
707F8484486D497FB6011FEBFF80A339397DB841>I<B612E0A3000101C0C8FC6C90C9FC
B3AD1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB8
34>I<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563
A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A2
6E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8C
A2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED01804539
7DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EBC7
FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC016
E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE0F
FEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA2170637397D
B83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80EB
07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F17
E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A26C
6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D6C
495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC36
3D7BBA41>I<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F8
17FC17FE1601A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512
FC16F091C9FCB3A5487FB6FCA330397DB839>I<EC03FF021F13E09138FE01FC903901F8
007ED907E0EB1F8049486D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F00
07178049153F000F17C049151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF17
FCAC007F17F8A26D150FA2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4FC
3C03F80383807F003B01FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77F0
D91FCCEB3FE0D907EE14806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E131C
161F183CEF807CEFC0F8EE0FFFA318F08218E07013C07013809338007E00364B7BBA41>
I<B612FEEDFFE016F8000190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283A6
5FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE82
707E707EA2161F83A583A6F00180A217F8160F1803486D01071400B66D6C5A0401130693
3800FE0ECAEA3FFCEF07F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F807
E33907E000F74848137F4848133F48C7121F003E140F007E1407A2007C140312FC1501A3
6C1400A37E6D14006C7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F14
80010714C0EB007F020713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37EA2
16F07E15036C15E06C14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03FFF
F8010F13E0D8C00190C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE13
0348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807FF
80011FB612E0A335397DB83C>I<B6903807FFFEA3000101809038007FE06C90C8EA1F80
EF0F001706B3B2170E6D150C80171C133F17186D6C14385F6D6C14F06D6C5C6D6C495A6D
6CEB07806D6C49C7FC91387F807E91381FFFF8020713E09138007F80373B7DB83E>I<B5
00FC91387FFF80A30003018091380FFC006C90C8EA07E0715A6C705A6E1403017F93C7FC
A280013F1506A26E140E011F150C80010F5DA28001075DA26E147001031560A26D6C5CA2
806D4A5AA2ED8003027F91C8FCA291383FC006A215E0021F5BA2EDF01C020F1318A26E6C
5AA215FC02035BA2EDFEE002015BA26E6C5AA36FC9FCA3153EA2151CA3393B7EB83E>I<
B5D8FC07B5D8F001B5FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307
ED03C01B807F6C6F6C1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE06
7FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE
6007A26D6C4CC7FC9338C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF
0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA2
02015E4B1407A2020093C8FC4B80503B7EB855>I<B500FE91383FFFE0A3000301E09138
07FE00C649EC03F0017F6F5A606D6C5D6D6C140395C7FC6D6C1406A26D6C5C6D6C141C17
186D6C143817306D6D5B6E6C13E05F91383FE0015F91381FF003DA0FF890C8FC16069138
07FC0E160C913803FE1C913801FF185E6E13B016E0157F6F5AB3A24B7E023FB512C0A33B
397FB83E>89 D<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E0038
141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F4A5A
A24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC5B12
03485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>I<EAFF
F8A4EAF000B3B3B3B3A3EAFFF8A40D5378BD17>I<390180018000031303390700070000
0E130E485B0018131800381338003013300070137000601360A200E013E0485BA400CE13
CE39FF80FF806D13C0A3007F137FA2393F803F80390E000E001A1974B92A>I<EAFFF8A4
EA0078B3B3B3B3A3EAFFF8A40D537FBD17>I<EB1FE0EBFFFC3803E03F3907000F80390F
8007E0486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA
0FF0EA1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383FC0
1E3A0FE0781FF03A03FFF00FE03A007F8007C026277DA52A>97 D<EA03F012FFA3120F12
03B0EC1FE0EC7FF89038F1E03E9039F3801F809039F7000FC001FEEB07E049EB03F049EB
01F85BED00FCA216FEA2167E167FAA167E16FEA216FC15016D14F8ED03F07F01EEEB07E0
01C6EB0FC09039C7801F00903881E07E903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90
381FFF8090387E03E03901F80070484813F83907E001FC380FC003A2EA1F80123F903800
01F848EB00F01500A2127E12FEAA127E127FA26C14067F001F140E6D130C000F141C6C6C
13386C6C13706C6C13E039007C07C090381FFF00EB07F81F277DA525>I<ED0FC0EC03FF
A3EC003F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0007F4848133F4848131F
A24848130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C131FA26C6C133F6C6C13
7F6C6CEBEFF03A01F801CFFF39007C078F90381FFE0FD907F813C0283B7DB92E>I<EB07
F8EB1FFF90387C0FC03901F803E03903F001F0D807E013F8380FC0004848137CA248C712
7E153E5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14037F001F14076C6C1306
0007140E6D131CD801F013386C6C137090387E03E090381FFF80903803FC0020277EA525
>I<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FC
ADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I<ED03F090390FF00FF890
393FFC3C3C9039F81F707C3901F00FE03903E007C03A07C003E010000FECF000A248486C
7EA86C6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38060FF0000EC9FCA4120F
A213C06CB512C015F86C14FE6CECFF804815C03A0F80007FE048C7EA0FF0003E14034814
0116F8481400A56C1401007C15F06CEC03E0003F1407D80F80EB0F80D807E0EB3F003901
FC01FC39007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3120F1203B0EC0FF0EC3F
FCECF03F9039F1C01F809039F3800FC0EBF70013FE496D7EA25BA35BB3A3486C497EB500
C1B51280A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312
071203B3AA487EB512C0A312387EB717>I<EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7
FCAAEB01F813FFA313071301B3B3A2123C127E00FF13F01303A214E038FE07C0127C383C
0F00EA0FFEEA03F8154984B719>I<EA03F012FFA3120F1203B1913801FFFCA39138007F
C01600157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EBF3FEEBF73F01FE7FEBF8
1F496C7E8114076E7E6E7E811400157E157F811680ED1FC0486CEB3FF0B500C0B5FCA328
3A7EB92C>I<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0
EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F8026
03F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B500
83B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC0
3803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>I<EB03FE
90380FFF8090383E03E09038F800F84848137C48487F48487F4848EB0F80001F15C090C7
12074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A26C6CEB0FC000
0F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D903FEC7FC2527
7EA52A>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A07F7000FC0D803FEEB
07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D
13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB5
12C0A328357EA42E>I<D903F813C090381FFE0190387E07819038FC01C33903F000E300
0714774848133749133F001F141F485A150F48C7FCA312FEAA127FA37E6D131F121F6D13
3F120F6C6C137F6C6C13EF3901F801CF39007E078F90381FFE0FEB07F890C7FCABED1FE0
0203B5FCA328357DA42C>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA
03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>I<EBFF
03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7FE013FF
6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303A37E15
806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A51338A3
1378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580EB7C03
017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E000FFEB01FFA3000FEB001F
00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7FF8090383F03C790381FFF
87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF8000FF06C48EB07E00003EC03
C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2EC8038011F1330A26D6C5A
A214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA2147CA31438A227257EA32C>
I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E018C00003023EEB0180A26C
6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C7A2D93F016D5A15830281EBF0
38D91F831430150102C3EBF87090260FC6001360A2D907E66D5A02EC137CA2D903FCEB7F
804A133FA2010192C7FC4A7FA20100141E4A130E0260130C37257EA33C>I<B538807FFF
A33A03FE003FF00001EC1F80000092C7FC017E131C6D13186D6C5AECC070010F5B6D6C5A
ECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF903801C7E090380383F090380703F8
EB0601496C7E011C137E49137F01787F496D7E486C80000FEC3FF0D8FFFE90B51280A329
247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C00003EC03806C7E16007F000014
06A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A26D6C5AA214F101035BA2D901FB
C7FCA214FF6D5AA2147CA31438A21430A214701460A25CA2EA7C0100FE5B130391C8FC13
06EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I<003FB512FCA2EB8003D83E0013F8
003CEB07F00038EB0FE012300070EB1FC0EC3F800060137F150014FE495AA2C6485A495A
A2495A495A495AA290387F000613FEA2485A485A0007140E5B4848130C4848131CA24848
133C48C7127C48EB03FC90B5FCA21F247EA325>I<B81280A2290280962A>I
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fg cmbx12 14.4 43
/Fg 43 122 df<B712F0AB240B7F9F2D>45 D<913803FFC0023F13FC91B6FC010315C001
0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248
17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600
3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913
006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313
C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF8
00C7FCB3B3B3A6007FB712FEA52F4E76CD43>I<EC3FFE0103B512E0010F14FC013F14FF
90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F0
1680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218
C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A
48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F8014
0749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<91
380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED8
03F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC
1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80
DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218
FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001
F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F158001
0302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F16
7FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580
EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A120748
5A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D803
80150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093
C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077F
DAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0F
E0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D
5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F80103
14C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE
903A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01
FF5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA2150891
3801FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A2
4A15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E
6E4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC02
3F13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A2606060
485F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC8
12014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141F
A2143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13
FC0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E484880
48486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE49
13806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C
4BC7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9
007F14E04848011F14F048487F48481303030014F8484880161F4848020713FC16018248
48157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F
6C6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F158001
0102FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E4901
037F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A
7013E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D
13F390387FF803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05E
A3D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A
49495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8
FC010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7F
A34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C
7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B80020783
5D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103
854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65
D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203
DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901
F8824949824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA248
49181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D19
80A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A
6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE0
01FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>67
D<BB12FEA5D8000701F8C700077FF0007F191F190785858586861B80A21A1FA31A0FA41B
C006F81307A497C7FCA31701A317031707170F177F92B6FCA59238F8007F170F17071703
1701A31700A795C9FCB3B812F8A54A517CD055>70 D<B812C0A5D8000701F8C7FCB3B3B3
B2B812C0A52A527CD132>73 D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013
FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49
496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B804A83
481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F
6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D
6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F002
0F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479D265
>79 D<BAFC19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F13
E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C0
4F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>
I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90
C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49496F7F49496F7F4990C96C7F
4948707F4948707F01FF854A177F48864849717EA24849711380A2481BC04A83481BE0A2
4A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5FA36C1BF0A36C6D4D13E0A36C
1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A4C13E06C6D013F6D495A017F
91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01806E485B6D6D48D91F8F5B6D
01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0020F6D4913C0020301FF90B5
C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7EA01FF74133E74137E7413FE
F2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314C0731480731400735B963800
7FF8F21FE0576A79D265>I<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F06
0113FE727F737F737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06
035B060F13F095B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80727F72
7F727F727F727F8684A28684A787A71D1C75133EA38575137E73157C7513FC731401B86C
6D9038F803F807039038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>
I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919
3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5
53517BD05E>84 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F048
6C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020F
B6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A
5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C
9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641
>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301
017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285
A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7
FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C0
41547BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE
0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F130070
5A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C
6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49
C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13
FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48
4980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D
5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE
0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0
4901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C048
8191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06C
EE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB
03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3F
FC0203B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC49
5A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A700
7FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF
7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83F
F813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D
495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91
CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC1207
4848C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D00
3F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280
010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4
EE1FFC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081
ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F
497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017E
B3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003FFE
00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8ED
1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F6F
7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537CD2
47>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFF
E0B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A
3F001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3
C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03F
B512FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC92
393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3
ACB6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F90
38807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890
C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5F
A26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF
807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B501
0F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D
7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F
616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F
1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<912601FFE0EB078002
1F01F8130F91B500FE131F0103ECFF80010F9039F03FC03F499039800FE07F903A7FFE00
03F04948903801F8FF4849EB00FD4849147F4A805A4849805A4A805AA291C87E5AA35B12
FFAC6C7EA37EA2806C5EA26C6D5CA26C6D5C6C6D5C6C93B5FC6C6D5B6D6C5B6DB4EB0FEF
010F9038C07FCF6D90B5120F010114FED9003F13F80203138091C8FCB1040FB61280A541
4D7CB547>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC
0003D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FC
A55CB3AAB612FCA52F367CB537>I<903903FFF00F013FEBFE1F90B7FC120348EB003FD8
0FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC0
6C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC
003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F
8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC
2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90
B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEB
F0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<D93FF8913801FFC0B50207B5FC
A50003ED001FC61607B3AE5FA35FA2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3
EBFFC0903A0FFFC03F836D90B51203010114FE6D6C13F8020701E091C7FC42377BB54B>
I<B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15
FC6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E
177E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA2
6F5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A500
0101F0C701F0C7381FF8006E027FED07E06C715DA26E023F150F017F705DA26E181F013F
4B6C92C7FC6E606D70143E94B5FC6F177E6D4A6E137C03C001F315FC6D715B160303E001
E114016D020702E05B03F013C06D71485A160F03F8D9807F13076D05F85B93381F003F03
FC160F027F4902FC5BDBFE3E011F131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF
3E4C6D137E6E5FA24C7F6E5F4C7F6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E
6FC9FC5A367DB461>I<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E
013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC
6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF
6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0
133E486C137E486C137C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB
81FE6CB45A6C13F000035BC690CBFC404D7DB447>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fh cmtt12 12 16
/Fh 16 116 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46
D<EC07F8EC3FFF91B57E010314E0010F80498090383FFC0F90397FE003FC9038FF800148
90C77ED803FC147E49EB7E7F0007903801FFBFD9F00713FF4848481480495A001F5B0180
13C3003FEB7F810100010013C002FE137F4849133FEA7E014A131FA212FEEAFC034A130F
A96E131FD8FE011580127EA26E133FD87F0015006C6D5B027F13FE01801381001F90383F
C3FC01C013FF000F6D5B6D6C5B6C6C6C5BD9F80113800003D9007EC7FC6D9038000F806C
B4EC1FC06C6D133FD97FE013FF90263FFC0713806DB612006D5C010314F801005C023F13
80DA07FCC7FC2A3F7CBD33>64 D<EC1F804A7E4A7EA34A7EA314F901017FA501037FA214
F0A201077FA4ECE07E010F137FA449486C7EA549486C7EA4017F80EC000FA291B5FCA290
B67EA43A01FE0007F8491303A4000381491301A3000781491300D87FFF90380FFFE0B56C
4813F06E5AA24A7E6C496C13E02C3E7DBD33>I<D83FFCEC3FFC486CEC7FFEB591B5FCA2
6C48EC7FFE6C48EC3FFCD80FC0EC03F0A76D1407000716E0A86C6CEC0FC0A2EC07E0EC0F
F0EC1FF8A3000116809039F83FFC1FEC3E7CA4EC7E7EA200001600A2EC7C3E01FC5CECFC
3FA3ECF81F017C143EA590397DF00FBEA3013D14BC90393FE007FCA5ECC003011F5C6D48
6C5A303E7FBC33>87 D<EA3FFC487E12FFA2127F123F1200ABEC01FE91380FFFC04A13F0
027F7F91B512FE90B7FCECFE07DAF800138002E0EB7FC04AEB3FE04A131FEE0FF091C7FC
16074915F81603A217FC1601A9160317F8A26D140717F06E130F17E06E131FEE3FC06E13
7F9139F801FF80DAFE07130091B55A495C6E5BD97E3F13E0D93C0F138090260003FEC7FC
2E3E7FBC33>98 D<ECFFF0010713FE011FEBFF804914C04914E048B612F048EBC01F9038
FE000F485A485A4848EB07E049EB03C0484890C7FC5BA2127F90C9FCA25A5AA97E7EA27F
003FEC01F06DEB03F86C7E6D13076C6C14F06C6C130F01FFEB1FE06CEBE07F6C90B512C0
6C1580013F14006D13FC01075B010013C0252E79AC33>I<ECFF80010713F0011F13FC49
7F90B6FC48158048018013C03A07FE003FE001F8EB0FF048481307484814F8491303003F
15FC491301127F90C7FC16FE15005A5AB7FCA516FC48C9FC7E7EA36C7E167C6C6C14FE7F
6C7E6D13016C6CEB03FC6CB4130F6C9038C03FF86C90B512F06D14E06D14C0010F140001
0313FC9038007FE0272E7BAC33>101 D<ED3FE0913801FFFC020713FE141F4A13FF5CEC
FFC015004948137E4A133C010314005CA8003FB612F84815FCB7FCA36C15F8260003F8C7
FCB3AD003FB612804815C0A46C1580283E7DBD33>I<D901FEEB1FE0903A0FFFC0FFF001
3F01F313F84990B512FC90B7FC5A48010313E12607FC00EB80F849017F1360484890383F
C00049131FA2001F8149130FA66D131F000F5DA26D133F6C6C495A6D13FF2603FF0390C7
FCECFFFE485C5D5DD80FCF13C0D981FEC8FC0180C9FCA27FA26C7E7F90B512FC6CECFFC0
6C15F0000715FC4815FF4816809038E0000748489038007FC090C8EA1FE048150F007E15
0700FE16F0481503A56C1507007E16E0007F150F6C6CEC1FC001E0147FD81FF8903801FF
80270FFF801F13006C90B55A6C5DC615F0013F14C0010F91C7FC010013F02E447DAB33>
I<EA3FFC487E12FFA2127F123F1200AB4AB4FC020713C0021F13F0027F7F91B5FC90B67E
ED07FEECF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFFF80FFFFC486D4813FEB56C
4813FFA26C496C13FE6C496C13FC303D7FBC33>I<383FFFFC487FB5FCA27E7EC7FCB3B3
AD003FB612F84815FCB712FEA26C15FC6C15F8273D7ABC33>108
D<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE
07130301FC01FE7F9039F803FC01A201F013F8A401E013F0B3A53C7FFE0FFF07FF80B548
018F13C0A46C486C01071380322C80AB33>I<4AB4FC263FFC0713C0267FFE1F13F000FF
017F7F91B5FC6CB67E6CEC07FEC6EBF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFF
F80FFFFC486D4813FEB56C4813FFA26C496C13FE6C496C13FC302C7FAB33>I<EC01FE3A
3FFC0FFFC0486C4813F000FF017F7F91B512FE6CB7FC6CEBFE07C6D9F800138002E0EB7F
C04AEB3FE04A131FEE0FF091C7FC16074915F81603A217FC1601A9160317F8A26D140717
F06E130F17E06E131FEE3FC06E137F9139F801FF80DAFE07130091B55A495C6E5B6E13E0
020F1380DA03FEC7FC91C9FCAF383FFFF8487FB57EA26C5B6C5B2E427FAB33>112
D<ED03FE3B7FFF801FFF80B5D8C07F13E002C1B5FC02C314F014C76C9038CFFE0F39001F
DFF09139FFC007E092388003C092C8FC5C5C5CA25CA25CA35CB2007FB512FEB7FCA46C5C
2C2C7DAB33>114 D<90381FFE0F90B5EA8F80000314FF120F5A5AEBF007387F800190C7
FC00FE147F5A153FA37E007FEC1F0001C090C7FCEA3FF8EBFFC06C13FF6C14E0000314F8
C680011F13FF01001480020713C0EC007FED1FE0007C140F00FEEC07F01503A27EA27F15
076D14E06D130F6DEB3FC09038FE01FF90B61280160000FD5C00FC14F8D8F83F13E0D878
0790C7FC242E79AC33>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fi cmr12 12 25
/Fi 25 119 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
80120313005A1206120E5A5A5A12600B1D78891B>44 D<14FF010713E090381F81F89038
3E007C01FC133F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F15
F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A2
6C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81
F8903807FFE0010090C7FC28447CC131>48 D<143014F013011303131F13FFB5FC13E713
071200B3B3B0497E497E007FB6FCA3204278C131>I<49B4FC010F13E0013F13FC9038FE
01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0FF0EA0FE0486C14F8A215077F5B
A26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F0015FE4A5AEC03F0EC1FC0D90F
FFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016F0ED07F816FC150316FEA21501
16FFA3121EEA7F80487EA416FE491303A2007EC713FC00701407003015F80038140F6C15
F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039007FFFF8010F13E0010190C7FC
28447CC131>51 D<14FF010713E0011F13F890387F00FE01FC133FD801F0EB1F804848EB
0FC049EB07E00007EC03F048481301A290C713F8481400A47FA26D130116F07F6C6CEB03
E013FC6C6CEB07C09039FF800F806C9038C01F006CEBF03EECF87839007FFEF090383FFF
C07F01077F6D13F8497F90381E7FFFD97C1F1380496C13C02601E00313E048486C13F000
079038007FF84848EB3FFC48C7120F003EEC07FE150148140016FF167F48153FA2161FA5
6C151E007C153EA2007E153C003E157C6C15F86DEB01F06C6CEB03E06C6CEB07C0D803F8
EB1F80C6B4EBFF0090383FFFFC010F13F00101138028447CC131>56
D<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848EB0FC0000F
EC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA46C5CA36C7E
5D121F7F000F5C6C6C1306150E6C6C5B6C6C5BD8007C5B90383F01E090390FFF80FE9038
01FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F16C0ED1F80A2
49EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649C7FCEB1FF028
447CC131>I<16C04B7EA34B7EA34B7EA34B7EA3ED19FEA3ED30FFA203707FED607FA203
E07FEDC03FA2020180ED801FA2DA03007F160FA20206801607A24A6D7EA34A6D7EA34A6D
7EA20270810260147FA202E08191B7FCA249820280C7121FA249C87F170FA20106821707
A2496F7EA3496F7EA3496F7EA201788313F8486C83D80FFF03037FB500E0027FEBFFC0A3
42477DC649>65 D<DB0FFE146092B500C013E0020314F0913A0FFC01FC0191393FC0003E
02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948151F49C9
120F485A491607120348481603A248481601A248481600A2123FA2491760127FA3190048
5AAE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C160119806C6C160312016DEE
07006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D6C4A5AD900FFEC0780DA3FC0
011FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B487BC546>67
D<B912F8A3000101C0C7127F6C6C48EC07FC17011700187C183C181CA284A31806A41807
04067FA395C7FCA4160EA2161E163E16FE91B5FCA3EC8000163E161E160EA21606A319C0
A3F0018093C7FCA41803A21900A260A260A2181EA2183E187EEF01FE170748486C147FB9
5AA33A447CC342>69 D<B912F0A3000101C0C7127F6C6C48EC0FF8170317011700187818
38A2181CA3180CA4180E1806160CA21800A5161CA2163C167CED01FC91B5FCA3EC8001ED
007C163C161CA2160CA793C8FCB08048487EB612F8A337447CC340>I<B612F0A3C6EBF0
006D5A6D5AB3B3B3A4497E497EB612F0A31C447DC323>73 D<B612F8A3000101E0C9FC6C
6C5A5CB3B31830A418701860A518E0A3EF01C0A217031707A2170F173F177FEE01FF4848
6C011F1380B9FCA334447CC33D>76 D<B56C020FB5FC8080C6040013F06D6CED1F80D96F
F8ED0F00A2D967FC1506EB63FEA2EB61FF01607FA26E7E6E7EA26E7E6E7EA26E7E6E7EA2
6E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0
EE0FF8A2EE07FCEE03FEA2EE01FF701386A2EF7FC6EF3FE6A2EF1FF6EF0FFEA217071703
A217011700A201F0167E183E487ED80FFF161EB500F0150EA2180640447CC349>78
D<B712FCEEFFC017F800019039C0000FFC6C6C48EB01FF9338007F80EF1FE0170FEF07F0
18F8EF03FCA218FE1701A218FFA718FEA2170318FCA2EF07F818F0EF0FE0EF1FC0EF7F80
933801FE00EE0FFC91B612F017800280C9FCB3AA3801FFE0B612C0A338447CC342>80
D<B60107B500F890380FFFFEA3000301E0D9001F90C813F06C0180DA0FFCED3FC091C86C
48ED1F006C871C0E6D6C6E7E1C0CA26D6C6F5DA36EDA06FF1538011F1A30A26E020E6D14
70010FDB0C7F1560A26E021C7F0107DB183F5DA2856D6CDA301F4A5AA36D6C4A6C6C49C7
FCA36D6C4A6C6C1306A3DB80016E130E027FDA8003140CA2DBC00380023FDA00015CA203
E081021F01066D5CA36E6C486E6C5AA36E6C486E6C5AA36F48EC1FE1020360A2DBFE7015
F302010160020F90C8FCA2DBFFE015FB6E49EC07FEA36F486E5AA36FC86C5AA3031E6F5A
A4030C16605F467EC364>87 D<EA01FC12FFA3120712031201B3EC03FC91380FFF809138
3C07E091387001F89039FDE0007E02807F01FFEC1F8091C713C049EC0FE049140717F0A2
EE03F8A217FCA2160117FEAB17FC1603A217F8A2EE07F0A26DEC0FE017C06D141F01FBEC
3F80D9F380EB7E00D9E1C05B9039E0F001F89039C03C07E09039801FFF80C7D803FCC7FC
2F467DC436>98 D<EB01FE903807FFC090381F03F090387E00FC49137E48487F485A4848
EB1F80000F15C049130F121F484814E01507A2007F15F090C7FCA25AA390B6FCA290C9FC
A67EA27FA2123F16306C7E1670000F15606D14E06C6C14C0000314016C6CEB03806C6CEB
0700013E131E90381F80F8903803FFE0010090C7FC242E7DAC2B>101
D<EE0F80D901FCEB7FE0903A0FFF81F0F090393F07E3819039FC01FF033A01F800FE0148
48017E13E00007027FC7FC497F000F8149131F001F81A9000F5D6D133F000792C7FC6D5B
0003147E6C6C5B6D485A3903BF07E090380FFF80260701FCC8FC90CAFCA25AA37F6C7E7F
90B512F86C14FF16E06C15F86C6C8048B67E3A07C0000FFF48481300003FC8EA3F80003E
151F48ED0FC0A2481507A56C150F007C1680007E151F003E16006C153E6C6C5CD807E049
5AD801F8EB07E0D8007FEB3F8090261FFFFEC7FC010113E02C427DAC31>103
D<EA01FC12FFA3120712031201B3B3B3A5487EB512F8A315457DC41C>108
D<D801FC01FFEC1FE000FF010701E0EBFFFC913B0F03F801E07F913C3C01FC07803F8000
07903C7000FE0E001FC0000349D97E1C130F2601FDC0D97F38804A143001FFDA3FF06D7E
91C75BA2495DA3495DB3A8486C4A6C497EB5D8F81FB50003B512E0A34B2C7DAB52>I<39
01FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0002601FDC07F
5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80
903803FFF090380FC0FC90383E001F496D7E496D7E48486D7E48486D7E48486D7E000F81
A24848147E003F157FA290C87E481680A44816C0AA6C1680A26D147F003F1600A2001F15
7E6D14FE000F5D6D130100075D6C6C495A6C6C495A6C6C495A013E49C7FC90381FC0FE90
3807FFF89038007F802A2E7DAC31>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0
FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26
>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C147812
7800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0
C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15
786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<B539
F001FFFCA3000790C7EA7FE06C48EC1F8000011600160E1200160C017F5CA280013F5CA2
6E1370011F146080010F5CA2ECF00101075CA26D6C48C7FCA26E5A01011306A26D6C5AA2
14FF6E5AA215B8EC3FB015F06E5AA36E5AA26E5AA36EC8FC2E2C7EAA33>118
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fj cmr17 17.28 22
/Fj 22 125 df<DC3FF0EC07FE922603FFFC91387FFFC0031F01FF0103B512F0923D7FC0
1FC00FF803F8913E01FE0003E03FC0007CDA07F86D6CB4C7121E4A4890260079FE804A48
DA7BFC6E7EDA3F8049B448143F027F020749ECFFC04AC7485B49484C5B495A6113074A93
C7FC716F5B010F6F70C7FC4A6E48151C99C8FCB3F47FC0BEFCA426000FF0C7D801FEC712
01F3007FA21C3FB3B3AD496C4A6C4B7E496C4A6D4A7E003FB5D8FC07B66CB612F0A46465
7EE46B>14 D<DD7FF81560040FB56C14E0047F14E00303B600FC1301030F9038E003FEDB
3FFEC7383F8003DBFFF0EC07C04A01C0913803F007020790C9EAF80FDA0FFC167C4A48EE
1E1FDA7FE0160F4A48EE07BF4949EE03FF4990CAFC4948834948834A187F495A013F193F
4948181F5C01FF190F485BA24890CC1207A248481903A2485A1B01121FA25B123F1B005B
A2127F1C00A4485AB06C7EA5123F1CE07FA2121F7FA2000F1A011CC06C7EA26C7E1B036C
6D19801B076C7F017F1A006E606D6C181E131F6D6C606E18386D6C18786D6C606D6D4C5A
6D6D4C5A6E6C1607DA1FF84C5A6E6C4CC7FC6EB4167C020101C04A5A6E01F0EC07F0DB3F
FEEC1FC092280FFFE001FFC8FC030390B512FCDB007F14F0040F14809326007FF8C9FC53
667AE360>67 D<B712C0A4C66CEB8000D91FFEC7FC6D5AB3B3B3B3AE497E90387FFF80B7
12C0A422627AE12F>73 D<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA61A3C
1A38A61A78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F043F
13E0D9FFFC0203B5FCBBFCA4466279E153>76 D<933801FFE0043F13FF4BB612E0030790
38003FF8DB1FF0EB03FEDB7FC0903800FF804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC
4A486F7E4A486F7E4A48707E4ACA6C7E4948717E4948717E4948717E4948717E4948717E
013F854A83017F864948727EA24890CC6C7EA24848737EA24848737EA2000F8749190700
1F87A34848737EA4007F1C80A24985A400FF1CC0AF6C6C4F1380A5003F1C006D61A3001F
63A26D190F000F63A26C6C4F5AA36C6C4F5AA26C6D4E5A6C636E18FF017F626D6C4D90C7
FC6E5F011F616D6C4D5A6D6C4D5A0103616E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1F
F0ED03FE6E6C4B5A6E6C4B5ADA01FFED3FE09126007FC0ECFF80DB1FF0D903FEC9FCDB07
FFEB3FF8030190B512E0DB003F91CAFC040113E05A667AE367>79
D<003FBC12F8A49126C000039038C0000301FCC76C49EB007F01F0190F01C019074848F1
03FC90C81701007E1A00007C1B7CA300781B3CA400701B1CA600F01B1E481B0EA7C91800
B3B3B3A54C7FA2041F13F84AB87EA457627CE160>84 D<EC3FF0903803FFFE010F6D7E90
393FC03FE090397E0007F801F86D7ED801E06D7E48486D7E48486E7E48C86C7E7F01F06E
7E487E6D6E7EA3707EA36C5AEA03E0C9FCA6167FED7FFF020FB5FC91387FF807903801FF
80903807FC00EB1FF0EB7FC0495AD803FEC7FC485A120F5B485A485AA2484817E0A312FF
5BA2160FA3161F6D141B007F153B16736D913971FC01C06C6C14E1001FEC01C1D80FFC90
3A0780FE03806C6C903A0F00FF07002701FF807E6DB4FC27007FFFF86D5A011F01E0EB1F
F8010190C7EA07E03B417ABF42>97 D<4AB47E020F13F8023F13FE9139FF007F80D903FC
EB07E0D907F0EB01F0D91FE0EB007849488049488049C87E48485D4915FF00034B138048
485CA2485AA2485AA2003F6F130049EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2
001FEE01C07F000F16036D168012076C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D
6C5CD90FF8495AD903FCEB07C0903A00FF803F8091263FFFFEC7FC020F13F80201138032
417CBF3A>99 D<EC03FE91381FFFE091B512F8903901FE03FE903A07F0007F8049486D7E
D93FC06D7E49C76C7E496E7E49140348488148481401000782491400000F8283485A1880
123F49153FA2007F17C0A35BA212FF90B8FCA30180CAFCA9127F7FA3123FA27F121FEF01
C06C7E17036C6C1680A26C6C15070001EE0F006D150E6C6C151E6D6C5C6D6C5C6D6C5CD9
07F0EB03E0D903FC495A902700FF803FC7FC91383FFFFC020F13F00201138032417CBF3A
>101 D<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA412
01EA007FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>105 D<EB03C0EA07FFB5FCA4
1201EA007FA2133FB3B3B3B3AD497E497EB612F0A41C647DE323>108
D<D903C0D9FFC0EC07FED807FF010301F891381FFFC0B5010F01FE027F13F0923D3F00FF
8001F807FC0378903B3FC003C001FEDAC1E090261FE00FC77E0001D9C3C090260FF01E6E
7ED8007F49902607F81C6E7E02C7C75CD93FCE6E6C486E7E02CC166002DC16E002D85E02
F8DA01FF6F7E4A5EA24A93C8FCA44A5DB3B3496C4A6C4B7E496C4A6D4A7EB6D8F007B6D8
803FB512FCA4663F7CBE6F>I<D903C0EB7FE0D807FF903803FFFCB5010F13FFDB3F0013
C00378EB1FE04B6D7E0001D9C1C06D7E27007FC3808002C7C71203D93FCE81170114DC14
D802F86E7E5CA35CA35CB3B3496C4A7F496C4A7FB6D8F003B612C0A4423F7DBE49>I<ED
FF80020F13F8023F13FE9139FF007F80D903FCEB1FE0D907F0EB07F0D90FC0EB01F8D93F
80EB00FE49C8127F017E81496F7E48486F7E00038349150700078348486F7EA2001F8349
1501A2003F83A348486F7EA400FF1880AC007F1800A26D5DA2003F5FA36C6C4B5AA36C6C
4B5A00075FA26C6C4B5A6C6C4B5AA26C6C4B5A017F4BC7FC6D6C14FE6D6C495AD90FF0EB
07F8D903FCEB1FE0D900FFEB7F806EB5C8FC020F13F8020113C039417CBF42>I<D903C0
EB7FC0D807FF903807FFFCB5011F13FFDB7F0013C003F8EB1FF0DAC3E0EB07F80001D9C7
806D7E26007FCFC76C7E02DE6E7ED93FFC6F7E4A6F7E4A82181F4A82727E5C727EA2727E
A3727EA41A8084AC4E1300A54E5AA2611807A24E5A6E5E181F6E4B5A6E5E187F6E4B5A02
DE4A90C7FC02CF4A5ADAC780495ADAC3C0EB0FF0DAC1F0EB3FE0913AC07E01FF806FB448
C8FC030F13F80300138093CAFCB3A3497E497EB612F0A4415B7DBE49>I<9039078003F8
D807FFEB0FFFB5013F13C092387C0FE0913881F01F9238E03FF00001EB838039007F8700
148FEB3F8E029CEB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497E
EBFFF8B612FCA42C3F7CBE33>114 D<1438A71478A414F8A31301A31303A21307130F13
1FA2137F13FF1203000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D
6C148016076D6C14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B59
7FD733>116 D<D903C0150FD807FFED1FFFB50203B5FCA40001ED0007D8007F1501A201
3F81B3B25FA35FA35F011F15066E140E5F130F6E4A7F01075D6D6C494813E0D901FE4948
EBFFC0903A00FFC01F8091393FFFFE00020F13F8020001C0EC800042407DBE49>I<B66C
49B512E0A4000101F8C8387FFE0026007FE0ED1FF819E0013F705A61131F6E93C7FC130F
180E6E151E0107161C8001035EA26E157801011670806D5EA26F1301027F5DA26E6C495A
A26F1307021F92C8FCA26E6C130EA26F131E0207141CA26F133C020314388102015CA26F
13F06E5C168092387F81C0A216C3033F5B16E3DB1FE7C9FCA216FF6F5AA26F5AA36F5AA2
6F5AA36F5A433F7FBD46>I<B6D8801FB500E090B512F8A4000301F0C7D87FFCC7001F13
80C601C0DA3FF0913807FE00051F6F5A017F030F6F5A64133F05075E6E81011F030F5EA2
6E6F1403010F031F5E171D6E6F14070107033D93C7FC17386E6F5C01030378150EEF707F
6E70131E010103F0151CEFE03F6E70133C6D02011638EFC01F03806F1378027F01031670
EF800F03C06F13F0023F01075EEF000703E0EDF801021F495E040E130303F0EDFC03020F
011E5E041C130103F8EDFE070207013C93C8FC0438130003FC6F5A02030178150E047014
7F03FE169E020101F0159C4C143F03FF16FC6E5F4C141FA2037F5E4C140FA2033F5E93C8
1207A26F5E031E1503030E5E5D3F7FBD60>I<007FB500C0010FB512E0A4C691C70003EB
FC00D93FFE6E13E0D90FFC16807148C7FC01075E6D6C4A5A6D6C5D6D6D495A606E6C495A
6E6C49C8FC6E6C130E171E6E6C5B6E6C5B6E6C5B5F913801FF016EEB83C092387FC78003
3F90C9FC16EFED1FFE6F5A6F5A826F7E6F7E5D834B7F92380F3FE0ED1E1F033C7F923838
0FF892387807FCEDF003DA01E07F4A486C7E707F4A486D7E4AC7FC021E6E7E021C6E7E02
3C6E7E5C4A6E7E01016F7E49486E7E1307010F6F7F013F83D9FFF04A7F00076D4A13FCB5
6C020FEBFFF8A4453E80BD46>I<C312FEA3870382A784>124 D E
%EndDVIPSBitmapFont
end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4

%%EndSetup
%%Page: 1 1
1 0 bop 371 499 a Fj(Lin)l(ux)44 b(T)-11 b(ra\016c)43
b(Con)l(trol)h(|)f(Implemen)l(tation)i(Ov)l(erview)1132
739 y Fi(W)-8 b(erner)34 b(Almesb)s(erger,)e(EPFL)h(ICA)1166
856 y Fh(Werner.Almesberger@epfl)q(.ch)1426 1051 y Fi(No)m(v)m(em)m(b)s
(er)h(30,)e(1998)-114 2045 y Fg(Abstract)-114 2232 y
Ff(Lin)n(ux)42 b(o\013ers)g(a)g(ric)n(h)g(set)g(of)h(tra\016c)f(con)n
(trol)f(functions.)-114 2331 y(This)24 b(do)r(cumen)n(t)h(giv)n(es)e
(an)h(o)n(v)n(erview)f(of)h(the)h(design)f(of)g(the)-114
2431 y(resp)r(ectiv)n(e)f(k)n(ernel)g(co)r(de,)i(describ)r(es)e(its)h
(structure,)h(and)f(il-)-114 2531 y(lustrates)29 b(the)g(addition)g(of)
h(new)f(elemen)n(ts)g(b)n(y)g(describing)-114 2630 y(a)e(new)h(queuing)
f(discipline.)-114 2919 y Fg(1)135 b(In)l(tro)t(duction)-114
3106 y Ff(Recen)n(t)45 b(Lin)n(ux)f(k)n(ernels)g(o\013er)g(a)h(wide)f
(v)-5 b(ariet)n(y)44 b(of)h(traf-)-114 3206 y(\014c)g(con)n(trol)f
(functions.)90 b(The)45 b(k)n(ernel)f(parts)g(for)h(tra\016c)-114
3305 y(con)n(trol,)37 b(and)f(sev)n(eral)e(user-space)g(programs)g(to)i
(con)n(trol)-114 3405 y(them)g(ha)n(v)n(e)e(b)r(een)i(implemen)n(ted)g
(b)n(y)f(Alexey)g(Kuznetso)n(v)-114 3504 y Fe(<)t(kuznet@ms2.inr.a)o
(c.)o(ru)o(>)t Ff(.)42 b(That)31 b(w)n(ork)f(w)n(as)g(inspired)-114
3604 y(b)n(y)23 b(the)h(arc)n(hitecture)e(describ)r(ed)h(in)h([1],)g
(but)g(it)g(also)f(co)n(v)n(ers)-114 3704 y(the)h(mec)n(hanisms)f
(required)g(for)g(supp)r(orting)h(the)g(arc)n(hitec-)-114
3803 y(ture)29 b(dev)n(elop)r(ed)g(in)g(the)h(IETF)f(\\in)n(tserv")e
(group)h([2],)i(and)-114 3903 y(will)39 b(serv)n(e)e(as)h(the)h(basis)f
(for)g(supp)r(orting)g(the)h(more)e(re-)-114 4003 y(cen)n(t)g(w)n(ork)e
(of)i(\\di\013serv")e([3)o(].)65 b(See)36 b(also)g([4])g(for)h(further)
-114 4102 y(details)29 b(on)g(ho)n(w)g(in)n(tserv)g(and)g(di\013serv)g
(are)g(related.)41 b(This)-114 4202 y(do)r(cumen)n(t)26
b(illustrates)f(the)g(underlying)g(arc)n(hitecture)g(and)-114
4301 y(describ)r(es)40 b(ho)n(w)h(new)f(tra\016c)h(con)n(trol)e
(functions)j(can)e(b)r(e)-114 4401 y(added)f(to)f(the)h(Lin)n(ux)g(k)n
(ernel.)69 b(The)39 b(k)n(ernel)f(v)n(ersion)f(w)n(e)-114
4501 y(used)28 b(is)f(2.1.130.)-14 4603 y(Figure)33 b(1)g(sho)n(ws)f
(roughly)g(ho)n(w)h(the)h(k)n(ernel)f(pro)r(cesses)-114
4703 y(data)23 b(receiv)n(ed)e(from)i(the)h(net)n(w)n(ork,)e(and)h(ho)n
(w)f(it)i(generates)-114 4802 y(new)19 b(data)g(to)h(b)r(e)f(sen)n(t)h
(on)f(the)g(net)n(w)n(ork:)32 b(incoming)19 b(pac)n(k)n(ets)-114
4902 y(are)33 b(examined)h(and)g(then)g(either)g(directly)g(forw)n
(arded)f(to)-114 5001 y(the)d(net)n(w)n(ork)e(\(e.g.)43
b(on)29 b(a)h(di\013eren)n(t)f(in)n(terface,)h(if)g(the)g(ma-)-114
5101 y(c)n(hine)j(is)f(acting)h(as)f(a)g(router)g(or)g(a)g(bridge\),)i
(or)d(they)i(are)-114 5201 y(passed)27 b(up)g(to)h(higher)e(la)n(y)n
(ers)g(in)h(the)h(proto)r(col)e(stac)n(k)h(\(e.g.)-114
5300 y(to)c(a)g(transp)r(ort)g(proto)r(col)f(lik)n(e)h(UDP)h(or)e
(TCP\))i(for)f(further)-114 5400 y(pro)r(cessing.)69
b(Those)38 b(higher)g(la)n(y)n(ers)f(ma)n(y)h(also)g(generate)2061
2045 y(data)g(on)g(their)h(o)n(wn)f(and)g(hand)h(it)g(to)f(the)h(lo)n
(w)n(er)e(la)n(y)n(ers)2061 2144 y(for)31 b(tasks)g(lik)n(e)g
(encapsulation,)h(routing,)g(and)f(ev)n(en)n(tually)2061
2244 y(transmission.)2160 2349 y(\\F)-7 b(orw)n(arding")26
b(includes)i(the)h(selection)f(of)g(the)h(output)2061
2448 y(in)n(terface,)19 b(the)g(selection)f(of)g(the)h(next)g(hop,)h
(encapsulation,)2061 2548 y(etc.)37 b(Once)27 b(all)g(this)h(is)f
(done,)g(pac)n(k)n(ets)g(are)f(queued)i(on)f(the)2061
2648 y(resp)r(ectiv)n(e)j(output)i(in)n(terface.)47 b(This)31
b(is)h(the)f(p)r(oin)n(t)h(where)2061 2747 y(tra\016c)k(con)n(trol)f
(comes)h(in)n(to)g(pla)n(y)-7 b(.)63 b(T)-7 b(ra\016c)35
b(con)n(trol)g(can,)2061 2847 y(among)30 b(other)g(things,)i(decide)f
(if)h(pac)n(k)n(ets)e(are)g(queued)h(or)2061 2947 y(if)37
b(they)h(are)e(dropp)r(ed)h(\(e.g.)65 b(if)38 b(the)g(queue)f(has)f
(reac)n(hed)2061 3046 y(some)28 b(length)h(limit,)h(or)e(if)h(the)h
(tra\016c)e(exceeds)g(some)h(rate)2061 3146 y(limit\),)k(it)e(can)g
(decide)h(in)f(whic)n(h)g(order)f(pac)n(k)n(ets)g(are)g(sen)n(t)2061
3245 y(\(e.g.)k(to)20 b(giv)n(e)f(priorit)n(y)g(to)h(certain)g(\015o)n
(ws\),)h(it)g(can)e(dela)n(y)h(the)2061 3345 y(sending)j(of)h(pac)n(k)n
(ets)e(\(e.g.)35 b(to)24 b(limit)g(the)g(rate)f(of)h(outb)r(ound)2061
3445 y(tra\016c\),)j(etc.)2160 3550 y(Once)c(tra\016c)g(con)n(trol)f
(has)h(released)f(a)g(pac)n(k)n(et)h(for)f(send-)2061
3649 y(ing,)27 b(the)h(device)g(driv)n(er)e(pic)n(ks)h(it)i(up)f(and)f
(emits)h(it)g(on)g(the)2061 3749 y(net)n(w)n(ork.)2160
3854 y(Sections)e(2)f(to)h(4)g(giv)n(e)f(an)g(o)n(v)n(erview)f(and)i
(explain)g(some)2061 3953 y(terminology)-7 b(.)62 b(Sections)37
b(5)f(to)h(8)f(describ)r(e)g(the)h(elemen)n(ts)2061 4053
y(of)32 b(tra\016c)f(con)n(trol)g(in)h(the)h(Lin)n(ux)e(k)n(ernel)g(in)
i(more)e(detail.)2061 4152 y(Section)21 b(9)g(describ)r(es)g(a)g
(queuing)g(discipline)g(that)h(has)f(b)r(een)2061 4252
y(implemen)n(ted)28 b(b)n(y)f(the)h(author.)2061 4554
y Fg(2)134 b(Ov)l(erview)2061 4745 y Ff(The)30 b(tra\016c)h(con)n(trol)
e(co)r(de)i(in)f(the)i(Lin)n(ux)e(k)n(ernel)g(consists)2061
4845 y(of)d(the)h(follo)n(wing)f(ma)5 b(jor)26 b(conceptual)h(comp)r
(onen)n(ts:)2144 5027 y Fd(\017)41 b Ff(queuing)27 b(disciplines)2144
5213 y Fd(\017)41 b Ff(classes)26 b(\(within)j(a)e(queuing)g
(discipline\))2144 5400 y Fd(\017)41 b Ff(\014lters)1905
5649 y(1)p eop
%%Page: 2 2
2 1 bop 118 692 a @beginspecial 0 @llx 0 @lly 434 @urx
65 @ury 4340 @rwi @setspecial
%%BeginDocument: sys.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: sys.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Mon Sep 14 13:39:58 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 434 65
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-53.0 109.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/reencdict 12 dict def /ReEncode { reencdict begin
/newcodesandnames exch def /newfontname exch def /basefontname exch def
/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
basefontdict { exch dup /FID ne { dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
newfont /FontName newfontname put newcodesandnames aload pop
128 1 255 { newfont /Encoding get exch /.notdef put } for
newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
newfontname newfont definefont pop end } def
/isovec [
8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
8#220 /dotlessi 8#230 /oe 8#231 /OE
8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
/Times-Roman /Times-Roman-iso isovec ReEncode
/Times-Bold /Times-Bold-iso isovec ReEncode
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 2812 m -1000 -1000 l 9112 -1000 l 9112 2812 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1350 1500 m 3150 1500 l 3150 1800 l 1350 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3600 1500 m 5400 1500 l 5400 1800 l 3600 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5850 1500 m 7650 1500 l 7650 1800 l 5850 1800 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3300 750 m 5700 750 l 5700 1050 l 3300 1050 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
1203 1620 m 1323 1650 l 1203 1680 l 1365 1680 l 1365 1620 l cp
clip
n 900 1650 m 1350 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 1203 1620 m 1323 1650 l 1203 1680 l 1203 1650 l 1203 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3453 1620 m 3573 1650 l 3453 1680 l 3615 1680 l 3615 1620 l cp
clip
n 3150 1650 m 3600 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 3453 1620 m 3573 1650 l 3453 1680 l 3453 1650 l 3453 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5703 1620 m 5823 1650 l 5703 1680 l 5865 1680 l 5865 1620 l cp
clip
n 5400 1650 m 5850 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 5703 1620 m 5823 1650 l 5703 1680 l 5703 1650 l 5703 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 1620 m 8073 1650 l 7953 1680 l 8115 1680 l 8115 1620 l cp
clip
n 7650 1650 m 8100 1650 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 1620 m 8073 1650 l 7953 1680 l 7953 1650 l 7953 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3459 1100 m 3576 1063 l 3489 1151 l 3628 1068 l 3597 1017 l cp
clip
n 2850 1500 m 3600 1050 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 3459 1100 m 3576 1063 l 3489 1151 l 3474 1126 l 3459 1100 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4530 1353 m 4500 1473 l 4470 1353 l 4470 1515 l 4530 1515 l cp
clip
n 4500 1050 m 4500 1500 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 4530 1353 m 4500 1473 l 4470 1353 l 4500 1353 l 4530 1353 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 6750 1200 m 6750 1425 l gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman-iso ff 180.00 scf sf
2250 1725 m
gs 1 -1 sc (Input de-multiplexing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4500 1725 m
gs 1 -1 sc (Forwarding) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
6750 1725 m
gs 1 -1 sc (Output queuing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4500 975 m
gs 1 -1 sc (Upper layers \(TCP, UDP, ...\)) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
6750 1125 m
gs 1 -1 sc (Traffic control) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 1241 957 a Ff(Figure)27 b(1:)37 b(Pro)r(cessing)25
b(of)j(net)n(w)n(ork)e(data.)-31 1223 y Fd(\017)41 b
Ff(p)r(olicing)-14 1411 y(Eac)n(h)21 b(net)n(w)n(ork)g(device)i(has)f
(a)g Fc(queuing)j(discipline)g Ff(asso-)-114 1511 y(ciated)k(with)h
(it,)f(whic)n(h)h(con)n(trols)d(ho)n(w)i(pac)n(k)n(ets)e(enqueued)-114
1611 y(on)36 b(that)h(device)f(are)f(treated.)63 b(A)36
b(v)n(ery)f(simple)i(queuing)-114 1710 y(discipline)e(ma)n(y)e(just)i
(consist)f(of)g(a)g(single)g(queue,)i(where)-114 1810
y(all)24 b(pac)n(k)n(ets)f(are)g(stored)h(in)g(the)h(order)e(in)h(whic)
n(h)g(they)h(ha)n(v)n(e)-114 1910 y(b)r(een)32 b(enqueued,)i(and)d
(whic)n(h)h(is)g(emptied)h(as)e(fast)h(as)f(the)-114
2009 y(resp)r(ectiv)n(e)k(device)h(can)f(send.)62 b(See)36
b(\014gure)f(2)g(for)g(suc)n(h)h(a)-114 2109 y(queuing)27
b(discipline)g(without)g(externally)f(visible)h(in)n(ternal)-114
2208 y(structure.)305 2490 y @beginspecial 0 @llx 0 @lly
128 @urx 20 @ury 1280 @rwi @setspecial
%%BeginDocument: single.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: single.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:16:58 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 128 20
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-215.0 127.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3112 m -1000 -1000 l 6712 -1000 l 6712 3112 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 3900 1800 m 5400 1800 l 5400 2100 l 3900 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
5580 1920 m 5700 1950 l 5580 1980 l 5715 1980 l 5715 1920 l cp
clip
n 5400 1950 m 5700 1950 l gs col0 s gr gr

% arrowhead
n 5580 1920 m 5700 1950 l 5580 1980 l 5580 1950 l 5580 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3780 1920 m 3900 1950 l 3780 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3780 1920 m 3900 1950 l 3780 1980 l 3780 1950 l 3780 1920 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4650 2025 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2756 a(Figure)19 b(2:)33 b(A)20 b(simple)f(queuing)h
(discipline)g(without)g(classes.)-14 2986 y(More)25 b(elab)r(orate)h
(queuing)g(disciplines)g(ma)n(y)g(use)h Fc(\014lters)-114
3086 y Ff(to)g(distinguish)g(among)f(di\013eren)n(t)i
Fc(classes)g Ff(of)f(pac)n(k)n(ets)f(and)-114 3185 y(pro)r(cess)21
b(eac)n(h)g(class)g(in)h(a)f(sp)r(eci\014c)h(w)n(a)n(y)-7
b(,)22 b(e.g.)34 b(b)n(y)22 b(giving)f(one)-114 3285
y(class)27 b(priorit)n(y)f(o)n(v)n(er)g(other)h(classes.)-14
3392 y(Figure)g(3)h(sho)n(ws)e(an)i(example)g(of)g(suc)n(h)f(a)h
(queuing)g(dis-)-114 3492 y(cipline.)65 b(Note)37 b(that)g(m)n(ultiple)
g(\014lters)g(ma)n(y)f(map)g(to)h(the)-114 3592 y(same)27
b(class.)-14 3699 y(Queuing)c(disciplines)h(and)f(classes)f(are)h(in)n
(timately)h(tied)-114 3798 y(together:)36 b(the)29 b(presence)e(of)g
(classes)g(and)g(their)h(seman)n(tics)-114 3898 y(are)c(fundamen)n(tal)
i(prop)r(erties)f(of)g(the)h(queuing)f(discipline.)-114
3998 y(In)20 b(con)n(trast)e(to)h(that,)i(\014lters)e(can)g(b)r(e)h
(com)n(bined)f(arbitrarily)-114 4097 y(with)38 b(queuing)g(disciplines)
g(and)g(classes)e(as)i(long)f(as)g(the)-114 4197 y(queuing)d
(discipline)h(has)g(classes)e(at)h(all.)58 b(But)35 b(\015exibilit)n(y)
-114 4297 y(do)r(esn't)28 b(end)g(y)n(et)f({)g(classes)g(normally)f
(don't)i(tak)n(e)f(care)f(of)-114 4396 y(storing)17 b(their)i(pac)n(k)n
(ets)e(themselv)n(es,)j(but)f(they)f(use)g(another)-114
4496 y(queuing)24 b(discipline)g(to)g(tak)n(e)g(care)f(of)h(that.)36
b(That)24 b(queuing)-114 4595 y(discipline)37 b(can)g(b)r(e)g
(arbitrarily)e(c)n(hosen)h(from)g(the)i(set)e(of)-114
4695 y(a)n(v)-5 b(ailable)37 b(queuing)h(disciplines,)i(and)e(it)h(ma)n
(y)e(w)n(ell)h(ha)n(v)n(e)-114 4795 y(classes,)26 b(whic)n(h)i(in)g
(turn)f(use)h(queuing)f(disciplines,)h(etc.)-14 4902
y(Figure)i(4)g(sho)n(ws)g(an)h(example)f(of)h(suc)n(h)g(a)f(stac)n(k:)
43 b(\014rst,)-114 5001 y(there)37 b(is)g(a)f(queuing)h(discipline)g
(with)h(t)n(w)n(o)e(dela)n(y)g(priori-)-114 5101 y(ties.)62
b(P)n(ac)n(k)n(ets)34 b(whic)n(h)i(are)f(selected)h(b)n(y)f(the)i
(\014lter)e(go)h(to)-114 5201 y(the)c(high-priorit)n(y)e(class,)h
(while)h(all)g(other)f(pac)n(k)n(ets)f(go)h(to)-114 5300
y(the)25 b(lo)n(w-priorit)n(y)d(class.)35 b(Whenev)n(er)24
b(there)h(are)f(pac)n(k)n(ets)f(in)-114 5400 y(the)28
b(high-priorit)n(y)f(queue,)h(they)g(are)f(sen)n(t)h(b)r(efore)g(pac)n
(k)n(ets)2061 1223 y(in)35 b(the)g(lo)n(w-priorit)n(y)d(queue)j(\(e.g.)
58 b(the)35 b Fe(sch_prio)c Ff(queu-)2061 1322 y(ing)k(discipline)h(w)n
(orks)d(this)j(w)n(a)n(y\).)60 b(In)35 b(order)g(to)g(prev)n(en)n(t)
2061 1422 y(high-priorit)n(y)21 b(tra\016c)h(from)h(starving)f(lo)n
(w-priorit)n(y)f(tra\016c,)2061 1521 y(w)n(e)28 b(use)h(a)g
Fc(token)i(bucket)g(\014lter)e Ff(\(TBF\),)g(whic)n(h)g(enforces)f(a)
2061 1621 y(rate)f(of)h(at)g(most)g(1)g(Mbps.)39 b(Finally)-7
b(,)28 b(the)h(queuing)f(of)g(lo)n(w-)2061 1721 y(priorit)n(y)19
b(pac)n(k)n(ets)h(is)g(done)h(b)n(y)f(a)h(FIF)n(O)f(queuing)h
(discipline.)2061 1820 y(Note)30 b(that)g(there)g(are)f(b)r(etter)h(w)n
(a)n(ys)f(to)h(accomplish)f(what)2061 1920 y(w)n(e'v)n(e)37
b(done)g(here,)j(e.g.)68 b(b)n(y)37 b(using)h Fc(class-b)l(ase)l(d)i
(queuing)2061 2020 y Ff(\(CBQ\))27 b([5].)2160 2242 y(P)n(ac)n(k)n(ets)
63 b(are)h(enqueued)g(as)h(follo)n(ws:)110 b(when)65
b(the)2061 2342 y Fe(enqueue)26 b Ff(function)j(of)g(a)f(queuing)h
(discipline)g(is)g(called,)g(it)2061 2441 y(runs)d(one)g(\014lter)h
(after)g(the)g(other)f(un)n(til)h(one)g(of)g(them)g(indi-)2061
2541 y(cates)e(a)g(matc)n(h.)36 b(It)26 b(then)h(queues)e(the)h(pac)n
(k)n(et)f(for)g(the)h(cor-)2061 2641 y(resp)r(onding)j(class,)g(whic)n
(h)h(usually)f(means)h(to)f(in)n(v)n(ok)n(e)g(the)2061
2740 y Fe(enqueue)f Ff(function)k(of)f(the)h(queuing)f(discipline)h
(\\o)n(wned")2061 2840 y(b)n(y)23 b(that)h(class.)35
b(P)n(ac)n(k)n(ets)21 b(whic)n(h)j(do)f(not)h(matc)n(h)f(an)n(y)g(of)h
(the)2061 2939 y(\014lters)j(are)g(t)n(ypically)g(attributed)g(to)h
(some)f(default)h(class.)2160 3162 y(T)n(ypically)-7
b(,)23 b(eac)n(h)e(class)g(\\o)n(wns")f(one)i(queue,)h(but)f(it)h(is)f
(in)2061 3261 y(principle)32 b(also)g(p)r(ossible)g(that)h(sev)n(eral)e
(classes)g(share)h(the)2061 3361 y(same)k(queue)g(or)g(ev)n(en)g(that)h
(a)f(single)h(queue)f(is)h(used)f(b)n(y)2061 3461 y(all)29
b(classes)g(of)h(the)g(resp)r(ectiv)n(e)f(queuing)h(discipline.)44
b(Note)2061 3560 y(ho)n(w)n(ev)n(er)18 b(that)i(pac)n(k)n(ets)f(do)h
(not)h(carry)d(an)n(y)i(explicit)h(indica-)2061 3660
y(tion)27 b(of)f(whic)n(h)h(class)f(they)h(w)n(ere)f(attributed)h(to.)
37 b(Queuing)2061 3760 y(disciplines)42 b(that)h(c)n(hange)e(p)r
(er-class)g(information)h(when)2061 3859 y(dequeuing)19
b(pac)n(k)n(ets)g(\(e.g.)34 b(CBQ\))20 b(will)g(therefore)f(not)i(w)n
(ork)2061 3959 y(prop)r(erly)g(if)i(the)f(\\inner")f(queues)h(are)f
(shared,)i(unless)f(they)2061 4058 y(are)28 b(able)h(either)g(to)g(rep)
r(eat)f(the)i(classi\014cation)e(or)g(to)h(pass)2061
4158 y(the)e(classi\014cation)e(result)i(from)g Fe(enqueue)d
Ff(to)i Fe(dequeue)e Ff(b)n(y)2061 4258 y(some)j(other)g(means.)2160
4480 y(Usually)j(when)g(enqueuing)g(pac)n(k)n(ets,)f(the)h(corresp)r
(ond-)2061 4580 y(ing)25 b(\015o)n(w\(s\))g(can)g(b)r(e)h(p)r(oliced,)g
(e.g.)36 b(b)n(y)25 b(discarding)f(pac)n(k)n(ets)2061
4679 y(whic)n(h)j(exceed)g(a)h(certain)f(rate.)2160 4902
y(W)-7 b(e)50 b(will)f(not)g(try)f(to)h(in)n(tro)r(duce)g(new)g
(terminology)2061 5001 y(to)33 b(distinguish)h(among)f(algorithms,)h
(their)g(implemen)n(ta-)2061 5101 y(tions,)27 b(and)g(instances)g(of)h
(suc)n(h)f(elemen)n(ts,)h(but)g(rather)e(use)2061 5201
y(the)19 b(terms)f(queuing)g(discipline,)j(class,)e(and)g(\014lter)f
(through-)2061 5300 y(out)25 b(most)g(of)g(this)g(do)r(cumen)n(t,)h(to)
f(refer)f(to)h(all)g(three)g(lev)n(els)2061 5400 y(of)i(abstraction)f
(at)i(the)g(same)f(time.)1905 5649 y(2)p eop
%%Page: 3 3
3 2 bop 380 992 a @beginspecial 0 @llx 0 @lly 371 @urx
101 @ury 3710 @rwi @setspecial
%%BeginDocument: simple.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: simple.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:33:53 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 371 101
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-53.0 208.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4462 m -1000 -1000 l 8062 -1000 l 8062 4462 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1200 1800 m 1500 1800 l 1500 3150 l 6450 3150 l 6450 1800 l 6750 1800 l
 6750 3450 l 1200 3450 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 2700 m 2700 2700 l 2700 3000 l 2100 3000 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 1800 m 2700 1800 l 2700 2100 l 2100 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 2250 m 2700 2250 l 2700 2550 l 2100 2550 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 2850 m 3000 2400 l 3600 2400 l 3600 2775 l 5700 2775 l 5700 2400 l
 5850 2400 l 5850 2850 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 2250 m 3000 1800 l 3600 1800 l 3600 2175 l 5700 2175 l 5700 1800 l
 5850 1800 l 5850 2250 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2400 m 5400 2400 l 5400 2700 l 3900 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1800 m 5400 1800 l 5400 2100 l 3900 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
1953 1920 m 2073 1950 l 1953 1980 l 2115 1980 l 2115 1920 l cp
clip
n 1800 1950 m 2100 1950 l gs col0 s gr gr

% arrowhead
n 1953 1920 m 2073 1950 l 1953 1980 l 1953 1950 l 1953 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2370 m 2073 2400 l 1953 2430 l 2115 2430 l 2115 2370 l cp
clip
n 1800 2400 m 2100 2400 l gs col0 s gr gr

% arrowhead
n 1953 2370 m 2073 2400 l 1953 2430 l 1953 2400 l 1953 2370 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2820 m 2073 2850 l 1953 2880 l 2115 2880 l 2115 2820 l cp
clip
n 1500 1950 m 1800 1950 l 1800 2850 l 2100 2850 l gs col0 s gr gr

% arrowhead
n 1953 2820 m 2073 2850 l 1953 2880 l 1953 2850 l 1953 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1053 2595 m 1173 2625 l 1053 2655 l 1215 2655 l 1215 2595 l cp
clip
n 900 2625 m 1200 2625 l gs col0 s gr gr

% arrowhead
n 1053 2595 m 1173 2625 l 1053 2655 l 1053 2625 l 1053 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2865 1960 m 2973 2018 l 2850 2018 l 3007 2058 l 3022 2000 l cp
clip
n 2700 1950 m 3000 2025 l gs col0 s gr gr

% arrowhead
n 2865 1960 m 2973 2018 l 2850 2018 l 2857 1989 l 2865 1960 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2855 2739 m 2975 2712 l 2882 2793 l 3027 2720 l 3000 2666 l cp
clip
n 2700 2850 m 3000 2700 l gs col0 s gr gr

% arrowhead
n 2855 2739 m 2975 2712 l 2882 2793 l 2869 2766 l 2855 2739 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2883 2449 m 2980 2525 l 2859 2504 l 3006 2571 l 3031 2516 l cp
clip
n 2700 2400 m 3005 2537 l gs col0 s gr gr

% arrowhead
n 2883 2449 m 2980 2525 l 2859 2504 l 2871 2477 l 2883 2449 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5553 1920 m 5673 1950 l 5553 1980 l 5715 1980 l 5715 1920 l cp
clip
n 5400 1950 m 5700 1950 l gs col0 s gr gr

% arrowhead
n 5553 1920 m 5673 1950 l 5553 1980 l 5553 1950 l 5553 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 1920 m 3873 1950 l 3753 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3753 1920 m 3873 1950 l 3753 1980 l 3753 1950 l 3753 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 2520 m 3873 2550 l 3753 2580 l 3915 2580 l 3915 2520 l cp
clip
n 3600 2550 m 3900 2550 l gs col0 s gr gr

% arrowhead
n 3753 2520 m 3873 2550 l 3753 2580 l 3753 2550 l 3753 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5553 2520 m 5673 2550 l 5553 2580 l 5715 2580 l 5715 2520 l cp
clip
n 5400 2550 m 5700 2550 l gs col0 s gr gr

% arrowhead
n 5553 2520 m 5673 2550 l 5553 2580 l 5553 2550 l 5553 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6903 2595 m 7023 2625 l 6903 2655 l 7065 2655 l 7065 2595 l cp
clip
n 6750 2625 m 7050 2625 l gs col0 s gr gr

% arrowhead
n 6903 2595 m 7023 2625 l 6903 2655 l 6903 2625 l 6903 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6303 2820 m 6423 2850 l 6303 2880 l 6465 2880 l 6465 2820 l cp
clip
n 5850 1950 m 6150 1950 l 6150 2850 l 6450 2850 l gs col0 s gr gr

% arrowhead
n 6303 2820 m 6423 2850 l 6303 2880 l 6303 2850 l 6303 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6003 2520 m 6123 2550 l 6003 2580 l 6165 2580 l 6165 2520 l cp
clip
n 5850 2550 m 6150 2550 l gs col0 s gr gr

% arrowhead
n 6003 2520 m 6123 2550 l 6003 2580 l 6003 2550 l 6003 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2400 2925 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2400 2475 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2400 2025 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2700 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
1500 3375 m
gs 1 -1 sc (Queuing discipline) col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2100 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2025 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2625 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 845 1257 a Ff(Figure)27 b(3:)36 b(A)28 b(simple)g(queuing)
f(discipline)h(with)g(m)n(ultiple)g(classes.)118 2140
y @beginspecial 0 @llx 0 @lly 434 @urx 92 @ury 4340 @rwi
@setspecial
%%BeginDocument: complex.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: complex.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:50:09 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 434 92
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-107.0 199.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
 /DrawEllipse {
	/endangle exch def
	/startangle exch def
	/yrad exch def
	/xrad exch def
	/y exch def
	/x exch def
	/savematrix mtrx currentmatrix def
	x y tr xrad yrad sc 0 0 1 startangle endangle arc
	closepath
	savematrix setmatrix
	} def

/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4312 m -1000 -1000 l 10012 -1000 l 10012 4312 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 4800 1800 m 7500 1800 l 7500 2100 l 4800 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
6978 1920 m 7098 1950 l 6978 1980 l 7140 1980 l 7140 1920 l cp
clip
n 6900 1950 m 7125 1950 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6978 1920 m 7098 1950 l 6978 1980 l 6978 1950 l 6978 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 6450 1875 m 6900 1875 l 6900 2025 l 6450 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 6825 1875 m 6825 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 6750 1875 m 6750 2025 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 4800 2400 m 6300 2400 l 6300 2700 l 4800 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2100 1800 m 2400 1800 l 2400 3000 l 8400 3000 l 8400 1800 l 8700 1800 l
 8700 3300 l 2100 3300 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3000 1800 m 3600 1800 l 3600 2100 l 3000 2100 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2250 m 3900 1800 l 4500 1800 l 4500 2175 l 7800 2175 l 7800 1800 l
 7950 1800 l 7950 2250 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 3900 2850 m 3900 2400 l 4500 2400 l 4500 2775 l 6600 2775 l 6600 2400 l
 6750 2400 l 6750 2850 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Ellipse
n 7275 1950 106 106 0 360 DrawEllipse gs col0 s gr

% Polyline
n 7200 1875 m 7275 1950 l 7350 1950 l gs col0 s gr 
/Times-Roman ff 180.00 scf sf
4875 2025 m
gs 1 -1 sc (TBF, rate = 1 Mbps) col0 sh gr
% Polyline
n 5550 2475 m 6000 2475 l 6000 2625 l 5550 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5925 2475 m 5925 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5850 2475 m 5850 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5700 2475 m 5700 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5775 2475 m 5775 2625 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
6078 2520 m 6198 2550 l 6078 2580 l 6240 2580 l 6240 2520 l cp
clip
n 6000 2550 m 6225 2550 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6078 2520 m 6198 2550 l 6078 2580 l 6078 2550 l 6078 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4875 2625 m
gs 1 -1 sc (FIFO) col0 sh gr
% Polyline
gs  clippath
3753 2595 m 3873 2625 l 3753 2655 l 3915 2655 l 3915 2595 l cp
clip
n 2700 1950 m 2700 2625 l 3900 2625 l gs col0 s gr gr

% arrowhead
n 3753 2595 m 3873 2625 l 3753 2655 l 3753 2625 l 3753 2595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3753 1920 m 3873 1950 l 3753 1980 l 3915 1980 l 3915 1920 l cp
clip
n 3600 1950 m 3900 1950 l gs col0 s gr gr

% arrowhead
n 3753 1920 m 3873 1950 l 3753 1980 l 3753 1950 l 3753 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2853 1920 m 2973 1950 l 2853 1980 l 3015 1980 l 3015 1920 l cp
clip
n 2400 1950 m 3000 1950 l gs col0 s gr gr

% arrowhead
n 2853 1920 m 2973 1950 l 2853 1980 l 2853 1950 l 2853 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
8253 2520 m 8373 2550 l 8253 2580 l 8415 2580 l 8415 2520 l cp
clip
n 7950 1950 m 8100 1950 l 8100 2550 l 8400 2550 l gs col0 s gr gr

% arrowhead
n 8253 2520 m 8373 2550 l 8253 2580 l 8253 2550 l 8253 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4653 1920 m 4773 1950 l 4653 1980 l 4815 1980 l 4815 1920 l cp
clip
n 4500 1950 m 4800 1950 l gs col0 s gr gr

% arrowhead
n 4653 1920 m 4773 1950 l 4653 1980 l 4653 1950 l 4653 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7653 1920 m 7773 1950 l 7653 1980 l 7815 1980 l 7815 1920 l cp
clip
n 7500 1950 m 7800 1950 l gs col0 s gr gr

% arrowhead
n 7653 1920 m 7773 1950 l 7653 1980 l 7653 1950 l 7653 1920 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1953 2520 m 2073 2550 l 1953 2580 l 2115 2580 l 2115 2520 l cp
clip
n 1800 2550 m 2100 2550 l gs col0 s gr gr

% arrowhead
n 1953 2520 m 2073 2550 l 1953 2580 l 1953 2550 l 1953 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4653 2520 m 4773 2550 l 4653 2580 l 4815 2580 l 4815 2520 l cp
clip
n 4500 2550 m 4800 2550 l gs col0 s gr gr

% arrowhead
n 4653 2520 m 4773 2550 l 4653 2580 l 4653 2550 l 4653 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6453 2520 m 6573 2550 l 6453 2580 l 6615 2580 l 6615 2520 l cp
clip
n 6300 2550 m 6600 2550 l gs col0 s gr gr

% arrowhead
n 6453 2520 m 6573 2550 l 6453 2580 l 6453 2550 l 6453 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 2520 m 8073 2550 l 7953 2580 l 8115 2580 l 8115 2520 l cp
clip
n 6750 2550 m 8100 2550 l gs col0 s gr gr

% arrowhead
n 7953 2520 m 8073 2550 l 7953 2580 l 7953 2550 l 7953 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
8853 2520 m 8973 2550 l 8853 2580 l 9015 2580 l 9015 2520 l cp
clip
n 8700 2550 m 9000 2550 l gs col0 s gr gr

% arrowhead
n 8853 2520 m 8973 2550 l 8853 2580 l 8853 2550 l 8853 2520 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2400 3225 m
gs 1 -1 sc (Queuing discipline with two delay priorities) col0 sh gr
/Times-Italic ff 180.00 scf sf
3300 2550 m
gs 1 -1 sc (Default) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3300 2025 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4200 2100 m
gs 1 -1 sc ("high") dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4200 2700 m
gs 1 -1 sc ("low") dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 632 2405 a(Figure)f(4:)36 b(Com)n(bination)27
b(of)h(priorit)n(y)-7 b(,)26 b(TBF,)i(and)f(FIF)n(O)h(queuing)f
(disciplines.)-114 2671 y Fg(3)135 b(Resources)-114 2871
y Ff(Lin)n(ux)19 b(tra\016c)f(con)n(trol)g(is)g(spread)g(o)n(v)n(er)f
(a)i(comparably)e(large)-114 2970 y(n)n(um)n(b)r(er)22
b(of)h(\014les.)35 b(Note)23 b(that)g(all)g(path)g(names)f(are)g
(relativ)n(e)-114 3070 y(to)39 b(the)g(base)g(directory)e(of)i(the)g
(resp)r(ectiv)n(e)g(comp)r(onen)n(t,)-114 3169 y(e.g.)60
b(for)35 b(the)h(Lin)n(ux)f(k)n(ernel)f(this)i(is)f Fe(/usr/src/linux/)
p Ff(,)-114 3269 y(for)27 b(the)h Fe(tc)f Ff(program)e
Fe(iproute2/tc/)p Ff(.)-14 3378 y Fe(tc)42 b Ff(is)i(a)f(user-space)e
(program)h(used)h(to)g(manipulate)-114 3478 y(individual)52
b(tra\016c)f(con)n(trol)f(elemen)n(ts.)109 b(Its)51 b(source)g(is)-114
3578 y(in)36 b(the)f(\014le)h Fe(iproute2-)p Fc(version)p
Fe(.tar.gz)p Ff(,)c(whic)n(h)j(can)g(b)r(e)-114 3677
y(obtained)57 b(from)h Fe(ftp://linux.wauu)o(g.)o(or)o(g/p)o(ub)o(/ne)o
(t/)-114 3777 y(ip-)t(routing/)p Ff(.)-14 3886 y(The)40
b(k)n(ernel)g(co)r(de)g(resides)g(mainly)g(in)h(the)g(directory)-114
3986 y Fe(net/sched/)p Ff(.)95 b(The)48 b(in)n(terfaces)f(b)r(et)n(w)n
(een)i(k)n(ernel)e(traf-)-114 4085 y(\014c)h(con)n(trol)f(elemen)n(ts)i
(and)f(user)f(space)h(programs)e(us-)-114 4185 y(ing)34
b(them)h(are)e(declared)g(in)h Fe(include/linux/pkt)o(_cl)o(s.)-114
4285 y(h)42 b Ff(and)f Fe(include/linux/pkt)o(_s)o(che)o(d.)o(h)p
Ff(.)74 b(Declarations)-114 4384 y(used)20 b(only)f(inside)h(the)g(k)n
(ernel)f(and)g(the)h(de\014nitions)g(of)g(some)-114 4484
y(inline)33 b(functions)g(can)f(b)r(e)h(found)f(in)h
Fe(include/net/pkt_)-114 4584 y(cls.h)26 b Ff(and)h Fe
(include/net/pkt_)o(sch)o(ed)o(.h)p Ff(.)-14 4693 y(The)52
b Fc(rtnetlink)f Ff(mec)n(hanism)g(used)h(for)f(comm)n(unica-)-114
4793 y(tion)42 b(b)r(et)n(w)n(een)h(tra\016c)e(con)n(trol)g(elemen)n
(ts)i(in)f(user-space)-114 4892 y(and)55 b(in)h(the)g(k)n(ernel)f(is)g
(implemen)n(ted)h(in)g Fe(net/core/)-114 4992 y(rtnetlink.c)21
b Ff(and)k Fe(include/linux/rt)o(net)o(li)o(nk)o(.h)p
Ff(.)30 b(rt-)-114 5091 y(netlink)39 b(is)e(based)h(on)g
Fc(netlink)p Ff(,)j(whic)n(h)d(can)f(b)r(e)i(found)f(in)-114
5191 y Fe(net/netlink/)23 b Ff(and)k Fe(include/linux/net)o(li)o(nk)o
(.h)p Ff(.)-14 5300 y(The)g(k)n(ernel)g(source)g(can)g(b)r(e)h
(obtained)f(from)h(the)g(usual)-114 5400 y(w)n(ell-kno)n(wn)43
b(places,)49 b(e.g.)88 b(from)44 b Fe(ftp://ftp.kernel.)2061
2671 y(org/pub/linux/k)o(ern)o(el)o(/v2)o(.1)o(/)p Ff(.)2160
2798 y(Finally)-7 b(,)45 b(the)c(example)g(in)g(section)g(9)f(is)h
(included)h(in)2061 2897 y(the)27 b(A)-7 b(TM)27 b(on)g(Lin)n(ux)f
(distribution,)h(whic)n(h)g(can)g(b)r(e)g(do)n(wn-)2061
2997 y(loaded)50 b(from)h Fe(http://lrcwww.ep)o(fl.)o(ch)o(/li)o(nu)o
(x-)t(a)o(tm)o(/)2061 3097 y(dist.html)p Ff(.)2061 3518
y Fg(4)134 b(T)-11 b(erminology)2061 3751 y Ff(Unfortunately)k(,)24
b(the)g(terminology)f(used)h(to)f(describ)r(e)h(traf-)2061
3850 y(\014c)36 b(con)n(trol)f(elemen)n(ts)h(is)g(far)g(from)g
(consisten)n(t)f(in)i(litera-)2061 3950 y(ture,)22 b(and)f(there)g(are)
f(some)g(v)-5 b(ariations)20 b(ev)n(en)h(within)g(Lin)n(ux)2061
4050 y(tra\016c)27 b(con)n(trol.)35 b(The)28 b(purp)r(ose)f(of)h(this)g
(section)f(is)g(to)h(help)2061 4149 y(to)f(put)h(things)g(in)n(to)f
(con)n(text.)2160 4277 y(Figure)34 b(5)h(sho)n(ws)e(the)i(arc)n
(hitectural)f(mo)r(dels)g(and)h(the)2061 4376 y(terminology)i(used)h
(in)h(the)g(IETF)f(groups)g(\\in)n(tserv")e([6])2061
4476 y(and)18 b(\\di\013serv")g([7)o(,)h(8],)h(and)f(ho)n(w)f(elemen)n
(ts)g(of)h(Lin)n(ux)g(tra\016c)2061 4575 y(con)n(trol)33
b(are)g(related)h(to)g(them.)58 b(Note)34 b(that)h(classes)e(pla)n(y)
2061 4675 y(an)27 b(am)n(biv)-5 b(alen)n(t)27 b(role,)h(b)r(ecause)f
(they)h(determine)g(the)g(\014nal)2061 4775 y(outcome)e(of)g(a)h
(classi\014cation)e(and)i(they)g(can)f(also)f(b)r(e)j(part)2061
4874 y(of)e(the)g(mec)n(hanism)g(that)g(implemen)n(ts)h(a)f(certain)f
(queuing)2061 4974 y(or)h(sc)n(heduling)h(b)r(eha)n(viour.)2160
5101 y(T)-7 b(able)32 b(1)g(summarizes)e(the)j(k)n(eyw)n(ords)d(used)i
(at)f(the)i Fe(tc)2061 5201 y Ff(command)e(line,)j(the)e(\014le)g
(names)g(used)g(in)g(the)g(k)n(ernel)g(\(in)2061 5300
y Fe(net/sched/)p Ff(\),)d(and)j(the)h(\014le)f(names)g(used)g(in)h
(the)f(source)2061 5400 y(of)27 b Fe(tc)p Ff(.)1905 5649
y(3)p eop
%%Page: 4 4
4 3 bop 272 4663 a @beginspecial 0 @llx 0 @lly 397 @urx
487 @ury 3970 @rwi @setspecial
%%BeginDocument: term3.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: term3.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov 30 13:19:24 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 397 487
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-36.0 532.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 9851 m -1000 -1000 l 8212 -1000 l 8212 9851 l cp clip
 0.06000 0.06000 sc
% Polyline
n 4725 1200 m 6075 1200 l 7050 1200 l 7050 8850 l 2250 8850 l 2250 7050 l
 4725 6150 l 4725 1875 l cp gs col7 0.70 shd ef gr 
% Polyline
n 3375 1200 m 3375 1950 l 3375 6075 l 6300 8250 l 2850 8250 l 2850 7050 l
 2250 5850 l 2250 1200 l cp gs col7 0.90 shd ef gr 
% Polyline
7.500 slw
n 3000 7200 m 5250 7200 l 5250 8100 l 3000 8100 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5925 5550 m 5850 5550 l 5850 5100 l 6750 5100 l 6750 5250 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5625 7800 m 5550 7800 l 5550 7200 l 6150 7200 l 6150 7350 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3525 7650 m 3450 7650 l 3450 7350 l 4950 7350 l 4950 7500 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 7800 m 3525 7800 l 3525 7500 l 5025 7500 l 5025 7650 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 5700 m 5925 5700 l 5925 5250 l 6825 5250 l 6825 5400 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5700 7950 m 5625 7950 l 5625 7350 l 6225 7350 l 6225 7500 l gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5100 7650 m 3600 7650 l 3600 7950 l 5100 7950 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
0.000 slw
n 3525 1200 m 4575 1200 l 4650 6750 l 4800 7500 l 5175 7575 l 5175 8025 l
 4275 8025 l 4275 7800 l 4500 7500 l 3525 4425 l cp gs col7 0.80 shd ef gr 
% Polyline
7.500 slw
n 2400 5250 m 3300 5250 l 3300 5700 l 2400 5700 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 1350 m 3300 1350 l 3300 1800 l 2400 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 5400 m 6900 5400 l 6900 5850 l 6000 5850 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 5700 7500 m 6300 7500 l 6300 8100 l 5700 8100 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 4500 7650 m 5100 7650 l 5100 7950 l 4350 7950 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 8700 m 2400 7200 l 2700 7200 l 2700 8400 l 6600 8400 l 6600 7200 l
 6900 7200 l 6900 8700 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 2400 3675 m 3300 3675 l 3300 4125 l 2400 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 1350 m 4500 1350 l 4500 1800 l 3600 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 1350 m 6900 1350 l 6900 1800 l 6000 1800 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 4800 3675 m 5700 3675 l 5700 4125 l 4800 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 6000 3675 m 6900 3675 l 6900 4125 l 6000 4125 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
n 3600 3000 m 4500 3000 l 4500 3450 l 3600 3450 l cp gs col7 1.00 shd ef gr gs col0 s gr 
% Polyline
gs  clippath
2280 5445 m 2400 5475 l 2280 5505 l 2415 5505 l 2415 5445 l cp
clip
n 2100 5475 m 2400 5475 l gs col0 s gr gr

% arrowhead
n 2280 5445 m 2400 5475 l 2280 5505 l 2280 5475 l 2280 5445 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2850 5625 m
gs 1 -1 sc (classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2850 5475 m
gs 1 -1 sc (\(BA\)) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
2280 1545 m 2400 1575 l 2280 1605 l 2415 1605 l 2415 1545 l cp
clip
n 2100 1575 m 2400 1575 l gs col0 s gr gr

% arrowhead
n 2280 1545 m 2400 1575 l 2280 1605 l 2280 1575 l 2280 1545 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
2850 1650 m
gs 1 -1 sc (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
7080 5445 m 7200 5475 l 7080 5505 l 7215 5505 l 7215 5445 l cp
clip
n 6900 5475 m 7200 5475 l gs col0 s gr gr

% arrowhead
n 7080 5445 m 7200 5475 l 7080 5505 l 7080 5475 l 7080 5445 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
6450 5700 m
gs 1 -1 sc (Mechanism) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
6480 7620 m 6600 7650 l 6480 7680 l 6615 7680 l 6615 7620 l cp
clip
n 6300 7650 m 6600 7650 l gs col0 s gr gr

% arrowhead
n 6480 7620 m 6600 7650 l 6480 7680 l 6480 7650 l 6480 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 7470 m 6600 7500 l 6480 7530 l 6615 7530 l 6615 7470 l cp
clip
n 6300 7500 m 6600 7500 l gs col0 s gr gr

% arrowhead
n 6480 7470 m 6600 7500 l 6480 7530 l 6480 7500 l 6480 7470 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 7770 m 6600 7800 l 6480 7830 l 6615 7830 l 6615 7770 l cp
clip
n 6300 7800 m 6600 7800 l gs col0 s gr gr

% arrowhead
n 6480 7770 m 6600 7800 l 6480 7830 l 6480 7800 l 6480 7770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5505 7620 m 5625 7650 l 5505 7680 l 5640 7680 l 5640 7620 l cp
clip
n 5250 7650 m 5625 7650 l gs col0 s gr gr

% arrowhead
n 5505 7620 m 5625 7650 l 5505 7680 l 5505 7650 l 5505 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 7470 m 5550 7500 l 5430 7530 l 5565 7530 l 5565 7470 l cp
clip
n 5250 7500 m 5550 7500 l gs col0 s gr gr

% arrowhead
n 5430 7470 m 5550 7500 l 5430 7530 l 5430 7500 l 5430 7470 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5580 7770 m 5700 7800 l 5580 7830 l 5715 7830 l 5715 7770 l cp
clip
n 5250 7800 m 5700 7800 l gs col0 s gr gr

% arrowhead
n 5580 7770 m 5700 7800 l 5580 7830 l 5580 7800 l 5580 7770 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
6000 7875 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
2880 7620 m 3000 7650 l 2880 7680 l 3015 7680 l 3015 7620 l cp
clip
n 2700 7650 m 3000 7650 l gs col0 s gr gr

% arrowhead
n 2880 7620 m 3000 7650 l 2880 7680 l 2880 7650 l 2880 7620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2280 7845 m 2400 7875 l 2280 7905 l 2415 7905 l 2415 7845 l cp
clip
n 2100 7875 m 2400 7875 l gs col0 s gr gr

% arrowhead
n 2280 7845 m 2400 7875 l 2280 7905 l 2280 7875 l 2280 7845 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 4425 7500 m 4350 7650 l gs col0 s gr 
% Polyline
n 4350 7350 m 4275 7500 l gs col0 s gr 
/Times-Roman ff 180.00 scf sf
3300 7650 m
gs 1 -1 sc  90.0 rot (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4050 7875 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4800 7875 m
gs 1 -1 sc (Police) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
600 7800 m
gs 1 -1 sc (Linux kernel) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 5550 m
gs 1 -1 sc (Diffserv node) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 1650 m
gs 1 -1 sc (Intserv node) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 3975 m
gs 1 -1 sc (traffic) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 3750 m
gs 1 -1 sc (Diffserv) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 4200 m
gs 1 -1 sc (conditioner) col0 sh gr
/Times-Bold ff 180.00 scf sf
600 8025 m
gs 1 -1 sc (traffic control) col0 sh gr
% Polyline
gs  clippath
3480 1545 m 3600 1575 l 3480 1605 l 3615 1605 l 3615 1545 l cp
clip
n 3300 1575 m 3600 1575 l gs col0 s gr gr

% arrowhead
n 3480 1545 m 3600 1575 l 3480 1605 l 3480 1575 l 3480 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 1695 m 3600 1725 l 3480 1755 l 3615 1755 l 3615 1695 l cp
clip
n 3300 1725 m 3600 1725 l gs col0 s gr gr

% arrowhead
n 3480 1695 m 3600 1725 l 3480 1755 l 3480 1725 l 3480 1695 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 1395 m 3600 1425 l 3480 1455 l 3615 1455 l 3615 1395 l cp
clip
n 3300 1425 m 3600 1425 l gs col0 s gr gr

% arrowhead
n 3480 1395 m 3600 1425 l 3480 1455 l 3480 1425 l 3480 1395 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2280 3870 m 2400 3900 l 2280 3930 l 2415 3930 l 2415 3870 l cp
clip
n 2100 3900 m 2400 3900 l gs col0 s gr gr

% arrowhead
n 2280 3870 m 2400 3900 l 2280 3930 l 2280 3900 l 2280 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3045 m 3600 3075 l 3480 3105 l 3615 3105 l 3615 3045 l cp
clip
n 2700 3675 m 2700 3075 l 3600 3075 l gs col0 s gr gr

% arrowhead
n 3480 3045 m 3600 3075 l 3480 3105 l 3480 3075 l 3480 3045 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5805 5445 m 5925 5475 l 5805 5505 l 5940 5505 l 5940 5445 l cp
clip
n 3300 5475 m 5925 5475 l gs col0 s gr gr

% arrowhead
n 5805 5445 m 5925 5475 l 5805 5505 l 5805 5475 l 5805 5445 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 5595 m 6000 5625 l 5880 5655 l 6015 5655 l 6015 5595 l cp
clip
n 3300 5625 m 6000 5625 l gs col0 s gr gr

% arrowhead
n 5880 5595 m 6000 5625 l 5880 5655 l 5880 5625 l 5880 5595 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5730 5295 m 5850 5325 l 5730 5355 l 5865 5355 l 5865 5295 l cp
clip
n 3300 5325 m 5850 5325 l gs col0 s gr gr

% arrowhead
n 5730 5295 m 5850 5325 l 5730 5355 l 5730 5325 l 5730 5295 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1545 m 6000 1575 l 5880 1605 l 6015 1605 l 6015 1545 l cp
clip
n 4500 1575 m 6000 1575 l gs col0 s gr gr

% arrowhead
n 5880 1545 m 6000 1575 l 5880 1605 l 5880 1575 l 5880 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7080 1545 m 7200 1575 l 7080 1605 l 7215 1605 l 7215 1545 l cp
clip
n 6900 1575 m 7200 1575 l gs col0 s gr gr

% arrowhead
n 7080 1545 m 7200 1575 l 7080 1605 l 7080 1575 l 7080 1545 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1395 m 6000 1425 l 5880 1455 l 6015 1455 l 6015 1395 l cp
clip
n 4500 1425 m 6000 1425 l gs col0 s gr gr

% arrowhead
n 5880 1395 m 6000 1425 l 5880 1455 l 5880 1425 l 5880 1395 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 1695 m 6000 1725 l 5880 1755 l 6015 1755 l 6015 1695 l cp
clip
n 4500 1725 m 6000 1725 l gs col0 s gr gr

% arrowhead
n 5880 1695 m 6000 1725 l 5880 1755 l 5880 1725 l 5880 1695 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 4020 m 6000 4050 l 5880 4080 l 6015 4080 l 6015 4020 l cp
clip
n 5700 4050 m 6000 4050 l gs col0 s gr gr

% arrowhead
n 5880 4020 m 6000 4050 l 5880 4080 l 5880 4050 l 5880 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 3870 m 4800 3900 l 4680 3930 l 4815 3930 l 4815 3870 l cp
clip
n 3300 3900 m 4800 3900 l gs col0 s gr gr

% arrowhead
n 4680 3870 m 4800 3900 l 4680 3930 l 4680 3900 l 4680 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 3720 m 4800 3750 l 4680 3780 l 4815 3780 l 4815 3720 l cp
clip
n 3300 3750 m 4800 3750 l gs col0 s gr gr

% arrowhead
n 4680 3720 m 4800 3750 l 4680 3780 l 4680 3750 l 4680 3720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4680 4020 m 4800 4050 l 4680 4080 l 4815 4080 l 4815 4020 l cp
clip
n 3300 4050 m 4800 4050 l gs col0 s gr gr

% arrowhead
n 4680 4020 m 4800 4050 l 4680 4080 l 4680 4050 l 4680 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6330 3555 m 6300 3675 l 6270 3555 l 6270 3690 l 6330 3690 l cp
clip
n 4500 3375 m 6300 3375 l 6300 3675 l gs col0 s gr gr

% arrowhead
n 6330 3555 m 6300 3675 l 6270 3555 l 6300 3555 l 6330 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6480 3555 m 6450 3675 l 6420 3555 l 6420 3690 l 6480 3690 l cp
clip
n 4500 3225 m 6450 3225 l 6450 3675 l gs col0 s gr gr

% arrowhead
n 6480 3555 m 6450 3675 l 6420 3555 l 6450 3555 l 6480 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6630 3555 m 6600 3675 l 6570 3555 l 6570 3690 l 6630 3690 l cp
clip
n 4500 3075 m 6600 3075 l 6600 3675 l gs col0 s gr gr

% arrowhead
n 6630 3555 m 6600 3675 l 6570 3555 l 6600 3555 l 6630 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5130 3555 m 5100 3675 l 5070 3555 l 5070 3690 l 5130 3690 l cp
clip
n 5100 3375 m 5100 3675 l gs col0 s gr gr

% arrowhead
n 5130 3555 m 5100 3675 l 5070 3555 l 5100 3555 l 5130 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5280 3555 m 5250 3675 l 5220 3555 l 5220 3690 l 5280 3690 l cp
clip
n 5250 3225 m 5250 3675 l gs col0 s gr gr

% arrowhead
n 5280 3555 m 5250 3675 l 5220 3555 l 5250 3555 l 5280 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 3555 m 5400 3675 l 5370 3555 l 5370 3690 l 5430 3690 l cp
clip
n 5400 3075 m 5400 3675 l gs col0 s gr gr

% arrowhead
n 5430 3555 m 5400 3675 l 5370 3555 l 5400 3555 l 5430 3555 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 3720 m 6000 3750 l 5880 3780 l 6015 3780 l 6015 3720 l cp
clip
n 5700 3750 m 6000 3750 l gs col0 s gr gr

% arrowhead
n 5880 3720 m 6000 3750 l 5880 3780 l 5880 3750 l 5880 3720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 3870 m 6000 3900 l 5880 3930 l 6015 3930 l 6015 3870 l cp
clip
n 5700 3900 m 6000 3900 l gs col0 s gr gr

% arrowhead
n 5880 3870 m 6000 3900 l 5880 3930 l 5880 3900 l 5880 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7080 3870 m 7200 3900 l 7080 3930 l 7215 3930 l 7215 3870 l cp
clip
n 6900 3900 m 7200 3900 l gs col0 s gr gr

% arrowhead
n 7080 3870 m 7200 3900 l 7080 3930 l 7080 3900 l 7080 3870 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3195 m 3600 3225 l 3480 3255 l 3615 3255 l 3615 3195 l cp
clip
n 2850 3675 m 2850 3225 l 3600 3225 l gs col0 s gr gr

% arrowhead
n 3480 3195 m 3600 3225 l 3480 3255 l 3480 3225 l 3480 3195 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3480 3345 m 3600 3375 l 3480 3405 l 3615 3405 l 3615 3345 l cp
clip
n 3000 3675 m 3000 3375 l 3600 3375 l gs col0 s gr gr

% arrowhead
n 3480 3345 m 3600 3375 l 3480 3405 l 3480 3375 l 3480 3345 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 3525 1800 m 3825 2175 l gs col0 s gr 
% Polyline
n 4425 2175 m 4950 1800 l gs col0 s gr 
% Polyline
n 5775 4125 m 5550 4575 l gs col0 s gr 
% Polyline
n 4125 4125 m 4275 4500 l gs col0 s gr 
% Polyline
n 4425 4800 m 4350 5250 l gs col0 s gr 
% Polyline
gs  clippath
7080 7845 m 7200 7875 l 7080 7905 l 7215 7905 l 7215 7845 l cp
clip
n 6900 7875 m 7200 7875 l gs col0 s gr gr

% arrowhead
n 7080 7845 m 7200 7875 l 7080 7905 l 7080 7875 l 7080 7845 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
4050 1650 m
gs 1 -1 sc (Policing) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2850 3975 m
gs 1 -1 sc (Classifier) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 1575 m
gs 1 -1 sc (Packet) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 1725 m
gs 1 -1 sc (scheduler) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 4050 m
gs 1 -1 sc (dropper) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
5250 3975 m
gs 1 -1 sc (Marker) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
6450 3900 m
gs 1 -1 sc (Shaper/) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4050 3300 m
gs 1 -1 sc (Meter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4125 2325 m
gs 1 -1 sc (Flows) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 4725 m
gs 1 -1 sc (\(Behaviour\) aggregates) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
4050 900 m
gs 1 -1 sc (Metering) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
5850 900 m
gs 1 -1 sc (Queuing/scheduling) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 8625 m
gs 1 -1 sc (Queuing discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 900 m
gs 1 -1 sc (Classification) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -19 4929 a Ff(Figure)27 b(5:)36 b(Relation)28
b(of)f(elemen)n(ts)h(of)f(the)h(in)n(tserv)f(and)g(di\013serv)h(arc)n
(hitecture)e(to)h(tra\016c)h(con)n(trol)e(in)i(the)g(Lin)n(ux)f(k)n
(ernel.)1905 5649 y(4)p eop
%%Page: 5 5
5 4 bop 939 153 1975 4 v 937 253 4 100 v 1174 223 a Ff(Elemen)n(t)p
1706 253 V 284 w Fe(tc)27 b Ff(k)n(eyw)n(ord)p 2220 253
V 98 w(File)h(name)f(pre\014x)p 2912 253 V 937 353 V
1706 353 V 2220 353 V 2272 323 a(Kernel)p 2560 353 V
181 w Fe(tc)p 2912 353 V 939 356 1975 4 v 937 456 4 100
v 988 426 a Ff(Queuing)h(discipline)99 b Fe(qdisc)328
b(sch_)213 b(q_)p 2912 456 V 937 555 V 988 525 a Ff(Class)578
b Fe(class)295 b Ff(\()p Fe(sch_)p Ff(\))150 b(\()p Fe(q_)p
Ff(\))p 2912 555 V 937 655 V 988 625 a(Filter)567 b Fe(filter)284
b(cls_)213 b(f_)p 2912 655 V 939 658 1975 4 v 709 890
a Ff(T)-7 b(able)28 b(1:)36 b(Keyw)n(ords)26 b(and)h(\014le)h(names)f
(used)g(for)h(tra\016c)f(con)n(trol)f(elemen)n(ts.)-114
1155 y Fg(5)135 b(Queuing)45 b(disciplines)-114 1337
y Ff(Eac)n(h)72 b(queuing)h(discipline)h(pro)n(vides)e(the)h(follo)n
(wing)-114 1437 y(set)g(of)g(functions)g(to)f(con)n(trol)g(its)h(op)r
(eration)f(\(see)-114 1536 y Fe(struct)41 b(Qdisc_ops)24
b Ff(in)k Fe(include/net/pkt_)o(sc)o(hed)o(.h)o Ff(\):)-114
1690 y Fe(enqueue)39 b Ff(enqueues)34 b(a)g(pac)n(k)n(et)g(with)h(the)g
(queuing)g(disci-)52 1790 y(pline.)54 b(If)33 b(the)h(queuing)f
(discipline)g(has)g(classes,)g(the)52 1889 y Fe(enqueue)17
b Ff(function)k(\014rst)f(selects)f(a)h(class)f(and)h(then)g(in-)52
1989 y(v)n(ok)n(es)h(the)j Fe(enqueue)c Ff(function)k(of)f(the)g
(corresp)r(onding)52 2089 y(queuing)k(discipline)h(for)f(further)h
(enqueuing.)-114 2249 y Fe(dequeue)39 b Ff(returns)h(the)i(next)g(pac)n
(k)n(et)f(eligible)g(for)g(send-)52 2348 y(ing.)47 b(If)32
b(the)g(queuing)f(discipline)g(has)g(no)g(pac)n(k)n(ets)f(to)52
2448 y(send)21 b(\(e.g.)34 b(b)r(ecause)21 b(the)g(queue)f(is)h(empt)n
(y)g(or)f(b)r(ecause)52 2548 y(they're)34 b(not)h(sc)n(heduled)f(to)g
(b)r(e)h(sen)n(t)f(y)n(et\),)i Fe(dequeue)52 2647 y Ff(returns)27
b(NULL.)-114 2807 y Fe(requeue)39 b Ff(puts)47 b(a)f(pac)n(k)n(et)f
(bac)n(k)h(in)n(to)g(the)h(queue)g(after)52 2907 y(dequeuing)40
b(it)h(with)g Fe(dequeue)p Ff(.)72 b(This)41 b(di\013ers)f(from)52
3006 y Fe(enqueue)e Ff(in)j(that)h(the)f(pac)n(k)n(et)f(should)h(b)r(e)
g(queued)52 3106 y(at)30 b(exactly)f(the)h(place)g(from)f(whic)n(h)h
(it)g(w)n(as)f(remo)n(v)n(ed)52 3206 y(b)n(y)g Fe(dequeue)p
Ff(,)e(and)j(that)f(it)h(should)g(not)f(b)r(e)h(included)52
3305 y(in)42 b(the)f(statistics)g(of)g(cum)n(ulativ)n(e)g(tra\016c)f
(that)i(has)52 3405 y(passed)21 b(the)i(queue,)g(b)r(ecause)e(that)h(w)
n(as)f(already)g(done)52 3504 y(in)28 b(the)g Fe(enqueue)d
Ff(function.)-114 3664 y Fe(drop)40 b Ff(drops)27 b(one)g(pac)n(k)n(et)
f(from)i(the)g(queue.)-114 3824 y Fe(init)40 b Ff(initializes)18
b(and)h(con\014gures)e(the)j(queuing)e(discipline.)-114
3984 y Fe(reset)39 b Ff(returns)46 b(the)g(queuing)g(discipline)g(to)g
(its)g(initial)52 4084 y(state.)34 b(All)21 b(queues)f(are)f(cleared,)h
(timers)g(are)f(stopp)r(ed,)52 4184 y(etc.)35 b(Also,)24
b(the)f Fe(reset)e Ff(functions)i(of)g(all)f(queuing)h(dis-)52
4283 y(ciplines)37 b(asso)r(ciated)e(with)j(classes)d(of)i(this)g
(queuing)52 4383 y(discipline)28 b(are)e(in)n(v)n(ok)n(ed.)-114
4543 y Fe(destroy)39 b Ff(remo)n(v)n(es)e(a)j(queuing)f(discipline.)74
b(It)40 b(remo)n(v)n(es)52 4642 y(all)24 b(classes)f(and)h(p)r(ossibly)
g(also)f(all)h(\014lters,)g(cancels)g(all)52 4742 y(p)r(ending)i(ev)n
(en)n(ts)e(and)h(returns)g(all)g(resources)e(held)j(b)n(y)52
4842 y(the)c(queuing)g(discipline)g(\(except)g(for)f(the)i(data)e
(struc-)52 4941 y(ture)28 b(describing)e(the)i(queuing)g(discipline)f
(itself)6 b(\).)-114 5101 y Fe(dump)40 b Ff(returns)32
b(diagnostic)g(data)h(used)g(for)f(main)n(tenance.)52
5201 y(T)n(ypically)-7 b(,)42 b(the)e Fe(dump)e Ff(functions)i(returns)
f(all)h(su\016-)52 5300 y(cien)n(tly)d(imp)r(ortan)n(t)g
(con\014guration)e(and)i(state)g(v)-5 b(ari-)52 5400
y(ables.)2160 1155 y(F)e(or)20 b(all)f(these)h(functions,)i(queuing)e
(disciplines)f(are)g(usu-)2061 1255 y(ally)45 b(referenced)h(b)n(y)g(a)
g(p)r(oin)n(ter)f(to)h(the)h(corresp)r(onding)2061 1355
y Fe(struct)41 b(Qdisc)p Ff(.)2160 1463 y(When)30 b(a)e(pac)n(k)n(et)g
(is)g(enqueued)h(on)g(an)f(in)n(terface)g(\()p Fe(dev_)2061
1562 y(queue_xmit)22 b Ff(in)k Fe(net/core/dev.c)p Ff(\),)c(the)k
Fe(enqueue)e Ff(func-)2061 1662 y(tion)i(of)g(the)h(device's)f(queuing)
g(discipline)g(\(\014eld)h Fe(qdisc)d Ff(of)2061 1762
y Fe(struct)41 b(device)28 b Ff(in)j Fe(include/linux/n)o(etd)o(ev)o
(ice)o(.c)o Ff(\))25 b(is)2061 1861 y(in)n(v)n(ok)n(ed.)52
b(Afterw)n(ards,)34 b Fe(dev_queue_xmit)28 b Ff(calls)k
Fe(qdisc_)2061 1961 y(wakeup)19 b Ff(in)j Fe(include/net/pkt_)o(sc)o
(hed)o(.h)15 b Ff(on)21 b(that)h(device)2061 2061 y(to)27
b(try)g(sending)h(the)g(pac)n(k)n(et)e(that)i(w)n(as)f(just)h
(enqueued.)2160 2169 y Fe(qdisc_wakeup)33 b Ff(immediately)38
b(calls)f Fe(qdisc_restart)2061 2268 y Ff(in)49 b Fe(net/sched/sch_ge)o
(ne)o(ri)o(c.c)o Ff(,)f(whic)n(h)h(is)g(the)g(main)2061
2368 y(function)23 b(to)f(p)r(oll)h(queuing)f(disciplines)h(and)f(to)h
(send)f(pac)n(k-)2061 2468 y(ets.)34 b Fe(qdisc_restart)13
b Ff(\014rst)18 b(tries)h(to)f(obtain)g(a)h(pac)n(k)n(et)e(from)2061
2567 y(the)i(queuing)g(discipline)g(of)g(the)h(device,)h(and)d(if)i(it)
g(succeeds,)2061 2667 y(it)28 b(in)n(v)n(ok)n(es)e(the)j(device's)f
Fe(hard_start_xmit)22 b Ff(function)28 b(to)2061 2767
y(actually)19 b(send)g(the)h(pac)n(k)n(et.)33 b(If)21
b(sending)e(fails)g(for)g(some)g(rea-)2061 2866 y(son,)29
b(the)h(pac)n(k)n(et)f(is)h(returned)f(to)g(the)h(queuing)g(discipline)
2061 2966 y(via)d(its)g Fe(requeue)e Ff(function.)2160
3074 y Fe(qdisc_wakeup)31 b Ff(can)j(also)g(b)r(e)i(in)n(v)n(ok)n(ed)e
(b)n(y)h(a)f(queuing)2061 3174 y(discipline)g(when)g(that)g(queuing)g
(discipline)g(notices)g(that)2061 3273 y(a)c(pac)n(k)n(et)f(ma)n(y)h(b)
r(e)h(due)f(for)g(sending,)h(e.g.)45 b(on)30 b(expiration)2061
3373 y(of)38 b(a)g(timer.)69 b(TBF)38 b(is)g(an)g(example)g(of)g(suc)n
(h)g(a)g(queuing)2061 3473 y(discipline.)48 b Fe(qdisc_restart)27
b Ff(is)k(also)f(called)i(via)e Fe(qdisc_)2061 3572 y(run_queues)25
b Ff(from)30 b Fe(net_bh)d Ff(in)j Fe(net/core/dev.c)p
Ff(.)38 b Fe(net_)2061 3672 y(bh)g Ff(is)h(the)h(\\b)r(ottom-half)6
b(")38 b(handler)h(of)g(the)h(net)n(w)n(orking)2061 3771
y(stac)n(k)f(and)g(is)h(executed)g(whenev)n(er)f(pac)n(k)n(ets)g(ha)n
(v)n(e)g(b)r(een)2061 3871 y(queued)27 b(up)h(for)f(further)h(pro)r
(cessing.)2160 3979 y(Figure)h(6)g(illustrates)g(the)g(pro)r(cedure.)41
b(F)-7 b(or)29 b(simplicit)n(y)-7 b(,)2061 4079 y(calls)29
b(made)h(b)n(y)g(the)h(queuing)f(discipline)g(\(e.g.)45
b(for)29 b(classi-)2061 4179 y(\014cation\))e(are)g(not)g(sho)n(wn.)
2160 4287 y(Note)40 b(that)f(queuing)g(disciplines)g(nev)n(er)g(mak)n
(e)f(direct)2061 4386 y(calls)22 b(to)h(deliv)n(ery)f(functions.)35
b(Instead,)24 b(they)f(ha)n(v)n(e)f(to)g(w)n(ait)2061
4486 y(un)n(til)28 b(they)f(are)g(p)r(olled.)2160 4594
y(If)c(a)e(queuing)h(discipline)h(is)f(compiled)g(in)n(to)f(the)i(the)f
(k)n(er-)2061 4694 y(nel,)e(it)f(should)f(b)r(e)h(registered)e(b)n(y)i
Fe(pktsched_init)13 b Ff(in)19 b Fe(net/)2061 4794 y(sched/sch_api.c)o
Ff(.)29 b(Alternativ)n(ely)-7 b(,)21 b(is)g(can)f(also)f(b)r(e)i
(regis-)2061 4893 y(tered)29 b(from)f(some)h(other)f(place)h(using)g
Fe(register_qdisc)p Ff(,)2061 4993 y(e.g.)59 b(from)35
b(the)h Fe(init_module)31 b Ff(function)36 b(if)g(the)f(queuing)2061
5092 y(discipline)27 b(is)h(compiled)g(as)e(a)i(mo)r(dule.)2160
5201 y(When)49 b(creating)d(an)i(instance)g(of)f(a)h(queuing)f(disci-)
2061 5300 y(pline,)d(a)39 b(v)n(ector)g(of)i(options)e(\(t)n(yp)r(e)i
Fe(struct)g(rtattr)g(*)p Ff(,)2061 5400 y(declared)29
b(in)i Fe(include/linux/rt)o(net)o(li)o(nk)o(.h)p Ff(\))24
b(is)31 b(passed)1905 5649 y(5)p eop
%%Page: 6 6
6 5 bop -15 1975 a @beginspecial 0 @llx 0 @lly 205 @urx
219 @ury 2050 @rwi @setspecial
%%BeginDocument: send.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: send.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:07:33 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 205 219
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-18.0 342.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6700 m -1000 -1000 l 4715 -1000 l 4715 6700 l cp clip
 0.06000 0.06000 sc
/Courier ff 180.00 scf sf
1500 4050 m
gs 1 -1 sc (qdisc_restart) col0 sh gr
/Courier ff 180.00 scf sf
1500 3450 m
gs 1 -1 sc (qdisc_wakeup) col0 sh gr
/Courier ff 180.00 scf sf
2475 4425 m
gs 1 -1 sc (_dequeue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2475 4425 m
gs 1 -1 sc (qdisc) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2100 4725 m
gs 1 -1 sc (hard_start_xmit) col0 sh gr
/Courier ff 180.00 scf sf
1200 2625 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
1200 2625 m
gs 1 -1 sc (qdisc) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
300 2175 m
gs 1 -1 sc (dev_queue_xmit) col0 sh gr
/Courier ff 180.00 scf sf
450 5700 m
gs 1 -1 sc (net_bh) col0 sh gr
% Polyline
7.500 slw
gs  clippath
1305 3345 m 1425 3375 l 1305 3405 l 1440 3405 l 1440 3345 l cp
clip
n 450 2250 m 450 3375 l 1425 3375 l gs col0 s gr gr

% arrowhead
n 1305 3345 m 1425 3375 l 1305 3405 l 1305 3375 l 1305 3345 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2130 3180 m 2100 3300 l 2070 3180 l 2070 3315 l 2130 3315 l cp
clip
n 3300 3000 m 2100 3000 l 2100 3300 l gs col0 s gr gr

% arrowhead
n 2130 3180 m 2100 3300 l 2070 3180 l 2100 3180 l 2130 3180 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2130 3780 m 2100 3900 l 2070 3780 l 2070 3915 l 2130 3915 l cp
clip
n 2100 3525 m 2100 3900 l gs col0 s gr gr

% arrowhead
n 2130 3780 m 2100 3900 l 2070 3780 l 2100 3780 l 2130 3780 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1905 4620 m 2025 4650 l 1905 4680 l 2040 4680 l 2040 4620 l cp
clip
n 1650 4125 m 1650 4650 l 2025 4650 l gs col0 s gr gr

% arrowhead
n 1905 4620 m 2025 4650 l 1905 4680 l 1905 4650 l 1905 4620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1905 4320 m 2025 4350 l 1905 4380 l 2040 4380 l 2040 4320 l cp
clip
n 1650 4350 m 2025 4350 l gs col0 s gr gr

% arrowhead
n 1905 4320 m 2025 4350 l 1905 4380 l 1905 4350 l 1905 4320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3300 2700 m 3300 3300 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
630 2520 m 750 2550 l 630 2580 l 765 2580 l 765 2520 l cp
clip
n 450 2550 m 750 2550 l gs col0 s gr gr

% arrowhead
n 630 2520 m 750 2550 l 630 2580 l 630 2550 l 630 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [15 45] 45 sd
gs  clippath
2880 2520 m 3000 2550 l 2880 2580 l 3015 2580 l 3015 2520 l cp
clip
n 2100 2550 m 3000 2550 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 2880 2520 m 3000 2550 l 2880 2580 l 2880 2550 l 2880 2520 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1305 3945 m 1425 3975 l 1305 4005 l 1440 4005 l 1440 3945 l cp
clip
n 825 4950 m 825 3975 l 1425 3975 l gs col0 s gr gr

% arrowhead
n 1305 3945 m 1425 3975 l 1305 4005 l 1305 3975 l 1305 3945 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
795 5295 m 825 5175 l 855 5295 l 855 5160 l 795 5160 l cp
clip
n 825 5550 m 825 5175 l gs col0 s gr gr

% arrowhead
n 795 5295 m 825 5175 l 855 5295 l 825 5295 l 795 5295 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
3075 2625 m
gs 1 -1 sc (Timer) col0 sh gr
/Courier ff 180.00 scf sf
300 5100 m
gs 1 -1 sc (qdisc_run_queues) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2241 a Ff(Figure)22 b(6:)33 b(F)-7
b(unctions)23 b(called)f(when)g(enqueuing)g(and)g(send-)-114
2340 y(ing)27 b(pac)n(k)n(ets.)-114 2614 y(to)35 b(the)g
Fe(init)e Ff(function.)59 b(Eac)n(h)33 b(option)i(is)f(enco)r(ded)h
(with)-114 2713 y(its)51 b(t)n(yp)r(e,)56 b(the)51 b(length)f(of)h(the)
f(v)-5 b(alue,)57 b(and)50 b(the)h(v)-5 b(alue)-114 2813
y(\(i.e.)72 b(zero)38 b(or)h(more)f(data)h(b)n(ytes\).)71
b(Option)39 b(t)n(yp)r(es)h(and)-114 2913 y(the)f(data)e(structures)h
(used)g(for)g(v)-5 b(alues)38 b(are)f(declared)g(in)-114
3012 y Fe(include/linux/pk)o(t_s)o(ch)o(ed)o(.h)p Ff(.)k(The)32
b(option)f(v)n(ector)f(is)-114 3112 y(parsed)39 b(b)n(y)h(calling)f
Fe(rtattr_parse)p Ff(,)f(whic)n(h)i(returns)g(an)-114
3212 y(arra)n(y)25 b(of)i(p)r(oin)n(ters)g(to)h(the)f(individual)h
(elemen)n(ts,)f(indexed)-114 3311 y(b)n(y)37 b(the)h(option)f(t)n(yp)r
(e.)66 b(The)37 b(length)g(and)h(con)n(ten)n(t)e(of)i(an)-114
3411 y(option)29 b(can)g(b)r(e)h(accessed)e(via)h(the)h(macros)e
Fe(RTA_PAYLOAD)-114 3511 y Ff(and)f Fe(RTA_DATA)p Ff(,)e(resp)r(ectiv)n
(ely)-7 b(.)-14 3614 y(Option)23 b(v)n(ectors)e(are)h(passed)h(b)r(et)n
(w)n(een)g(user-space)f(pro-)-114 3714 y(grams)i(and)h(the)h(k)n(ernel)
e(using)h(the)h(rtnetlink)g(mec)n(hanism.)-114 3814 y(Explaining)19
b(rtnetlink)i(and)f(the)h(underlying)f(netlink)h(is)f(b)r(e-)-114
3913 y(y)n(ond)38 b(the)g(scop)r(e)g(of)g(this)h(pap)r(er.)68
b(The)38 b(lo)r(cation)g(of)g(the)-114 4013 y(resp)r(ectiv)n(e)27
b(source)f(\014les)i(is)f(describ)r(ed)h(in)f(section)h(3.)-14
4117 y(Instances)35 b(of)h(queuing)g(disciplines)g(are)f(iden)n
(ti\014ed)i(b)n(y)-114 4216 y(32-bit)d(n)n(um)n(b)r(ers,)h(whic)n(h)g
(are)e(split)i(in)n(to)f(a)g(ma)5 b(jor)34 b(and)g(a)-114
4316 y(minor)d(n)n(um)n(b)r(er.)48 b(The)31 b(usual)g(notation)g(is)g
Fc(major)p Fe(:)p Fc(minor)p Ff(.)-114 4416 y(F)-7 b(or)29
b(queuing)h(disciplines,)h(the)f(minor)g(n)n(um)n(b)r(er)f(is)h(alw)n
(a)n(ys)-114 4515 y(zero.)40 b(Note)29 b(that)h(these)f(ma)5
b(jor)27 b(and)i(minor)g(n)n(um)n(b)r(ers)f(are)-114
4615 y(not)39 b(related)f(to)h(the)g(n)n(um)n(b)r(ers)g(used)g(for)f
(device)h(sp)r(ecial)-114 4714 y(\014les.)-114 5011 y
Fg(6)135 b(Classes)-114 5201 y Ff(Classes)20 b(can)h(b)r(e)h(iden)n
(ti\014ed)g(in)g(t)n(w)n(o)f(w)n(a)n(ys:)32 b(\(1\))22
b(b)n(y)f(the)h Fc(class)-114 5300 y(ID)p Ff(,)27 b(whic)n(h)h(is)f
(assigned)f(b)n(y)h(the)h(user,)f(and)g(\(2\))h(b)n(y)f(the)h
Fc(in-)-114 5400 y(ternal)23 b(ID)p Ff(,)d(whic)n(h)g(is)f(assigned)g
(b)n(y)h(the)g(queuing)g(discipline.)2061 233 y(The)33
b(latter)f(has)h(to)f(b)r(e)i(unique)f(within)h(a)e(giv)n(en)g(queuing)
2061 333 y(discipline)c(and)g(ma)n(y)g(b)r(e)g(an)g(index,)g(a)g(p)r
(oin)n(ter,)g(etc.)39 b(Note)2061 432 y(that)f(the)g(v)-5
b(alue)38 b(0)g(is)g(sp)r(ecial)f(and)h(means)g(\\not)f(found")2061
532 y(when)31 b(returned)f(b)n(y)h Fe(get)p Ff(.)46 b(The)31
b(class)f(ID)h(is)g(of)g(t)n(yp)r(e)g Fe(u32)p Ff(,)2061
632 y(while)f(the)g(in)n(ternal)f(ID)h(is)g(of)g(t)n(yp)r(e)g
Fe(unsigned)40 b(long)p Ff(.)i(In-)2061 731 y(side)25
b(the)g(k)n(ernel,)g(the)g(usual)g(w)n(a)n(y)f(to)h(refer)f(to)h(a)f
(class)g(is)h(b)n(y)2061 831 y(its)d(in)n(ternal)g(ID.)h(Only)g
Fe(get)e Ff(and)h Fe(change)f Ff(use)h(the)h(class)f(ID)2061
930 y(instead.)2160 1034 y(Note)39 b(that,)j(although)d(the)g(curren)n
(t)f(implemen)n(tation)2061 1134 y(do)r(es)33 b(not)h(mak)n(e)f(use)g
(of)h(this)g(p)r(ossibilit)n(y)-7 b(,)35 b(m)n(ultiple)f(class)2061
1233 y(IDs)f(ma)n(y)f(map)g(to)h(the)g(same)f(in)n(ternal)g(class)g
(ID.)h(In)g(this)2061 1333 y(case,)52 b(the)d(class)e(ID)i(con)n(v)n
(eys)d(additional)i(information)2061 1433 y(from)27 b(the)h
(classi\014er)e(to)i(the)g(queuing)f(discipline)h(or)e(class.)2160
1536 y(Class)42 b(IDs)i(are)e(structured)g(lik)n(e)h(queuing)g
(discipline)2061 1636 y(IDs,)35 b(with)g(the)f(ma)5 b(jor)33
b(n)n(um)n(b)r(er)g(corresp)r(onding)f(to)i(their)2061
1735 y(instance)45 b(of)g(the)h(queuing)f(discipline,)50
b(and)45 b(the)h(minor)2061 1835 y(n)n(um)n(b)r(er)27
b(iden)n(tifying)h(the)g(class)e(within)j(that)f(instance.)2160
1939 y(Queuing)70 b(disciplines)g(with)g(classes)f(pro)n(vide)g(the)
2061 2038 y(follo)n(wing)60 b(set)h(of)g(functions)g(to)g(manipulate)g
(classes)2061 2138 y(\(see)71 b Fe(struct)41 b(Qdisc_class_ops)66
b Ff(in)72 b Fe(include/net/)2061 2237 y(pkt_sched.h)p
Ff(\):)2061 2415 y Fe(graft)39 b Ff(attac)n(hes)d(a)h(new)g(queuing)g
(discipline)g(to)g(a)g(class)2227 2515 y(and)g(returns)g(the)h
(previously)e(used)i(queuing)f(disci-)2227 2615 y(pline.)2061
2797 y Fe(get)j Ff(lo)r(oks)29 b(up)i(a)f(class)f(b)n(y)h(its)g(class)f
(ID)i(and)f(returns)g(the)2227 2896 y(in)n(ternal)23
b(ID.)h(If)g(the)f(class)g(main)n(tains)g(a)g(usage)f(coun)n(t,)2227
2996 y Fe(get)k Ff(should)h(incremen)n(t)h(it.)2061 3178
y Fe(put)40 b Ff(is)29 b(in)n(v)n(ok)n(ed)e(whenev)n(er)h(a)h(class)f
(that)h(w)n(as)f(previously)2227 3277 y(referenced)g(with)h
Fe(get)f Ff(is)g(dereferenced.)40 b(If)29 b(the)g(class)2227
3377 y(main)n(tains)h(a)g(usage)f(coun)n(t,)i Fe(put)e
Ff(should)h(decremen)n(t)2227 3477 y(it.)42 b(If)30 b(the)g(usage)e
(coun)n(t)h(reac)n(hes)f(zero,)h Fe(put)f Ff(ma)n(y)h(re-)2227
3576 y(mo)n(v)n(e)d(the)i(class.)2061 3758 y Fe(change)39
b Ff(c)n(hanges)19 b(the)i(prop)r(erties)e(of)i(a)f(class)f(and)i(it)g
(is)f(also)2227 3858 y(used)37 b(to)h(create)e(new)i(classes,)h(where)e
(applicable)f({)2227 3958 y(some)19 b(queuing)g(disciplines)h(ha)n(v)n
(e)e(a)h(constan)n(t)g(n)n(um)n(b)r(er)2227 4057 y(of)37
b(classes)g(whic)n(h)g(are)g(created)g(when)g(the)h(queuing)2227
4157 y(discipline)28 b(is)f(initialized.)2061 4339 y
Fe(delete)39 b Ff(handles)30 b(requests)f(to)h(delete)h(a)f(class.)44
b(It)30 b(c)n(hec)n(ks)2227 4438 y(if)37 b(the)f(class)g(is)g(not)g(in)
h(use,)h(and)f(de-activ)-5 b(ates)35 b(and)2227 4538
y(remo)n(v)n(es)25 b(it)j(in)g(this)g(case.)2061 4720
y Fe(walk)40 b Ff(iterates)30 b(o)n(v)n(er)f(all)i(classes)e(of)i(a)g
(queuing)g(discipline)2227 4820 y(and)22 b(in)n(v)n(ok)n(es)f(a)h
(callbac)n(k)g(function)h(for)f(eac)n(h)g(of)g(them.)2227
4919 y(This)42 b(is)h(used)g(to)f(obtain)g(diagnostic)g(data)g(for)g
(all)2227 5019 y(classes)26 b(of)i(a)f(queuing)g(discipline.)2061
5201 y Fe(tcf_chain)37 b Ff(returns)23 b(a)g(p)r(oin)n(ter)g(to)g(the)h
(anc)n(hor)e(of)h(the)h(list)2227 5300 y(of)j(\014lters)g(asso)r
(ciated)f(with)h(a)g(class.)36 b(This)27 b(is)g(used)g(to)2227
5400 y(manipulate)g(the)h(\014lter)g(list.)1905 5649
y(6)p eop
%%Page: 7 7
7 6 bop -114 233 a Fe(bind_tcf)38 b Ff(binds)d(an)g(instance)f(of)h(a)g
(\014lter)f(to)h(the)g(class.)52 333 y Fe(bind_tcf)48
b Ff(is)i(usually)h(iden)n(tical)f(to)h Fe(get)p Ff(,)k(except)52
432 y(when)29 b(the)h(queuing)f(discipline)h(needs)f(to)g(b)r(e)h(able)
f(to)52 532 y(explicitly)19 b(refuse)f(class)f(deletion.)34
b(\(E.g.)g Fe(sch_cbq)15 b Ff(re-)52 632 y(fuses)31 b(to)g(delete)g
(classes)e(while)i(they)g(are)f(referenced)52 731 y(b)n(y)d
(\014lters.\))-114 920 y Fe(unbind_tcf)37 b Ff(remo)n(v)n(es)26
b(an)h(instance)g(of)h(a)f(\014lter)g(from)g(the)52 1020
y(class.)36 b Fe(unbind_tcf)24 b Ff(is)j(usually)g(iden)n(tical)h(to)f
Fe(put)p Ff(.)-114 1209 y Fe(dump_class)37 b Ff(returns)32
b(diagnostic)e(data,)j(lik)n(e)e Fe(dump)g Ff(do)r(es)52
1308 y(for)c(queuing)g(disciplines.)-14 1492 y(Classes)59
b(are)h(selected)h(in)g(the)h Fe(enqueue)c Ff(function)-114
1591 y(of)46 b(the)g(queuing)g(discipline)h(usually)e(b)n(y)h(in)n(v)n
(oking)f Fe(tc_)-114 1691 y(classify)16 b Ff(in)k Fe(include/net/pkt_)o
(cls)o(.h)o Ff(,)c(whic)n(h)j(returns)-114 1791 y(a)24
b Fe(struct)41 b(tcf_result)21 b Ff(\(in)k Fe(include/net/pkt_)o(cl)o
(s.)o(h)p Ff(\))-114 1890 y(con)n(taining)30 b(the)i(class)e(ID)i(\()p
Fe(classid)p Ff(\))d(and)j(p)r(ossibly)f(also)-114 1990
y(the)49 b(in)n(ternal)g(ID)h(\()p Fe(class)p Ff(\),)j(see)48
b(section)h(7.)101 b(The)49 b(re-)-114 2089 y(turn)25
b(v)-5 b(alue)26 b(of)f Fe(tc_classify)c Ff(is)k(either)g
Fd(\000)p Ff(1)f(\()p Fe(TC_POLICE_)-114 2189 y(UNSPEC)p
Ff(\))k(or)i(the)g(p)r(olicing)g(decision)g(returned)g(b)n(y)g(the)g
(\014l-)-114 2289 y(ter)21 b(\(see)g(section)g(8\).)34
b(The)21 b(return)g(v)-5 b(alues)21 b(of)g Fe(tc_classify)-114
2388 y Ff(are)27 b(declared)f(in)i Fe(include/linux/pkt)o(_c)o(ls)o(.h)
p Ff(.)-14 2494 y(There)42 b(is)g(also)f(a)h(shortcut)h(for)f
(classi\014cation)f(of)h(lo-)-114 2593 y(cally)f(generated)f(tra\016c:)
63 b(if)42 b Fe(skb-)t(>)t(priority)36 b Ff(con)n(tains)-114
2693 y(the)h(ID)h(of)f(a)g(class)f(of)h(the)g(curren)n(t)f(queuing)h
(discipline,)-114 2793 y(that)48 b(class)f(is)g(used)h(and)f(no)h
(further)f(classi\014cation)g(is)-114 2892 y(attempted.)115
b Fe(skb-)t(>)t(priority)49 b Ff(\()p Fe(struct)41 b(sk_buff)51
b Ff(in)-114 2992 y Fe(include/linux/sk)o(buf)o(f.)o(h)p
Ff(\))32 b(is)38 b(set)f(to)h Fe(sk-)t(>)t(priority)-114
3091 y Ff(\()p Fe(struct)j(sock)20 b Ff(in)h Fe(include/net/soc)o(k.h)o
Ff(\))15 b(when)21 b(lo)r(cally)-114 3191 y(generating)29
b(a)g(pac)n(k)n(et.)43 b Fe(sk-)t(>)t(priority)26 b Ff(can)j(b)r(e)i
(set)f(with)-114 3291 y(the)21 b Fe(SO_PRIORITY)16 b
Ff(so)r(c)n(k)n(et)j(option)i(\()p Fe(sock_setsockopt)14
b Ff(in)-114 3390 y Fe(net/core/sock.c)p Ff(\).)65 b(This)39
b(t)n(yp)r(e)g(of)f(classi\014cation)g(can)-114 3490
y(b)r(e)28 b(useful)h(for)e(implemen)n(ting)h(functionalit)n(y)g(lik)n
(e)g(the)g(one)-114 3590 y(pro)n(vided)f(b)n(y)g(Arequipa)g([9)o(].)-14
3695 y(Note)k(that)h(k)n(ernels)e(up)i(to)g(at)f(least)g(2.1.130)f
(limit)i(the)-114 3795 y(v)-5 b(alue)25 b(that)g(can)g(b)r(e)g(set)g
(with)h Fe(SO_PRIORITY)20 b Ff(to)25 b(the)h(range)-114
3894 y(0)14 b Fb(:)g(:)g(:)f Ff(7,)42 b(so)c(that)h(this)h(shortcut)e
(classi\014cation)g(do)r(es)g(not)-114 3994 y(w)n(ork.)73
b(Ho)n(w)n(ev)n(er,)41 b(all)e(queuing)h(disciplines)g(supp)r(ort)g
(it.)-114 4093 y(Also)21 b(note)h(that)g Fe(skb-)t(>)t(priority)17
b Ff(can)22 b(con)n(tain)f(other)g(pri-)-114 4193 y(orit)n(y)j(v)-5
b(alues,)25 b(e.g.)35 b(the)26 b(priorit)n(y)d(obtained)i(from)f(the)i
(TOS)-114 4293 y(b)n(yte)34 b(of)f(the)h(IPv4)f(header.)54
b(All)34 b(suc)n(h)g(v)-5 b(alues)33 b(are)g(b)r(elo)n(w)-114
4392 y(the)28 b(smallest)f(v)-5 b(alid)28 b(class)e(n)n(um)n(b)r(er,)i
(65536.)-14 4498 y(After)j(selecting)f(the)h(class,)g(the)g
Fe(enqueue)d Ff(function)j(of)-114 4597 y(the)46 b(resp)r(ectiv)n(e)e
(inner)i(queuing)f(discipline)h(is)f(in)n(v)n(ok)n(ed.)-114
4697 y(The)29 b(w)n(a)n(y)e(ho)n(w)h(this)h(queuing)g(discipline)g(is)f
(stored)g(in)h(the)-114 4797 y(data)j(structure\(s\))g(asso)r(ciated)e
(with)j(the)f(class)g(can)f(v)-5 b(ary)-114 4896 y(among)27
b(queuing)g(discipline)h(implemen)n(tations.)-14 5001
y(The)k(option)g(v)n(ector)f(passed)g(to)h(the)h Fe(change)d
Ff(function)-114 5101 y(is)45 b(of)g(the)g(same)f(structure)h(as)f(the)
h(v)n(ectors)e(passed)i(to)-114 5201 y(the)34 b Fe(init)f
Ff(functions)h(of)g(queuing)g(disciplines.)56 b(The)34
b(cor-)-114 5300 y(resp)r(onding)28 b(declarations)g(are)g(also)h(in)g
Fe(include/linux/)-114 5400 y(pkt_sched.h)p Ff(.)2061
233 y Fg(7)134 b(Filters)2061 415 y Ff(Filters)28 b(are)g(used)h(b)n(y)
f(a)h(queuing)f(discipline)h(to)g(assign)e(in-)2061 514
y(coming)34 b(pac)n(k)n(ets)h(to)g(one)g(of)g(its)h(classes.)59
b(This)35 b(happ)r(ens)2061 614 y(during)i(the)g(enqueue)h(op)r
(eration)e(of)h(the)h(queuing)f(disci-)2061 714 y(pline.)2067
2115 y @beginspecial 0 @llx 0 @lly 227 @urx 155 @ury
2270 @rwi @setspecial
%%BeginDocument: filter.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: filter.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Wed Oct 28 20:55:07 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 227 155
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-17.0 190.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 4162 m -1000 -1000 l 5062 -1000 l 5062 4162 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 1500 1800 m 3150 1800 l 3150 2100 l 1500 2100 l cp gs col0 s gr 
/Times-Roman ff 180.00 scf sf
1575 2025 m
gs 1 -1 sc (Element) col0 sh gr
/Times-Roman ff 180.00 scf sf
3075 2025 m
gs 1 -1 sc (handle=X) dup sw pop neg 0 rm  col0 sh gr
% Polyline
gs  clippath
1830 2253 m 1800 2373 l 1770 2253 l 1770 2415 l 1830 2415 l cp
clip
n 1800 2100 m 1800 2400 l gs col0 s gr gr

% arrowhead
n 1830 2253 m 1800 2373 l 1770 2253 l 1800 2253 l 1830 2253 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1800 2700 m 1800 2850 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 1800 2850 m 1800 3150 l gs col0 s gr  [] 0 sd
% Polyline
n 1500 2400 m 3150 2400 l 3150 2700 l 1500 2700 l cp gs col0 s gr 
/Times-Roman ff 180.00 scf sf
1575 2625 m
gs 1 -1 sc (Element) col0 sh gr
/Times-Roman ff 180.00 scf sf
3075 2625 m
gs 1 -1 sc (handle=Y) dup sw pop neg 0 rm  col0 sh gr
% Polyline
gs  clippath
753 1320 m 873 1350 l 753 1380 l 915 1380 l 915 1320 l cp
clip
n 600 900 m 600 1350 l 900 1350 l gs col0 s gr gr

% arrowhead
n 753 1320 m 873 1350 l 753 1380 l 753 1350 l 753 1320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 300 600 m 2100 600 l 2100 900 l 300 900 l cp gs col0 s gr 
% Polyline
n 900 1200 m 2100 1200 l 2100 1500 l 900 1500 l cp gs col0 s gr 
% Polyline
gs  clippath
2253 1320 m 2373 1350 l 2253 1380 l 2415 1380 l 2415 1320 l cp
clip
n 2100 1350 m 2400 1350 l gs col0 s gr gr

% arrowhead
n 2253 1320 m 2373 1350 l 2253 1380 l 2253 1350 l 2253 1320 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 2400 1200 m 3600 1200 l 3600 1500 l 2400 1500 l cp gs col0 s gr 
% Polyline
n 3600 1350 m 3750 1350 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3750 1350 m 4050 1350 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
1353 1920 m 1473 1950 l 1353 1980 l 1515 1980 l 1515 1920 l cp
clip
n 1200 1500 m 1200 1950 l 1500 1950 l gs col0 s gr gr

% arrowhead
n 1353 1920 m 1473 1950 l 1353 1980 l 1353 1950 l 1353 1920 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
1200 825 m
gs 1 -1 sc (Qdisc/class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
975 1425 m
gs 1 -1 sc (Filter) col0 sh gr
/Times-Roman ff 180.00 scf sf
2025 1425 m
gs 1 -1 sc (prio=1) dup sw pop neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2475 1425 m
gs 1 -1 sc (Filter) col0 sh gr
/Times-Roman ff 180.00 scf sf
3525 1425 m
gs 1 -1 sc (prio=2) dup sw pop neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2061 2380 a(Figure)29 b(7:)40 b(Structure)29
b(of)h(\014lters,)g(with)g(a)f(list)h(of)f(elemen)n(ts)2061
2480 y(b)r(elonging)24 b(to)h(the)g(\014rst)g(\014lter,)h(and)e(no)h
(in)n(ternal)g(structure)2061 2580 y(for)i(the)h(second)f(\014lter.)
2160 2756 y(Filters)32 b(are)g(k)n(ept)g(in)h(\014lter)f(lists)g(whic)n
(h)h(can)f(b)r(e)g(main-)2061 2856 y(tained)38 b(p)r(er)g(queuing)g
(discipline)g(or)g(p)r(er)g(class,)i(dep)r(end-)2061
2956 y(ing)45 b(on)g(the)h(design)g(of)f(the)h(queuing)g(discipline.)91
b(Fil-)2061 3055 y(ter)33 b(lists)g(are)f(ordered)g(b)n(y)g(priorit)n
(y)-7 b(,)34 b(in)f(ascending)f(order.)2061 3155 y(F)-7
b(urthermore,)38 b(the)f(en)n(tries)f(are)g(k)n(ey)n(ed)g(b)n(y)g(the)h
(proto)r(col)2061 3254 y(for)f(whic)n(h)h(they)g(apply)-7
b(.)65 b(Those)36 b(proto)r(col)g(n)n(um)n(b)r(ers)g(are)2061
3354 y(also)27 b(used)i(in)g Fe(skb-)t(>)t(protocol)23
b Ff(and)29 b(they)f(are)g(de\014ned)h(in)2061 3454 y
Fe(include/linux/i)o(f_e)o(th)o(er.)o(h)p Ff(.)74 b(Filters)42
b(for)f(the)i(same)2061 3553 y(proto)r(col)36 b(on)h(the)h(same)f
(\014lter)g(list)h(m)n(ust)g(ha)n(v)n(e)e(di\013eren)n(t)2061
3653 y(priorities.)2160 3753 y(A)41 b(\014lter)f(ma)n(y)f(also)h(ha)n
(v)n(e)f(an)h(in)n(ternal)f(structure:)62 b(it)2061 3852
y(ma)n(y)29 b(con)n(trol)g(in)n(ternal)h(elemen)n(ts,)h(whic)n(h)f(are)
f(then)i(refer-)2061 3952 y(enced)22 b(b)n(y)g(32-bit)g(handles.)34
b(These)22 b(handles)g(are)g(similar)f(to)2061 4051 y(class)f(IDs,)j
(but)f(they)g(are)e(not)h(split)h(in)n(to)f(ma)5 b(jor)20
b(and)i(minor)2061 4151 y(n)n(um)n(b)r(ers.)53 b(Handle)33
b(0)g(alw)n(a)n(ys)e(refers)h(to)h(the)g(\014lter)h(itself.)2061
4251 y(Lik)n(e)28 b(classes,)h(also)f(\014lters)i(ha)n(v)n(e)e(in)n
(ternal)h(IDs,)h(whic)n(h)f(are)2061 4350 y(obtained)c(with)g(the)h
Fe(get)e Ff(function.)36 b(The)26 b(in)n(ternal)e(organi-)2061
4450 y(zation)30 b(of)h(a)f(\014lter)h(can)f(b)r(e)i(arbitrary)-7
b(.)44 b(Figure)30 b(7)h(sho)n(ws)e(a)2061 4550 y(\014lter)e(with)h(a)f
(list)h(of)g(in)n(ternal)f(elemen)n(ts.)2160 4649 y(Filters)38
b(are)e(con)n(trolled)g(via)h(the)h(follo)n(wing)f(functions)2061
4749 y(\(see)42 b Fe(struct)f(tcf_proto_ops)d Ff(in)43
b Fe(include/net/pkt)o(_)2061 4848 y(cls.h)p Ff(\):)2061
5001 y Fe(classify)38 b Ff(p)r(erforms)20 b(the)i(classi\014cation)d
(and)i(returns)f(one)2227 5101 y(of)k(the)h Fe(TC_POLICE_)p
Fb(:)14 b(:)g(:)20 b Ff(v)-5 b(alues)24 b(describ)r(ed)g(in)g(section)
2227 5201 y(8.)35 b(If)25 b(the)g(result)g(is)f(not)h
Fe(TC_POLICE_UNSPEC)p Ff(,)19 b(it)25 b(also)2227 5300
y(returns)h(the)h(selected)g(class)e(ID)j(and)e(optionally)g(also)2227
5400 y(the)g(in)n(ternal)g(class)g(ID)h(in)f(the)h Fe(struct)41
b(tcf_result)1905 5649 y Ff(7)p eop
%%Page: 8 8
8 7 bop 52 233 a Ff(p)r(oin)n(ted)39 b(to)h(b)n(y)e Fe(res)p
Ff(.)71 b(If)40 b(the)f(in)n(ternal)g(class)f(ID)i(is)52
333 y(omitted,)26 b(the)g(v)-5 b(alue)25 b(zero)g(m)n(ust)g(b)r(e)h
(stored)e(in)i Fe(res-)t(>)52 432 y(class)p Ff(.)-114
597 y Fe(init)40 b Ff(initializes)27 b(the)h(\014lter.)-114
762 y Fe(destroy)39 b Ff(is)48 b(in)n(v)n(ok)n(ed)e(to)i(remo)n(v)n(e)f
(a)h(\014lter.)98 b(Also)48 b(the)52 861 y(queuing)d(disciplines)g
Fe(sch_cbq)d Ff(and)j Fe(sch_atm)e Ff(use)52 961 y Fe(destroy)d
Ff(to)j(remo)n(v)n(e)f(stale)g(\014lters)h(when)g(deleting)52
1061 y(classes.)-114 1225 y Fe(get)d Ff(lo)r(oks)35 b(up)g(a)g
(\014lter)g(elemen)n(t)h(b)n(y)f(its)g(handle)g(and)g(re-)52
1325 y(turns)28 b(the)f(in)n(ternal)g(\014lter)h(ID.)-114
1490 y Fe(put)40 b Ff(is)33 b(in)n(v)n(ok)n(ed)e(when)i(a)g(\014lter)f
(elemen)n(t)h(previously)f(ref-)52 1589 y(erenced)27
b(with)h Fe(get)f Ff(is)g(no)g(longer)g(used.)-114 1754
y Fe(change)39 b Ff(con\014gures)20 b(a)h(new)h(\014lter)g(or)e(c)n
(hanges)h(the)h(prop)r(er-)52 1853 y(ties)30 b(of)g(an)f(existing)g
(\014lter.)44 b(Con\014guration)28 b(parame-)52 1953
y(ters)20 b(are)g(passed)f(with)j(the)f(same)e(mec)n(hanism)i(as)e
(used)52 2053 y(for)27 b(queuing)g(disciplines)h(and)f(classes.)-114
2217 y Fe(delete)39 b Ff(deletes)31 b(an)g(elemen)n(t)g(of)g(a)g
(\014lter.)48 b(T)-7 b(o)31 b(delete)g(the)52 2317 y(en)n(tire)h
(\014lter,)h Fe(destroy)d Ff(has)i(to)g(b)r(e)h(used.)50
b(This)33 b(dis-)52 2417 y(tinction)g(is)g(transparen)n(t)e(to)i(the)g
(user)f(and)h(is)g(made)52 2516 y(in)28 b Fe(net/sched/cls_ap)o(i:)o
(tc_)o(ct)o(l_t)o(fi)o(lt)o(er)p Ff(.)-114 2681 y Fe(walk)40
b Ff(iterates)24 b(o)n(v)n(er)f(all)h(elemen)n(ts)g(of)h(a)f(\014lter)h
(and)f(in)n(v)n(ok)n(es)52 2781 y(a)c(callbac)n(k)f(function)i(for)e
(eac)n(h)h(of)g(them.)35 b(This)20 b(is)g(used)52 2880
y(to)28 b(obtain)f(diagnostic)f(data.)-114 3045 y Fe(dump)40
b Ff(returns)26 b(diagnostic)f(data)h(for)g(a)g(\014lter)g(or)g(one)g
(of)g(its)52 3145 y(elemen)n(ts.)-14 3308 y(Note)48 b(that)g(the)g(co)r
(de)g(for)f(the)i(RSVP)f(\014lters)f(is)h(in)-114 3407
y Fe(cls_rsvp.h)p Ff(.)94 b Fe(cls_rsvp.c)44 b Ff(and)k
Fe(cls_rsvp6.c)c Ff(only)-114 3507 y(con)n(tain)39 b(the)i(righ)n(t)e
(set)h(of)g(includes)g(and)g(set)g(some)f(pa-)-114 3607
y(rameters)30 b(\(mainly)h Fe(RSVP_DST_LEN)p Ff(\),)c(whic)n(h)k(con)n
(trol)f(the)-114 3706 y(t)n(yp)r(e)e(of)f(\014lter)h(generated)e(from)i
Fe(cls_rsvp.h)p Ff(.)-14 3806 y(Filters)d(v)-5 b(ary)24
b(in)h(the)g(scop)r(e)g(of)g(pac)n(k)n(ets)f(their)h(instances)-114
3906 y(can)g(classify:)36 b(When)26 b(using)g(the)g Fe(cls_fw)d
Ff(and)j Fe(cls_route)-114 4005 y Ff(\014lters,)21 b(one)d(instance)h
(p)r(er)g(queuing)g(discipline)g(can)g(classify)-114
4105 y(pac)n(k)n(ets)37 b(for)h(all)g(classes.)67 b(Those)38
b(\014lters)g(tak)n(e)g(the)g(class)-114 4204 y(ID)e(from)g(the)g(pac)n
(k)n(et)f(descriptor,)i(where)e(it)h(w)n(as)f(stored)-114
4304 y(b)r(efore)40 b(b)n(y)h(some)f(other)g(en)n(tit)n(y)h(in)g(the)g
(proto)r(col)e(stac)n(k,)-114 4404 y(e.g.)74 b Fe(cls_fw)38
b Ff(uses)i(the)h(marking)e(functionalit)n(y)h(of)g(the)-114
4503 y(\014rew)n(all)29 b(co)r(de.)46 b(W)-7 b(e)30 b(call)g(suc)n(h)h
(\014lters)f Fc(generic)p Ff(.)46 b(They)30 b(are)-114
4603 y(illustrated)d(in)h(\014gure)f(8.)-14 4703 y(The)g(other)g(t)n
(yp)r(e)g(of)g(\014lters)g(\()p Fe(cls_rsvp)e Ff(and)i
Fe(cls_u32)p Ff(\))-114 4802 y(needs)i(one)f(or)g(more)g(instances)g
(of)h(the)g(\014lter)f(or)g(its)h(in)n(ter-)-114 4902
y(nal)34 b(elemen)n(ts)g(p)r(er)f(class.)55 b(W)-7 b(e)35
b(call)e(suc)n(h)h(\014lters)g Fc(sp)l(e)l(ci\014c)p
Ff(.)-114 5001 y(Multiple)24 b(instances)e(of)g(suc)n(h)h(a)f(\014lter)
h(\(or)f(its)h(elemen)n(ts\))g(on)-114 5101 y(the)32
b(same)f(\014lter)h(list)g(\(e.g.)49 b(for)32 b(the)g(same)f(class\))g
(are)g(dis-)-114 5201 y(tinguished)j(b)n(y)g(an)g Fc(internal)h
(\014lter)h(ID)p Ff(,)d(whic)n(h)h(is)g(similar)-114
5300 y(to)e(the)g(in)n(ternal)g(ID)g(used)g(for)g(classes.)48
b(Ho)n(w)n(ev)n(er,)32 b(unlik)n(e)-114 5400 y(classes,)g(\014lters)g
(ha)n(v)n(e)f(no)h(\\\014lter)g(ID".)h(Instead,)g(they)f(are)2105
1817 y @beginspecial 0 @llx 0 @lly 218 @urx 200 @ury
2180 @rwi @setspecial
%%BeginDocument: fwild.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fwild.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Thu Nov  5 17:20:41 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 200
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
/col32 {0.502 0.502 0.502 srgb} bind def

end
save
-62.0 253.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 5212 m -1000 -1000 l 5665 -1000 l 5665 5212 l cp clip
 0.06000 0.06000 sc
/Times-Italic ff 180.00 scf sf
1575 2175 m
gs 1 -1 sc (filter) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1575 2175 m
gs 1 -1 sc (_classify) col0 sh gr
% Polyline
7.500 slw
n 1125 1950 m 2625 1950 l 2625 2250 l 1125 2250 l cp gs col0 s gr 
% Polyline
n 1950 3000 m 2400 3000 l gs col0 s gr 
% Polyline
n 3300 3750 m 3300 2100 l 3600 2100 l 3600 3750 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3300 4200 m 3300 3750 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3600 4200 m 3600 3750 l gs col0 s gr  [] 0 sd
% Polyline
n 1950 2700 m 2400 2700 l 2400 3300 l 1950 3300 l cp gs col0 s gr 
% Polyline
gs  clippath
1803 2820 m 1923 2850 l 1803 2880 l 1965 2880 l 1965 2820 l cp
clip
n 1650 1425 m 1650 2850 l 1950 2850 l gs col0 s gr gr

% arrowhead
n 1803 2820 m 1923 2850 l 1803 2880 l 1803 2850 l 1803 2820 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3078 2970 m 3198 3000 l 3078 3030 l 3240 3030 l 3240 2970 l cp
clip
n 2475 3000 m 3225 3000 l gs col0 s gr gr

% arrowhead
n 3078 2970 m 3198 3000 l 3078 3030 l 3078 3000 l 3078 2970 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3780 3753 m 3750 3873 l 3720 3753 l 3720 3915 l 3780 3915 l cp
clip
n 3750 2250 m 3750 3900 l gs col0 s gr gr

% arrowhead
n 3780 3753 m 3750 3873 l 3720 3753 l 3750 3753 l 3780 3753 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 4425 2625 m 4050 2625 l 4050 2325 l 4425 2325 l gs col0 s gr 
% Polyline
n 4425 3075 m 4050 3075 l 4050 2775 l 4425 2775 l gs col0 s gr 
% Polyline
n 4425 3750 m 4050 3750 l 4050 3450 l 4425 3450 l gs col0 s gr 
% Polyline
gs  clippath
2550 1054 m 2673 1056 l 2564 1112 l 2721 1076 l 2708 1017 l cp
clip
n 1725 1275 m 2700 1050 l gs col0 s gr gr

% arrowhead
n 2550 1054 m 2673 1056 l 2564 1112 l 2557 1083 l 2550 1054 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 2700 900 m 4650 900 l 4650 1200 l 2700 1200 l cp gs col0 s gr 
% Polyline
 [60] 0 sd
n 4425 2325 m 4650 2325 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 2625 m 4650 2625 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 2775 m 4650 2775 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3075 m 4650 3075 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3450 m 4650 3450 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3750 m 4650 3750 l gs col0 s gr  [] 0 sd
% Polyline
n 1050 1200 m 1950 1200 l 1950 1500 l 1050 1500 l cp gs col0 s gr 
% Polyline
60.000 slw
n 1575 1425 m 1875 1425 l gs col32 s gr 
% Polyline
n 1575 1275 m 1875 1275 l gs col32 s gr 
% Polyline
7.500 slw
n 3825 3675 m 3825 3525 l 3975 3600 l cp gs col32 1.00 shd ef gr gs col32 s gr 
/Times-Roman ff 180.00 scf sf
3525 3000 m
gs 1 -1 sc  90.0 rot (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3450 2025 m
gs 1 -1 sc (x:0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3975 3000 m
gs 1 -1 sc  90.0 rot (Search) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 3225 m
gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 3525 m
gs 1 -1 sc (tcf_result) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 2925 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2475 3225 m
gs 1 -1 sc (class) col0 sh gr
/Courier ff 180.00 scf sf
2475 2925 m
gs 1 -1 sc (classid) col0 sh gr
/Courier ff 180.00 scf sf
4350 2550 m
gs 1 -1 sc (x:a) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 3000 m
gs 1 -1 sc (x:b) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 3675 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier-Bold ff 180.00 scf sf
4350 3300 m
gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3675 1125 m
gs 1 -1 sc (Packet content) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4350 2100 m
gs 1 -1 sc (Classes) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1275 1425 m
gs 1 -1 sc (skb) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2582 2082 a(Figure)27 b(8:)36 b(Generic)28
b(\014lter.)2061 2348 y(iden)n(ti\014ed)d(b)n(y)f(the)h(queuing)f
(discipline)h(or)f(class)f(for)h(whic)n(h)2061 2448 y(they)29
b(are)f(registered,)f(and)i(their)g(priorit)n(y)e(among)h(the)h(\014l-)
2061 2548 y(ters)e(there.)2160 2648 y(Because)18 b(sp)r(eci\014c)h
(\014lters)g(ha)n(v)n(e)f(at)h(least)g(one)f(instance)h(or)2061
2747 y(elemen)n(t)f(p)r(er)h(class,)h(they)f(can)f(of)g(course)g(store)
g(the)h(in)n(ternal)2061 2847 y(ID)29 b(of)g(that)g(class)f(and)h(pro)n
(vide)f(it)h(as)f(a)h(result)f(of)h(classi\014-)2061
2947 y(cation.)35 b(This)23 b(then)g(allo)n(ws)f(quic)n(k)h(retriev)-5
b(al)22 b(of)h(class)g(infor-)2061 3046 y(mation)f(b)n(y)h(the)g
(queuing)g(discipline.)35 b(Figure)22 b(9)h(illustrates)2061
3146 y(this)f(scenario,)g(where)g(a)g(p)r(oin)n(ter)g(to)h(the)g(class)
e(structure)h(is)2061 3246 y(used)i(as)h(the)g(in)n(ternal)f(ID.)h
(Unfortunately)-7 b(,)26 b(generic)d(\014lters)2061 3345
y(ha)n(v)n(e)33 b(no)h(means)h(to)f(pro)n(vide)g(this)h(information.)57
b(There-)2061 3445 y(fore,)26 b(they)h(set)g(the)h Fe(class)d
Ff(\014eld)i(in)g Fe(struct)41 b(tcf_result)2061 3544
y Ff(to)21 b(zero)g(and)g(lea)n(v)n(e)g(the)h(lo)r(okup)f(op)r(eration)
g(to)g(the)h(queuing)2061 3644 y(discipline.)2061 3921
y Fg(8)134 b(P)l(olicing)2061 4104 y Ff(The)27 b(purp)r(ose)f(of)h(p)r
(olicing)f(is)h(to)g(ensure)f(that)h(tra\016c)f(do)r(es)2061
4204 y(not)38 b(exceed)g(certain)g(b)r(ounds.)69 b(F)-7
b(or)38 b(simplicit)n(y)-7 b(,)41 b(w)n(e)d(will)2061
4303 y(assume)26 b(a)h(broad)g(de\014nition)g(of)h(p)r(olicing)f(and)g
(consider)g(it)2061 4403 y(to)36 b(comprise)g(all)h(kinds)g(of)g
(tra\016c)f(con)n(trol)g(actions)g(that)2061 4502 y(dep)r(end)28
b(in)g(some)f(w)n(a)n(y)f(on)h(the)h(tra\016c)g(v)n(olume.)2160
4603 y(W)-7 b(e)19 b(consider)f(four)g(t)n(yp)r(es)h(of)g(p)r(olicing)f
(mec)n(hanisms:)32 b(\(1\))2061 4702 y(p)r(olicing)38
b(decisions)h(b)n(y)g(\014lters,)i(\(2\))f(refusal)e(to)h(enqueue)2061
4802 y(a)34 b(pac)n(k)n(et,)h(\(3\))g(dropping)f(of)g(a)g(pac)n(k)n(et)
g(from)g(an)g(\\inner")2061 4901 y(queuing)20 b(discipline,)j(and)d
(\(4\))h(dropping)f(of)h(a)f(pac)n(k)n(et)g(when)2061
5001 y(enqueuing)27 b(a)h(new)g(one.)37 b(Figures)27
b(10)g(to)g(13)g(illustrate)h(the)2061 5101 y(four)f(mec)n(hanisms.)
2160 5201 y(The)41 b(\014rst)f(t)n(yp)r(e)g(of)g(actions)g(are)f
(decisions)h(tak)n(en)f(b)n(y)2061 5300 y(\014lters)30
b(\(\014gure)g(10\).)45 b(The)30 b Fe(classify)e Ff(function)j(of)f(a)g
(\014lter)2061 5400 y(can)g(return)f(three)h(t)n(yp)r(es)h(of)f(v)-5
b(alues)30 b(to)g(indicate)g(a)g(p)r(olicy)1905 5649
y(8)p eop
%%Page: 9 9
9 8 bop 343 1817 a @beginspecial 0 @llx 0 @lly 380 @urx
200 @ury 3800 @rwi @setspecial
%%BeginDocument: pol1.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol1.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:25:52 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 380 200
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-71.0 442.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 8351 m -1000 -1000 l 8512 -1000 l 8512 8351 l cp clip
 0.06000 0.06000 sc
% Polyline
n 1200 5625 m 7500 5625 l 7500 7350 l 1200 7350 l cp gs col7 0.90 shd ef gr 
% Polyline
n 1200 5625 m 7500 5625 l 7500 4050 l 1200 4050 l cp gs col7 0.95 shd ef gr 
/Courier-Oblique ff 180.00 scf sf
6300 4950 m
gs 1 -1 sc (filter2) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6300 4950 m
gs 1 -1 sc (_classify) col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6300 4350 m
gs 1 -1 sc (filter1) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6300 4350 m
gs 1 -1 sc (_classify) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 6675 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3900 6675 m
gs 1 -1 sc (OK) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 6975 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3900 6975 m
gs 1 -1 sc (UNSPEC,RECLASSIFY) col0 sh gr
/Courier ff 180.00 scf sf
3900 7275 m
gs 1 -1 sc (UNSPEC,SHOT) col0 sh gr
/Times-Roman ff 180.00 scf sf
3900 7275 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6600 6600 m
gs 1 -1 sc (high) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6600 6600 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique ff 180.00 scf sf
6450 6900 m
gs 1 -1 sc (low) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
6450 6900 m
gs 1 -1 sc (_enqueue) col0 sh gr
% Polyline
7.500 slw
gs  clippath
2634 5879 m 2700 5775 l 2691 5898 l 2733 5770 l 2676 5751 l cp
clip
n 2400 6675 m 2700 5775 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 2634 5879 m 2700 5775 l 2691 5898 l 2662 5889 l 2634 5879 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5280 4170 m 5400 4200 l 5280 4230 l 5415 4230 l 5415 4170 l cp
clip
n 2775 5550 m 3300 4200 l 5400 4200 l gs col0 s gr gr

% arrowhead
n 5280 4170 m 5400 4200 l 5280 4230 l 5280 4200 l 5280 4170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3295 5448 m 3225 5550 l 3239 5427 l 3192 5554 l 3248 5575 l cp
clip
n 5400 4950 m 3450 4950 l 3225 5550 l gs col0 s gr gr

% arrowhead
n 3295 5448 m 3225 5550 l 3239 5427 l 3267 5438 l 3295 5448 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
gs  clippath
2995 5448 m 2925 5550 l 2939 5427 l 2892 5554 l 2948 5575 l cp
clip
n 5400 4350 m 3375 4350 l 2925 5550 l gs col0 s gr gr

% arrowhead
n 2995 5448 m 2925 5550 l 2939 5427 l 2967 5438 l 2995 5448 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
gs  clippath
5205 4770 m 5325 4800 l 5205 4830 l 5340 4830 l 5340 4770 l cp
clip
n 3075 5550 m 3375 4800 l 5325 4800 l gs col0 s gr gr

% arrowhead
n 5205 4770 m 5325 4800 l 5205 4830 l 5205 4800 l 5205 4770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2914 6644 m 2850 6750 l 2857 6626 l 2817 6756 l 2874 6773 l cp
clip
n 3150 5775 m 2850 6750 l gs col0 s gr gr

% arrowhead
n 2914 6644 m 2850 6750 l 2857 6626 l 2885 6635 l 2914 6644 l  cp gs col7 1.00 shd ef gr  col0 s
% Polyline
 [60] 0 sd
n 2325 5625 m 1200 5625 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3675 5625 m 7500 5625 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
5880 6495 m 6000 6525 l 5880 6555 l 6015 6555 l 6015 6495 l cp
clip
n 3300 6750 m 3600 6525 l 6000 6525 l gs col0 s gr gr

% arrowhead
n 5880 6495 m 6000 6525 l 5880 6555 l 5880 6525 l 5880 6495 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 6795 m 6000 6825 l 5880 6855 l 6015 6855 l 6015 6795 l cp
clip
n 3300 6825 m 6000 6825 l gs col0 s gr gr

% arrowhead
n 5880 6795 m 6000 6825 l 5880 6855 l 5880 6825 l 5880 6795 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5880 7095 m 6000 7125 l 5880 7155 l 6015 7155 l 6015 7095 l cp
clip
n 3300 6900 m 3600 7125 l 6000 7125 l gs col0 s gr gr

% arrowhead
n 5880 7095 m 6000 7125 l 5880 7155 l 5880 7125 l 5880 7095 l  cp gs 0.00 setgray ef gr  col0 s
/Courier-Oblique ff 180.00 scf sf
2400 6900 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2400 6900 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier ff 180.00 scf sf
3000 5700 m
gs 1 -1 sc (tc_classify) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4500 4575 m
gs 1 -1 sc (UNSPEC) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4500 5175 m
gs 1 -1 sc (OK,RECLASSIFY,SHOT) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3150 6225 m
gs 1 -1 sc (UNSPEC,OK,RECLASSIFY,SHOT) col0 sh gr
/Courier ff 180.00 scf sf
6600 7200 m
gs 1 -1 sc (kfree_skb) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 6300 m
gs 1 -1 sc (discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 6075 m
gs 1 -1 sc (Queuing) col0 sh gr
/Times-Bold ff 180.00 scf sf
1350 4800 m
gs 1 -1 sc (Filter\(s\)) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 823 2082 a Ff(Figure)27 b(10:)36 b(P)n(olicing)26
b(when)i(enqueuing;)f(decision)h(tak)n(en)f(b)n(y)g(\014lter.)-114
2348 y(decision)f(\(the)i(v)-5 b(alues)26 b(are)g(declared)g(in)h
Fe(include/linux/)-114 2447 y(pkt_cls.h)p Ff(:)-114 2633
y Fe(TC_POLICE_OK)37 b Ff(No)27 b(sp)r(ecial)g(treatmen)n(t)h
(requested.)-114 2824 y Fe(TC_POLICE_RECLAS)o(SIF)o(Y)35
b Ff(P)n(ac)n(k)n(et)18 b(w)n(as)h(selected)g(b)n(y)g(\014lter)52
2924 y(but)29 b(it)g(exceeds)e(certain)h(b)r(ounds)g(and)h(should)f(b)r
(e)g(re-)52 3024 y(classi\014ed)f(\(see)g(b)r(elo)n(w\).)-114
3216 y Fe(TC_POLICE_SHOT)36 b Ff(P)n(ac)n(k)n(et)j(w)n(as)h(selected)h
(b)n(y)g(\014lter)h(and)52 3315 y(found)30 b(to)g(violate)f(the)h(b)r
(ounds)g(suc)n(h)f(that)h(it)h(should)52 3415 y(b)r(e)d(discarded.)-14
3600 y(Curren)n(tly)-7 b(,)40 b(the)e(\014lters)g Fe(cls_rsvp)p
Ff(,)f Fe(cls_rsvp6)p Ff(,)h(and)-114 3700 y Fe(cls_u32)44
b Ff(supp)r(ort)i(p)r(olicing.)94 b(The)46 b(p)r(olicing)g(informa-)
-114 3800 y(tion)31 b(is)f(returned)h(via)f Fe(tc_classify)c
Ff(\(in)31 b Fe(include/net/)-114 3899 y(pkt_cls.h)p
Ff(\))40 b(to)k(the)g Fe(enqueue)d Ff(function)j(of)g(the)g(queu-)-114
3999 y(ing)c(discipline.)76 b(It)41 b(is)f(then)h(up)g(to)g(the)g
(queuing)f(disci-)-114 4098 y(pline)i(to)f(tak)n(e)f(an)h(appropriate)e
(action.)77 b(The)42 b(queuing)-114 4198 y(disciplines)23
b Fe(sch_cbq)d Ff(and)j Fe(sch_atm)d Ff(handle)j Fe(TC_POLICE_)-114
4298 y(RECLASSIFY)33 b Ff(and)j Fe(sch_atm)e Ff(also)h(handles)h
Fe(TC_POLICE_)-114 4397 y(SHOT)p Ff(.)49 b(The)32 b Fe(sch_prio)d
Ff(queuing)j(discipline)h(ignores)d(an)n(y)-114 4497
y(p)r(olicing)d(information)g(returned)g(b)n(y)h Fe(tc_classify)p
Ff(.)-14 4603 y(Filters)h(can)g(use)g(the)h(function)g
Fe(tcf_police)25 b Ff(\(in)30 b Fe(net/)-114 4703 y(sched/police.c)p
Ff(\))18 b(to)23 b(determine)g(if)g(the)h(\015o)n(w)e(they)i(select)
-114 4802 y(conforms)29 b(to)g(a)h(tok)n(en)f(buc)n(k)n(et.)43
b(The)30 b(buc)n(k)n(et)f(parameters)-114 4902 y(\(declared)i(in)h
Fe(struct)41 b(tc_police)28 b Ff(in)k Fe(include/linux/)-114
5001 y(pkt_cls.h)p Ff(\))c(are)h(roughly)h(the)h(same)g(as)f(for)g
(TBF:)h(max-)-114 5101 y(im)n(um)39 b(pac)n(k)n(et)e(size)h(\()p
Fe(mtu)p Ff(\),)i(a)n(v)n(erage)35 b(rate)j(\()p Fe(rate)p
Ff(\),)i(p)r(eak)-114 5201 y(rate)29 b(\()p Fe(peakrate)p
Ff(\),)f(and)i(buc)n(k)n(et)f(size)h(\()p Fe(burst)p
Ff(\).)42 b(The)30 b(\014eld)-114 5300 y Fe(action)40
b Ff(con)n(tains)h(the)i(p)r(olicy)f(decision)g(co)r(de)g(returned)-114
5400 y(when)28 b(accepting)f(the)h(pac)n(k)n(et)e(w)n(ould)h(exceed)h
(the)g(limits.)2160 2348 y(If)k(no)f(matc)n(hing)g(\014lter)g(w)n(as)f
(found,)j Fe(tc_classify)27 b Ff(re-)2061 2447 y(turns)41
b Fe(TC_POLICE_UNSPEC)o Ff(.)72 b(In)42 b(this)f(case,)j(a)d(queuing)
2061 2547 y(discipline)34 b(will)g(t)n(ypically)g(either)f(discard)h
(the)g(pac)n(k)n(et)f(or)2061 2646 y(treat)27 b(it)h(with)g(lo)n(w)f
(priorit)n(y)-7 b(.)2160 2767 y(The)21 b(second)g(t)n(yp)r(e)g(of)g(p)r
(olicing)g(o)r(ccurs)f(when)i(a)e(queuing)2061 2867 y(discipline)g
(fails)g(to)g(enqueue)h(a)e(pac)n(k)n(et)h(\(\014gure)g(11\).)33
b(In)21 b(this)2061 2967 y(case,)29 b(it)i(normally)d(simply)i
(discards)f(the)h(pac)n(k)n(et)f(\(i.e.)44 b(b)n(y)2061
3066 y(calling)39 b Fe(kfree_skb)p Ff(\).)72 b(Some)40
b(queuing)g(disciplines)g(also)2061 3166 y(pro)n(vide)g(more)h
(sophisticated)g(feedbac)n(k)g(to)h(the)g(calling)2061
3265 y(queuing)19 b(discipline)g(and)g(giv)n(en)f(them)i(a)f(second)f
(c)n(hance)h(for)2061 3365 y(enqueuing)29 b(the)h(pac)n(k)n(et:)40
b(if)31 b(the)f Fe(reshape_fail)24 b Ff(callbac)n(k)2061
3465 y(function)e(has)f(b)r(een)h(set)g(\(in)h Fe(struct)41
b(Qdisc)p Ff(\),)21 b(the)h(\\inner")2061 3564 y(queuing)k(discipline)h
(ma)n(y)f(in)n(v)n(ok)n(e)f(it)i(instead)g(to)f(allo)n(w)g(the)2061
3664 y(\\outer")i(queuing)h(discipline)h(to)f(select)h(a)f(di\013eren)n
(t)h(class.)2061 3764 y(If)41 b Fe(reshape_fail)36 b
Ff(is)41 b(not)f(set)h(or)f(if)i(it)f(returns)f(a)h(non-)2061
3863 y(zero)26 b(v)-5 b(alue,)28 b(the)g(pac)n(k)n(et)f(m)n(ust)g(b)r
(e)i(discarded.)36 b(Curren)n(tly)-7 b(,)2061 3963 y(only)51
b Fe(sch_cbq)e Ff(pro)n(vides)i(a)g Fe(reshape_fail)c
Ff(function.)2061 4062 y Fe(sch_fifo)22 b Ff(and)j Fe(sch_tbf)d
Ff(mak)n(e)i(calls)h(to)g Fe(reshape_fail)p Ff(,)2061
4162 y(if)j(a)n(v)-5 b(ailable.)2160 4283 y(The)24 b(third)g(p)r
(olicing)f(mec)n(hanism)h(is)f(applied)h(if)g(a)f(queu-)2061
4383 y(ing)32 b(discipline)g(decides)g(to)g(drop)f(a)h(pac)n(k)n(et)f
(from)h(an)g(\\in-)2061 4482 y(ner")46 b(queuing)h(discipline)g(after)g
(that)h(pac)n(k)n(et)e(w)n(as)g(en-)2061 4582 y(queued,)27
b(e.g.)37 b(in)27 b(order)f(to)i(create)e(space)h(for)g(pac)n(k)n(ets)f
(of)h(a)2061 4681 y(more)h(imp)r(ortan)n(t)g(class)g(\(\014gure)g
(12\).)40 b(This)28 b(is)h(done)f(using)2061 4781 y(the)h
Fe(drop)e Ff(function.)42 b(The)29 b Fe(cbq_dequeue_prio)23
b Ff(function)2061 4881 y(of)f Fe(sch_cbq)e Ff(uses)i(this)h(via)f
Fe(cbq_under_limit)16 b Ff(to)23 b(remo)n(v)n(e)2061
4980 y(pac)n(k)n(ets)j(from)h(classes)g(whic)n(h)g(are)g(o)n(v)n(er)e
(limit.)2160 5101 y(Also)44 b(the)g(fourth)h(mec)n(hanism)e(\(\014gure)
h(13\))f(discards)2061 5201 y(pac)n(k)n(ets)17 b(that)i(ha)n(v)n(e)e
(already)g(b)r(een)i(successfully)f(enqueued:)2061 5300
y(if)32 b(the)h Fe(enqueue)c Ff(function)k(of)f(a)g(queuing)f
(discipline)i(con-)2061 5400 y(siders)25 b(a)g(new)h(pac)n(k)n(et)f(to)
h(b)r(e)g(more)f(imp)r(ortan)n(t)h(than)g(some)1905 5649
y(9)p eop
%%Page: 10 10
10 9 bop -70 2417 a @beginspecial 0 @llx 0 @lly 218 @urx
272 @ury 2180 @rwi @setspecial
%%BeginDocument: fspec.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: fspec.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Thu Nov  5 17:19:45 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 272
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
/col32 {0.502 0.502 0.502 srgb} bind def

end
save
-62.0 325.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
 /DrawEllipse {
	/endangle exch def
	/startangle exch def
	/yrad exch def
	/xrad exch def
	/y exch def
	/x exch def
	/savematrix mtrx currentmatrix def
	x y tr xrad yrad sc 0 0 1 startangle endangle arc
	closepath
	savematrix setmatrix
	} def

/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6412 m -1000 -1000 l 5665 -1000 l 5665 6412 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
gs  clippath
3912 4667 m 4023 4719 l 3900 4726 l 4059 4757 l 4071 4699 l cp
clip
n 1575 3375 m 1575 4350 l 2175 4350 l 4050 4725 l gs col0 s gr gr

% arrowhead
n 3912 4667 m 4023 4719 l 3900 4726 l 3906 4696 l 3912 4667 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
60.000 slw
n 1500 3375 m 1800 3375 l gs col32 s gr 
/Times-Italic ff 180.00 scf sf
1500 2775 m
gs 1 -1 sc (filter) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1500 2775 m
gs 1 -1 sc (_classify) col0 sh gr
7.500 slw
% Ellipse
n 2175 4350 75 75 0 360 DrawEllipse gs col32 1.00 shd ef gr gs col32 s gr

% Polyline
gs  clippath
2550 1054 m 2673 1056 l 2564 1112 l 2721 1076 l 2708 1017 l cp
clip
n 1725 1275 m 2700 1050 l gs col0 s gr gr

% arrowhead
n 2550 1054 m 2673 1056 l 2564 1112 l 2557 1083 l 2550 1054 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
gs  clippath
1593 2326 m 1572 2448 l 1533 2331 l 1546 2492 l 1606 2487 l cp
clip
n 1500 1575 m 1575 2475 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 1593 2326 m 1572 2448 l 1533 2331 l  col0 s
% Polyline
 [60] 0 sd
gs  clippath
2010 2410 m 1896 2458 l 1974 2362 l 1845 2460 l 1881 2508 l cp
clip
n 3450 1275 m 1875 2475 l gs col0 s gr gr
 [] 0 sd
% arrowhead
n 2010 2410 m 1896 2458 l 1974 2362 l  col0 s
% Polyline
n 1950 4200 m 2400 4200 l gs col0 s gr 
% Polyline
n 3300 4950 m 3300 3300 l 3600 3300 l 3600 4950 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 3300 5400 m 3300 4950 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 3600 5400 m 3600 4950 l gs col0 s gr  [] 0 sd
% Polyline
n 1950 3900 m 2400 3900 l 2400 4500 l 1950 4500 l cp gs col0 s gr 
% Polyline
gs  clippath
1803 4020 m 1923 4050 l 1803 4080 l 1965 4080 l 1965 4020 l cp
clip
n 1725 3225 m 1725 4050 l 1950 4050 l gs col0 s gr gr

% arrowhead
n 1803 4020 m 1923 4050 l 1803 4080 l 1803 4050 l 1803 4020 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1050 2550 m 2550 2550 l 2550 2850 l 1050 2850 l cp gs col0 s gr 
% Polyline
n 4425 3825 m 4050 3825 l 4050 3525 l 4425 3525 l gs col0 s gr 
% Polyline
n 4425 4275 m 4050 4275 l 4050 3975 l 4425 3975 l gs col0 s gr 
% Polyline
n 4425 4950 m 4050 4950 l 4050 4650 l 4425 4650 l gs col0 s gr 
% Polyline
 [60] 0 sd
n 4425 4950 m 4650 4950 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 4650 m 4650 4650 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 4275 m 4650 4275 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3975 m 4650 3975 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3825 m 4650 3825 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 4425 3525 m 4650 3525 l gs col0 s gr  [] 0 sd
% Polyline
n 2700 900 m 4650 900 l 4650 1200 l 2700 1200 l cp gs col0 s gr 
% Polyline
n 1425 3150 m 1875 3150 l 1875 3450 l 1425 3450 l cp gs col0 s gr 
% Polyline
n 1425 3375 m 1350 3375 l 1350 3075 l 1800 3075 l 1800 3150 l gs col0 s gr 
% Polyline
n 1350 3300 m 1275 3300 l 1275 3000 l 1725 3000 l 1725 3075 l gs col0 s gr 
% Polyline
gs  clippath
2055 3378 m 2025 3498 l 1995 3378 l 1995 3540 l 2055 3540 l cp
clip
n 2025 2925 m 2025 3525 l gs col0 s gr gr

% arrowhead
n 2055 3378 m 2025 3498 l 1995 3378 l 2025 3378 l 2055 3378 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
n 1575 3000 m 1575 2850 l gs col0 s gr 
% Polyline
n 1050 1200 m 1950 1200 l 1950 1500 l 1050 1500 l cp gs col0 s gr 
% Polyline
60.000 slw
n 1500 3225 m 1800 3225 l gs col32 s gr 
% Polyline
n 1575 1275 m 1875 1275 l gs col32 s gr 
/Times-Roman ff 180.00 scf sf
3525 4200 m
gs 1 -1 sc  90.0 rot (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3450 3225 m
gs 1 -1 sc (x:0) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 4725 m
gs 1 -1 sc (tcf_result) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2175 4125 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2475 4350 m
gs 1 -1 sc (class) col0 sh gr
/Courier ff 180.00 scf sf
2475 4125 m
gs 1 -1 sc (classid) col0 sh gr
/Times-Roman ff 180.00 scf sf
1200 2100 m
gs 1 -1 sc (Filter can use all packet information) col0 sh gr
/Courier ff 180.00 scf sf
4350 3750 m
gs 1 -1 sc (x:a) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 4200 m
gs 1 -1 sc (x:b) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
4350 4875 m
gs 1 -1 sc (x:y) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier-Bold ff 180.00 scf sf
4350 4500 m
gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4350 3300 m
gs 1 -1 sc (Classes) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3675 1125 m
gs 1 -1 sc (Packet content) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
1200 3225 m
gs 1 -1 sc  90.0 rot (Filters) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2250 3225 m
gs 1 -1 sc  90.0 rot (Search) dup sw pop 2 div neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1275 1425 m
gs 1 -1 sc (skb) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 2682 a Ff(Figure)33 b(9:)49 b(Sp)r(eci\014c)34
b(\014lter,)h(with)f(a)g(p)r(oin)n(ter)f(to)g(the)h(class)-114
2782 y(used)28 b(as)e(the)i(in)n(ternal)f(class)g(ID.)-114
3045 y(older)g(one,)h(it)h(can)e(discard)g(the)i(old)f(pac)n(k)n(et)f
(and)g(enqueue)-114 3144 y(the)e(new)f(one)g(instead.)35
b(It)25 b(indicates)f(this)h(to)f(the)g(caller)g(b)n(y)-114
3244 y(returning)j(zero.)-114 3555 y Fg(9)135 b(The)97
b Fa(sch)p 608 3555 37 4 v 43 w(atm)f Fg(queuing)h(disci-)88
3704 y(pline)-114 3899 y Ff(The)22 b(A)-7 b(TM)22 b(queuing)g
(discipline)g(is)g(used)g(to)f(re-direct)g(\015o)n(ws)-114
3998 y(from)h(the)g(default)g(path)g(\(e.g.)35 b(through)21
b(a)h(giv)n(en)f(in)n(terface\))-114 4098 y(to)27 b(A)-7
b(TM)28 b(V)n(Cs.)37 b(Eac)n(h)26 b(\015o)n(w)h(can)g(ha)n(v)n(e)f(its)
i(o)n(wn)e(A)-7 b(TM)28 b(V)n(C,)-114 4198 y(but)20 b(m)n(ultiple)h
(\015o)n(ws)e(can)g(also)g(share)g(the)h(same)f(V)n(C.)h(Figure)-114
4297 y(14)k(illustrates)h(the)h(structure)e(of)i(this)f(queuing)g
(discipline.)-14 4404 y(While)33 b(its)g(classi\014cation)f(and)g
(queuing)h(part)f(is)h(fairly)-114 4503 y(generic,)56
b(the)51 b(A)-7 b(TM)52 b(queuing)f(discipline)g(di\013ers)g(from)-114
4603 y(other)39 b(queuing)g(disciplines)g(in)h(that)f(pac)n(k)n(ets)f
(enqueued)-114 4703 y(on)60 b(it)h(ma)n(y)f(lea)n(v)n(e)f(via)h(other)f
(paths)i(than)f(through)-114 4802 y(the)40 b Fe(dequeue)d
Ff(function)j(or)f(b)r(eing)h(dropp)r(ed:)60 b(whenev)n(er)-114
4902 y Fe(dequeue)19 b Ff(is)j(called,)h(it)g(\014rst)e(c)n(hec)n(ks)g
(all)h(inner)g(queuing)g(dis-)-114 5001 y(ciplines)k(for)g(pac)n(k)n
(ets)e(to)i(send,)h(and)e(sends)h(them)h(o)n(v)n(er)d(the)-114
5101 y(resp)r(ectiv)n(e)37 b(A)-7 b(TM)37 b(V)n(Cs.)66
b(After)38 b(that,)i(it)e(returns)f(what-)-114 5201 y(ev)n(er)f(it)i
(gets)f(from)h(the)f(default)h(queue,)i(whic)n(h)e(receiv)n(es)-114
5300 y(the)e(pac)n(k)n(ets)e(that)h(don't)h(get)f(attributed)g(to)g(an)
n(y)g(of)g(the)-114 5400 y(classes.)2061 1600 y @beginspecial
0 @llx 0 @lly 245 @urx 173 @ury 2450 @rwi @setspecial
%%BeginDocument: pol2.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol2.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:26:37 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 245 173
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-161.0 406.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/reencdict 12 dict def /ReEncode { reencdict begin
/newcodesandnames exch def /newfontname exch def /basefontname exch def
/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
basefontdict { exch dup /FID ne { dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
newfont /FontName newfontname put newcodesandnames aload pop
128 1 255 { newfont /Encoding get exch /.notdef put } for
newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
newfontname newfont definefont pop end } def
/isovec [
8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
8#220 /dotlessi 8#230 /oe 8#231 /OE
8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
/Times-Roman /Times-Roman-iso isovec ReEncode
/Times-Bold /Times-Bold-iso isovec ReEncode
/Courier /Courier-iso isovec ReEncode
/Courier-Oblique /Courier-Oblique-iso isovec ReEncode
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 7751 m -1000 -1000 l 7762 -1000 l 7762 7751 l cp clip
 0.06000 0.06000 sc
% Polyline
n 2700 5625 m 6750 5625 l 6750 3900 l 2700 3900 l cp gs col7 0.95 shd ef gr 
% Polyline
n 2700 6750 m 6750 6750 l 6750 5625 l 2700 5625 l cp gs col7 0.90 shd ef gr 
/Courier-Oblique-iso ff 180.00 scf sf
3300 4875 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
3300 4875 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique-iso ff 180.00 scf sf
3300 6000 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
3300 6000 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Courier-Oblique-iso ff 180.00 scf sf
5025 6000 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
5025 6000 m
gs 1 -1 sc (_reclassify) col0 sh gr
% Polyline
7.500 slw
gs  clippath
4901 5737 m 4950 5850 l 4853 5773 l 4935 5880 l 4983 5844 l cp
clip
n 4200 4875 m 4950 5850 l gs col0 s gr gr

% arrowhead
n 4901 5737 m 4950 5850 l 4853 5773 l 4877 5755 l 4901 5737 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5430 4770 m 5550 4800 l 5430 4830 l 5565 4830 l 5565 4770 l cp
clip
n 4200 4800 m 5550 4800 l gs col0 s gr gr

% arrowhead
n 5430 4770 m 5550 4800 l 5430 4830 l 5430 4800 l 5430 4770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
4677 4514 m 4800 4500 l 4698 4570 l 4825 4523 l 4804 4467 l cp
clip
n 4200 4725 m 4800 4500 l gs col0 s gr gr

% arrowhead
n 4677 4514 m 4800 4500 l 4698 4570 l 4688 4542 l 4677 4514 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 2775 5625 m 6750 5625 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
3384 5054 m 3450 4950 l 3441 5073 l 3483 4945 l 3426 4926 l cp
clip
n 3150 5850 m 3450 4950 l gs col0 s gr gr

% arrowhead
n 3384 5054 m 3450 4950 l 3441 5073 l 3412 5064 l 3384 5054 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman-iso ff 180.00 scf sf
5700 4500 m
gs 1 -1 sc (Successfully enqueued) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
2850 6600 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Bold-iso ff 180.00 scf sf
2850 4200 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
/Courier-iso ff 180.00 scf sf
5625 4875 m
gs 1 -1 sc (kfree_skb) col0 sh gr
/Courier-iso ff 180.00 scf sf
4875 5550 m
gs 1 -1 sc (!= NULL) col0 sh gr
/Courier-iso ff 180.00 scf sf
4875 5400 m
gs 1 -1 sc (sch->reshape_fail) col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4875 5400 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Times-Roman-iso ff 180.00 scf sf
4575 5025 m
gs 1 -1 sc (if ) dup sw pop neg 0 rm  col0 sh gr
/Courier-iso ff 180.00 scf sf
4575 5025 m
gs 1 -1 sc (sch->reshape_fail) col0 sh gr
/Courier-iso ff 180.00 scf sf
4575 5175 m
gs 1 -1 sc (== NULL) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 266 x(Figure)d(11:)45 b(P)n(olicing)31 b(when)i
(enqueuing;)i(decision)d(tak)n(en)2061 1965 y(b)n(y)27
b(\\inner")f(queuing)i(discipline.)2067 3264 y @beginspecial
0 @llx 0 @lly 227 @urx 141 @ury 2270 @rwi @setspecial
%%BeginDocument: pol3.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol3.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov  9 21:27:24 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 227 141
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-161.0 311.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 6176 m -1000 -1000 l 7462 -1000 l 7462 6176 l cp clip
 0.06000 0.06000 sc
% Polyline
n 2700 4050 m 6450 4050 l 6450 5175 l 2700 5175 l cp gs col7 0.90 shd ef gr 
% Polyline
n 2700 4050 m 6450 4050 l 6450 2850 l 2700 2850 l cp gs col7 0.95 shd ef gr 
/Times-Italic ff 180.00 scf sf
3300 4500 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3300 4500 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
3600 3675 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
3600 3675 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
5550 4500 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
5550 4500 m
gs 1 -1 sc (_...) col0 sh gr
/Times-Italic ff 180.00 scf sf
5850 3675 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
5850 3675 m
gs 1 -1 sc (_drop) col0 sh gr
% Polyline
7.500 slw
gs  clippath
5770 3844 m 5850 3750 l 5823 3871 l 5884 3750 l 5830 3723 l cp
clip
n 5550 4350 m 5850 3750 l gs col0 s gr gr

% arrowhead
n 5770 3844 m 5850 3750 l 5823 3871 l 5796 3857 l 5770 3844 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3520 3844 m 3600 3750 l 3573 3871 l 3634 3750 l 3580 3723 l cp
clip
n 3300 4350 m 3600 3750 l gs col0 s gr gr

% arrowhead
n 3520 3844 m 3600 3750 l 3573 3871 l 3546 3857 l 3520 3844 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 4425 4050 m 2700 4050 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 5100 4050 m 6450 4050 l gs col0 s gr  [] 0 sd
/Times-Roman ff 180.00 scf sf
4800 4125 m
gs 1 -1 sc (later ...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 5025 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Bold ff 180.00 scf sf
2850 3150 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 2061 3529 a(Figure)34 b(12:)51 b(P)n(olicing)34
b(after)h(enqueuing;)k(decision)c(tak)n(en)2061 3629
y(b)n(y)27 b(\\outer")f(queuing)h(discipline.)2160 3902
y(In)d(order)e(to)h(prev)n(en)n(t)g(V)n(Cs)g(from)g(b)r(eing)g(remo)n
(v)n(ed)f(while)2061 4001 y(the)34 b(queuing)g(discipline)g(is)g(still)
h(using)e(them,)k(the)d(refer-)2061 4101 y(ence)h(coun)n(t)g(of)h(the)g
(corresp)r(onding)d(so)r(c)n(k)n(et)i(is)g(increased)2061
4201 y(when)h(attac)n(hing)f(a)g(V)n(C)h(to)g(a)f(class)g(of)h(the)g(A)
-7 b(TM)36 b(queu-)2061 4300 y(ing)25 b(discipline.)36
b(This)25 b(happ)r(ens)g(in)h(the)f(function)h Fe(sockfd_)2061
4400 y(lookup)21 b Ff(in)i Fe(net/socket.c)c Ff(whic)n(h)24
b Fe(atm_tc_change)18 b Ff(calls)2061 4500 y(to)i(translate)g(the)h(so)
r(c)n(k)n(et)f(descriptor)f(n)n(um)n(b)r(er)i(to)f(a)g(p)r(oin)n(ter)
2061 4599 y(to)31 b(the)g(so)r(c)n(k)n(et)f(structure.)47
b(When)31 b(the)h(class)e(is)h(remo)n(v)n(ed,)2061 4699
y(it)i(returns)g(the)g(so)r(c)n(k)n(et)f(using)h Fe(sockfd_put)p
Ff(,)d(whic)n(h)k(then)2061 4798 y(decremen)n(ts)i(the)h(reference)f
(coun)n(t.)65 b(This)37 b(pair)f(of)h(func-)2061 4898
y(tions)27 b(p)r(erforms)f(roughly)g(the)i(equiv)-5 b(alen)n(t)27
b(of)g Fe(fdopen)e Ff(and)2061 4998 y Fe(close)p Ff(.)2160
5101 y(The)37 b(A)-7 b(TM)38 b(queuing)e(discipline)i(supp)r(orts)e
(the)h(p)r(olic-)2061 5201 y(ing)68 b(resp)r(onses)f
Fe(TC_POLICE_SHOT)c Ff(and)68 b Fe(TC_POLICE_)2061 5300
y(RECLASSIFY)p Ff(.)31 b(The)23 b(latter)f(can)h(b)r(e)g(handled)g(in)g
(t)n(w)n(o)f(di\013er-)2061 5400 y(en)n(t)29 b(w)n(a)n(ys:)38
b(\(1\))29 b(b)n(y)f(assigning)g(the)h(pac)n(k)n(et)f(to)h(a)f(new)h
(class)1884 5649 y(10)p eop
%%Page: 11 11
11 10 bop 193 1217 a @beginspecial 0 @llx 0 @lly 416
@urx 128 @ury 4160 @rwi @setspecial
%%BeginDocument: schatm.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: schatm.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Sun Oct 11 17:50:05 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 416 128
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-71.0 163.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3712 m -1000 -1000 l 9112 -1000 l 9112 3712 l cp clip
 0.06000 0.06000 sc
% Polyline
7.500 slw
n 2400 1500 m 3000 1500 l 3000 1800 l 2400 1800 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1500 m 3300 1500 l 3300 1800 l 3900 1800 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 1500 m 5700 1500 l 5700 1800 l 5400 1800 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 1500 2700 m 1500 600 l 1800 600 l 1800 2400 l 6000 2400 l 6000 600 l
 6300 600 l 6300 2700 l cp gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2400 1050 m 3000 1050 l 3000 1350 l 2400 1350 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 1050 m 3300 1050 l 3300 1350 l 3900 1350 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 1050 m 5700 1050 l 5700 1350 l 5400 1350 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 2400 600 m 3000 600 l 3000 900 l 2400 900 l cp gs 0.90 setgray ef gr gs col0 s gr 
% Polyline
n 3900 600 m 3300 600 l 3300 900 l 3900 900 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
n 5400 600 m 5700 600 l 5700 900 l 5400 900 l gs 0.95 setgray ef gr gs col0 s gr 
% Polyline
gs  clippath
2253 1620 m 2373 1650 l 2253 1680 l 2415 1680 l 2415 1620 l cp
clip
n 2100 1650 m 2400 1650 l gs col0 s gr gr

% arrowhead
n 2253 1620 m 2373 1650 l 2253 1680 l 2253 1650 l 2253 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 1620 m 3273 1650 l 3153 1680 l 3315 1680 l 3315 1620 l cp
clip
n 3000 1650 m 3300 1650 l gs col0 s gr gr

% arrowhead
n 3153 1620 m 3273 1650 l 3153 1680 l 3153 1650 l 3153 1620 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1500 m 5400 1500 l 5400 1800 l 3900 1800 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
/Times-Roman ff 180.00 scf sf
2700 1725 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 1725 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 1725 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
n 6855 600 m 6750 600 6750 795 105 arcto 4 {pop} repeat
  6750 900 7395 900 105 arcto 4 {pop} repeat
  7500 900 7500 705 105 arcto 4 {pop} repeat
  7500 600 6855 600 105 arcto 4 {pop} repeat
 cp gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman ff 180.00 scf sf
7125 825 m
gs 1 -1 sc (ATM VC) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
n 6855 1050 m 6750 1050 6750 1245 105 arcto 4 {pop} repeat
  6750 1350 7395 1350 105 arcto 4 {pop} repeat
  7500 1350 7500 1155 105 arcto 4 {pop} repeat
  7500 1050 6855 1050 105 arcto 4 {pop} repeat
 cp gs 0.95 setgray ef gr gs col0 s gr 
/Times-Roman ff 180.00 scf sf
7125 1275 m
gs 1 -1 sc (ATM VC) dup sw pop 2 div neg 0 rm  col0 sh gr
% Polyline
gs  clippath
3753 2070 m 3873 2100 l 3753 2130 l 3915 2130 l 3915 2070 l cp
clip
n 2100 750 m 2100 2100 l 3900 2100 l gs col0 s gr gr

% arrowhead
n 3753 2070 m 3873 2100 l 3753 2130 l 3753 2100 l 3753 2070 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1950 m 5400 1950 l 5400 2250 l 3900 2250 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6601 1104 m 6723 1126 l 6605 1164 l 6767 1154 l 6763 1094 l cp
clip
n 5550 1200 m 6750 1125 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6601 1104 m 6723 1126 l 6605 1164 l 6603 1134 l 6601 1104 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
6601 1290 m 6724 1283 l 6619 1347 l 6773 1299 l 6755 1242 l cp
clip
n 5550 1650 m 6750 1275 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6601 1290 m 6724 1283 l 6619 1347 l 6610 1319 l 6601 1290 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2253 1170 m 2373 1200 l 2253 1230 l 2415 1230 l 2415 1170 l cp
clip
n 2100 1200 m 2400 1200 l gs col0 s gr gr

% arrowhead
n 2253 1170 m 2373 1200 l 2253 1230 l 2253 1200 l 2253 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 1170 m 3273 1200 l 3153 1230 l 3315 1230 l 3315 1170 l cp
clip
n 3000 1200 m 3300 1200 l gs col0 s gr gr

% arrowhead
n 3153 1170 m 3273 1200 l 3153 1230 l 3153 1200 l 3153 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 1050 m 5400 1050 l 5400 1350 l 3900 1350 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6603 720 m 6723 750 l 6603 780 l 6765 780 l 6765 720 l cp
clip
n 5550 750 m 6750 750 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 6603 720 m 6723 750 l 6603 780 l 6603 750 l 6603 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2253 720 m 2373 750 l 2253 780 l 2415 780 l 2415 720 l cp
clip
n 1800 750 m 2400 750 l gs col0 s gr gr

% arrowhead
n 2253 720 m 2373 750 l 2253 780 l 2253 750 l 2253 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
3153 720 m 3273 750 l 3153 780 l 3315 780 l 3315 720 l cp
clip
n 3000 750 m 3300 750 l gs col0 s gr gr

% arrowhead
n 3153 720 m 3273 750 l 3153 780 l 3153 750 l 3153 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 3900 600 m 5400 600 l 5400 900 l 3900 900 l cp gs 0.90 setgray ef gr gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
6453 1770 m 6573 1800 l 6453 1830 l 6615 1830 l 6615 1770 l cp
clip
n 6300 1800 m 6600 1800 l gs col0 s gr gr

% arrowhead
n 6453 1770 m 6573 1800 l 6453 1830 l 6453 1800 l 6453 1770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
1353 1770 m 1473 1800 l 1353 1830 l 1515 1830 l 1515 1770 l cp
clip
n 1200 1800 m 1500 1800 l gs col0 s gr gr

% arrowhead
n 1353 1770 m 1473 1800 l 1353 1830 l 1353 1800 l 1353 1770 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 720 m 8073 750 l 7953 780 l 8115 780 l 8115 720 l cp
clip
n 7500 750 m 8100 750 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 720 m 8073 750 l 7953 780 l 7953 750 l 7953 720 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
7953 1170 m 8073 1200 l 7953 1230 l 8115 1230 l 8115 1170 l cp
clip
n 7500 1200 m 8100 1200 l gs 0.95 setgray ef gr gs col0 s gr gr

% arrowhead
n 7953 1170 m 8073 1200 l 7953 1230 l 7953 1200 l 7953 1170 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
5853 2070 m 5973 2100 l 5853 2130 l 6015 2130 l 6015 2070 l cp
clip
n 5400 2100 m 6000 2100 l gs col0 s gr gr

% arrowhead
n 5853 2070 m 5973 2100 l 5853 2130 l 5853 2100 l 5853 2070 l  cp gs 0.00 setgray ef gr  col0 s
/Times-Roman ff 180.00 scf sf
1800 2625 m
gs 1 -1 sc (ATM queuing discipline) col0 sh gr
/Times-Italic ff 180.00 scf sf
2700 2025 m
gs 1 -1 sc (Default) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 1275 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 1275 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 1275 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
2700 825 m
gs 1 -1 sc (Filter) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
3600 825 m
gs 1 -1 sc (Class) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 825 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Roman ff 180.00 scf sf
4650 2175 m
gs 1 -1 sc (Queuing discipline) dup sw pop 2 div neg 0 rm  col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial 1193 1482 a Ff(Figure)27 b(14:)36 b(The)27
b(A)-7 b(TM)29 b(queuing)e(discipline.)-70 2915 y @beginspecial
0 @llx 0 @lly 218 @urx 150 @ury 2180 @rwi @setspecial
%%BeginDocument: pol4.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pol4.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov 30 14:04:27 1998
%%For: almesber@lrcpc4 (Werner Almesberger)
%%Orientation: Portrait
%%BoundingBox: 0 0 218 150
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
-17.0 167.0 translate
1 -1 scale

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog

$F2psBegin
10 setmiterlimit
n -1000 3776 m -1000 -1000 l 4912 -1000 l 4912 3776 l cp clip
 0.06000 0.06000 sc
% Polyline
n 300 1650 m 3900 1650 l 3900 2775 l 300 2775 l cp gs col7 0.90 shd ef gr 
% Polyline
n 300 1650 m 3900 1650 l 3900 300 l 300 300 l cp gs col7 0.95 shd ef gr 
/Times-Italic ff 180.00 scf sf
750 2100 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
750 2100 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
1050 1275 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
1050 1275 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2925 1275 m
gs 1 -1 sc (inner) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2925 1275 m
gs 1 -1 sc (_enqueue) col0 sh gr
/Times-Italic ff 180.00 scf sf
2625 2100 m
gs 1 -1 sc (outer) dup sw pop neg 0 rm  col0 sh gr
/Courier ff 180.00 scf sf
2625 2100 m
gs 1 -1 sc (_enqueue) col0 sh gr
% Polyline
7.500 slw
 [60] 0 sd
n 1800 1650 m 300 1650 l gs col0 s gr  [] 0 sd
% Polyline
 [60] 0 sd
n 2475 1650 m 3900 1650 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
970 1444 m 1050 1350 l 1023 1471 l 1084 1350 l 1030 1323 l cp
clip
n 750 1950 m 1050 1350 l gs col0 s gr gr

% arrowhead
n 970 1444 m 1050 1350 l 1023 1471 l 996 1457 l 970 1444 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
gs  clippath
2920 1444 m 3000 1350 l 2973 1471 l 3034 1350 l 2980 1323 l cp
clip
n 2700 1950 m 3000 1350 l gs col0 s gr gr

% arrowhead
n 2920 1444 m 3000 1350 l 2973 1471 l 2946 1457 l 2920 1444 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
 [60] 0 sd
n 1125 1200 m 1125 825 l 3450 825 l gs col0 s gr  [] 0 sd
% Polyline
gs  clippath
3420 1044 m 3450 900 l 3480 1044 l 3480 885 l 3420 885 l cp
clip
n 3450 1125 m 3450 900 l gs col0 s gr gr

% arrowhead
n 3420 1044 m 3450 900 l 3480 1044 l 3450 1020 l 3420 1044 l  cp gs 0.00 setgray ef gr  col0 s
% Polyline
30.000 slw
n 3300 675 m 3600 975 l gs col0 s gr 
% Polyline
n 3300 975 m 3600 675 l gs col0 s gr 
/Times-Bold ff 180.00 scf sf
450 2625 m
gs 1 -1 sc ("Outer" queuing discipline) col0 sh gr
/Times-Roman ff 180.00 scf sf
2175 1725 m
gs 1 -1 sc (later ...) dup sw pop 2 div neg 0 rm  col0 sh gr
/Times-Bold ff 180.00 scf sf
450 525 m
gs 1 -1 sc ("Inner" queuing discipline) col0 sh gr
$F2psEnd
rs

%%EndDocument
 @endspecial -114 3180 a(Figure)33 b(13:)47 b(Older)32
b(pac)n(k)n(et)g(is)i(discarded)e(to)h(mak)n(e)f(ro)r(om)-114
3280 y(for)27 b(new)h(pac)n(k)n(et.)-114 3546 y(\(as)f(con\014gured)e
(b)n(y)i(the)g(user\),)g(or)f(\(2\))h(b)n(y)g(setting)g(the)g(cell)-114
3645 y(loss)g(priorit)n(y)f(bit)i(in)g(outgoing)e(A)-7
b(TM)28 b(cells.)-14 3745 y(The)34 b(co)r(de)f(the)i(A)-7
b(TM)34 b(queuing)g(discipline)g(is)g(in)g Fe(net/)-114
3845 y(sched/sch_atm.c)p Ff(.)29 b(In)23 b(addition)f(to)g(that)h
(\014le,)h Fe(include/)-114 3945 y(linux/pkt_sched.)o(h)h
Ff(con)n(tains)k(the)i(option)f(t)n(yp)r(es)h(\(pre-)-114
4044 y(\014x)37 b Fe(TCA_ATM_)p Ff(\),)g(and)g Fe(net/sched/sch_ap)o
(i.c)30 b Ff(con)n(tains)-114 4144 y(the)42 b(initialization.)79
b(F)-7 b(urthermore,)44 b(the)e(usual)f(c)n(hanges)-114
4243 y(had)30 b(to)f(b)r(e)h(made)g(to)f Fe(net/sched/Config.)o(in)23
b Ff(and)30 b Fe(net/)-114 4343 y(sched/Makefile)j Ff(to)38
b(include)h(the)g(new)g(queuing)f(disci-)-114 4443 y(pline)28
b(in)g(the)g(con\014guration)e(and)h(build)h(pro)r(cess.)-14
4543 y(The)19 b(use)h(of)f(the)h(A)-7 b(TM)20 b(queuing)f(discipline)h
(is)g(describ)r(ed)-114 4642 y(in)46 b(the)h(\014le)f
Fe(atm/extra/tc/REA)o(DME)39 b Ff(in)47 b(the)f(A)-7
b(TM)47 b(on)-114 4742 y(Lin)n(ux)27 b(distribution.)-114
5018 y Fg(10)135 b(Conclusion)-114 5201 y Ff(Lin)n(ux)26
b(tra\016c)f(con)n(trol)f(consists)h(of)h(a)f(large)f(v)-5
b(ariet)n(y)25 b(of)h(ele-)-114 5300 y(men)n(ts,)g(whic)n(h)f(in)n
(teract)g(with)h(eac)n(h)f(other)f(in)i(man)n(y)f(w)n(a)n(ys.)-114
5400 y(The)d(mo)r(dular)g(approac)n(h)e(c)n(hosen)h(results)h(in)g(a)g
(v)n(ery)e(v)n(ersa-)2061 1748 y(tile)g(design)g(that)g(can)g(b)r(e)g
(readily)f(applied)h(to)g(most)g(curren)n(t)2061 1847
y(tra\016c)e(con)n(trol)g(tasks,)i(and)f(whic)n(h)g(can)g(b)r(e)h
(easily)e(extended)2061 1947 y(to)k(accommo)r(date)g(less)g(t)n(ypical)
g(applications,)h(suc)n(h)f(as)g(the)2061 2046 y(link-la)n(y)n(er)e
(selection)i(implemen)n(ted)i(in)e(the)h(A)-7 b(TM)23
b(queuing)2061 2146 y(discipline.)34 b(It)20 b(will)g(also)e(form)i
(the)g(basis)f(for)g(the)h(Lin)n(ux)f(im-)2061 2246 y(plemen)n(tation)
32 b(of)g(Di\013eren)n(tiated)g(Services,)g(whic)n(h)h(unify)2061
2345 y(and)25 b(adv)-5 b(ance)25 b(man)n(y)h(of)f(the)i(existing)e
(tra\016c)g(con)n(trol)g(con-)2061 2445 y(cepts.)2160
2545 y(W)-7 b(e)26 b(ha)n(v)n(e)e(describ)r(ed)h(queuing)h
(disciplines,)g(classes,)e(\014l-)2061 2644 y(ters,)31
b(and)f(elemen)n(ts)h(within)g(\014lters,)g(w)n(e)g(ha)n(v)n(e)e
(illustrated)2061 2744 y(the)g(most)g(imp)r(ortan)n(t)f(in)n
(teractions)g(b)r(et)n(w)n(een)h(these)g(com-)2061 2843
y(p)r(onen)n(ts,)23 b(and)g(w)n(e)f(ha)n(v)n(e)g(brie\015y)g(in)n(tro)r
(duced)h(the)g(design)f(of)2061 2943 y(a)30 b(new)h(queuing)g
(discipline.)46 b(W)-7 b(e)32 b(hop)r(e)f(this)g(information)2061
3043 y(to)e(b)r(e)h(useful)g(for)f(p)r(eople)h(aiming)f(to)g
(understand)g(the)h(in-)2061 3142 y(ner)18 b(w)n(orkings)e(of)i(Lin)n
(ux)h(tra\016c)f(con)n(trol,)g(and)h(in)f(particular)2061
3242 y(also)24 b(to)h(implemen)n(tors)g(of)g(new)h(tra\016c)f(con)n
(trol)f(functions.)2061 3513 y Fg(11)135 b(Ac)l(kno)l(wledgemen)l(ts)
2061 3694 y Ff(The)38 b(author)f(w)n(ould)h(lik)n(e)g(to)g(thank)g
(Jamal)f(Hadi)h(Salim)2061 3794 y(for)c(v)n(ery)h(helpful)h
(discussions)e(and)h(suggestions)f(on)h(this)2061 3894
y(pap)r(er,)21 b(and)e(Alexey)h(Kuznetso)n(v)e(for)i(a)f(critical)g
(review)g(and)2061 3993 y(for)33 b(explaining)h(man)n(y)f(of)h(his)g
(design)g(decisions)f(and)h(the)2061 4093 y(deep)r(er)27
b(details)g(of)h(tra\016c)f(con)n(trol.)2061 4364 y Fg(References)2061
4546 y Ff([1])41 b(Clark,)f(Da)n(vid)e(D.;)45 b(Shenk)n(er,)40
b(Scott;)k(Zhang,)d(Lixia.)2190 4645 y Fc(Supp)l(orting)47
b(R)l(e)l(al-Time)g(Applic)l(ations)h(in)f(an)g(Inte-)2190
4745 y(gr)l(ate)l(d)26 b(Servic)l(es)g(Packet)g(Network:)37
b(A)n(r)l(chite)l(ctur)l(e)24 b(and)2190 4844 y(Me)l(chanism)p
Ff(,)43 b(Pro)r(ceedings)37 b(of)i(SigComm'92,)i(Balti-)2190
4944 y(more,)32 b(MD,)g(August)g(1992.)e Fe(http://ana-)t(www.l)o(cs)o
(.)2190 5044 y(mit.edu/anaweb/p)o(s-)s(pap)o(er)o(s/c)o(sz)o(.ps)2061
5201 y Ff([2])41 b(IETF,)73 b(In)n(tegrated)f(Services)h(\(in)n
(tserv\))g(w)n(orking)2190 5300 y(group.)62 b Fe(http://www.ietf.)o
(org)o(/h)o(tml)o(.c)o(ha)o(rte)o(rs)o(/)2190 5400 y(intserv-)t
(charter.)o(ht)o(ml)1884 5649 y Ff(11)p eop
%%Page: 12 12
12 11 bop -114 233 a Ff([3])41 b(IETF,)d(Di\013eren)n(tiated)g
(Services)f(\(di\013serv\))h(w)n(orking)15 333 y(group.)62
b Fe(http://www.ietf.o)o(rg/)o(ht)o(ml)o(.ch)o(ar)o(ter)o(s/)15
432 y(diffserv-)t(charter.)o(ht)o(ml)-114 598 y Ff([4])41
b(Bernet,)65 b(Y)-7 b(oram;)72 b(Y)-7 b(a)n(v)i(atk)g(ar,)64
b(Ra)5 b(j;)72 b(F)-7 b(ord,)64 b(P)n(eter;)15 698 y(Bak)n(er,)49
b(F)-7 b(red;)56 b(Zhang,)50 b(Lixia;)55 b(Nic)n(hols,)50
b(Kathleen;)15 798 y(Sp)r(eer,)38 b(Mic)n(hael.)d Fc(A)h(F)-6
b(r)l(amework)38 b(for)g(Use)f(of)h(RSVP)15 897 y(with)27
b(Di\013-serv)f(Networks)e Ff(\(w)n(ork)e(in)i(progress\),)e(In)n(ter-)
15 997 y(net)38 b(Draft)g Fe(draft-)t(ietf-)t(diffs)o(er)o(v-)t(r)o(sv)
o(p-)t(0)o(0.t)o(xt)o Ff(,)15 1096 y(June)28 b(1998.)-114
1262 y([5])41 b(Flo)n(yd,)48 b(Sally;)53 b(Jacobson,)47
b(V)-7 b(an.)44 b Fc(Link-sharing)j(and)15 1362 y(R)l(esour)l(c)l(e)i
(Management)g(Mo)l(dels)i(for)f(Packet)g(Net-)15 1462
y(works)p Ff(,)33 b(IEEE/A)n(CM)c(T)-7 b(ransactions)29
b(on)i(Net)n(w)n(orking,)15 1561 y(V)-7 b(ol.)28 b(3)f(No.)g(4,)h(pp.)g
(365-386,)c(August)k(1995.)-114 1727 y([6])41 b(RF)n(C2205;)66
b(Braden,)61 b(Bob)54 b(\(Ed.\);)68 b(Zhang,)61 b(Lixia;)15
1827 y(Berson,)38 b(Stev)n(e;)j(Herzog,)d(Shai;)j(Jamin,)e(Sugih.)e
Fc(R)l(e-)15 1927 y(sour)l(c)l(e)25 b(R)l(eSerV)-6 b(ation)24
b(Pr)l(oto)l(c)l(ol)i(\(RSVP\))e({)i(V)-6 b(ersion)25
b(1)15 2026 y(F)-6 b(unctional)30 b(Sp)l(e)l(ci\014c)l(ation)p
Ff(,)e(IETF,)g(Septem)n(b)r(er)f(1997.)-114 2192 y([7])41
b(Nic)n(hols,)j(Kathleen;)k(Blak)n(e,)c(Stev)n(en;)k(Bak)n(er,)43
b(F)-7 b(red;)15 2292 y(Blac)n(k,)63 b(Da)n(vid)57 b(L.)f
Fc(De\014nition)h(of)g(the)g(Di\013er)l(enti-)15 2392
y(ate)l(d)65 b(Servic)l(es)g(Field)h(\(DS)d(Field\))j(in)f(the)f(IPv4)
15 2491 y(and)58 b(IPv6)h(He)l(aders)g Ff(\(w)n(ork)e(in)h(progress\),)
64 b(In)n(ter-)15 2591 y(net)71 b(Draft)g Fe(draft-)t(ietf-)t(diffse)o
(rv-)s(hea)o(de)o(r-)s(04.)15 2690 y(txt)p Ff(,)27 b(Octob)r(er)f
(1998.)-114 2857 y([8])41 b(Blak)n(e,)58 b(Stev)n(en;)65
b(Blac)n(k,)58 b(Da)n(vid;)65 b(Carlson,)57 b(Mark;)15
2956 y(Da)n(vies,)73 b(Elwyn;)83 b(W)-7 b(ang,)74 b(Zheng;)83
b(W)-7 b(eiss,)74 b(W)-7 b(al-)15 3056 y(ter.)74 b Fc(A)n(n)d(A)n(r)l
(chite)l(ctur)l(e)h(for)h(Di\013er)l(entiate)l(d)g(Ser-)15
3155 y(vic)l(es)96 b Ff(\(w)n(ork)e(in)h(progress\),)109
b(In)n(ternet)95 b(Draft)15 3255 y Fe(draft-)t(ietf-)t(diffse)o(rv-)s
(ar)o(ch-)s(02.)o(tx)o(t)p Ff(,)176 b(Octo-)15 3355 y(b)r(er)28
b(1998.)-114 3521 y([9])41 b(RF)n(C2170;)72 b(Almesb)r(erger,)66
b(W)-7 b(erner;)73 b(Le)59 b(Boudec,)15 3620 y(Jean-Yv)n(es;)45
b(Oec)n(hslin,)d(Philipp)r(e.)e Fc(Applic)l(ation)j(RE-)15
3720 y(Queste)l(d)24 b(IP)h(over)g(A)-6 b(TM)25 b(\(AREQUIP)-6
b(A\))p Ff(,)21 b(IETF,)h(July)15 3820 y(1997.)1884 5649
y(12)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

--+HP7ph2BbKc20aGI--

