<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [

  <!ENTITY version                      "1.0"                            >
  <!ENTITY pubdate                      "2003 április"                   >
  <!ENTITY email         "<email>mabrown@securepipe.com</email>"         >
  
]>

<article lang="hu">

  <articleinfo>
    <title>Forgalomirányítás tcng és HTB segítségével HOGYAN</title>
    <subtitle>&version; változat</subtitle>
    <author>
      <firstname>Martin</firstname>
      <othername>A.</othername>
      <surname>Brown</surname>
      <affiliation>
        <orgname>
        <ulink url="http://www.securepipe.com">SecurePipe, Inc.</ulink>
        </orgname>
        <orgdiv>Network Administration</orgdiv>
        <address><email>mabrown@securepipe.com</email></address>
      </affiliation>
    </author>

    <pubdate>&pubdate;</pubdate>
    
    <legalnotice id="legalnotice">
      <para>&#x00A9; 2003, Martin A. Brown</para>
      <blockquote>
	<para>A dokumentum szabadon másolható, terjeszthető és módosítható, a GNU Szabad Szoftver Licensz alapján. 
	A leírás 1.1. verziójától kezdve kiadja a FSF, egyazon tartalommal, címlap és hátoldal nélkül. 
	A licensz megtalálható: <ulink url="http://www.gnu.org/licenses/fdl.html">www.gnu.org/copyleft/fdl.html</ulink>.</para>
      </blockquote>
    </legalnotice>

    <revhistory>

      <revision>
	<revnumber>1.0</revnumber>
	<date>2003.04.16</date>
	<authorinitials>tab</authorinitials>
	<revremark>Az LDP által jóváhagyott Első kiadás.</revremark>
      </revision>
          
      <revision>
        <revnumber>0.5</revnumber>
        <date>2002.04.01</date>
        <authorinitials>MAB</authorinitials>
        <revremark>A doksit átneveztem HOGYANra, a TLDP-hez előterjesztve. </revremark>
      </revision>

      <revision>
        <revnumber>0.4</revnumber>
        <date>2002.03.31</date>
        <authorinitials>MAB</authorinitials>
        <revremark>Új példa, bucket gyorstalpaló.</revremark>
      </revision>

      <revision>
        <revnumber>0.3</revnumber>
        <date>2002.03.16</date>
        <authorinitials>MAB</authorinitials>
        <revremark>Javításokat és jegyzeteket írt: Jacob Teplitsky, raptor és Joshua
        Heling.</revremark>
      </revision>

      <revision>
        <revnumber>0.2</revnumber>
        <date>2002.03.15</date>
        <authorinitials>MAB</authorinitials>
        <revremark>Hivatkozások hozzáadása, fazonigazítás, publikálás.</revremark>
      </revision>

      <revision>
        <revnumber>0.1</revnumber>
        <date>2002.03.14</date>
        <authorinitials>MAB</authorinitials>
        <revremark>Első kiadás.</revremark>
      </revision>

    </revhistory>

  </articleinfo>

<section id="copyright">
  <title>Szerzői jog és licenc</title>
  <para>&#x00A9; 2003, Martin A. Brown</para>
  <para>
  A dokumentum szabadon másolható, terjeszthető és módosítható, 
  az FSF által közzétett GNU Szabad Dokumentációs Licenc v1.1, vagy annak későbbi változatában szereplő feltételek szerint. A licenc egy másolata megtalálható a <ulink url="http://www.gnu.org/licenses/fdl.html">www.gnu.org/copyleft/fdl.html</ulink>
  honlapon.
  </para>
  
  <section id="hungarian-translation">
    <title>Magyar fordítás</title>
    <para>
    A magyar fordítást <ulink url="mailto:petvolgyi[kukac]freemail[pont]hu"> Völgyi Péter</ulink> készítette (2004.02.29).
    A lektorálást <ulink url="mailto:dacas@freemail.hu_NO_SPAM">Daczi
    László</ulink> végezte el (2004.03.11).
    A dokumentum legfrissebb változata megtalálható a <ulink url="http://tldp.fsf.hu/index.html">Magyar Linux Dokumentációs
    Projekt</ulink> honlapján.
    </para>
  </section>
</section>

<section id="intro">
  <title>Bevezetés</title>
  <para>
    Ez a dokumentum rövid áttekintést ad a <command>tcng</command>
    (<ulink url="http://tcng.sourceforge.net">Traffic Control - Next Generation; következő generációs forgalomirányítás </ulink>) HTB-vel (<ulink url="http://luxik.cdi.cz/~devik/qos/htb/">Hierarchical Token
    Bucket</ulink>) való használatáról, mely eszközök segítségével a Linux rendszeren forgalomszabályozást végezhetünk.</para>
  <para>
    Ez a gyakorlatsor elsősorban olyan rendszergazdáknak készült, akik: <itemizedlist>
      <listitem>
        <para>
          LEGALÁBB alapszintű forgalomirányítási ismeretekkel rendelkeznek,
		 </para>
      </listitem>
      <listitem>
        <para>
          forrásból tudják FORDÍTANI az iproute2 és a tcng csomagokat, vagy 
        </para>
        <para>
          Ugyanezen csomagokat SRPM-ből telepíteni,</para>
      </listitem>
      <listitem>
        <para>
          Az általuk használt rendszer moduláris szerkezetű rendszermagja támogatja a HTB és DSMARK modulokat,
