Dokument spracovali : Michal Bruncko ( timeos [at] student.utc.sk ), Andrej Poliak, Marián Goliaš
Vypracované ako smestrálna práca predmetu Širokopásmové siete v šk. roku 2005/06 pri realizácií Linux ATM smerovača pre LANE.
LAN emulácia (LAN emulation)
Okrem Classical IP over ATM, môže byť prenos IP cez ATM zabezpečený technikou LAN Emulation (LANE). LANE emuluje charakteristiky bežnej LAN siete ako napr. podpora broadcast vysielania a pod.
Balík LANE obsahuje 4 komponenty
- lecs – LAN Emulation Configuration Server démon
- bus – Broadcast and Unknown Server démon
- les – LAN Emulation Server démon
- zeppelin – ATM LAN Emulation klient démon (LED) Zeppelin
Tento dokument berte ako instant návod na sfunkčnenie LAN emulácie nad ATM v Linuxe . To znamená, že ak budete presne postupovať ako je uvedené ďalej, tak by ste mali byť s vytvorením LANE servera/klienta úspešní. Všetky podrobné informácie o LANE komponentoch a fungovania sú nad rámec tohto dokumentu. Návod primárne popisuje postup pri zostrojovaní LANE – servera. Klient je iba osekaný server a jeho skript je uvedený v závere dokumentu.
Základné predpoklady
Teda ako by to malo reálne vyzerať a čo potrebujeme?
- Majme 2 stanice s ATM kartami (ATM ForeRunner LE155) a aj ATM switch ForeRunner do ktorého sú stanice pripojené
- Jedno PC bude slúžiť ako LES, BUS a LECS server a zároveň aj ako klient
- Druhé PC bude iba klient, ktorý si údaje o LES a BUS serveroch bude získavať pomocou vzdialeného LECS servera z prvého PC
- Obe stanice budú clenmi rovnakej elany (napr. elan1 ) a na IP úrovni budú v rovnakej podsieti (napr. 192.168.1.0/24)
Na to, aby sme mohli LAN emuláciu na Linuxe zrealizovať, musia byť splnené základné podmienky:
- kernel musí mať zakompilovanú podporu nami použitej ATM karty
- a v prípade kompilácie ako moduly treba tieto do jadra natiahnúť
Ovládač je skompilovaný do 3 modulov: idt77 252 .o , suni.o a nicstar.o . Ovládač suni.o je suni PHY driver (155Mbps). Ovládač idt77252.o je podporou pre karty s čipom IDT 77105 a kompatibilných. Ovládač nicstar.o je podporou sieťových kariet NICSTAR. Všetky moduly nahráme do kernelu nasledovnými príkazmi:
[root@atmrouter /]# modprobe nicstar [root@atmrouter /]# modprobe idt77252 [root@atmrouter /]# modprobe suni
Možnosť LAN emulácie treba mať zakompilovanú tiež v kerneli (buď ako modul alebo ako priamo v jadre). LEC – LAN Emulation Client. V prípade modulu sa jedná o súbor lec.o, ktorý treba natiahnúť do jadra príkazom (pozn.: v prípade, že LANE server nebude vystupovať zároveň aj ako klient, tak je táto možnosť nepovinná):
[root@atmrouter /]# modprobe lec
Spúšťanie démonov a konfigurácia adries
Teraz treba pustiť nevyhnutné démony (obsiahnuté v balíku atm-tools , ktorý treba zvyčajne doinštalovať. Pre fedoru: yum install atm-tools , pre debian: apt-get install atm-tools). Pre základnú ATM konektivitu sú potrebné dva démony: atmsigd a ilmid . Démon atmsigd implementuje podporu signálneho protokolu ATM UNI. Je nevyhnutný pre komunikáciu cez prepínané virtuálne okruhy (SVC). Preto je nevyhnutné, aby bol spustený ako prvý. ILMI (Interim Local Management Interface) je protokol pre výmenu konfiguračných informácií, najmä sieťových ATM adries. Ak je na sieti ATM switch, ktorý tomuto protokolu rozumie (náš ATM switch mu rozumel), dokáže stanici automaticky prideliť ATM adresu (ILMI v podstate pripomína službu DHCP). Najprv je potrebné spustiť démona atmsigd a po jeho štarte démona ilmid . Oba príkazy poznajú prepínač -b , ktorý zabezpečí ich okamžité odsunutie do pozadia. Oba démony sa preto odporúča spúšťať spôsobom:
[root@atmrouter /]# atmsigd -b [root@atmrouter /]# ilmid –b
Teraz treba nadefinovať niekoľko ATM adries pre naše ATM rozhranie. LANE pozostáva (ako je vyššie uvedené) zo štyroch častí: BUS, LES, LECS a zeppelin .
Je nutné, aby každý z týchto komponentov mal vlastnú ATM adresu, s ktorou bude operovať. Po spustení predchádzajúcich démonov bude mať naša ATM karta defaultne pridelenú jednu ATM adresu (zistíme ju príkazom atmaddr ). Pridelenie ATM adresy zabezpečí démon ilmid , ktorý sme v predchádzajúcom kroku spustili. Zo skúsenosti sme zistili, že pre danú ATM kartu pridelí ATM switch vždy tú istú ATM adresu. (Druhá možnosť by spočívala v nespúšťaní démona ilmid a pridelení ATM adresy manuálne, čo by bolo pre servre asi vhodnejší spôsob, lebo by tá ATM adresa bola vždy rovnaká). Túto použijeme v našom prípade pre LECS server. Nasledujúcimi príkazmi pridelíme pre naše ATM rozhranie ďalšie adresy (prepínač –a slúži práve na pridávanie ďalších ATM adries):
[root@atmrouter /]# atmaddr -a 7000580FFE1000000F20F38770020485B547A01 [root@atmrouter /]# atmaddr -a 7000580FFE1000000F20F38770020485B547A02 [root@atmrouter /]# atmaddr -a 7000580FFE1000000F20F38770020485B547A03
(použitie adries sme si určili nasledovne: prvú uvedenú bude používať LES server, druhú BUS a tretia je určená pre samotného LANE klienta – zeppelin -a. V tomto prípade bola defaultne pridelená adresa nasledovná: 47000580FFE1000000F20F38770020485B547A00). Po zadaní všetkých adries si ich tiež korektné zadanie overiť príkazom atmaddr .
Spúšťanie samotných LANE komponentov
LES server je implementovaný v programe les . Podobne, BUS je implementovaný v programe bus . Jediným dôležitým prepínačom, ktorý oba príkazy poznajú, je -f <konfiguračný súbor> na udanie cesty ku konfiguračnému súboru. Konfiguračný súbor je pre oba programy rovnaký. Jeho obsah je v našom prípade nasledovný (nazvaný les.conf ):
#-----------------------------START-OF-FILE------------------ [main] memdebug=False debug=False [load] memdebug=False debug=False [conn] debug=False # S1 - ATM adresa LES servera S1=:47:00:05:80:FF:E1:00:00:00:F2:0F:38:77:00:20:48:5B:54:7A:01 # S2 - Typ emulovanej LAN. les aj bus podporuje len hodnotu 802.3 S2="802.3" # S3 - maximálna velkost rámca S3=1516 # S4 - timeout medzi vybudovaním Control Direct VCC medzi LEC a LES a príjmom správy LE_JOIN_REQUEST od klienta S4=15 # S5 - maximálny vek rámca, v súcasnosti nepoužívaná hodnota S5=6 # S6 - ATM adresa BUS servera S6=:47:00:05:80:FF:E1:00:00:00:F2:0F:38:77:00:20:48:5B:54:7A:02 # ELANNAME - nepovinný parameter - meno LANE siete ELANNAME="elan1" #-----------------------------END-OF-FILE------------------
Oba servre sa spúšťajú nasledovne:
[root@atmrouter /]# bus -f les.conf & [root@atmrouter /]# les -f les.conf &
Pozn: prepínač „ &” na konci príkazov znamená, že sa inštancia programu spustí na pozadí.
Posledný server, LECS, je k dispozícii v programe lecs . Jeho konfiguračný súbor má v našom prípade takúto štruktúru (nazvaný lecs.conf ):
#-----------------------------START-OF-FILE------------------ # Naša ATM adresa musí byť pred všetkými ostatnými # ELAN nastaveniami 47000580FFE1000000F20F38770020485B547A00 # Meno ELAN je vnútri hranatých zátvoriek. # Nižšie uvedené parametre sú pre ELAN typu Ethernet [elan1] # ATM adresa LANE servera pre ELAN 'tut-lane1' LES:=47000580FFE1000000F20F38770020485B547A01 # 802_5 = TokenRing, 802_3 = Ethernet Type:=802_3 # 1515, 4544, 9234 alebo 18190 (1516 = Ethernet) Max_Frame:=1516 # ATM adresy počítačov, ktorým umožníme využívať túto ELAN. # Znak 'x' alebo 'X' je divoká karta. 47000580FFE1000000XXXXXXXXXXXXXXXXXXXXXX # ELAN 'elan1' bude default ELAN DEFAULT #-----------------------------END-OF-FILE------------------
A jeho inicializácia je nasledovná:
[root@atmrouter /]# lecs -f lecs.conf &
Teraz máme funkčnú celú serverovú časť LAN emulácie. Ak chceme, aby sa táto istá stanica zaradila ako člen tejto elany, tak musíme spustiť posledný komponent – zeppelin .
[root@atmrouter /]# zeppelin -c 47000580FFE1000000F20F38770020485B547A00 -n elan1 -2 -f netlab10 -m ffff -l 47000580FFE1000000F20F38770020485B547A03 &
Tu je dôležité použitie prepínača –c , ktorý zeppelin-u hovorí, na akej ATM adrese počúva LECS server. Ďalšie použité prepínače:
- -n <nazov_elany> , ním sa posiela LECS serveru informácia o predvolenej elane , do ktorej sa chce klient prihlásiť (nepovinné )
- -f <meno_tejto_klientskej_stanice> , meno, pod ktorým bude táto stanica vystupovať v prípade, že sa prihlásime na ATM switch a dáme si výpis elan members (nepovinné )
- -m udáva „ukecanosť“ zeppelin-a, ktorý bude vypisovať info o svojej činnosti na stout. Za týmto prepínačom nasleduje parameter f , ktorého počet udáva úroveň ukecanosti klienta (max sú 4) (nepovinné )
- -l <atm_adresa> , udáva ATM adresu, s ktorou bude LANE klient vystupovať (nepovinné, ale v prípade, že na danom stroji beží aj server, je tento údaj viac ako odporúčaný)
Po spustení démona zeppelin vznikne nové sieťové rozhranie lec0 , ktoré je možné konfigurovať klasickým príkazom ifconfig . Vznik tohto rozhrania si môžete overiť výpismi z jadra napr. pomocou príkazu dmesg . V prípade úspechu je vo výpise nasledovné: „ lec0 initialized !“ Ak inicializácia nebola úspešná, tak je hláška nasledovná: „ lec0 shut-down !“.
Po jeho nakonfigurovaní by mala byť LANE funkčná.
Najzákladnejšia konfigurácia lec.
[root@atmrouter /]# ifconfig lec0 192.168.1.10 up
Konektivitu je možné jednoducho overiť ping -om na ďalšieho klienta.
Komplemtné skripty
Časť server
#---------------------------Start-of-file-------------------------- #!/bin/bash echo "Spustanie ATM..." echo "" echo "" modprobe nicstar && modprobe idt77252 && modprobe suni && modprobe lec # killnutie, ak demony uz bezia for i in bus les lecs zeppelin do killall $i done echo "" echo "Spustenie daemonov atmsigd a ilmid..." # loadnutie demonikov if [ ! `pgrep atmsigd | wc –l` > “ 0” ] then atmsigd -b && if [ ! `pgrep ilmid | wc –l` > “ 0” ] then ilmid -b sleep 2 echo "" echo "Nadefinovanie ATM adries pre rozhranie..." # lecs server ma default adresu s 00 na konci atmaddr -a 47000580FFE1000000F20F38770020485B547A01 # les atmaddr -a 47000580FFE1000000F20F38770020485B547A02 # bus atmaddr -a 47000580FFE1000000F20F38770020485B547A03 # zeppelin sleep 2 echo "" echo "Spustenie bus, les a lecs serverov..." # LANE demony bus -f les.conf & les -f les.conf & # inicializovanie lecs servera lecs -f lecs.conf & > sleep 2 # inicializovanie klienta zeppelin -c 47000580FFE1000000F20F38770020485B547A00 -n elan1 -2 \ -f netlab10 -l 47000580FFE1000000F20F38770020485B547A03 & # configuracia lec0 echo "" echo "Inicializovanie rozhrania lec0 a IP vrstvy" sleep 1 ifconfig lec0 192.168.1.10 up echo "Hotowo :)" #------------------------------EOF---------------------------------
Časť kient
#---------------------------Start-of-file-------------------------- #!/bin/bash echo "Spustanie ATM ==== CLiENT ===== ..." echo "" echo "" modprobe nicstar && modprobe idt77252 && modprobe suni && modprobe lec # loadnutie demonikov if [ ! `pgrep atmsigd | wc –l` > “ 0” ] then atmsigd -b && if [ ! `pgrep ilmid | wc –l` > “ 0” ] then ilmid -b sleep 1 zeppelin -c 47000580FFE1000000F20F38770020485B547A00 -n elan1 -2 \ -f netlab11 & # inicializacia lec0 echo "" echo "Inicializovanie rozhrania lec0 a IP vrstvy" sleep 1 ifconfig lec0 192.168.1.11 up echo "Hotowo :)" #------------------------------EOF---------------------------------
A aby bol celý proces spúšťania IP over ATM (v našom prípade LANE) úplne automatický, je možné príslušný skript vložiť (jednoduchý spôsob) do tzv. linuxáckeho autoexecu, teda do súboru /etc/rc.local . Ale je možné, že vo väčšine distribúcií sú to rozdielné súbory.
Pri poctivom spôsobe by sa to robilo tak, že tu spomínané moduly by sa umiestnili do súboru /etc/modprobe.conf (resp. /etc/modules.conf (v prípade jadra 2.4)) a na zvyšok by sa buď spravili init skripty, alebo by sa modifikovali skripty existujúce (ak vôbec nejaké sú) (toto ale nie je náplňou tohto dokumentu).
Ešte poznámka: v skriptoch je použitý viackrát príkaz „ sleep <pocet-sekund>”, ktorý vykonávanie skriptu pozdrží o „ pocet-sekund”. Dôvod použitia je jednoduchý: príkazy, ktoré sú uvedené v skripte sa spúšťajú okamžite po sebe čo v niektorých situáciách je problém, lebo ak sa napr. nestihnú inicializovať démony (teda oni sa fakt nestihnú inicializovať), tak pri nasledujúcom pridávaní ATM adries má tendenciu celý Linux freeznuť (situácia priamo z praxe :-).