Použití XML-PI Kašpar Petr (kas265), Navrátil Jan (nav208) Abstrakt: Cílem tohoto projektu bylo prozkoumat technologii XML-PI na směrovačích Cisco a vytvoření příručky pro používání této technologie. V práci je krátce popsán princip samotné technologie XML-PI a jsou shrnuty všechny související příkazy v operačním systému Cisco IOS. Značná část je také věnována ucelenému příkladu, ve kterém jsou použity všechny hlavní příkazy technologie XML-PI. Klíčová slova: XML-PI, Cisco IOS, specifikační soubor, show příkaz, ODM 1 Úvod.............................................................................................................................2 2 Související příkazy.......................................................................................................2 2.1 ODM specifikační soubor.....................................................................................2 2.2 Vygenerování XML a XSD...................................................................................3 3 Ucelený příklad.............................................................................................................5 4 Poznámky k Cisco IOS implementaci, testování..........................................................8 5 NETCONF....................................................................................................................8 6 Závěr.............................................................................................................................9 7 Použitá literatura...........................................................................................................9 A Použité zkratky.............................................................................................................10 B Obsah ODM specifikačního souboru...........................................................................10 C Ukázka CLI výstupu a XML verze příkazu show running-config...............................11
listopad 2010
1/15
1 Úvod XML-PI je technologie, která umožňuje CLI výstupy jednotlivých „show“ příkazů vygenerovat ve standardizovaném formátu XML [1]. Jedná se tedy o nový datový model pro ukládání výstupů jednotlivých show příkazů. Takto uložené výstupy můžeme následně využít například k archivaci konfigurací nebo vzdálené správě zařízení pomocí protokolu NETCONF [2].
2 Související příkazy 2.1 ODM specifikační soubor Převod CLI výstupů do XML formátu zajišťuje algoritmus C2X. Pro správnou funkci tohoto algoritmu je zapotřebí ODM specifikační soubor (ODM Spec File), který obsahuje informace o struktuře jednotlivých CLI výstupů show příkazů pro správné parsování - SFE záznamy. Jedinou výjimkou je příkaz show runningconfig, který může mít záznam ve specifikačním souboru prázdný, jelikož se interně nativně generuje ve formátu XML. Na Obrázku 1 je vidět diagram, který znázorňuje způsob převodu standardního CLI výstupu show příkazu na XML variantu:
Obrázek 1: Diagram převodu standardního CLI výstupu show příkazu do XML verze Cisco IOS standardně neumí vygenerovat XML verze všech show příkazů. Jediný automaticky podporovaný je již výše zmíněný příkaz show running-config. Další podporované příkazy se dají zjistit příkazem show format, který vypíše příkazy se záznamem (SFE záznamem) v ODM specifikačním souboru: show format [location:local-filename]
Nepovinný parametr location:local-filename určuje cestu k ODM souboru. Aktuálně ještě žádný vlastní specifikační soubor nemáme vytvořený, a proto tento parametr nepoužijeme, čímž vypíšeme příkazy se záznamem v defaultním ODM specifikačním souboru (built-in). V následující ukázce to jsou příkazy show inventory a show ip interface brief: Router#show format The following CLI are supported in built-in show inventory show ip interface brief
Pro práci s ODM specifikačním souborem a jednotlivými SFE záznamy v tomto souboru slouží následující příkazy: spec-file spec-file spec-file spec-file spec-file
install install install install install
listopad 2010
[force] location:local-filename built-in [force] location:local-filename add-entry url:remote-filename command [force] location:local-filename file url:remote-filename [force] location:local-filename remove-entry command [force] location:local-filename restore
2/15
● ●
● ● ● ●
První příkaz zkopíruje záznamy z defaultního built-in specifikačního souboru do nového na zadaném umístění location:local-filename. Druhý příkaz do zadaného umístění location:local-filename přidá nový záznam pro příkaz command z umístění url:remote-filename. Provádí se kontrola, zda přidávaný příkaz již v ODM souboru neexistuje a také se provádí kontrola nahrávaného XML souboru s novým záznamem. Konkrétní ukázka je ukázána v uceleném příkladu v Kapitole 3. Třetí příkaz do zadaného umístění location:local-filename zkopíruje kompletní nový specifikační soubor z umístění url-remote-filename. Čtvrtý příkaz ze zadaného umístění location:local-filename odstraní záznam pro příkaz command. Provádí se kontrola, zda odstraňovaný příkaz existuje v ODM souboru. Poslední příkaz provede obnovení ODM souboru ze zálohy. Záloha se automaticky vytváří u všech předchozích příkazů, kromě třetího. Volitelné klíčové slovo force způsobí, že IOS nebude chtít ano/ne potvrzení pro zápis do souborového systému.
Poslední příkaz z této kategorie slouží k validování ODM souboru v umístění location:local-filename. Příkaz ověří, že zadaný ODM soubor neobsahuje chyby. Nekontroluje se samotný obsah SFE záznamů, které může kdokoliv měnit podle úvahy. Kontroluje se, zda je u záznamů dodržen XML formát a pak také formát samotného ODM souboru (viz Příloha B Obsah ODM specifikačního souboru). show format location:local-filename validate
2.2 Vygenerování XML a XSD Vygenerování XML verze show příkazu je jednoduché, slouží k tomu modifikátor format, který se umístí za požadovaný show příkaz. Jako nepovinný parametr je opět cesta k ODM souboru. show-command | format [location:local-filename]
V následující ukázce pro názornost nejprve vypíšeme klasický CLI výstup příkazu show inventory, který vypisuje informace o komponentách v daném síťovém zařízení: Router#show inventory NAME: "Chassis", DESCR: "Cisco 7206VXR, 6-slot chassis" PID: CISCO7206VXR , VID: , SN: 4294967295 NAME: "NPE200 0", DESCR: "Cisco 7200 Network Processing Engine NPE-200" PID: NPE-200 , VID: , SN: 4294967295 NAME: "module 0", DESCR: "I/O FastEthernet (TX-ISL)" PID: C7200-IO-FE-MII/RJ45=, VID: , SN: 4294967295 NAME: "disk0", DESCR: "Cisco 7200 I/O PCMCIA Flash Disk, 64M" PID: MEM-I/O-FLD64M , VID: , SN: NAME: "Power Supply 1", DESCR: "Cisco 7200 AC Power Supply" PID: PWR-7200-AC , VID: , SN: NAME: "Power Supply 2", DESCR: "Cisco 7200 AC Power Supply" PID: PWR-7200-AC , VID: , SN:
Zde je následně vidět tentýž příkaz, avšak s modifikátorem format, který zajistí vygenerování XML verze. Cestu k ODM souboru jsme neuváděli, je použit defaultní built-in soubor. Jednotlivé položky výpisu jsou přehledně strukturovány do XML elementů se specifickými názvy. Jelikož je výsledné XML příliš rozsáhlé, v následující ukázce je uveden element InventoryEntry pouze pro první komponentu. Ostatní komponenty mají výpis ve stejném formátu: listopad 2010
3/15
Router#show inventory | format <ShowInventory xmlns="ODM://built-in//show_inventory"> <SpecVersion>built-in
"Chassis" "Cisco 7206VXR, 6-slot chassis" CISCO7206VXR <SN>4294967295 ...
Samotné XML je jistě velká změna oproti klasickému CLI výpisu. Pro případné další zpracování či parsování XML dokumentu bude ještě potřeba XML Schema Definition (XSD), které popisuje strukturu konkrétního XML dokumentu. Implementace XML-PI v Cisco IOS podporuje i generování XSD pomocí příkazu: show xsd-format [location:local-filename] cli command
Cestu k ODM souboru opět nebudeme uvádět, pouze za příkaz cli doplníme příkaz, pro který chceme XSD vygenerovat. Zde je nutno upozornit, že příkazy se musí uvádět v celé podobě, zkratky nelze použít: Router#show xsd-format cli show inventory <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:complexType name="ShowInventory_def"> <xsd:sequence> <xsd:element ref="SpecVersion" minOccurs="0" /> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="Info" /> <xsd:element name="InventoryEntry" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element <xsd:element <xsd:element <xsd:element <xsd:element
name="ChassisName" minOccurs="0" maxOccurs="1" type="xsd:string"/> name="Description" minOccurs="0" maxOccurs="1" type="xsd:string"/> name="PID" minOccurs="0" maxOccurs="1" type="xsd:string" /> name="VID" minOccurs="0" maxOccurs="1" type="xsd:string" /> name="SN" minOccurs="0" maxOccurs="1" type="xsd:string" />
<xsd:element name="SpecVersion" type="xsd:string" /> <xsd:element name="Info" type="xsd:string" /> <xsd:element name="ShowInventory" type="ShowInventory_def" />
listopad 2010
4/15
3 Ucelený příklad Nejprve si nakonfigurujeme ethernetové rozhraní pro pozdější připojení na TFTP server, odkud budeme nahrávat nový záznam do ODM specifikačního souboru: Router#configure terminal Router(config)#interface fastEthernet 0/0 Router(config-if)#ip address 10.10.10.2 255.255.255.0 Router(config-if)#no shutdown
V dalším kroku si nakonfigurujeme SSHv2 přístup, který může být použit pro vzdálenou konfiguraci pomocí protokolu NETCONF, při které se dají využít fragmenty předem vygenerovaných XML výstupů: Router#configure terminal Router(config)#hostname R1 R1(config)#ip domain-name kas265.com R1(config)#crypto key generate rsa The name for the keys will be: R1.kas265.com Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: 1024 % Generating 1024 bit RSA keys, keys will be non-exportable...[OK] R1(config)#ip ssh time-out 60 R1(config)#ip ssh authentication-retries 3 R1(config)#ip ssh version 2 R1(config)#line vty 0 8 R1(config-line)#login local R1(config-line)#transport input ssh R1(config-line)#exit R1(config)#username cnap privilege 15 password cisco R1(config)#netconf ssh R1(config)#end
Oproti ukázkám v úvodu již nebudeme používat jenom vestavěný built-in ODM specifikační soubor. Původní soubor si zkopírujeme z built-in umístění do nového umístění disk0:xml_spec_file.odm a později do něj přidáme nový SFE záznam: R1#spec-file install disk0:xml_spec_file.odm built-in Ensure that "format global" has been configured to use disk0:xml_spec_file.odm
Jelikož budeme nyní používat nový specifikační soubor, museli bychom při každém souvisejícím příkazu zadávat cestu k tomuto souboru. Jak nás ale IOS v předchozím příkaze upozorňuje, můžeme si nový soubor zadefinovat jako globální a dále již cestu nebudeme muset uvádět: R1#configure terminal R1(config)#format global disk0:xml_spec_file.odm R1(config)#exit
Příkazem show format si předchozí nastavení můžeme ověřit. Nezadali jsme žádné umístění souboru a přesto se vypsaly záznamy z našeho nového souboru. Opět zde máme podporu XML formátu pro stejné funkce jako v příkladu v úvodu (show inventory a show ip interface brief), jelikož jsme pouze zkopírovali specifikační soubor z defaultního built-in umístění do nového umístění:
listopad 2010
5/15
R1#show format The following CLI are supported in disk0:xml_spec_file.odm show inventory show ip interface brief
Nyní přidáme podporu pro vygenerování dalšího show příkazu v XML formátu. Bude se jednat o příkaz show arp, který v klasickém CLI režimu může vypadat třeba následovně: R1#show arp Protocol Address Internet 10.10.10.1 Internet 10.10.10.2
Age (min) 8 -
Hardware Addr 0003.ff11.6979 ca00.0cc4.0008
Type ARPA ARPA
Interface FastEthernet0/0 FastEthernet0/0
Pokud bychom se snažili vygenerovat XML verzi přidáním modifikátoru format, skončilo by to chybovým hlášením, jelikož ve specifikačním ODM souboru není pro příkaz show arp příslušný SFE záznam. Záznam pro převod z CLI do XML výstupu pro náš show arp příkaz může vypadat následovně:
show arp ios
Jak je vidět, SFE je také ve formátu XML. Při pozornějším prohlédnutí CLI výstupu funkce show arp a SFE záznamu pro převod do XML formátu, jsou zde patrné jasné souvislosti. V elementu Name je uveden název show příkazu. OS udává, zda se jedná o IOS nebo CatOS příkaz. CLI výstup je ve formátu tabulky, proto je v SFE záznamu element Table, který obsahuje všechny sloupečky původní tabulky. Jsou zde uvedeny názvy sloupců, datové typy a počáteční/koncová čísla, což jsou čísla znaků na řádku počítáno od 0. Některé show příkazy nemají výstup ve tvaru tabulky. Příkladem může být show inventory v úvodu. SFE záznam pro tento příkaz je vidět v Příloze B. Místo elementu Table se používá Container a jednotlivé atributy odlišujeme pomocí parametru end-delimiter, kterým nadefinujeme oddělovač (v našem případě znak ","). SFE záznam můžeme vytvořit ručně, nebo prostřednictvím nástroje Cisco E-DI [3]. Tento SFE záznam pro příkaz show arp si uložíme na TFTP server a pojmenujeme například arp.txt. Pomocí následujícího příkazu načteme soubor z TFTP serveru a nahrajeme ho do ODM souboru jako nový záznam přiřazený k našemu příkazu show arp. Příkazem validate můžeme navíc aktuální ODM soubor zkontrolovat, zda neobsahuje chyby: R1#spec-file install disk0:xml_spec_file.odm add-entry tftp://10.10.10.1/arp.txt show arp
Loading arp.txt from 10.10.10.1 (via FastEthernet0/0): ! [OK - 689 bytes] R1#show format validate The file disk0:xml_spec_file.odm has been validated
listopad 2010
6/15
Aktuálně tedy máme v ODM specifikačním souboru nahraný záznam pro nový show příkaz. Zda vše proběhlo správně můžeme ověřit jednak vypsáním všech podporovaných příkazů pomocí již známého příka zu show format. Měl by zde přibýt nový příkaz. Druhou možností je provedení samotného vygenerování příkazu do XML formátu, popřípadě XSD definice: R1#show format The following CLI are supported in disk0:xml_spec_file.odm show inventory show ip interface brief show arp R1#show arp | format <ShowArp xmlns="ODM://disk0:xml_spec_file.odm//show_arp">
<entry> Internet 1 10.10.10.1 9 <MAC>0003.ff11.6979 ARPA FastEthernet0/0 <entry> Internet 1 10.10.10.2 <MAC>ca00.0cc4.0008 ARPA FastEthernet0/0 R1#show xsd-format cli show arp <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:complexType name="ShowArp_def"> <xsd:sequence> <xsd:element ref="SpecVersion" minOccurs="0" /> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="Info" /> <xsd:element name="ARPTable" minOccurs="0"> <xsd:complexType> <xsd:sequence> <xsd:element name="entry" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Protocol" minOccurs="0" type="xsd:string" /> <xsd:element name="Address" minOccurs="0" type="xsd:string" /> <xsd:element name="Age" minOccurs="0" type="xsd:integer" /> <xsd:element name="MAC" minOccurs="0" type="xsd:string" /> <xsd:element name="Type" minOccurs="0" type="xsd:string" /> <xsd:element name="Interface" minOccurs="0" type="xsd:string" /> <xsd:element name="SpecVersion" type="xsd:string" /> <xsd:element name="Info" type="xsd:string" /> <xsd:element name="ShowArp" type="ShowArp_def" />
listopad 2010
7/15
4 Poznámky k Cisco IOS implementaci, testování Technologie XML-PI je podporovaná na verzích Cisco IOS 12.2(33)SRE, 12.2(54)SG a 12.4(20)T. Praktické ověřování funkčnosti jsme prováděli v laboratoři J257 na routeru RG, kde bylo vše funkční. Podle verze IOS by XML-PI mělo fungovat i na routeru RF, ale zde XML vygenerovat nešly. Router daný mo difikátor nepodporoval. Některé části jsme testovali také na emulátoru Dynamips/Dynagen [4] s použitím firmware z řady routerů Cisco 7200 ve verzi IOS 12.4T, kde nebyl žádný problém. ODM specifikační soubor musí být umístěn lokálně v zařízení. Používání ODM specifikačního souboru ze vzdáleného umístění není podporované (musíme jej nejprve nainstalovat do zařízení výše uvedenými příkazy).
5 NETCONF NETCONF je protokol pro vzdálenou správu síťových zařízení. Tento projekt nemá za cíl popisovat samotný protokol a jeho používání, o tomto tématu již byly napsány projekty v minulých letech [5]. Důvod zmínění tohoto protokolu je ten, že se pomocí něj může vzdáleně konfigurovat zařízení za použití XML konfigurace. NETCONF ve spolupráci s XML-PI funguje pouze prostřednictvím SSHv2 (konfigurace je uvedena v uceleném příkladu výše). Editovat konfiguraci pomocí XML-PI je možné pouze pomocí protokolu NETCONF. Zadávání XML přímo do konzole není povoleno. Získání XML výstupu je možno jak přes konzoli, tak přes NETCONF. Ukázkový XML kód pro vzdálenou správu může vypadat následovně: <rpc message-id="2" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config>
<xml-config-data> host1 10.2.3.4 host2 10.2.3.5 ]]>]]>
XML konfigurace je uvedena v elementu xml-config-data. Daná konfigurace se na CLI příkazy nepřevádí pomocí SFE záznamů v ODM souboru. Jedná se o algoritmický automatický převod algoritmem X2C. Každý element může být zaklasifikován do jednoho ze tří typů. Elementy pojmenované malými písmeny nebo znakem _ jsou chápány jako klíčová slova (příkazy), elementy končící na -Configuration označují skupinu příkazů (podstrom) a ostatní elementy jsou parametry. Předchozí ukázka by se tedy interpretovala jako: ip host host1 10.2.3.4 ip host host2 10.2.3.5
listopad 2010
8/15
6 Závěr XML-PI je technologie, která umožňuje vygenerovat výstupy show příkazů ve formátu XML. Tento formát má oproti proprietárním Cisco IOS formátům jednotlivých show příkazů velkou výhodu. Všechny atributy jsou jsou přehledně pojmenovány, k dispozici máme i XSD definici, takže můžeme vygenerované XML dále jednoduše zpracovávat nebo archivovat. Zatímco proprietární Cisco IOS formáty se mohou v jednotlivých verzích IOS měnit a za pár let se v nich může hůře orientovat, XML formát je více méně prů myslový standard, který má jasně specifikované pravidla.
7 Použitá literatura [1] Cisco Systems, Inc. Cisco IOS and NX-OS Software [online]. 2010-06-28 [cit. 2010-11-18]. XML[2] [3]
[4] [5]
PI. Dostupné z WWW:
. NETCONF. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, 16 April 2007, last modified on 13 September 2010 [cit. 2010-11-18]. Dostupné z WWW: . Cisco Enhanced Device Interface Programmer's Guide 2.2.1 [online]. 2008 [cit. 2010-11-18]. Using Operational Data Modeler. Dostupné z WWW: . ANUZELLI, Greg. Dynamips [online]. 2008 [cit. 2010-11-18]. Dynagen Tutorial. Dostupné z WWW: . VJATER, Jiří; ŽÍDEK, Rostislav. Průzkum standardu NetConf (RFC4741-4) pro konfiguraci síťových prvků a možností praktického užití s platformou Cisco IOS. SPS [online]. 2009, 1, [cit. 2010-11-18]. Dostupný z WWW: .
listopad 2010
9/15
A Použité zkratky C2X CLI IOS ODM SFE SSHv2 TFTP X2C XML XML-PI XSD
CLI to XML Command-line interface Internetwork Operating System Operational Data Model Spec File Entry Secure Shell verze 2 Trivial File Transfer Protocol XML to CLI Extensible Markup Language Extensible Markup Language Programmatic Interface XML Schema Definition
B Obsah ODM specifikačního souboru Zde je k vidění ukázka ODM specifikačního souboru, ve kterém jsou záznamy pro všechny podporované show příkazy. Konkrétně se jedná o specifikační soubor xml_spec_file.odm, který byl použit v uceleném příkladu v Kapitole 3. Jak je vidět, jako oddělovač slouží sekvence znaků ###, na dalším řádku následuje název funkce, pro kterou záznam je a na dalším novém řádku už je samotný XML zápis převodního SFE zázna mu. Další záznam je opět oddělen sekvencí znaku ###, následuje opět název show příkazu a samotný SFE záznam: ### show inventory <SpecVersion>built-in show inventory ### show ip interface brief <SpecVersion>built-in show ip interface brief ### show arp
listopad 2010
10/15
show arp ios
C Ukázka CLI výstupu a XML verze příkazu show running-config Zde je k vidění ukázka standardního CLI výstupu a jeho XML verze pro příkaz show running-config z konfigurace v uceleném příkladu v Kapitole 3: R1#show running-config Building configuration... Current configuration : 1375 bytes ! ! Last configuration change at 13:20:04 UTC Wed Nov 17 2010 ! upgrade fpd auto version 15.0 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! ! ! ip source-route ip cef ! ! ! ! ip domain name kas265.com no ipv6 cef ! multilink bundle-name authenticated ! ! ! ! ! ! ! ! username cnap privilege 15 password 0 cisco
listopad 2010
11/15
! redundancy ! ! ip ssh time-out 60 ip ssh version 2 ! ! ! ! ! ! ! ! interface FastEthernet0/0 ip address 10.10.10.2 255.255.255.0 duplex auto speed auto ! ! interface FastEthernet0/1 no ip address shutdown duplex auto speed auto ! ! interface Serial1/0 no ip address shutdown serial restart-delay 0 ! ! interface Serial1/1 no ip address shutdown serial restart-delay 0 ! ! interface Serial1/2 no ip address shutdown serial restart-delay 0 ! ! interface Serial1/3 no ip address shutdown serial restart-delay 0 ! ! ! ip forward-protocol nd no ip http server no ip http secure-server ! ! ! ! ! ! ! ! ! control-plane ! ! !
listopad 2010
12/15
mgcp fax t38 ecm mgcp behavior g729-variants static-pt ! ! ! gatekeeper shutdown ! ! line con 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login local transport input ssh line vty 5 8 login local transport input ssh ! netconf ssh format global disk0:xml_spec_file.odm end R1#show running-config | format <Param>15.0 <service><debug><msec/> <service><msec/> <service operation="delete" ><password-encryption/> <SystemNetworkName>R1 <source-route/> <domain>kas265.com <multilink> <username><UserName>cnap <privilege><UserPrivilegeLevel>15 <password><_0>cisco !!!Undetected MODE change [ip ssh time-out 60] <ssh/> <ssh/> <Param>FastEthernet0/0 10.10.10.2255.255.255.0 <speed> <Param>FastEthernet0/1 !!!!!Undetected MODE change [ no ip address] <shutdown> <speed>
listopad 2010
13/15
<Param>Serial1/0 !!!!!Undetected MODE change [ no ip address] <shutdown> <serial>0 <Param>Serial1/1 !!!!!Undetected MODE change [ no ip address] <shutdown> <serial>0 <Param>Serial1/2 !!!!!Undetected MODE change [ no ip address] <shutdown> <serial>0 <Param>Serial1/3 !!!!!Undetected MODE change [ no ip address] <shutdown> <serial>0 !!!Undetected MODE change [ip forward-protocol nd] <server/> <secure-server/> <mgcp><ecm/> <mgcp><SetCategoryBehavior>g729-variants <SetVersionBehaviorCategory>static-pt <shutdown> con 0 <stopbits><_1> !!!!!Undetected MODE change [ stopbits 1] aux 0 <stopbits><_1> !!!!!Undetected MODE change [ stopbits 1] vty 0 4
listopad 2010
14/15
<X-Interface> login local <X-Interface> transport input ssh vty 5 8 <X-Interface> login local <X-Interface> transport input ssh !!!Undetected MODE change [netconf ssh] <ssh/> <SpecFileLocation>disk0:xml_spec_file.odm <end>
listopad 2010
15/15