</para>
        <para>
          VAGY képesek rendszermagot fordítani ezeknek a támogatására. </para>
      </listitem>
    </itemizedlist>
    <note>
      <para>Ez a doksi nem átfogó és nem mértékadó. 
	  A szerző várja mind a pozitív, mind a negatív véleményeket a &email; e-mail címen.
	  A helyreigazításokat, kiegészítéseket is szívesen veszi. </para>
    </note>
  </para>
  <section id="intro-tc">
    <title>A forgalomirányítás fogalma és működése</title>
    <para>
     A forgalomirányítás egy hálózaton, vagy hálózati eszközön történő teljes csomag-várakozósor (packet queuing) alrendszer összefoglaló neve. 
     A forgalomirányítás több műveletből tevődik össze.
     Az osztályozás (classifying) során történik a csomagok azonosítása, majd egyedi várakozósorokba, osztályokba rendezése.
Az engedélyezés (policing) az osztályozásnak megfelelő adatfolyamban a csomagok vagy bájtok számának szabályozását jelenti.
A besorolás (scheduling) a döntéshozatali elem, ahol is a csomagokat az adattovábbításhoz sorrendbe, majd újra sorrendbe rakjuk.
Az alakítás (shaping) az a folyamat, amikor a csomagokat késleltetjük majd továbbküldjük, ezáltal az átviteli sebesség nagyjából egyenlő ütemű, és előre kiszámítható lesz.
</para>
    <para>
      A forgalomirányítás sokoldalúságát kihasználva komplex rendszereket lehet kialakítani, 
      annak érdekében, hogy egy bizonyos folyamat (vagy alkalmazás) részére sávszélességet biztosítsunk,
	   vagy a rendelkezésre álló sávszélességet korlátozzuk bizonyos folyamatok, vagy alkalmazás előtt.
</para>
    <para>
 A forgalomirányítás egyik kulcs-koncepciója a tokenek (jelek) fogalma.
Az engedélyezés vagy alakítás folyamata során ki kell számítani az elküldött bájtok vagy csomagok számát,
 vagyis melyik, milyen sebességgel kerül majd továbbításra.
 Minden csomag vagy bájt (az alkalmazástól függ, hogy melyik) egy jelnek felel meg,
 és az engedélyező- vagy alakító-alkalmazás csak akkor továbbítja a csomagot vagy bájtot, ha az rendelkezik a megfelelő jellel.
Egy alkalmazás metaforikus jeltárolója a tároló (bucket).
 Röviden a tároló jelzi, mind az egyszerre használható jelek számát (ez a tároló mérete), mind pedig a jelek újratöltődésének ütemét (milyen gyorsan töltődik újra a tároló).
  </para>
    <para>
     Bővebbet a 
      <xref linkend="intro-htb"/> példában találsz a tároló használatára a Linux forgalomirányítási rendszerben.
    </para>
    <para>
 Linux rendszereken a forgalomirányítás mindig is komoly kihívást jelentett.
A <command>tc </command> parancssori eszköz kapcsolatot jelent a rendszermag azon részeivel,
amelyek az alakítás, besorolás, engedélyezés, és osztályozás folyamatait végzik. 
A parancs szintaxisa viszont rendkívül bonyolult.
A <command>tcng</command> projekt azzal, hogy a <command>tc</command> parancssori eszköz fölé nyelvi réteget fektet,
 sokkal barátságosabb környezetet biztosít a felhasználónak.
  A <command>tcng</command>-ben írt forgalomirányítási beállítások ezáltal könnyebben kezelhető, kevésbé bonyolult, és - ami talán a legfontosabb - hordozhatóbb lesz.</para>
<para>
</para>
</section>
  <section id="intro-htb">
    <title>Mi az a HTB? </title>
    <para>
     A <ulink url="http://luxik.cdi.cz/~devik/qos/htb/">Hierarchichal Token
      Bucket</ulink> a CBQ-nál egyszerűbb konfigurációs paraméterekkel rendelkező csoportnyi qdisc, melyet Martin Devera alkotott meg.
	   A HTB-ről és használatáról elég sok dokumentum található a szerző honlapján, valamint <ulink url="http://www.docum.org/">Stef Coene weboldalán</ulink> is.
	   Következzen egy rövid kis ismertető a HTB rendszerről. </para>
    <para>
      Alapvetően a HTB egy tetszőleges számú, hierarchikusan felépített  jeltároló (token bucket) (...igen, erre könnyen rájöhettél magadtól is).
Tételezzük fel a legegyszerűbb esetet:
Bármilyen eszközön az elsődleges kilépési sor a <constant>root</constant> qdisc.
    </para>
    <para>
      A <constant>root</constant> qdisc egyetlen osztályt fog tartalmazni (komplex esetekben több osztály is csatolódik a <constant>root</constant> qdisc-hez).
	   Az egyszerű HTB osztályt két paraméter jellemzi: a <constant>rate</constant> (mérték) és a <constant>ceil</constant> (plafon).
	    A top-level (legfelsőbb szintű) osztálynál ezek az értékek meg kell, hogy egyezzenek és a kapcsolat teljes sávszélességét mutatják. 
    </para>
    <para>
      A HTB-nél, a <constant>rate</constant> jelenti egy osztály számára a garantált sávszélességet, a <constant>ceil</constant> pedig a maximális sávszélességet.
