Virtlab:Řídící server/Mapovací algoritmus
Z VirtlabWiki
(Rozdíly mezi verzemi)
Verze z 17:08, 22. 2. 2007 Vav166 (Diskuse | příspěvky) ← Předchozí porovnání |
Verze z 22:51, 22. 2. 2007 Vav166 (Diskuse | příspěvky) Následující porovnání → |
||
Řádka 1: | Řádka 1: | ||
+ | == Popis == | ||
Celkový postup mapovacího algoritmu: | Celkový postup mapovacího algoritmu: | ||
# '''rychlé ověřění jednoduchých podmínek''', jestli má mapování šanci na úspěch | # '''rychlé ověřění jednoduchých podmínek''', jestli má mapování šanci na úspěch | ||
Řádka 7: | Řádka 8: | ||
## '''srovnání ''speciálních'' vlastností jednotlivých linek''' a rozhraní zařízení ve vybavení. Pokud je v topologii po některé lince požadována speciální vlastnost, musí tuto vlastnost mít obě rozhraní, které tvoří konce této linky. Takže na každou vlastnost linky musí připadat alespoň dvě vlastnosti rozhraní. | ## '''srovnání ''speciálních'' vlastností jednotlivých linek''' a rozhraní zařízení ve vybavení. Pokud je v topologii po některé lince požadována speciální vlastnost, musí tuto vlastnost mít obě rozhraní, které tvoří konce této linky. Takže na každou vlastnost linky musí připadat alespoň dvě vlastnosti rozhraní. | ||
##* použije se funkce <tt>[[Virtlab:ParserTopology.php.inc|virtlabParserTopology]]::getEdgesFeatures()</tt>, jejíž výstupní seznam se zdvojí funkcí <tt>[[Virtlab:SupportFunctions.php.inc|DoubleArrayItems]]</tt>. Teto seznam se poravná funkcí <tt>[[Virtlab:SupportFunctions.php.inc|array_porovnej]]</tt> (kvůli duplicitním hodnotám nejde použít <tt>[http://www.php.net/array_diff array_diff]</tt>) s výstupem funkce <tt>[[Virtlab:ParserEquipment.php.inc|virtlabParserEquipment]]::getDevicesInterfacesFeatures()</tt>. array_diff] | ##* použije se funkce <tt>[[Virtlab:ParserTopology.php.inc|virtlabParserTopology]]::getEdgesFeatures()</tt>, jejíž výstupní seznam se zdvojí funkcí <tt>[[Virtlab:SupportFunctions.php.inc|DoubleArrayItems]]</tt>. Teto seznam se poravná funkcí <tt>[[Virtlab:SupportFunctions.php.inc|array_porovnej]]</tt> (kvůli duplicitním hodnotám nejde použít <tt>[http://www.php.net/array_diff array_diff]</tt>) s výstupem funkce <tt>[[Virtlab:ParserEquipment.php.inc|virtlabParserEquipment]]::getDevicesInterfacesFeatures()</tt>. array_diff] | ||
+ | # '''vlastní mapovací část''' | ||
+ | ## ze seznamu zařízení (<tt>[[Virtlab:ParserEquipment.php.inc|virtlabParserEquipment]]::getDevicesList()</tt>) a vrcholů linek virtuální topologie (<tt>[[Virtlab:ParserTopology.php.inc|virtlabParserTopology]]::getVertexesList()</tt>) se vytvoří dvojrozměrné pole (indexováno prvky ze získaných seznamů), jehož hodnoty jsou <tt>0</tt> pokud příslušný prvek nemůže být daným vrcholem. Nebo pole, určující na kterých linkách může být které rozhraní - zajištěno funkcí <tt>[[Virtlab:Mapping.php.inc|virtlabMapping]]::Availability($device, $vertex)</tt> (viz ukázka1): | ||
+ | ##* | ||
- | ... | + | == Ukázky == |
+ | '''ukázka 1:''' | ||
+ | Array | ||
+ | ( | ||
+ | [ra] => Array | ||
+ | ( | ||
+ | [swa] => 0 | ||
+ | [r7] => Array | ||
+ | ( | ||
+ | [Kacena] => Array | ||
+ | ( | ||
+ | [2] => s0/2/2 | ||
+ | ) | ||
+ | [Kocour] => Array | ||
+ | ( | ||
+ | [4] => s0/2/4 | ||
+ | [3] => s0/2/3 | ||
+ | [2] => s0/2/2 | ||
+ | [1] => s0/2/1 | ||
+ | [0] => s0/2/0 | ||
+ | ) | ||
+ | ) | ||
+ | [r5] => 0 | ||
+ | [r3] => 0 | ||
+ | [r1] => 0 | ||
+ | ) | ||
+ | [rb] => Array | ||
+ | ( | ||
+ | [swa] => 0 | ||
+ | [r7] => Array | ||
+ | ( | ||
+ | [Kocour] => Array | ||
+ | ( | ||
+ | [4] => s0/2/4 | ||
+ | [3] => s0/2/3 | ||
+ | [2] => s0/2/2 | ||
+ | [1] => s0/2/1 | ||
+ | [0] => s0/2/0 | ||
+ | ) | ||
+ | ) | ||
+ | [r5] => Array | ||
+ | ( | ||
+ | [Kocour] => Array | ||
+ | ( | ||
+ | [0] => s0/0 | ||
+ | ) | ||
+ | ) | ||
+ | [r3] => Array | ||
+ | ( | ||
+ | [Kocour] => Array | ||
+ | ( | ||
+ | [0] => s0 | ||
+ | ) | ||
+ | ) | ||
+ | [r1] => Array | ||
+ | ( | ||
+ | [Kocour] => Array | ||
+ | ( | ||
+ | [2] => s0/1/1 | ||
+ | [1] => s0/2/1 | ||
+ | [0] => s0/1/0 | ||
+ | ) | ||
+ | ) | ||
+ | ) | ||
+ | [rc] => Array | ||
+ | ( | ||
+ | [swa] => 0 | ||
+ | [r7] => 0 | ||
+ | [r5] => Array | ||
+ | ( | ||
+ | [Krokodyl] => Array | ||
+ | ( | ||
+ | [1] => gi0 | ||
+ | ) | ||
+ | ) | ||
+ | [r3] => Array | ||
+ | ( | ||
+ | [Krokodyl] => Array | ||
+ | ( | ||
+ | [2] => fa0/1 | ||
+ | [1] => fa0/0 | ||
+ | ) | ||
+ | ) | ||
+ | [r1] => 0 | ||
+ | ) | ||
+ | [rd] => Array | ||
+ | ( | ||
+ | [swa] => 0 | ||
+ | [r7] => 0 | ||
+ | [r5] => Array | ||
+ | ( | ||
+ | [Kacena] => Array | ||
+ | ( | ||
+ | [0] => s0/0 | ||
+ | ) | ||
+ | [Krokodyl] => Array | ||
+ | ( | ||
+ | [1] => gi0 | ||
+ | ) | ||
+ | ) | ||
+ | [r3] => 0 | ||
+ | [r1] => 0 | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | == Zdrojové XML soubory == | ||
+ | === Topologie === | ||
+ | === Vybavení === | ||
[[Kategorie:Diplomová práce]] | [[Kategorie:Diplomová práce]] | ||
[[Kategorie:Jan Vavříček]] | [[Kategorie:Jan Vavříček]] |
Verze z 22:51, 22. 2. 2007
Obsah |
Popis
Celkový postup mapovacího algoritmu:
- rychlé ověřění jednoduchých podmínek, jestli má mapování šanci na úspěch
- srovnání typů zařízení ve vybavení a virtuální topologii. Pokud je třeba mít v topologii typ zařízení, které nemáme mezi vybavením, tak není třeba s mapováním pokračovat - nepovede se.
- použijí se funkce virtlabParserTopology::getVertexesTypes() a virtlabParserEquipment::getDevicesTypes(), jejiž výstupy se jednoduše porovnají pomocí funkce array_diff
- srovnání speciálních vlastností zařízení v topologii a vybavení. Pokud v topologii požaduji po zařízení určitou speciální vlastnost, která se v celém vybavení vůbec nevyskytuje - mapování se nepovede.
- použijí se funkce virtlabParserTopology::getVertexesFeatures() a virtlabParserEquipment::getDevicesFeatures(), jejiž výstupy se jednoduše porovnají pomocí funkce array_diff
- srovnání speciálních vlastností jednotlivých linek a rozhraní zařízení ve vybavení. Pokud je v topologii po některé lince požadována speciální vlastnost, musí tuto vlastnost mít obě rozhraní, které tvoří konce této linky. Takže na každou vlastnost linky musí připadat alespoň dvě vlastnosti rozhraní.
- použije se funkce virtlabParserTopology::getEdgesFeatures(), jejíž výstupní seznam se zdvojí funkcí DoubleArrayItems. Teto seznam se poravná funkcí array_porovnej (kvůli duplicitním hodnotám nejde použít array_diff) s výstupem funkce virtlabParserEquipment::getDevicesInterfacesFeatures(). array_diff]
- srovnání typů zařízení ve vybavení a virtuální topologii. Pokud je třeba mít v topologii typ zařízení, které nemáme mezi vybavením, tak není třeba s mapováním pokračovat - nepovede se.
- vlastní mapovací část
- ze seznamu zařízení (virtlabParserEquipment::getDevicesList()) a vrcholů linek virtuální topologie (virtlabParserTopology::getVertexesList()) se vytvoří dvojrozměrné pole (indexováno prvky ze získaných seznamů), jehož hodnoty jsou 0 pokud příslušný prvek nemůže být daným vrcholem. Nebo pole, určující na kterých linkách může být které rozhraní - zajištěno funkcí virtlabMapping::Availability($device, $vertex) (viz ukázka1):
- ze seznamu zařízení (virtlabParserEquipment::getDevicesList()) a vrcholů linek virtuální topologie (virtlabParserTopology::getVertexesList()) se vytvoří dvojrozměrné pole (indexováno prvky ze získaných seznamů), jehož hodnoty jsou 0 pokud příslušný prvek nemůže být daným vrcholem. Nebo pole, určující na kterých linkách může být které rozhraní - zajištěno funkcí virtlabMapping::Availability($device, $vertex) (viz ukázka1):
Ukázky
ukázka 1:
Array ( [ra] => Array ( [swa] => 0 [r7] => Array ( [Kacena] => Array ( [2] => s0/2/2 ) [Kocour] => Array ( [4] => s0/2/4 [3] => s0/2/3 [2] => s0/2/2 [1] => s0/2/1 [0] => s0/2/0 ) ) [r5] => 0 [r3] => 0 [r1] => 0 ) [rb] => Array ( [swa] => 0 [r7] => Array ( [Kocour] => Array ( [4] => s0/2/4 [3] => s0/2/3 [2] => s0/2/2 [1] => s0/2/1 [0] => s0/2/0 ) ) [r5] => Array ( [Kocour] => Array ( [0] => s0/0 ) ) [r3] => Array ( [Kocour] => Array ( [0] => s0 ) ) [r1] => Array ( [Kocour] => Array ( [2] => s0/1/1 [1] => s0/2/1 [0] => s0/1/0 ) ) ) [rc] => Array ( [swa] => 0 [r7] => 0 [r5] => Array ( [Krokodyl] => Array ( [1] => gi0 ) ) [r3] => Array ( [Krokodyl] => Array ( [2] => fa0/1 [1] => fa0/0 ) ) [r1] => 0 ) [rd] => Array ( [swa] => 0 [r7] => 0 [r5] => Array ( [Kacena] => Array ( [0] => s0/0 ) [Krokodyl] => Array ( [1] => gi0 ) ) [r3] => 0 [r1] => 0 ) )