3.2 YANG

YANG je jazyk pre modelovanie dát (RFC 6020 ) určený pre definovanie dát posielaných prostredníctvom protokolu NETCONF. Môže byť použitý na:

  • modelovanie:
    • konfiguračných dát,
    • údajov o stave sieťových prvkoch.
  • definovanie formátu upozornení o udalostiach posielaných sieťovými prvkami

YANG je nezávislý na protokole a môže byť konvertovaný do akéhokoľvek kódovacieho formátu, napr. XML alebo JSON. Jazyk YANG používa moduly a submoduly. Modul obsahuje definície:

  • hlavičky modulu - opisujú modul a poskytujú informácie o samotnom module, 
  • revízie - poskytujú informácie o histórii modul
  • príkazov - sú časťou modulu, kde je dátový model definovaný

NETCONF server môže implementovať viacero modulov, ktoré umožňujú rôzne zobrazenia tých istých údajov alebo viaceré zobrazenia disjunktných podsekcií údajov zo zariadenia. Alternatívne môže server implementovať iba jeden modul, ktorý definuje všetky dostupné dáta.

Modul môže byť rozdelený na submoduly. Príkaz "include" umožňuje modulu alebo submodulu odkazovať na materiál v submoduloch. Príkaz "import" umožňuje odkazy na materiál definovaný v iných moduloch.

YANG definuje štyri typy uzlov pre modelovanie dát.

a)    Leaf node - obsahuje jednoduché údaje ako celé číslo alebo reťazec. Má presne jednu hodnotu konkrétneho typu a žiadnych potomkov.

Zápis Leaf node v YANG:
            leaf host-name {
                        type string;
                        description "Hostname for this system";
            }

NETCONF XML kódovanie:
            <host-name>my.example.com</host-name>

b)   Leaf-List node - je to sekvencia uzlov typu list s presnou hodnotou konkrétneho typu pre každý list

 YANG zápis:
           leaf-list domain-search {
                        type string;
                        description "List of domain names to search";  }

NETCONF XML zápis:      
             <domain-search>high.example.com</domain-search>
            <domain-search>low.example.com</domain-search>
            <domain-search>everywhere.example.com</domain-search>

 c)    Container  node - uzol kontajnera sa používa na zoskupenie súvisiacich uzlov v podstrome. Kontajner obsahuje iba uzly potomkov a žiadnu hodnotu. Kontajner môže obsahovať akýkoľvek počet uzlov potomkov akéhokoľvek druhu (vrátane listov, zoznamov, kontajnerov a listových zoznamov).

YANG zápis:
     container system {
         container login {
             leaf message {
                 type string;
                 description
                     "Message given at start of login session"; }   }  }

d)   List node - zoznam definuje postupnosť záznamov v zozname. Každý záznam je ako  štruktúra alebo inštancia záznamu a je jednoznačne identifikovaná hodnotami jej kľúčových listov. Zoznam môže definovať viac kľúčových listov a môže obsahovať ľubovoľný počet uzlov potomkov akéhokoľvek druhu (vrátane listov,
zoznamov, kontajnerov atď.).

Príklad – YANG zápis:
list user {
   key "name";
   leaf name {      type string;     }
   leaf full-name { type string;   }
   leaf class {      type string;      }  }