A <constant>rate</constant> és a <constant>ceil</constant> közötti sávszélességet mindig a szülő osztálytól veszi az alkalmazás, 
vagyis a legfelső szinten lévő osztálynál a <constant>rate</constant> és a  <constant>ceil</constant> ugyanannyi lesz.
</para>
    <para>
      Számos gyerek-osztály létesíthető ez alatt az osztály alatt, kezdetben mindegyikhez némi sávszélességet rendelve a szülő-osztály meglévő készletéből.
	  Ezekben a gyerek-osztályokban már nem kell a <constant>rate</constant> és a <constant>ceil</constant> paramétereknek megegyezniük, mint a szülő osztálynál.
	   Ez lehetővé teszi, előre meghatározott sávszélesség tartalékolását bizonyos osztályoknak.
	   Lehetővé válik továbbá a HTB számára, hogy összehasonlítsa a meglévő sávszélesség eloszlását az osztályok sávszélességeivel.
	   A következő példa talán rávilágít a lényegre: 
    </para>
    <para>
A Hierarchical Token Bucket magában foglal egy osztálynyi besoroló mechanizmust a Linuxon való forgalomirányításhoz,
és ott van még a felhasználónak a <constant>rate</constant> és a <constant>ceil</constant> paraméter az egyes osztályok abszolút sávszélességének szabályozásához,
 valamint, hogy jelezze a sávszélesség eloszlását, amikor extra sávszélesség adódik (egészen a <constant>ceil</constant>-ig).
    </para>
    <para>
     Jegyezzük meg, hogy a top-level osztály sávszélességének a beállításakor a forgalom alakításnak (shaping) csak akkor lesz értelme,
	 ha a szűk keresztmetszet a hálózat és az Internet között az a gép, amin dolgozunk.
	  Tipikusan ilyen eset az otthoni vagy irodai hálózati környezet, ahol az egész helyi hálózatot DSL vagy T1 kapcsolatok kötik össze.
</para>
    <para>
Gyakorlatilag ez annyit jelent, hogy a top-level osztály sávszélességét úgy kell beállítani,
hogy vesszük az egész, rendelkezésre álló sávszélességet és kivonunk belőle egy keveset.
</para>
  </section>
  <section id="intro-tcng">
    <title>Mi is az a <command>tcng</command>?</title>
    <para>
 A <ulink url="http://tcng.sourceforge.net/"> tcng (Traffic Control - Next Generation, következő generációs forgalomirányítás)</ulink> Werner Almesberger projektje, erőteljes, egységes és egyértelmű nyelvezet megteremtésére,
 amellyel a forgalomirányítási szerkezetek pontosan megfogalmazhatók.
  A <command>tcng</command> csomagban található <command>tcc</command> fordító alakítja át a tcng nyelvet többféle kimeneti formára.
   Alapesetben a <command>tcc</command> beolvas egy fájlt (amely argumentumként, vagy STDIN-ként adható meg) és a STDOUT kimenetre küld egy sorozat <command>tc</command> parancsot, 
   amelyek az elképzelt forgalomirányítási szerkezetet a rendszermagban létrehozzák. (lásd az <command>iproute2</command> fejezetet lentebb)
    </para>
    <para>
      A támogatott rendezési elveket megtalálod a <ulink url="http://linux-ip.net/gl/tcng/node159.html"><command>tcng Queuing discipline parameters</command></ulink>(Útmutató a <command>tcng</command> paramétereihez) dokumentumban.
	   A tcng projekthez a HTB támogatást Jacob Teplitsky írta, aki aktív tag a <ulink url="http://lartc.org/#mailinglist">LARTC levelezési listán</ulink>.
</para>
    <para>
      A <command>tcc</command> eszköz sokféle kimenetet tud produkálni, ez a dokumentum azonban csak a legáltalánosabb és alapértelmezett kimeneti eredménnyel foglalkozik.
	   A <ulink url="http://linux-ip.net/gl/tcng/">TCNG képzikönyv</ulink> foglalkozik bővebben a <command>tcng</command> parancs használatával.
    </para>
    <para>
      A <command>tcsim</command> eszköz képes szimulálni az adott forgalomirányítási szabályokkal beállított rendszermag viselkedését,
	  mégpedig úgy, hogy tcng beállítófájlokat olvas és értelmez.
Habár a <command>tcsim</command> elég jelentős részét képezi a <command>tcng</command> projectnek, itt többet nem foglalkozunk vele. 
    </para>
  </section>
</section>

<section id="requirements">
  <title>Követelmények</title>
  <para>
  Van néhány dolog, ami szükséges ahhoz, hogy 
 <link linkend="requirements-kernel">a rendszermag támogassa a HTB-t és DSMARK-ot</link>, 
    <link linkend="requirements-tc">a tc támogassa a HTB-t és a DSMARK-ot</link>, és, hogy
    <link linkend="requirements-tcng">a tcng működjön</link>. 
  </para>
  <para>
  Ahhoz, hogy ez a dokumentum használható legyen, feltétlenül kell egyrészt egy olyan rendszermag,
  amely támogatja a HTB-t, másrészt a tc alkalmazás (elég csak a doksi címére utalni).
A DSMARK támogatás, a szó szoros értelmében nem feltétel, bár néhány <link linkend="examples">példa</link> (különösen az osztály kiválasztási útvonal, de lehet, hogy más példák is) nem biztos, hogy működik e nélkül. </para>
  <section id="requirements-kernel">
    <title>Rendszermag követelmények</title>
    <para>
   A rendszermag követelményeknek egyszerű megfelelni.
