From andi@fred.muc.de Thu Apr 29 15:00:23 1999 Return-Path: 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 ; 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 ; 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 ; 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 D109 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 DI< 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 D65 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 DI<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>II<14F8EB07FE90381F871C90383E03FE137C EBF801120148486C5A485A120FEBC001001F5CA2EA3F801403007F5C1300A21407485C5A A2140F5D48ECC1C0A2141F15831680143F1587007C017F1300ECFF076C485B9038038F8E 391F0F079E3907FE03FC3901F000F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE 5BA312015BA312035BA31207EBE0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013 E0D81FC013F0A21380A2123F1300A214075A127EA2140F12FE4814E0A2141F15C05AEC3F 80A215005C147E5C387801F8007C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C 3B77B926>I<147F903803FFC090380FC1E090381F0070017E13784913383901F801F838 03F003120713E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA31530153815 78007C14F0007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D26 77A426>II<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A 120F4913F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA5 5AA21530007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803 FFE0C690C7FC1D2677A426>IIIII<150E153F157FA3 157E151C1500ABEC1F80EC7FC0ECF1F0EB01C090380380F813071401130F130E131EEB1C 03133C013813F0A2EB0007A215E0A2140FA215C0A2141FA21580A2143FA21500A25CA214 7EA214FEA25CA21301A25CA213035C121C387E07E0A238FE0FC05C49C7FCEAF83EEA787C EA3FF0EA0FC0204883B619>IIIII<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E00 07143F5B120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC 07F015E0140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7 FC202677A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787F C00170497EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA2 4A1400A2010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70 FC90387E3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A >II<3903C003F0390FF01FFC391E783C0F 381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FCEAE0FE 5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E212679A423 >I<14FE903807FF8090380F83C090383E00E04913F00178137001F813F00001130313F0 A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C01300143F141F 140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB45AD801FEC7 FC1C267AA422>II<13F8 D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C01270013F13 1F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE120349EBFC0E A20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A00F83C78E0 90393FF03FC090390FC00F00272679A42D>I<01F0130ED803FC133FD8071EEB7F80EA0E 1F121C123C0038143F49131F0070140FA25BD8F07E140000E08013FEC6485B150E12015B 151E0003141C5BA2153C000714385B5DA35DA24A5A140300035C6D48C7FC0001130E3800 F83CEB7FF8EB0FC0212679A426>I<01F01507D803FC903903801F80D8071E903907C03F C0D80E1F130F121C123C0038021F131F49EC800F00701607A249133FD8F07E168000E0ED 000313FEC64849130718000001147E5B03FE5B0003160E495BA2171E00070101141C01E0 5B173C1738A217781770020314F05F0003010713016D486C485A000190391E7C07802800 FC3C3E0FC7FC90393FF81FFE90390FE003F0322679A437>I123 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmsy10 10 2 /Fd 2 16 df<007FB81280B912C0A26C17803204799641>0 D15 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmtt10 10 60 /Fe 60 123 df42 D<007FB6FCB71280A46C150021067B9B2C>45 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA 3F80EA1F000B0B708A2C>I<1507ED0F80151FA2153F16005D157E15FE5D14015D14035D A214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C13075C130F5C131F 5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B123F90C9FC5A12 7E12FE5AA25A127821417BB92C>II< 1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512 E0B612F0A36C14E01C3477B32C>IIII54 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0 A5EA7FC0EA3F80EA1F000B2470A32C>58 D<1507ED1F80153F15FF14034A1300EC1FFC4A 5AECFFE0491380010790C7FCEB0FFCEB3FF8EB7FE048485A4890C8FCEA0FFEEA1FF8EA7F F0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC0101 7F6D13E0EC3FF86E7EEC07FF6E13801400153F151FED0700212A7BAD2C>60 D<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7FF0EB1FF8EB0FFEEB03FF6D 13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300EC0FFCEC3FF8EC7FE04948 5A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC485AEA7FF0485A138048C9 FC5A1270212A7BAD2C>62 D64 D<14FE497EA4497FA214EFA21307 81A214C7A2010F7FA314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FE A34880A29038F8003FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15 FC497E27347EB32C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE00 7F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212FE 5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC131F 6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>67 D<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716 F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80ED FF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E39 03F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8 007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA71678 1600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C >I72 D<007FB512F8B612FCA36C14F839 000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I75 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01 F8A8007FB6FCB7FCA36C15F025337DB22C>IIII<007FB512C0B612F881 15FF6C15802603F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0F E0ED3FC015FF90B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C >II<387FFFFCB67E15E015F86C803907E007FE1401EC007F6F7E151FA26F7E A64B5AA2153F4BC7FCEC01FE140790B55A5D15E081819038E007FCEC01FE1400157F81A8 160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381F F80790B5EA0F804814CF000714FF5A381FF01F383FC003497E48C7FC007E147F00FE143F 5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F0 6C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2ED0FE0A20078140712FCA56C EC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D870 0790C7FC23357CB32C>I<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF 90383FFFFCA2497F6D5BA227337EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C0 3B03F00001F800B3AF6D130300015DA26D130700005D6D130F017F495A6D6C485AECE0FF 6DB5C7FC6D5B010313F86D5B9038003F802B3480B22C>II89 D<007FB6FCB71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC8 127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F 14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C> 97 DI<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E 4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F0039 07FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>IIII II< 1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007F B512FCB612FEA36C14FC1F3479B32C>I107 D<387FFFE0B57EA37EEA0003B3B3A5007F B61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD8 7FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B3 3B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397F F01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B 5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>II<397FF01FE0 39FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F8 5BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE0 9138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B2736 7FA32C>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF001 48487E49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F 6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A 1480A36E140029367DA32C>II<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB 00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00 FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8 148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1 ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE023 2E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F39 00FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514 FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C13 7CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214 FF6D90C7FCA26D5A147C27247EA32C>II<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 df11 DIII<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C 131C00001300A40001130101801380A20003130301001300485B00061306000E130E485B 485B485B006013601A197DB92A>34 D<121C127FEAFF80A213C0A3127F121C1200A41201 1380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB 0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2 127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB 01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378 A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A2 5B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD 20>I<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A 5A5A12600A19798817>44 DI<121C127FEAFF80A5EA7F00121C 0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0 1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249 5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12 07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I< EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F 143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A> I III<1538A2157815F8 A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13 1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7 3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5 FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038 8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060 5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB 1FE0213A7CB72A>II<12301238123E003FB612E0A3 16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C 140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8 FC131E233B7BB82A>III<121C12 7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12 7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206 A2120E5A121812385A1260093479A317>I<1538A3157CA315FEA34A7EA34A6C7EA20207 7FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F 1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA349 6E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E> 65 DI<913A01FF800180020FEBE003027F13F8903A01FF807E0790 3A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F1201484815 1F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180 A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD9 1FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380 313D7BBA3C>IIII III<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D8 7F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>IIIIIII III<003FB812E0A3D9C003EB001F273E0001FE13 0348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807FF 80011FB612E0A335397DB83C>III< B5D8FC07B5D8F001B5FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307 ED03C01B807F6C6F6C1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE06 7FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE 6007A26D6C4CC7FC9338C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF 0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA2 02015E4B1407A2020093C8FC4B80503B7EB855>I89 D<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E0038 141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F4A5A A24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC5B12 03485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>II<390180018000031303390700070000 0E130E485B0018131800381338003013300070137000601360A200E013E0485BA400CE13 CE39FF80FF806D13C0A3007F137FA2393F803F80390E000E001A1974B92A>II97 DIIII<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FC ADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>IIIIIII<2703F00FF0 EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F8026 03F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B500 83B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC0 3803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A07F7000FC0D803FEEB 07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D 13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB5 12C0A328357EA42E>II<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA 03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>II<1318A51338A3 1378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580EB7C03 017E13006D5AEB0FFEEB01F81A347FB220>II IIII<003FB512FCA2EB8003D83E0013F8 003CEB07F00038EB0FE012300070EB1FC0EC3F800060137F150014FE495AA2C6485A495A A2495A495A495AA290387F000613FEA2485A485A0007140E5B4848130C4848131CA24848 133C48C7127C48EB03FC90B5FCA21F247EA325>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmbx12 14.4 43 /Fg 43 122 df45 D<913803FFC0023F13FC91B6FC010315C001 0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248 17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600 3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913 006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313 C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF8 00C7FCB3B3B3A6007FB712FEA52F4E76CD43>II<91 380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED8 03F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC 1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80 DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218 FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001 F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F158001 0302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F16 7FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580 EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A120748 5A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<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 D70 D73 D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013 FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49 496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B804A83 481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F 6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D 6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F002 0F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479D265 >79 D I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90 C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49496F7F49496F7F4990C96C7F 4948707F4948707F01FF854A177F48864849717EA24849711380A2481BC04A83481BE0A2 4A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5FA36C1BF0A36C6D4D13E0A36C 1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A4C13E06C6D013F6D495A017F 91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01806E485B6D6D48D91F8F5B6D 01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0020F6D4913C0020301FF90B5 C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7EA01FF74133E74137E7413FE F2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314C0731480731400735B963800 7FF8F21FE0576A79D265>I I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919 3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5 53517BD05E>84 D97 DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE 0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F130070 5A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C 6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49 C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13 FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48 4980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D 5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE 0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0 4901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C048 8191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06C EE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB 03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F 497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017E B3B3A6B612E0A51B547BD325>I107 DIII<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 III121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmtt12 12 16 /Fh 16 116 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46 D64 DI87 D98 DI101 DI II<383FFFFC487FB5FCA27E7EC7FCB3B3 AD003FB612F84815FCB712FEA26C15FC6C15F8273D7ABC33>108 D<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE 07130301FC01FE7F9039F803FC01A201F013F8A401E013F0B3A53C7FFE0FFF07FF80B548 018F13C0A46C486C01071380322C80AB33>I<4AB4FC263FFC0713C0267FFE1F13F000FF 017F7F91B5FC6CB67E6CEC07FEC6EBF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFF F80FFFFC486D4813FEB56C4813FFA26C496C13FE6C496C13FC302C7FAB33>I112 D114 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 D67 D69 DI73 D76 D78 D80 D87 D98 D101 D103 D108 DI<39 01FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0002601FDC07F 5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB36>II<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0 FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26 >114 D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C147812 7800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0 C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15 786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmr17 17.28 22 /Fj 22 125 df14 D67 D73 D76 D<933801FFE0043F13FF4BB612E0030790 38003FF8DB1FF0EB03FEDB7FC0903800FF804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC 4A486F7E4A486F7E4A48707E4ACA6C7E4948717E4948717E4948717E4948717E4948717E 013F854A83017F864948727EA24890CC6C7EA24848737EA24848737EA2000F8749190700 1F87A34848737EA4007F1C80A24985A400FF1CC0AF6C6C4F1380A5003F1C006D61A3001F 63A26D190F000F63A26C6C4F5AA36C6C4F5AA26C6D4E5A6C636E18FF017F626D6C4D90C7 FC6E5F011F616D6C4D5A6D6C4D5A0103616E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1F F0ED03FE6E6C4B5A6E6C4B5ADA01FFED3FE09126007FC0ECFF80DB1FF0D903FEC9FCDB07 FFEB3FF8030190B512E0DB003F91CAFC040113E05A667AE367>79 D<003FBC12F8A49126C000039038C0000301FCC76C49EB007F01F0190F01C019074848F1 03FC90C81701007E1A00007C1B7CA300781B3CA400701B1CA600F01B1E481B0EA7C91800 B3B3B3A54C7FA2041F13F84AB87EA457627CE160>84 D97 D<4AB47E020F13F8023F13FE9139FF007F80D903FC EB07E0D907F0EB01F0D91FE0EB007849488049488049C87E48485D4915FF00034B138048 485CA2485AA2485AA2003F6F130049EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2 001FEE01C07F000F16036D168012076C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D 6C5CD90FF8495AD903FCEB07C0903A00FF803F8091263FFFFEC7FC020F13F80201138032 417CBF3A>99 D101 D<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA412 01EA007FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>105 D108 DIIII<9039078003F8 D807FFEB0FFFB5013F13C092387C0FE0913881F01F9238E03FF00001EB838039007F8700 148FEB3F8E029CEB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497E EBFFF8B612FCA42C3F7CBE33>114 D<1438A71478A414F8A31301A31303A21307130F13 1FA2137F13FF1203000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D 6C148016076D6C14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B59 7FD733>116 DIII<007FB500C0010FB512E0A4C691C70003EB FC00D93FFE6E13E0D90FFC16807148C7FC01075E6D6C4A5A6D6C5D6D6D495A606E6C495A 6E6C49C8FC6E6C130E171E6E6C5B6E6C5B6E6C5B5F913801FF016EEB83C092387FC78003 3F90C9FC16EFED1FFE6F5A6F5A826F7E6F7E5D834B7F92380F3FE0ED1E1F033C7F923838 0FF892387807FCEDF003DA01E07F4A486C7E707F4A486D7E4AC7FC021E6E7E021C6E7E02 3C6E7E5C4A6E7E01016F7E49486E7E1307010F6F7F013F83D9FFF04A7F00076D4A13FCB5 6C020FEBFFF8A4453E80BD46>I124 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: 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 ; 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 ; 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 ; 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 D109 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 DI< 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 D65 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 DI<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>II<14F8EB07FE90381F871C90383E03FE137C EBF801120148486C5A485A120FEBC001001F5CA2EA3F801403007F5C1300A21407485C5A A2140F5D48ECC1C0A2141F15831680143F1587007C017F1300ECFF076C485B9038038F8E 391F0F079E3907FE03FC3901F000F0222677A42A>97 D<133FEA1FFFA3C67E137EA313FE 5BA312015BA312035BA31207EBE0F8EBE7FE9038EF0F80390FFC07C013F89038F003E013 E0D81FC013F0A21380A2123F1300A214075A127EA2140F12FE4814E0A2141F15C05AEC3F 80A215005C147E5C387801F8007C5B383C03E0383E07C0381E1F80D80FFEC7FCEA01F01C 3B77B926>I<147F903803FFC090380FC1E090381F0070017E13784913383901F801F838 03F003120713E0120FD81FC013F091C7FC485AA2127F90C8FCA35A5AA45AA31530153815 78007C14F0007EEB01E0003EEB03C0EC0F806CEB3E00380F81F83803FFE0C690C7FC1D26 77A426>II<147F903803FFC090380FC1E090383F00F0017E13785B485A485A485A 120F4913F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90C8FC5A5AA5 5AA21530007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E00380781F83803 FFE0C690C7FC1D2677A426>IIIII<150E153F157FA3 157E151C1500ABEC1F80EC7FC0ECF1F0EB01C090380380F813071401130F130E131EEB1C 03133C013813F0A2EB0007A215E0A2140FA215C0A2141FA21580A2143FA21500A25CA214 7EA214FEA25CA21301A25CA213035C121C387E07E0A238FE0FC05C49C7FCEAF83EEA787C EA3FF0EA0FC0204883B619>IIIII<147F903803FFC090380FC1F090381F00F8017E137C5B4848137E4848133E00 07143F5B120F485AA2485A157F127F90C7FCA215FF5A4814FEA2140115FC5AEC03F8A2EC 07F015E0140F007C14C0007EEB1F80003EEB3F00147E6C13F8380F83F03803FFC0C648C7 FC202677A42A>I<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787F C00170497EECFF00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA2 4A1400A2010F5C5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70 FC90387E3FF0EC0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A >II<3903C003F0390FF01FFC391E783C0F 381C7C703A3C3EE03F8038383FC0EB7F800078150000701300151CD8F07E90C7FCEAE0FE 5BA2120012015BA312035BA312075BA3120F5BA3121F5BA3123F90C9FC120E212679A423 >I<14FE903807FF8090380F83C090383E00E04913F00178137001F813F00001130313F0 A215E00003EB01C06DC7FC7FEBFFC06C13F814FE6C7F6D13807F010F13C01300143F141F 140F123E127E00FE1480A348EB1F0012E06C133E00705B6C5B381E03E06CB45AD801FEC7 FC1C267AA422>II<13F8 D803FEEB01C0D8078FEB03E0390E0F8007121E121C0038140F131F007815C01270013F13 1F00F0130000E015805BD8007E133FA201FE14005B5D120149137EA215FE120349EBFC0E A20201131E161C15F813E0163CD9F003133814070001ECF07091381EF8F03A00F83C78E0 90393FF03FC090390FC00F00272679A42D>I<01F0130ED803FC133FD8071EEB7F80EA0E 1F121C123C0038143F49131F0070140FA25BD8F07E140000E08013FEC6485B150E12015B 151E0003141C5BA2153C000714385B5DA35DA24A5A140300035C6D48C7FC0001130E3800 F83CEB7FF8EB0FC0212679A426>I<01F01507D803FC903903801F80D8071E903907C03F C0D80E1F130F121C123C0038021F131F49EC800F00701607A249133FD8F07E168000E0ED 000313FEC64849130718000001147E5B03FE5B0003160E495BA2171E00070101141C01E0 5B173C1738A217781770020314F05F0003010713016D486C485A000190391E7C07802800 FC3C3E0FC7FC90393FF81FFE90390FE003F0322679A437>I123 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmsy10 10 2 /Fd 2 16 df<007FB81280B912C0A26C17803204799641>0 D15 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmtt10 10 60 /Fe 60 123 df42 D<007FB6FCB71280A46C150021067B9B2C>45 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA 3F80EA1F000B0B708A2C>I<1507ED0F80151FA2153F16005D157E15FE5D14015D14035D A214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C13075C130F5C131F 5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B123F90C9FC5A12 7E12FE5AA25A127821417BB92C>II< 1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C1F1200B3AE007FB512 E0B612F0A36C14E01C3477B32C>IIII54 D<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0 A5EA7FC0EA3F80EA1F000B2470A32C>58 D<1507ED1F80153F15FF14034A1300EC1FFC4A 5AECFFE0491380010790C7FCEB0FFCEB3FF8EB7FE048485A4890C8FCEA0FFEEA1FF8EA7F F0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC0101 7F6D13E0EC3FF86E7EEC07FF6E13801400153F151FED0700212A7BAD2C>60 D<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7FF0EB1FF8EB0FFEEB03FF6D 13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300EC0FFCEC3FF8EC7FE04948 5A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC485AEA7FF0485A138048C9 FC5A1270212A7BAD2C>62 D64 D<14FE497EA4497FA214EFA21307 81A214C7A2010F7FA314C390381F83F0A590383F01F8A490387E00FCA549137E90B512FE A34880A29038F8003FA34848EB1F80A4000715C049130FD87FFEEBFFFC6D5AB514FE6C15 FC497E27347EB32C>I<02FF13700107EBE0F84913F9013F13FD4913FFEBFF813901FE00 7F4848131FD807F0130F1507485A491303485A150148C7FCA25A007EEC00F01600A212FE 5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14F06C6C130716E0D803FC131F 6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F00100138025357DB32C>67 D<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153FED1FC0ED0FE0A2150716 F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E0150FED1FC0153FED7F80ED FF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<007FB612F0B712F8A37E39 03F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8 007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FCA37ED803F0C7FCA71678 1600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0B5FC805C7E26337EB22C >I72 D<007FB512F8B612FCA36C14F839 000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I75 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01 F8A8007FB6FCB7FCA36C15F025337DB22C>IIII<007FB512C0B612F881 15FF6C15802603F00013C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0F E0ED3FC015FF90B61280160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C >II<387FFFFCB67E15E015F86C803907E007FE1401EC007F6F7E151FA26F7E A64B5AA2153F4BC7FCEC01FE140790B55A5D15E081819038E007FCEC01FE1400157F81A8 160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8EA01F029347EB22C>I<90381F F80790B5EA0F804814CF000714FF5A381FF01F383FC003497E48C7FC007E147F00FE143F 5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F0 6C6C7F01077F9038007FFEEC07FF02001380153FED1FC0A2ED0FE0A20078140712FCA56C EC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90B55A5D00F914F0D8F83F13C0D870 0790C7FC23357CB32C>I<007FB612FCB712FEA43AFC007E007EA70078153CC71400B3AF 90383FFFFCA2497F6D5BA227337EB22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C0 3B03F00001F800B3AF6D130300015DA26D130700005D6D130F017F495A6D6C485AECE0FF 6DB5C7FC6D5B010313F86D5B9038003F802B3480B22C>II89 D<007FB6FCB71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC381F80000006C77EC8 127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F 14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C> 97 DI<903803FFE0011F13F8017F13FE48B5FC48804848C6FCEA0FF0485A49137E 4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D133F6C6CEB7F0039 07FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>IIII II< 1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007F B512FCB612FEA36C14FC1F3479B32C>I107 D<387FFFE0B57EA37EEA0003B3B3A5007F B61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD8 7FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E013C0A301C01380B3 3B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D2481A32C>I<397F F01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC01F02807FEC000F5B 5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>II<397FF01FE0 39FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091380007F049EB03F8 5BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE0 9138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFFE0B57EA36C5B2736 7FA32C>I<903903FC078090391FFF0FC0017F13CF48B512EF4814FF3807FE07380FF001 48487E49137F4848133F90C7FC48141F127E150F5AA87E007E141FA26C143F7F6C6C137F 6D13FF380FF0033807FC0F6CB6FC6C14EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A 1480A36E140029367DA32C>II<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA36CEB 00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007EC00 FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E000F8 148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8FCB1 ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003FE023 2E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D137F39 00FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFCB514 FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E017C13 7CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035BA214 FF6D90C7FCA26D5A147C27247EA32C>II<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 df11 DIII<001C131C007F137F39FF80FF80A26D13C0A3007F137F001C 131C00001300A40001130101801380A20003130301001300485B00061306000E130E485B 485B485B006013601A197DB92A>34 D<121C127FEAFF80A213C0A3127F121C1200A41201 1380A2120313005A1206120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB 0700130E131E5B5BA25B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2 127CA67EA3121EA2121F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB 01C0EB00E01460135278BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378 A2137C133C133E131EA2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A2 5B131EA2133E133C137C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD 20>I<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A 5A5A12600A19798817>44 DI<121C127FEAFF80A5EA7F00121C 0909798817>I<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C0 1407A21580140FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A249 5AA25C130FA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B12 07A25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I< EB03F8EB1FFF90387E0FC09038F803E03901E000F0484813780007147C48487FA248C77E A2481580A3007EEC0FC0A600FE15E0B3007E15C0A4007F141F6C1580A36C15006D5B000F 143EA26C6C5B6C6C5B6C6C485A6C6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A> I III<1538A2157815F8 A2140114031407A2140F141F141B14331473146314C313011483EB030313071306130C13 1C131813301370136013C01201EA038013005A120E120C5A123812305A12E0B712F8A3C7 3803F800AB4A7E0103B512F8A325397EB82A>I<0006140CD80780133C9038F003F890B5 FC5D5D158092C7FC14FC38067FE090C9FCABEB07F8EB3FFE9038780F803907E007E09038 8003F0496C7E12066E7EC87EA28181A21680A4123E127F487EA490C71300485C12E00060 5C12700030495A00385C6C1303001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB 1FE0213A7CB72A>II<12301238123E003FB612E0A3 16C05A168016000070C712060060140E5D151800E01438485C5D5DC712014A5A92C7FC5C 140E140C141C5CA25CA214F0495AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8 FC131E233B7BB82A>III<121C12 7FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317>I<121C12 7FEAFF80A5EA7F00121CC7FCB2121C127F5A1380A4127F121D1201A412031300A25A1206 A2120E5A121812385A1260093479A317>I<1538A3157CA315FEA34A7EA34A6C7EA20207 7FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F 1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA349 6E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E> 65 DI<913A01FF800180020FEBE003027F13F8903A01FF807E0790 3A03FC000F0FD90FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F1201484815 1F4848150FA248481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180 A3123F7F001F160318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD9 1FE05C6D6CEB03C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380 313D7BBA3C>IIII III<013FB512E0A39039001FFC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D8 7F005B0070131F6C5C6C495A6C49C7FC380781FC3801FFF038007F80233B7DB82B>IIIIIII III<003FB812E0A3D9C003EB001F273E0001FE13 0348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807FF 80011FB612E0A335397DB83C>III< B5D8FC07B5D8F001B5FCA30007902780001FFEC7EA1FF86C48C7D80FF8EC07E000010307 ED03C01B807F6C6F6C1500A26E5F017F6E6C1406A280013F4A6C5CA280011F4A6D5BEE06 7FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE181FA26D6C6F5BEE300FA26D6C6F485AEE 6007A26D6C4CC7FC9338C003FCA203805D913B7F818001FE06A203C1150EDA3FC3C7EAFF 0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3FF0A302075E4B141FA202035E4B140FA2 02015E4B1407A2020093C8FC4B80503B7EB855>I89 D<003FB7FCA39039FC0001FE01C0130349495A003EC7FC003C4A5A5E0038 141F00784A5A12704B5A5E006014FF4A90C7FCA24A5A5DC712074A5AA24A5A5D143F4A5A A24A5A92C8FC5B495AA2495A5C130F4948EB0180A2495A5C137F495A16034890C7FC5B12 03485AEE0700485A495C001F5D48485C5E4848495A49130FB8FCA329397BB833>II<390180018000031303390700070000 0E130E485B0018131800381338003013300070137000601360A200E013E0485BA400CE13 CE39FF80FF806D13C0A3007F137FA2393F803F80390E000E001A1974B92A>II97 DIIII<147E903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FC ADB512FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>IIIIIII<2703F00FF0 EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F8026 03F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B500 83B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC0 3803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>II<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A07F7000FC0D803FEEB 07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D 13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB5 12C0A328357EA42E>II<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA 03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>II<1318A51338A3 1378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580EB7C03 017E13006D5AEB0FFEEB01F81A347FB220>II IIII<003FB512FCA2EB8003D83E0013F8 003CEB07F00038EB0FE012300070EB1FC0EC3F800060137F150014FE495AA2C6485A495A A2495A495A495AA290387F000613FEA2485A485A0007140E5B4848130C4848131CA24848 133C48C7127C48EB03FC90B5FCA21F247EA325>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmbx12 14.4 43 /Fg 43 122 df45 D<913803FFC0023F13FC91B6FC010315C001 0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248 17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600 3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913 006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313 C0384F7BCD43>48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF8 00C7FCB3B3B3A6007FB712FEA52F4E76CD43>II<91 380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED8 03F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC 1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80 DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218 FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001 F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F158001 0302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F16 7FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580 EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A120748 5A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<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 D70 D73 D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013 FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49 496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A83481B804A83 481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F 6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D 6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F002 0F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E0565479D265 >79 D I<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90 C7000313F0DA7FFC02007F902601FFF0ED3FFE49496F7E49496F7F49496F7F4990C96C7F 4948707F4948707F01FF854A177F48864849717EA24849711380A2481BC04A83481BE0A2 4A83481BF0A3481BF8A291CB7EA3B51AFCAF6C1BF8A26E5FA36C1BF0A36C6D4D13E0A36C 1BC06E5F6C1B806E5F6CDB01FE16006C6D902607FF80495A4C13E06C6D013F6D495A017F 91267F03F85C6D6C90277C00FC015B6D6C49D97E035B6D01806E485B6D6D48D91F8F5B6D 01E0039F90C7FC6D01F06EB45A6DD9FCF85DDA3FFF6E13F0020F6D4913C0020301FF90B5 C8FC020091B512FC031F180C0303181EDB001FEBE3FE93C7EA01FF74133E74137E7413FE F2F8077290B5FC1CFCA285A21CF8A2851CF07314E0A27314C0731480731400735B963800 7FF8F21FE0576A79D265>I I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919 3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5 53517BD05E>84 D97 DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE 0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F130070 5A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C 6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49 C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13 FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48 4980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D 5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE 0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0 4901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C048 8191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06C EE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB 03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F 497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017E B3B3A6B612E0A51B547BD325>I107 DIII<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 III121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmtt12 12 16 /Fh 16 116 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46 D64 DI87 D98 DI101 DI II<383FFFFC487FB5FCA27E7EC7FCB3B3 AD003FB612F84815FCB712FEA26C15FC6C15F8273D7ABC33>108 D<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE 07130301FC01FE7F9039F803FC01A201F013F8A401E013F0B3A53C7FFE0FFF07FF80B548 018F13C0A46C486C01071380322C80AB33>I<4AB4FC263FFC0713C0267FFE1F13F000FF 017F7F91B5FC6CB67E6CEC07FEC6EBF801ECF0004A7F4A7F5CA291C7FCA35BB3A43B3FFF F80FFFFC486D4813FEB56C4813FFA26C496C13FE6C496C13FC302C7FAB33>I112 D114 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 D67 D69 DI73 D76 D78 D80 D87 D98 D101 D103 D108 DI<39 01FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0002601FDC07F 5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB36>II<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0 FF3803F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26 >114 D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C147812 7800F81438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0 C614F0011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15 786C14F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmr17 17.28 22 /Fj 22 125 df14 D67 D73 D76 D<933801FFE0043F13FF4BB612E0030790 38003FF8DB1FF0EB03FEDB7FC0903800FF804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC 4A486F7E4A486F7E4A48707E4ACA6C7E4948717E4948717E4948717E4948717E4948717E 013F854A83017F864948727EA24890CC6C7EA24848737EA24848737EA2000F8749190700 1F87A34848737EA4007F1C80A24985A400FF1CC0AF6C6C4F1380A5003F1C006D61A3001F 63A26D190F000F63A26C6C4F5AA36C6C4F5AA26C6D4E5A6C636E18FF017F626D6C4D90C7 FC6E5F011F616D6C4D5A6D6C4D5A0103616E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1F F0ED03FE6E6C4B5A6E6C4B5ADA01FFED3FE09126007FC0ECFF80DB1FF0D903FEC9FCDB07 FFEB3FF8030190B512E0DB003F91CAFC040113E05A667AE367>79 D<003FBC12F8A49126C000039038C0000301FCC76C49EB007F01F0190F01C019074848F1 03FC90C81701007E1A00007C1B7CA300781B3CA400701B1CA600F01B1E481B0EA7C91800 B3B3B3A54C7FA2041F13F84AB87EA457627CE160>84 D97 D<4AB47E020F13F8023F13FE9139FF007F80D903FC EB07E0D907F0EB01F0D91FE0EB007849488049488049C87E48485D4915FF00034B138048 485CA2485AA2485AA2003F6F130049EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2 001FEE01C07F000F16036D168012076C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D 6C5CD90FF8495AD903FCEB07C0903A00FF803F8091263FFFFEC7FC020F13F80201138032 417CBF3A>99 D101 D<133C13FF487F487FA66C5B6C90C7FC133C90C8FCB3A2EB03C0EA07FF127FA412 01EA007FA2133FB3B3AC497E497EB612E0A41B5F7DDE23>105 D108 DIIII<9039078003F8 D807FFEB0FFFB5013F13C092387C0FE0913881F01F9238E03FF00001EB838039007F8700 148FEB3F8E029CEB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA55CB3B0497E EBFFF8B612FCA42C3F7CBE33>114 D<1438A71478A414F8A31301A31303A21307130F13 1FA2137F13FF1203000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D 6C148016076D6C14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B59 7FD733>116 DIII<007FB500C0010FB512E0A4C691C70003EB FC00D93FFE6E13E0D90FFC16807148C7FC01075E6D6C4A5A6D6C5D6D6D495A606E6C495A 6E6C49C8FC6E6C130E171E6E6C5B6E6C5B6E6C5B5F913801FF016EEB83C092387FC78003 3F90C9FC16EFED1FFE6F5A6F5A826F7E6F7E5D834B7F92380F3FE0ED1E1F033C7F923838 0FF892387807FCEDF003DA01E07F4A486C7E707F4A486D7E4AC7FC021E6E7E021C6E7E02 3C6E7E5C4A6E7E01016F7E49486E7E1307010F6F7F013F83D9FFF04A7F00076D4A13FCB5 6C020FEBFFF8A4453E80BD46>I124 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-- .