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 
 *
 * 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"     (1)
#include "ports.tc"

#define INTERFACE  eth0  (2)

dev INTERFACE {
    egress { (3)

        /* A class selection path-ban a szűrők jönnek először! Dsmark */ (4)

        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 ; (5)
        class ( <$other> )  if 1 ; (6)

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

        htb () { (7)
            class ( rate 600kbps, ceil 600kbps ) { (8)
                $ssh   = class ( rate  64kbps, ceil 128kbps ) { sfq; } ; 
              (9) $audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;
                $bulk  = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;
                $other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ; (10)
            }
        }
    }
}
      
(1)
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.

(2)
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.
(3)
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.
(4)
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.

(5)
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.

(6)
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.
(7)
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.
(8)
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!.

(9)
Ezen osztály hozzárendelése a változóhoz. Ezt általában a class selection path részeként végezzük el.
(10)
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 
 *
 * 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 );  (1)

dev eth0 {
    egress {
        class ( <$full> )     if ip_src == EXCEPTION      ; (2)
        class ( <$fast> )     if trTCM_green( $meter )    ; (3)
        class ( <$slow> )     if trTCM_yellow( $meter )   ; (4)
        drop                  if trTCM_red( $meter )      ; (5)
        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; } ;
            }
        }
    }
}
      
(1)
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.

(2)
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.
(3)
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.

(4)
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.

(5)
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.