A 2.4.20 és újabb rendszermagok beépített HTB és DSMARK támogatást tartalmaznak.
Szóval egyszerűen csak be kell kapcsolni ezeket az opciókat (QoS/FAIR Queing szekció). A rendszermag beállításáról bővebben olvashatsz a <ulink url="http://diffserv.sourceforge.net/#24">DiffServ project</ulink>  honlapján.
    </para>
    <para>
      2.4.20-nál régebbi rendszermagok esetében 
<ulink url="http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz">ez a link
</ulink> egy folt (patch) a 2.4.17 vagy újabb kernelekhez. 
    </para>
  </section>
  <section id="requirements-tc">
    <title><command>tc</command> követelmények</title>
    <para>
      A <command>tc</command> parancs az <command>iproute2</command> eszközcsomag része.
	  Az <command>iproute2</command> általános leírása a <ulink url="http://linux-ip.net/>http://linux-ip.net/</ulink> valamint az <ulink url=http://linux-ip.net/gl/ip-cref/"> <command>iproute2</command> kézikönyv</ulink> oldalakon található.
A csomagot közvetlenül az <ulink url="ftp://ftp.inr.ac.ru/ip-routing/">Alexey Kuznyecov FTP archívuma</ulink> webhelyről lehet letölteni, de a legtöbb disztribúcióban megtalálható csomagként is.
Ha RPM csomagkezelőt használsz, erről a 
      <ulink url="http://linux-ip.net/traffic-control/iproute-2.4.7-7.src.rpm">SRPM</ulink> webhelyről letöltheted a forrást, majd lefordíthatod a rendszernek megfelelően.
</para>
    <para>
      Ha az <command>iproute2</command> programot forrásból telepíted, használható <ulink url="http://luxik.cdi.cz/~devik/qos/htb/">Martin Devera HTB</ulink> webhelyen található <ulink url="http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz"> <command>tc</command> programhoz szükséges folt</ulink>.
	   Erre azért van szükség, hogy a <command>tc</command> programban legyen HTB támogatás.
    </para>
    <para>
 A <command>tc</command>-nek támogatnia kell továbbá a dsmark-ot, a diffserv jelölő mechanizmust.
 Szerencsére ez egyszerűen megoldható, 
az <command>iproute2</command> forrásában található <filename>Config</filename> fájlban az alábbiakat kell megváltoztatni:
a <computeroutput>TC_CONFIG_DIFFSERV=n</computeroutput> sort <computeroutput>TC_CONFIG_DIFFSERV=y</computeroutput> -ra kell cserélni, 
majd a csomagot újra kell fordítani.
    </para>
    <para>
Az <ulink url="http://linux-ip.net/traffic-control/iproute-2.4.7-7.src.rpm">SRPM</ulink> dsmark és HTB támogató <command>tc</command> binárist készít, így az alábbi példáknál már nem lesz gond. </para>
  </section>
  <section id="requirements-tcng">
    <title><command>tcng</command> követelmények</title>
    <para>
    Talán a telepítés legkönnyebb része a <command>tcng</command> támogatás megoldása.
	Csak ki kell csomagolni a forrást, és futtatni kell a 
<userinput>./configure --no-tcsim</userinput> parancsot fordítás előtt. 
    </para>
    <para>
 Ha RPM-alapú Linux fut a gépen, használhatod a SPEC fájlt <filename>tcng/build/tcng.spec</filename> a fordításhoz, vagy letöltheted és fordíthatod <ulink url="http://linux-ip.net/traffic-control/tcng-9d-1.src.rpm">ezt az SRPM-t</ulink>. Az SRPM két csomagot készít: tcc és tcc-devel.
Csak a tcc-re lesz szükség a beállításokhoz. 
    </para>
    <para>
A tcc fordító használatához szükség van még a <command>cpp</command> csomagra is.
  Ezt a <command>tcc</command> használja.
    </para>
  </section>
</section>

<section id="examples">
  <title>Beállítási példák</title>
  <para>
   Az itt bemutatásra kerülő példák az <ulink url="http://linux-ip.net/code/tcng/">ebben a könyvtárban</ulink> található, letölthető konfigurációs példák módosított változatai.
  </para>
  <para>
    Ezek a példák használhatók önálló beállító fájlként a <command>tcc</command> fordító segítségével, vagy a példaként szereplő <ulink url="http://linux-ip.net/code/tcng/tcng.init">SysV indító szkript</ulink> használatával.
	Az indítószkript a <ulink url="http://mailman.ds9a.nl/pipermail/lartc/2002q4/005411.html"> raptor által a LARTC levelezőlistán közzétett </ulink> szkript egy változata.
  </para>
  <para>
Amennyiben a fenti indítószkriptet használod, vess egy pillantást a következő példára: <filename>/etc/sysconfig/tcng</filename>:
  </para>
  <example id="ex-sysconfig-tcng">
    <title><filename>/etc/sysconfig/tcng</filename></title>
    <programlisting>
# - tcng köztes-konfigurációs fájl
#   (Soha nem használok köztes konfigurációs fájlt, nem szeretem)

#<!-- trick XML parser: file is CDATA --><![CDATA[
# -- 2003-03-15 created; -MAB
# -- 2003-03-31 modified to allow ENVAR override; -MAB
#
# -- ez a könyvtár fogja tartalmazni az összes erre a host-ra 
#    vonatkozó tcng beállítást

