Virtuální spojovací pole verze 2
Z VirtlabWiki
← Starší verze | Novější verze →
Obsah
|
Základní princip
Propojování Ethernet linek (access i trunk)
Jednotlivá rozhraní laboratorních prvků (reálných i simulovaných) jsou přivedena na různé fixní VLAN (buďto nastavením fyzického portu C3560 do VLAN nebo trunkem od XEN, Dynamips nebo jiných virtualizačních serverů). Na portech C3560 připojujících reálná zařízení je konfigurován QinQ. Bylo prověřeno, že QinQ tunelem procházejí i netagované rámce, což umožnilo použít shodnou technologii pro propojování trunk i access linek laboratorních prvků. VLANy jsou ukončeny na tunelovacím serveru, který podle konfigurace bridguje veškerý provoz mezí Ethernet rozhraními síťových prvků lokality, resp. jej posílá do cizích lokalit v UDP přes Internet. Tunelovací server neřeší, zda jsou rámce tagovány 2x (případ přemosťování provozu z trunků).
K tunnel serveru přicházejí z C3560 data z laboratorních zařízení trunkem, který nese
- single-tagged rámce, je-li laboratorní zařízení připojeno access linkou
- double-tagged rámce, je-li laboratorní zařízení připojeno trunkem
V každém případě (vnější) tag nalepuje port, kterým do C3560 rámec od uživatelského zařízení vstoupil. Tunelovací server nerozlišuje, zda přemosťuje single-tagged nebo double-tagged rámce, orientuje se podle vnějšího tagu a případný vnitřní ho nezajímá. Jen je třeba nastavit větší MTU (1508 B).
Podle požadované topologie se automaticky konfigurují jen tunelovací servery; konfigurace C3560 (příp. C1900) jsou pevné - jedná se o přiřazení jednotlivých portů do QinQ VLAN, nastavení transparentního průchodu L2 protokolů a vytvoření všech VLAN v lokalitě (kvůli bridgeování v řetězu C3560 vytváříme všude všechny VLAN použité v lokalitě).
Propojování sériových linek
Propojování sériových linek se obsluhuje "klasicky", tj. generováním konfigurace pro jednotlivé ASSSK. Je předpokládáno, že se v topologii požadují pouze spoje mezi sériovými rozhraními laboratorních prvků připojených do téhož ASSSK, tj. že mapovací algoritmus správně pracuje s connectivity groups.
Paralelní zpracování rezervací
Generování a aktivace konfigurací se musí vypořádat s tím, že aktivátor konfigurací (atd) může chtít generátor konfigurací spustit paralelně vícekrát, pokud se sejde více rezervací vyžádaných danou lokalitou na stejný čas. Generátor konfigurací je proto reentrantní a generuje pro jednotlivá spuštění nezávislé sady souborů (vždy přípona RESID za každým, ta se pak jako parametr také předává uploaderu konfigurací do konfiguračního serveru). Také se může stát, že konfiguraci lokality bude chtít (přes Konfigurační server) modifikovat více lokalit naráz (ať už při aktivci nebo daktivaci) a nahrávané konfigurace (do Tunserveru nebo ASSSK) se nesmí během uploadu pomíchat (=musí se serializovat). Serializaci vyřešíme zatím tak, že konfigurační server bude současně přijímat jen 1 TCP spojení.
Poznámka:
- Předpokládáme, že CONNECT timeout na klientech je řádově 1 minuta, za kteroužto dobu se jistě předchozí jedno TCP spojení vyřídí (nejpomalejši je upload konfigurace do ASSSK, kde se mezi znaky čeká 100ms, ale zato jsou konfigy krátké).
- Všechny hodnoty pro TCP spojení jsou v /proc/sys/net/netfilter/, prip. v /proc/sys/net/ipv4/*tcp* (tcp_syn_retries), lze i nastavit zápisem do příslušného souboru.
- Viz http://www.mjmwired.net/kernel/Documentation/networking/ip-sysctl.txt
- Modernější způsob přístupu ke konstantám: sysctl. Debian Etch má soubor /etc/sysctl.conf který je pro to určený a příkazem sysctl -p lze aktivovat změny. Jinak po startu zajistuje natazeni toho (/etc/sysctl.conf) souboru link v /etc/rcS.d/procps.sh (ukazujici na /etc/init.d/prospc.sh). Takze nejlepsi je nahodit prislusny radek do /etc/systl.conf a aktivovat nastaveni pres "sysctl -p". Po restartu se natahne automaticky.
Na straně klienta konfiguračního serveru je třeba později trochu vylepšit obsluhu timeoutu z connect() - může se stát, že by v určitou hodinu chtělo nalévat konfiguraci do téže lokality velmi mnoho klientů a v rámci defaultního connect() timeoutu by se to nestihlo.
Konfigurační soubory
tunservers.conf
Mapuje jména lokalit na IP adresy jejich tunelovacích serverů. Syntaxe jako ve staré verzi spojovače:
jmeno_lokality ip_adresa_tunelovaciho_serveru
spoje.conf
Soubor s popisem topologie
Syntaxe podobná jako v první verzi spojovače, pouze s ohledem na implicitní použití QinQ se řádky neukončují znakem ";" nebo "&"
r1@site1:interface1,r2@site2:interface2
Programy
Spouštění níže uvedených programů realizujících aktivaci a deaktivaci distribuované virtuální topologie na základě požadavků z Rezervačního serveru řeší komponenta Virtlab:Komponenty/CRON.
POZOR: Pro zjednodušení programy předpokládají správnou syntexi konfiguračních souborů a souboru s požadovanou topologií. V budoucnu bude implementován syntax checker (patrně externě).
Generátor konfigurací pro aktivaci/deaktivaci/mazaci server vituální topologie
POZOR! Tato část je obsolete!
make-conn-tun-conf.pl
Konfigurace: veškerá se provádí nastavením proměnných (a jedné konstanty) na začátku skriptu.
Spuštění: jediným parametrem je resid souboru s topologií, např.: /opt/virtlab/spojovac/make-conn-tun-conf.pl 30@ostrava Na jeho základě je vyhledán soubor resid v adresáři $residpath="/opt/virtlab/data/rsv-server".
Požadavek: v adresáři kontroverzního názvu /opt/virtlab/COMMON/src/ je umístěn soubor vl-debug.pl.
Na základě souborů $spojeconffile="/etc/virtlab/spoje.conf" a $tunserversfile="/etc/virtlab/tunservers.conf" :
V adresáři $destdir="/opt/virtlab/data/crossconnect" vytvoří následující strukturu: Soubory označené * nemusejí vzniknout!
$destdir | +--- <resid> | +--- activate | +---tunscfg@<site>* # příkazy pro tunelovací server | +---<assskname>@<site>* # příkazy pro jednotlivá ASSSK | +---portsetter@<site> # seznam portů VLMUXu, které mají jít při aktivaci nahoru | +--- deactivate | +---tunscfg@<site> | +---<assskname>@<site> | +---portsetter@<site> # seznam portů VLMUXu, které mají jít při aktivaci dolů | +--- eraser +---<site>* # seznam prvků použitých v konfiguraci roztříděný podle lokalit
Pro jedno spojení ve virtuální topologii vzniknou záznamy v jednom až dvou souborech (podle toho, jde-li o tutéž lokalitu nebo dvě různé).
Podle toho, zda jde o propojení mezi rozhraními, která se podle spoje.conf dají připojit do VLANu nebo k ASSSK zařízení, se rozezná, jaké soubory to budou:
Pro Ethernet rozhraní a simulovaná rozhraní přivedená přes VLAN
activate/tunscfg@src_site a activate/tunscfg@dst_site.
Ty obsahují po jednom řádku pro src_site ve tvaru:
redir zdrojový_VLAN cílový_VLAN IP_adresa_cílové_lokality
a pro dst_site naopak:
redir cílový_VLAN zdrojový_VLAN IP_adresa_zdrojové_lokality
Pokud src_site==dst_site, oba dva řádky jsou zapsány v příslušném jediném souboru.
deactivate/tunscfg@<site> se liší pouze tím, že místo redir vkládá na začátek řádku noredir.
Dále se vytvoří záznam do souborů activate/portsetter@src_site a activate/tunscfg@dst_site (resp. deactivate) ve tvaru dohodnutém na schůzi:
VLMUX_IP_address up|down nazev_interface_na_VLMUX ...
Dále se vytvoří do adresáře eraser/ několik souborů pojmenovaných podle lokalit, které se účastní zadané topologie. Každý z těchto souborů obsahuje seznam zařízení, která byla z této lokality použita (nikoliv rozhraní). (viz Private:2007-11-27 schůzka vývojářů schůzka 27. listopadu)
Příklad:
10.0.0.1 up fastethernet0/1
Pro sériová rozhraní (spojovaná v ASSSK)
Lze propojit pouze sériové porty v jedné lokalitě na jednom ASSSK zařízení. activate/ASSSKname@src_site:
connect port1 port2 clock port1 rate clock port2 rate
Hodnota rate je nastavena na začátku skriptu use constant ASSSKCLOCK => 64000;
deactivate/ASSSKname@src_site:
no connect port1 port2 no clock port1 no clock port2
Z důvodu implementace ASSSK jsou řádky konfigurace pro ASSSK ukončovány /r/n.
Uploader konfigurací pro ASSSK a tunelovací servery při de/aktivaci vituální topologie
DISTR/src/spojovac/conf-uploader.sh je skript, který provede zmíněný upload. Spouští se s přepínačem -a (aktivace) nebo -d (deaktivace) a RESID, např.
conf-uploader.sh -d '6@ostrava'
Skript projde adresář /opt/virtlab/data/crossconnect/RESID, podle /etc/virtlab/conf-servers.conf převede jména lokalit na IP adresy konfiguračních serverů a na ty odešle podle protokolu Konfiguračního serveru jména spojovacích zařízení a obsahy jejich konfiguračních souborů. Po každém přenosu provede half-close a očekává odpověď serveru (prozatím s nekonečným timeoutem). Pokud odpověď neobsahuje řetězec 200, skript zaloguje kritickou chybu, nijak mu to však nebrání pokračovat v dalších uploadech. Popsané operace se provedou na všech souborech, které byly nalezeny!
V budnoucnu je vhodné doplnit periodicky souštěné "hlídátko", které polikviduje případné uváznuvší instance uploaderu (a dá o této situaci vědět v logu a obsluze).
PortSetter
PortSetter je skript spouštěný pomocí démona Inetd, který pomocí SNMP povoluje nebo zakazuje jednotlivé porty na VLMUX přepínačích (podle toho, zda port v danou chvíli patří nebo nepatří do virtuální topologie). Port, který do topologie úlohy patří se na začátku timeslotu povolí, před jeho koncem zakáže.
Tento odstavec popisuje nahazovani/zhazovani portu na C3550/C3560 pomoci SNMP verze 2c
- potrebne nastaveni do switche
snmp-server community xxx RO snmp-server community yyy RW snmp-server ifindex persist
- pouziti skriptu snmpport.sh
- umisteni <<SVN>>/DISTR/src/spojovac/snmpport.sh
- pozor! nejsou osetreny cisla portu, tedy je mozno si uriznout vetev pod vlastnim zadkem
#nahozeni portu 1 na switchi 10.0.0.10 snmpport.sh 10.0.0.10 up 1 #zhozeni portu 1 na switchi 10.0.0.10 snmpport.sh 10.0.0.10 down 1 #zobrazeni stavu portu 1 snmpport.sh 10.0.0.10 show 1 #zobrazeni stavu vsech portu snmpport.sh 10.0.0.10 show all
Aktivace/deaktivace konfigurací (CRON)
TODO
- Zjistit, co se přesně stane, když na jednom ze spojených rozhraní laboratorních prvků uživatel nastaví trunk a na druhém access. Pro případ spojení v rámci lokality i přes tunel.