4. Beállítási példák
Az itt bemutatásra kerülő példák az ebben a könyvtárban található, letölthető konfigurációs példák módosított változatai.
Ezek a példák használhatók önálló beállító fájlként a tcc fordító segítségével, vagy a példaként szereplő SysV indító szkript használatával.
Az indítószkript a raptor által a LARTC levelezőlistán közzétett szkript egy változata.
Amennyiben a fenti indítószkriptet használod, vess egy pillantást a következő példára: /etc/sysconfig/tcng:
Példa 1. /etc/sysconfig/tcng
# - tcng köztes-konfigurációs fájl
# (Soha nem használok köztes konfigurációs fájlt, nem szeretem)
#
# -- 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
#
#
|
4.1. tcng használata csak a letöltések alakításához
Ezzel a példával sok általános koncepciót próbálok meg bemutatni.
A példát a tc kimenetre a tcc
class-selection-path.tcc parancs használatával lehet fordítani.
Példa 2. /etc/sysconfig/tcng/class-selection-path.tcc
/*
* Egyszerű, magyarázattal ellátott tcng forgalomirányítási beállítófájl.
*
* Martin A. Brown <mabrown@securepipe.com>
*
* 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"
#include "ports.tc"
#define INTERFACE eth0
dev INTERFACE {
egress {
/* A class selection path-ban a szűrők jönnek először! Dsmark */
class ( <$ssh> ) if tcp_sport == 22 && ip_tos_delay == 1 ;
class ( <$audio> ) if tcp_sport == 554 || tcp_dport == 7070 ;
class ( <$bulk> ) \
if tcp_sport == PORT_SSH || tcp_dport == PORT_HTTP ;
class ( <$other> ) if 1 ;
/* Ebben a részben állítjuk be a qdiskeket és az osztályokat */
htb () {
class ( rate 600kbps, ceil 600kbps ) {
$ssh = class ( rate 64kbps, ceil 128kbps ) { sfq; } ;
$audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;
$bulk = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;
$other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ;
}
}
}
}
|

-
A tcng 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 tcng könyvtárhoz képest (alapesetben /usr/lib/tcng/include).
Szigorúan véve nem szükséges a ports.tc és a fields.tc fájlok beszerkesztése (#include), mert a tcc fordító alapból megteszi ezt.
Az #include 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é.
További részletek találhatók a tcng kézikönyv Include files(Beszerkesztett fájlok) című fejezetében.

-
Ezek CPP direktívák. A #define makrók és konstansok létrehozására szolgál. A használatáról többet a tcng kézikönyv Variables (A Változók) fejezetében olvashatsz.

-
Az egress kulcsszó a dsmark szinonimája. Az itt szereplő példa a class selection path módszert használja. Ez az egress kulcsszó használata ebben a konfigurációban, szükséges hozzá a rendszermag dsmark támogatása és a tc.

-
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.
További részletek találhatók a tcng kézikönyvben az on class selection path (A class selection path-ról) fejezetben.

-
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 tcng egyik kényelmi funkciója (a ports.tc 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 IANA regisztrált portok oldalt a szabványos nevekért, vagy vizsgáld meg a ports.tc fájlt.
Mind a nevek, mind a számok használata elfogadott és érvényes.

-
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 if 1 szerkezet a nem osztályozott forgalom maradványának osztályozására szolgál.

-
Itt történik a root qdisc létrehozása, ami jelen esetben az eth0 eszközre van csatlakoztatva.
A tcng kézikönyv referenciaanyagai között az
appendix on
queuing discipline parameters (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.

-
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 eth0 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é.
Akik használtak már HTB-t, azoknak a rate és a ceil paraméterek ismerősek lesznek.
Ezek HTB specifikus paraméterek, és a tcc eszköz segítségével fordíthatók le pontosan.
Nézzük meg a tcng ütem és sebesség specifikáció részben található táblázatot!.

-
Ezen osztály hozzárendelése a változóhoz.
Ezt általában a class selection path részeként végezzük el.

-
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.
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.
4.2. A kétsebességű háromszínű mérőóra használata
Példa 3. /etc/sysconfig/tcng/two-rate-three-color-meter.tcc
/*
* Egyszerű, magyarázattal ellátott tcng forgalomirányítási beállítófájl.
*
* Martin A. Brown <mabrown@securepipe.com>
*
* 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 );
dev eth0 {
egress {
class ( <$full> ) if ip_src == EXCEPTION ;
class ( <$fast> ) if trTCM_green( $meter ) ;
class ( <$slow> ) if trTCM_yellow( $meter ) ;
drop if trTCM_red( $meter ) ;
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; } ;
}
}
}
}
|

-
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 tcng kézikönyv
"Meters" (Mérések) fejezetben találhatók.
Ez a kétsebességes-háromszínű mérő a legösszetettebb mérőóratípus
a tcng 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.
A $meter 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 $meter állapotának
tesztelése céljából,
ezek: trTCM_green, trTCM_yellow,
és trTCM_red.
A hatékonyság növelése érdekében lapozz bele a
Accelerating three color meters (gyorsított háromszínű mérők) fejezetbe.

-
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.

-
A "foglalt" információ-sebesség eléréséig (cir) a csomagok áthaladnak ezen az osztályon
A tokenek eltávolításra kerülnek a cir/cbs tárolóból.
A mérőóra zöld.

-
Itt lesznek osztályozva azok a tárolók, ahol a forgalom sebessége átlépi a cir/cbs értéket.
A pir/pbs bucket
(pir a "peak information rate"="csúcs információ-sebesség"),
pbs 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.
A mérőóra sárga.

-
Azok a tárolók lesznek osztályozva itt, ahol a forgalom sebessége meghaladja a pir/pbs
é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.
A mérőóra piros.