TCCONFBASEDIR=${TCCONFBASEDIR:-/etc/sysconfig/tcng-configs}
#
# -- ez az aktív tcng beállítófájl, FIGYELEM! mivel a tcng támogatja a 
#    az #include szerkezet használatát, a $TCCONFBASEDIR 
#    változóban tárolt beállítófájlba beépíthetőek a konfigurációs
#    modulok.

#
TCCONF=${TCCONF:-$TCCONFBASEDIR/global.tcc}

tcstats=${tcstats:-no}   # -- statisztikai jelentések kikapcsolása
tcstats=${tcstats:-yes}  # -- a tc-t "-s" kapcsolóval indítja

tcdebug=${tcdebug:-0}    # -- tipikus indítószkript-használat
tcdebug=${tcdebug:-1}    # -- egy csipetnyi információ az eseményekről
tcdebug=${tcdebug:-2}    # -- hibakövetési információk
#
#
# még egy lehetőség: felülbírálhatók az alapbeállításként használt tc és tcc eszközök
# az elérési út megadásával, például:
#
#  tc=/usr/local/bin/tc
#  tcc=/usr/local/tcng/bin/tcc
#
#]]><!-- end of XML CDATA trick -->
    </programlisting>
  </example>
  <section id="examples-adsl">
    <title>tcng használata csak a letöltések alakításához</title>
    <para>
      Ezzel a példával sok általános koncepciót próbálok meg bemutatni.
A példát a tc kimenetre a <userinput>tcc
 <filename>class-selection-path.tcc</filename></userinput> parancs használatával lehet fordítani.
    </para>
    <example id="ex-example-0">
      <title><filename>/etc/sysconfig/tcng/class-selection-path.tcc</filename></title>
      <programlisting>
/*
 * Egyszerű, magyarázattal ellátott tcng forgalomirányítási beállítófájl.
 *
 *   Martin A. Brown &email;
 *
 * Példa:  A class selection path használata.
 *
 * (Amennyiben HTML formában olvasod a szerkesztett kimenetet, a hívások
 * linkként jelennek meg a szövegben.)
 *
 */

#include "fields.tc"     <co id="ex-0-includes" linkends="ex-0-includes-text"/>
#include "ports.tc"

#define INTERFACE  eth0  <co id="ex-0-defines" linkends="ex-0-defines-text"/>

dev INTERFACE {
    egress { <co id="ex-0-egress" linkends="ex-0-egress-text"/>

        /* A class selection path-ban a szűrők jönnek először! Dsmark */ <co id="ex-0-csp" linkends="ex-0-csp-text"/>

        class ( &lt;$ssh&gt; )    if tcp_sport ==  22 &amp;&amp; ip_tos_delay == 1 ;
        class ( &lt;$audio&gt; )  if tcp_sport == 554 || tcp_dport == 7070 ;
        class ( &lt;$bulk&gt; ) \
            if tcp_sport == PORT_SSH || tcp_dport == PORT_HTTP ; <co id="ex-0-portusage" linkends="ex-0-portusage-text"/>
        class ( &lt;$other&gt; )  if 1 ; <co id="ex-0-leftover" linkends="ex-0-leftover-text"/>

        /* Ebben a részben állítjuk be a qdiskeket és az osztályokat */ 

        htb () { <co id="ex-0-root" linkends="ex-0-root-text"/>
            class ( rate 600kbps, ceil 600kbps ) { <co id="ex-0-topclass" linkends="ex-0-topclass-text"/>
                $ssh   = class ( rate  64kbps, ceil 128kbps ) { sfq; } ; 
              <co id="ex-0-classvariable" linkends="ex-0-classvariable-text"/> $audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;
                $bulk  = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;
                $other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ; <co id="ex-0-embedsfq" linkends="ex-0-embedsfq-text"/>
            }
        }
    }
}
      </programlisting>
      <calloutlist>
        <callout
          arearefs="ex-0-includes"
          id="ex-0-includes-text">
          <para>
           A <command>tcng</command> nyelvezete lehetővé teszi a C-hez hasonló beszerkeszthető (include) fájlok használatát, amivel bármilyen fájlt a forráskódba illeszthetünk.
A beszerkeszthető fájlok elérési útja relatív az aktuális könyvtárhoz, vagy a <command>tcng</command> könyvtárhoz képest (alapesetben <filename>/usr/lib/tcng/include</filename>).
Szigorúan véve nem szükséges a <filename>ports.tc</filename> és a <filename>fields.tc</filename> fájlok beszerkesztése (<constant>#include</constant>), mert a <command>tcc</command> fordító alapból megteszi ezt.
</para>
          <para>
            Az <constant>#include</constant> használata rugalmas változó definiálást, és a forgalomirányítás általános elemeinek gyors beszerkeszthetőségét teszi lehetővé.</para>
          <para>
            További részletek találhatók a tcng kézikönyv <ulink url="http://linux-ip.net/gl/tcng/node35.html">Include files</ulink>(Beszerkesztett fájlok) című fejezetében.
          </para>
        </callout>
        <callout
          arearefs="ex-0-defines"
          id="ex-0-defines-text">
          <para>
Ezek CPP direktívák. A <constant>#define</constant> makrók és konstansok létrehozására szolgál. A használatáról többet a <command>tcng</command> kézikönyv <ulink url="http://linux-ip.net/gl/tcng/node111.html">Variables</ulink> (A Változók) fejezetében olvashatsz. 
          </para>
        </callout>
        <callout
          arearefs="ex-0-egress"
          id="ex-0-egress-text">
          <para>
Az <constant>egress</constant> kulcsszó a <constant>dsmark</constant> szinonimája. Az itt szereplő példa a <ulink url="http://linux-ip.net/gl/tcng/node32.html">class selection path</ulink> módszert használja. Ez az <constant>egress</constant> kulcsszó használata ebben a konfigurációban, szükséges hozzá a rendszermag dsmark támogatása és a <command>tc</command>.
          </para>
        </callout>
        <callout
          arearefs="ex-0-csp"
          id="ex-0-csp-text">
          <para>
            A class selection path egyfajta megközelítési módja a forgalom alalkításnak. A class selection path-ban a csomag a routerbe kerülésekor jelölést kap (DiffServ jel). Ennek a kezdeti osztályozásnak az eredményeként a router bármennyi műveletet végrehajthat, bármennyi szabályt (engedélyezés, besorolás, alakítás) alkalmazhat a csomagon. </para>
          <para>
További részletek találhatók a <command>tcng</command> kézikönyvben az <ulink url="http://linux-ip.net/gl/tcng/node32.html">on class selection path</ulink> (A class selection path-ról) fejezetben.</para>
        </callout>
        <callout
          arearefs="ex-0-portusage"
          id="ex-0-portusage-text">
          <para>
Ez a példa a kapuk (portok) jelölésénél a nevek használatát mutatja be a számok használata helyett. Ez a <command>tcng</command> egyik kényelmi funkciója (a <filename>ports.tc</filename> automatikus beszerkesztésén keresztül válik elérhetővé). A kapuk elnevezésénél az IANA által használt kapu-nevek az irányadók.
Lásd az <ulink url="http://www.iana.org/assignments/port-numbers">IANA regisztrált portok </ulink> oldalt a szabványos nevekért, vagy vizsgáld meg a <filename>ports.tc</filename> fájlt.
          </para>
          <para>
Mind a nevek, mind a számok használata elfogadott és érvényes. </para>
        </callout>
        <callout
          arearefs="ex-0-leftover"
          id="ex-0-leftover-text">
          <para>
Figyeljük meg ezt a különös konstrukciót, amely az összes eddig nem osztályozott csomagot osztályba sorolja.
 Minden, eddig nem osztályozott csomag a "$other" osztályba kerül.
 Az <constant>if 1</constant> szerkezet a nem osztályozott forgalom maradványának osztályozására szolgál.</para>
        </callout>
        <callout
          arearefs="ex-0-root"
          id="ex-0-root-text">
          <para>
Itt történik a root qdisc létrehozása, ami jelen esetben az <constant>eth0</constant> eszközre van csatlakoztatva.
A <command>tcng</command> kézikönyv referenciaanyagai között az
            <ulink url="http://linux-ip.net/gl/tcng/node159.html">appendix on
            queuing discipline parameters</ulink> (Függelék: sorba rendezés paraméterezése) fejezetben minden qdisc-hez találhatunk paramétereket.
Bármilyen qdisc paraméter beilleszthető a zárójelek közé, ugyanúgy, ahogy egy későbbi példánál látni fogjuk.
Paraméter nélküli használat esetén a zárójeleket nem kötelező kitenni.</para>
        </callout>
        <callout
          arearefs="ex-0-topclass"
          id="ex-0-topclass-text">
          <para>
Ebben a példában a legfelső-szintű osztályhoz a maximális sávszélességet rendeljük, ami ezen osztályon keresztül mehet.
Tételezzük fel, hogy az <constant>eth0</constant> a belső hálózati csatolója a gépnek.
Ez a teljes sávszélességet 600 kilobit/s-ra korlátozza a belső hálózat felé.
</para>
          <para>
Akik használtak már HTB-t, azoknak a <constant>rate</constant> és a <constant>ceil</constant> paraméterek ismerősek lesznek.
Ezek HTB specifikus paraméterek, és a <command>tcc</command> eszköz segítségével fordíthatók le pontosan.
Nézzük meg a <link linkend="tb-misc-rates"><command>tcng</command> ütem és sebesség specifikáció</link> részben található táblázatot!.
          </para>
        </callout>
        <callout
          arearefs="ex-0-classvariable"
          id="ex-0-classvariable-text">
          <para>
Ezen osztály hozzárendelése a változóhoz.
Ezt általában a class selection path részeként végezzük el.</para>
        </callout>
        <callout
          arearefs="ex-0-embedsfq"
          id="ex-0-embedsfq-text">
          <para>
Ahogyan azt Martin Devera is leírta a HTB honlapján, egy beágyazott SFQ 
minden osztálynak ad egy sorba rendező algoritmust a konkurens folyamatoknak
az adott osztályon keresztüli csomagküldés erőforrásainak megfelelő elosztásához.  
Figyeljünk a paraméterek hiányára a beágyazott sorba rendezés elvénél. 
          </para>
          <para>
Ha nem határozunk meg sorba rendezési szabályokat a végső osztályoknál,
 akkor az alapbeállítás érvényesül, vagyis a pfifo_fast qdisc.

 Egy sztochasztikus tiszta sorba rendező qdisc beszerkesztése a vég-osztályokban meggátolja azt,
 hogy egyetlen kapcsolat uralja a sávszélességet az adott osztályban.
</para>
        </callout>
      </calloutlist>
    </example>
    <para>
    </para>
    <para>
    </para>
  </section>
  <section id="examples-1">
    <title>A kétsebességű háromszínű mérőóra használata</title>
    <para>
    </para>
    <example id="ex-example-1">
      <title><filename>/etc/sysconfig/tcng/two-rate-three-color-meter.tcc</filename></title>
      <programlisting>
/*
 * Egyszerű, magyarázattal ellátott tcng forgalomirányítási beállítófájl.
 *
 *   Martin A. Brown &email;
 *
 * Példa: Mérőóra használata
 *
 * (Amennyiben HTML formában olvasod a szerkesztett kimenetet, a hívások
 * hivatkozásként jelennek meg a szövegben.)
 *
 */

#define   EXCEPTION      192.168.137.50
#define   INTERFACE      eth0

$meter = trTCM( cir 128kbps, cbs 10kB, pir 256kbps, pbs 10kB );  <co id="ex-1-mdefine" linkends="ex-1-mdefine-text"/>

dev eth0 {
    egress {
        class ( &lt;$full&gt; )     if ip_src == EXCEPTION      ; <co id="ex-1-notmetered" linkends="ex-1-notmetered-text"/>
        class ( &lt;$fast&gt; )     if trTCM_green( $meter )    ; <co id="ex-1-green" linkends="ex-1-green-text"/>
        class ( &lt;$slow&gt; )     if trTCM_yellow( $meter )   ; <co id="ex-1-yellow" linkends="ex-1-yellow-text"/>
        drop                  if trTCM_red( $meter )      ; <co id="ex-1-red" linkends="ex-1-red-text"/>
        htb {
            class ( rate 600kbps, ceil 600kbps ) {
                $fast = class ( rate 256kbps, ceil 256kbps ) { sfq; } ;
                $slow = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;
                $full = class ( rate 600kbps, ceil 600kbps ) { sfq; } ;
            }
        }
    }
}
      </programlisting>
      <calloutlist>
        <callout
          arearefs="ex-1-mdefine"
          id="ex-1-mdefine-text">
          <para>
            Ez az osztályozáshoz használt mérőóra deklarációja.
A háttértechnológia a mérés kivitelezésére az engedélyezés (policing).
 További információk a <ulink url="http://linux-ip.net/gl/tcng/node53.html">tcng kézikönyv
</ulink> "Meters" (Mérések) fejezetben találhatók.
          </para>
          <para>
<???FIXME???> Ez a kétsebességes-háromszínű mérő a legösszetettebb mérőóratípus
a <command>tcng</command> nyelvben. Ez a mérőóra a zöld, sárga és piros színeket ad vissza, a tárolók foglaltságától és csúcsértékeitől (peak) függően.
Ha a mért sebesség nagyobb, mint a foglaltságot jelző érték, akkor sárga színű lesz a jelzés, ha a mért sebesség túllépi a csúcsértéket (a csúcsérték itt nem a maximális, hanem kiemelkedő értéket jelent - a lektor), akkor piros színű lesz a jelzés.
          </para>
          <para>
    A <varname>$meter</varname> változó a mérőóra típusának megfelelő függvényekkel 
    működtethető. Ebben az esetben három függvény jöhet szóba a <varname>$meter</varname> állapotának 
    tesztelése céljából, 
    ezek: <function>trTCM_green</function>, <function>trTCM_yellow</function>,
            és <function>trTCM_red</function>. 
            A hatékonyság növelése érdekében lapozz bele a 
            <ulink url="http://linux-ip.net/gl/tcng/node58.html">Accelerating three color meters</ulink> (gyorsított háromszínű mérők) fejezetbe.
          </para>
        </callout>
        <callout
          arearefs="ex-1-notmetered"
          id="ex-1-notmetered-text">
          <para>
            A példában a 192.168.137.50  IP címet kizártuk az eth0 eszközről induló engedélyezési listából.
          </para>
        </callout>
        <callout
          arearefs="ex-1-green"
          id="ex-1-green-text">
          <para>
A "foglalt" információ-sebesség eléréséig (<constant>cir</constant>) a csomagok áthaladnak ezen az osztályon
A tokenek eltávolításra kerülnek a  <constant>cir</constant>/<constant>cbs</constant> tárolóból.
          </para>
          <para>
A mérőóra zöld.
          </para>
        </callout>
        <callout
          arearefs="ex-1-yellow"
          id="ex-1-yellow-text">
          <para>
Itt lesznek osztályozva azok a tárolók, ahol a forgalom sebessége átlépi a <constant>cir</constant>/<constant>cbs</constant> értéket.
A <constant>pir</constant>/<constant>pbs</constant> bucket
            (<constant>pir</constant> a "peak information rate"="csúcs információ-sebesség"),
            <constant>pbs</constant> a "peak burst size"="csúcs kitörési sebesség"). 
            Ez teszi lehetővé egy bizonyos adatfolyam számára, hogy garantált sávszélességet kapjon egy osztályon belül, majd újra osztályozásra kerüljön.
           </para>
          <para>
  A mérőóra sárga.
            </para>
        </callout>
        <callout
          arearefs="ex-1-red"
          id="ex-1-red-text">
          <para>
 Azok a tárolók lesznek osztályozva itt, ahol a forgalom sebessége meghaladja a <constant>pir</constant>/<constant>pbs</constant> 
 értéket. Az általános beállítások azt eredményezik, hogy a forgalom a csúcssebesség feletti tartományba kerül, habár a forgalmat újra osztályozva a garantált osztályból a legjobb-teljesítmény osztályba kerülne.
          </para>
          <para>
 A mérőóra piros.
          </para>
        </callout>
      </calloutlist>
    </example>
    <para>
    </para>
  </section>

  <!--
               ** ide jön még több példa **
    -->

  <!--
  <section id="examples-2">
    <title></title>
    <para>
    </para>
  </section>
  <section id="examples-3">
    <title></title>
    <para>
    </para>
  </section>
    -->
    
</section>

<section id="misc">
  <title>Egyéb megjegyzések </title>
  <para>
  Hál Istennek a  <command>tcng</command> elkerüli a <command>tc</command>
kisebb kényelmetlenségeit. A következő táblázat ábrázolja ezen eszközök szintaxisát és
mértékegységeit, angol megfelelőikkel együtt.
   </para>
  <table id="tb-misc-rates">
    <title>Sebesség/Ütem szintaxis: tcng vs. tc</title>
    <tgroup cols="3" align="left" colsep="1" rowsep="1">
      <thead>
        <row>
          <entry>tcng</entry>
          <entry>Angol megfelelő</entry>
          <entry>tc</entry>
        </row>
      </thead>
      <tbody>
        <row>
          <entry>bps</entry>
          <entry>bit(s) per second</entry>
          <entry>bit</entry>
        </row>
        <row>
          <entry>Bps</entry>
          <entry>byte(s) per second</entry>
          <entry>bps (argh!)</entry>
        </row>
        <row>
          <entry>kbps</entry>
          <entry>kilobit(s) per second</entry>
          <entry>kbit</entry>
        </row>
        <row>
          <entry>kBps</entry>
          <entry>kilobyte(s) per second</entry>
          <entry>kbps</entry>
        </row>
        <row>
          <entry>Mbps</entry>
          <entry>megabit(s) per second</entry>
          <entry>mbit or Mbit</entry>
        </row>
        <row>
          <entry>MBps</entry>
          <entry>megabyte(s) per second</entry>
          <entry>mbps or Mbps</entry>
        </row>
        <row>
          <entry>pps</entry>
          <entry>packet per second</entry>
          <entry>??</entry>
        </row>
      </tbody>
    </tgroup>
  </table>
  <para>
  Ez csak minimális igazítást igényel az ősrégi <command>tc</command> felhasználóktól,
   de sokkal jobb választás az angolul beszélőknek ha a megérzéseikre szeretnének hagyatkozni.
   </para>
  <para>
   Például a <command>tcng</command> konfigurációjában használhatjuk a sebesség jelölésére a konvencionális kifejezéseket:
     <userinput>100Mbps</userinput>, <userinput>128kbps</userinput>, sőt  <userinput>2Gpps</userinput>.
   Bővebben a <command>tcng</command> kézikönyv
    <ulink url="http://linux-ip.net/gl/tcng/node21.html">Units</ulink> (a mértékegységekről) fejezetében olvashatunk.
  </para>
  <para>
    A forgalomirányítás hatékonysága érdekében meg kell keresni a hálózat szűk keresztmetszeti pontjait.
    Legtöbb esetben ezeken a helyeken kell elvégezni a műveleteket. </para>
  <para>
  </para>
</section>
  
<section id="further">
  <title>További leírások és hivatkozások</title>
  <para>
  </para>
  <itemizedlist>
    <listitem>
      <para>
        <ulink url="http://diffserv.sourceforge.net/">the linux DiffServ
        project</ulink>
      </para>
    </listitem>
    <listitem>
      <para>
        <ulink url="http://luxik.cdi.cz/~devik/qos/htb/">HTB
        site (<emphasis>Martin <quote>devik</quote> Devera</emphasis>)</ulink> (HTB honlap)
      </para>
    </listitem>
    <listitem>
      <para>
         <ulink url="http://tcng.sourceforge.net/">Traffic Control Next
         Generation (<command>tcng</command>)</ulink> (következő generációs forgalomirányítás)
      </para>
      <para>
        <ulink url="http://linux-ip.net/gl/tcng/">TCNG manual
        (<emphasis>Werner Almesberger</emphasis>)</ulink> (TCNG kézikönyv)
      </para>
    </listitem>
    <listitem>
      <para>
        <ulink url="ftp://ftp.inr.ac.ru/ip-routing/">iproute2
        (<emphasis>Alexey Kuznetsov</emphasis>)</ulink>
      </para>
      <para>
        <ulink url="http://linux-ip.net/gl/ip-cref/"><command>iproute2</command>
        manual (<emphasis>Alexey Kuznetsov</emphasis>)</ulink> (iproute2 kézikönyv)
      </para>
    </listitem>
    <listitem>
      <para>
        <ulink url="http://www.docum.org/">Research and documentation on
        traffic control under linux (<emphasis>Stef Coene</emphasis>)</ulink> (Forrásanyagok és dokumentációk a forgalomirányításról Linux alatt)
      </para>
    </listitem>
    <listitem>
      <para>
        <ulink url="http://lartc.org/howto/">LARTC HOWTO (<emphasis>bert
        hubert, et.  al.</emphasis>)</ulink>
      </para>
    </listitem>
    <listitem>
      <para>
        <ulink url="http://linux-ip.net/">guide to IP networking with
        linux (<emphasis>Martin A. Brown</emphasis>)</ulink> (Az IP hálózati protokoll használata Linuxszal)
      </para>
    </listitem>
  </itemizedlist>
</section>

</article>
