YANG
Yet Another Next Generation ( YANG , /jæŋ/, rymuje się z „zawiesić się”) to język modelowania danych służący do definiowania danych przesyłanych przez protokoły zarządzania siecią, takie jak NETCONF i RESTCONF. Język modelowania danych YANG jest obsługiwany przez grupę roboczą NETMOD w Internet Engineering Task Force (IETF) i początkowo został opublikowany jako RFC 6020 w październiku 2010 r., z aktualizacją w sierpniu 2016 r. ( RFC 7950 ). Język modelowania danych może być wykorzystany do modelowania zarówno danych konfiguracyjnych, jak i danych o stanie elementów sieci. Ponadto YANG może służyć do definiowania formatu powiadomień o zdarzeniach emitowanych przez elementy sieci oraz umożliwia modelarzom danych zdefiniowanie sygnatury zdalne wywołania procedur , które mogą być wywoływane na elementach sieci za pośrednictwem protokołu NETCONF. Język, który jest niezależny od protokołu, może zostać następnie przekonwertowany na dowolny format kodowania, np. XML lub JSON , obsługiwany przez protokół konfiguracji sieci.
YANG to modułowy język reprezentujący struktury danych w formacie drzewa XML . Język modelowania danych ma wiele wbudowanych typów danych. Dodatkowe typy danych specyficzne dla aplikacji mogą pochodzić z wbudowanych typów danych. Bardziej złożone struktury danych wielokrotnego użytku mogą być reprezentowane jako grupy. Modele danych YANG mogą używać XPATH do definiowania ograniczeń dotyczących elementów modelu danych YANG.
Historia
Wiele protokołów zarządzania siecią ma powiązane języki modelowania danych. Pierwszym powszechnie stosowanym standardem internetowym do zarządzania siecią był protokół Simple Network Management Protocol (SNMP). Język modelowania danych powiązany z SNMP został nazwany Strukturą Informacji Zarządzania (SMI). Sam język SMI był oparty na wersji Abstract Syntax Notation One (ASN.1) z 1988 roku. Bieżąca wersja języka SMI, SMIv2 zdefiniowana w dokumentach RFC 2578 , 2579 i 2580 , rozwinęła się w rozszerzony podzbiór języka ASN.1.
Pod koniec lat 90. rozpoczęto projekt stworzenia zamiennika dla SMIv2, który nazwano SMIng. Jedną z motywacji było oddzielenie SMIng od protokołu zarządzania SNMP i nadanie SMIng struktury składniowej, która jest zarówno łatwa do przeanalizowania dla programów komputerowych, jak i łatwa do nauczenia się dla osób zaznajomionych z językami programowania, które używają notacji podobnej do C. Chociaż projekt SMIng nie odniósł sukcesu w IETF, specyfikacje SMIng zostały opublikowane jako dokumenty eksperymentalne w maju 2004 ( RFC 3780 , 3781 ).
Wkrótce po opracowaniu protokołu NETCONF w IETF stało się jasne, że do zdefiniowania modeli danych, którymi manipuluje protokół NETCONF, potrzebny jest język modelowania danych. Zespół projektowy stworzył propozycję, która stała się podstawą języka YANG. Struktura syntaktyczna i system typów bazowych zostały zasadniczo zapożyczone z SMIng. Jednak w oparciu o wnioski wyciągnięte z projektu SMIng nie podjęto żadnych prób uczynienia protokołu YANG neutralnym. Zamiast tego YANG wiąże się z koncepcjami protokołu NETCONF, takimi jak założenie, że instancje modelu danych mogą być serializowane do formatu XML . Standaryzacja YANG rozpoczęła się wraz z utworzeniem grupy roboczej NETMOD w kwietniu 2008 r. Specyfikacja YANG 1.0 została opublikowana jako RFC 6020 w październiku 2010 r. Ostatnio grupa robocza NETMOD pracowała nad YANG 1.1, która została opublikowana w sierpniu 2016 r. w RFC7950 . _
Przykład
Poniższy przykład modułu YANG-sports
pokazuje model danych dla sportów zespołowych. Moduł deklaruje przestrzeń nazw i prefiks oraz importuje moduł biblioteki typów ietf-yang-types
przed zdefiniowaniem typu season
. Następnie definiuje sport kontenerowy
, który zawiera listę osób
i listę drużyn
. Drużyna ma listę graczy, którzy odwołują się do osób poprzez leafref
i jego ograniczenie ścieżki
.
moduł example-sports { namespace "http://example.com/example-sports" ; przedrostek sport ; importuj typy ietf-yang { przedrostek yang ; } typedef sezon { typ string ; opis "Nazwa sezonu sportowego wraz z typem i rokiem, np. 'Liga Mistrzów 2014/2015'." ; } sporty kontenerowe { config true
; lista osoba { klucz "imię" ; nazwa liścia { typ string ; } liść urodziny { typ yang : data-i-godzina ; obowiązkowa prawda ; } } wypisz zespół { klucz "nazwa" ; nazwa liścia { typ string ; } lista graczy { klucz
0 "imię sezonu" ; unikalny numer ; nazwa liścia { typ leafref { ścieżka "/sport/osoba/nazwa" ; } } sezon liści { wpisz sezon ; } numer liścia { typ uint16 ; obowiązkowa prawda ; } wyniki liści { typ uint16 ; domyślny ; }
} } } }
kodowanie JSON
Poniższy blok kodu przedstawia reprezentację w formacie JSON wystąpienia przykładowego
modelu danych sportowych.
{ "example-sports:sports" : { "person" : [ { "name" : "Lionel Andrés Messi" , "birthday" : "1987-06-24T00:00:00-00:00" }, { "name " : "Cristiano Ronaldo" , "urodziny" : "1985-02-05T00:00:00-00:00" } ], "drużyna" : [ { "nazwa" :
"FC Barcelona" , "zawodnik" : [ { "imię i nazwisko" : "Lionel Andrés Messi" , "sezon" : "Liga Mistrzów 2014/2015" , "liczba" : 10 , "wyniki" : 43 } ] }, { " nazwa" : "Real Madryt" , "zawodnik" : [ { "imię" :
„Cristiano Ronaldo” , „sezon” : „Liga Mistrzów 2014/2015” , „liczba” : 7 , „wyniki” : 48 } ] } ] } }
kodowanie XMLa
Poniższy blok kodu przedstawia reprezentację XML instancji przykładowego modelu danych sportowych
.
<data xmlns= "urn:ietf:params:xml:ns:netconf:base:1.0" > <sports xmlns= "http://example.com/example-sports" > <osoba> <imię> Lionel Andrés Messi < /imię> <urodziny> 1987-06-24T00:00:00-00:00 </urodziny> </osoba> <osoba> <imię> Cristiano Ronaldo </name> <urodziny> 1985-02-05T00:00: 00-00:00 </urodziny> </osoba>
<team> <nazwa> FC Barcelona </nazwa> <gracz> <nazwa> Lionel Andrés Messi </nazwa> <sezon> Liga Mistrzów 2014/2015 </sezon> <liczba> 10 </liczba> <wyniki> 43 < /scores> </player> </team> <drużyna> <nazwa> Real Madryt </nazwa> <gracz> <nazwa> Cristiano Ronaldo </nazwa>
<sezon> Liga Mistrzów 2014/2015 </sezon> <liczba> 7 </liczba> <wyniki> 48 </wyniki> </player> </team> </sports> </data>
Dokumentacja
Specyfikacje językowe i dokumenty architektoniczne
Poniższa prośba o komentarze (RFC) definiuje język YANG i niektóre podstawowe rozszerzenia:
- RFC 6020 : YANG — język modelowania danych dla protokołu konfiguracji sieci (NETCONF)
- RFC 6110 : Mapowanie YANG na języki definicji schematu dokumentu i sprawdzanie zawartości NETCONF
- RFC 7950 : Język modelowania danych YANG 1.1 [nie zastępuje RFC 6020 ]
- RFC 7951 : Kodowanie JSON danych modelowanych za pomocą YANG
- RFC 7952 : Definiowanie i używanie metadanych za pomocą YANG
- RFC 8342 : Architektura magazynu danych zarządzania siecią (NMDA)
- RFC 8525 : Biblioteka YANG [przestarzały RFC 7895 ]
- RFC 8528 : Montowanie schematu YANG
- RFC 8791 : Rozszerzenia struktury danych YANG
- RFC 9254 : Kodowanie danych modelowanych za pomocą YANG w zwięzłej reprezentacji obiektów binarnych (CBOR)
Wytyczne i dokumentacja pomocnicza
Poniższe prośby o komentarze zawierają wytyczne i dokumentację pomocniczą:
- RFC 8407 : Wytyczne dla autorów i recenzentów dokumentów zawierających modele danych YANG [przestarzały RFC 6087 ]
- RFC 8199 : Klasyfikacja modułów YANG
- RFC 8340 : Diagramy drzewa YANG
- RFC 8969 : Struktura automatyzacji zarządzania usługami i siecią za pomocą YANG
- RFC 9195 : Format pliku dla danych instancji YANG
wykorzystanie IETF
Specyfikacje protokołów śledzenia standardów
Poniższe prośby o komentarze definiują protokoły ścieżek standardów, które są (częściowo) zdefiniowane za pomocą modułów YANG:
- RFC 6241 : Protokół konfiguracji sieci (NETCONF)
- RFC 6243 : Możliwość With-defaults dla NETCONF
- RFC 6470 : Podstawowe powiadomienia protokołu konfiguracji sieci (NETCONF).
- RFC 8040 : protokół RESTCONF
- RFC 8071 : NETCONF Zadzwoń do domu i RESTCONF Zadzwoń do domu
- RFC 8072 : Typ nośnika krosowego YANG
- RFC 8341 : Model kontroli dostępu do konfiguracji sieci [przestarzały RFC 6536 ]
- RFC 8526 : Rozszerzenia NETCONF do obsługi architektury magazynu danych zarządzania siecią
- RFC 8527 : Rozszerzenia RESTCONF obsługujące architekturę magazynu danych zarządzania siecią
- RFC 8572 : Bezpieczne udostępnianie bezdotykowe (SZTP)
- RFC 8639 : Subskrypcja powiadomień YANG
- RFC 8640 : Dynamiczna subskrypcja zdarzeń YANG i magazynów danych przez NETCONF
- RFC 8641 : Subskrypcja powiadomień YANG o aktualizacjach magazynu danych
- RFC 8650 : Dynamiczna subskrypcja zdarzeń YANG i magazynów danych przez RESTCONF
Modele danych śledzenia standardów
Następujące dokumenty RFC definiują modele danych YANG ze ścieżką standardów:
- RFC 6022 : Moduł YANG do monitorowania NETCONF
- RFC 6991 : Typowe typy danych YANG [przestarzały RFC 6021 ]
- RFC 6643 : Tłumaczenie struktury informacji zarządczych w wersji 2 (SMIv2) modułów MIB na moduły YANG
- RFC 6728 : Model danych konfiguracyjnych dla protokołów eksportu informacji o przepływie IP (IPFIX) i próbkowania pakietów (PSAMP)
- RFC 7224 : Moduł interfejsu IANA typu YANG
- RFC 7317 : Model danych YANG do zarządzania systemem
- RFC 7407 : Model danych YANG do konfiguracji SNMP
- RFC 8177 : Model danych YANG dla breloczków
- RFC 8194 : Model danych YANG dla agentów pomiarowych LMAP
- RFC 8294 : Typowe typy danych YANG dla obszaru routingu
- RFC 8299 : Model danych YANG dla dostarczania usług L3VPN
- RFC 8343 : Model danych YANG do zarządzania interfejsem [przestarzały RFC 7223 ]
- RFC 8344 : Model danych YANG do zarządzania adresami IP [przestarzały RFC 7277 ]
- RFC 8345 : Model danych YANG dla topologii sieci
- RFC 8346 : Model danych YANG dla topologii warstwy 3
- RFC 8347 : Model danych YANG dla protokołu Virtual Router Redundancy Protocol (VRRP)
- RFC 8348 : Model danych YANG do zarządzania sprzętem
- RFC 8349 : Model danych YANG do zarządzania routingiem (wersja NMDA) [przestarzały RFC 8022 ]
- RFC 8366 : Artefakt kuponu dla protokołów ładowania początkowego
- RFC 8431 : Model danych YANG dla Routing Information Base (RIB)
- RFC 8466 : Model danych YANG dla świadczenia usług wirtualnej sieci prywatnej warstwy 2 (L2VPN)
- RFC 8512 : Moduł YANG do translacji adresów sieciowych (NAT) i translacji prefiksów sieciowych (NPT)
- RFC 8513 : Model danych YANG dla Dual-Stack Lite (DS-Lite)
- RFC 8519 : Model danych YANG dla list kontroli dostępu do sieci (ACL)
- RFC 8520 : Specyfikacja opisu użycia producenta
- RFC 8529 : Model danych YANG dla instancji sieciowych
- RFC 8530 : Model YANG dla elementów sieci logicznej
- RFC 8531 : Ogólny model danych YANG dla protokołów operacji zorientowanych na połączenie, administracji i konserwacji (OAM)
- RFC 8532 : Ogólny model danych YANG do protokołów zarządzania operacjami, administracją i konserwacją (OAM), które wykorzystują komunikację bezpołączeniową
- RFC 8533 : Model danych YANG do metod wyszukiwania w protokołach zarządzania operacjami, administracją i konserwacją (OAM), które wykorzystują komunikację bezpołączeniową
- RFC 8542 : Model danych YANG dla topologii szkieletowej w sieciach centrów danych
- RFC 8561 : Model danych YANG dla mikrofalowego łącza radiowego
- RFC 8575 : Model danych YANG dla protokołu Precision Time Protocol (PTP)
- RFC 8632 : Model danych YANG do zarządzania alarmami
- RFC 8652 : Model danych YANG dla protokołu zarządzania grupami internetowymi (IGMP) i Multicast Listener Discovery (MLD)
- RFC 8675 : Model danych YANG dla typów interfejsów tuneli
- RFC 8676 : Moduły YANG dla adresów IPv4-in-IPv6 plus port (A+P) Softwires
- RFC 8695 : Model danych YANG dla protokołu informacji o routingu (RIP)
- RFC 8776 : Typowe typy danych YANG dla inżynierii ruchu
- RFC 8795 : Model danych YANG dla topologii inżynierii ruchu (TE).
- RFC 8808 : Model danych YANG dla domyślnych ustawień fabrycznych
- RFC 8916 : Model danych YANG dla protokołu Multicast Source Discovery Protocol (MSDP)
- RFC 8944 : Model danych YANG dla topologii sieci warstwy 2
- RFC 8960 : Model danych YANG dla bazy MPLS
- RFC 8819 : Tagi modułów YANG
- RFC 9020 : Model danych YANG dla routingu segmentowego
- RFC 9061 : Model danych YANG do ochrony przepływu IPsec w oparciu o sieć zdefiniowaną programowo (SDN)
- RFC 9067 : Model danych YANG dla zasad routingu
- RFC 9070 : Model danych YANG dla MPLS LDP
- RFC 9093 : Model danych YANG dla typów warstwy 0
- RFC 9094 : Model danych YANG dla sieci optycznych z przełączaniem długości fali (WSON)
- RFC 9105 : Model danych YANG dla kontrolera dostępu do terminala Access-Control System Plus (TACACS+)
- RFC 9108 : Typy YANG dla klas DNS i typów rekordów zasobów
- RFC 9127 : Model danych YANG do wykrywania przekazywania dwukierunkowego (BFD)
- RFC 9166 : Model danych YANG dla protokołu IGMP i Multicast Listener Discovery (MLD) Snooping
- RFC 9179 : Grupowanie YANG dla lokalizacji geograficznych
- RFC 9181 : wspólny model danych YANG dla sieci VPN warstwy 2 i warstwy 3
- RFC 9196 : Moduły YANG opisujące możliwości powiadomień o aktualizacjach systemów i magazynów danych
- RFC 9243 : Model danych YANG do konfiguracji DHCPv6
- RFC 9249 : Model danych YANG dla NTP
- RFC 9291 : Sieciowy model danych YANG dla sieci VPN warstwy 2
- RFC 9314 : Model danych YANG do wykrywania przekazywania dwukierunkowego (BFD)
- RFC 9128 : Model danych YANG dla multiemisji niezależnej od protokołu (PIM)
- RFC 9129 : Model danych YANG dla protokołu OSPF
- RFC 9130 : Model danych YANG dla protokołu IS-IS
- RFC 9194 : Moduł YANG dla odwrotnej metryki IS-IS
- RFC 9348 : Model danych YANG dla bezpieczeństwa przepływu ruchu IP
- RFC 9363 : Model danych YANG do statycznej kompresji nagłówka kontekstu (SCHC)
Specyfikacje eksperymentalne
Poniższe prośby o komentarze to specyfikacje eksperymentalne, które wykorzystują lub rozszerzają YANG:
Implementacje
Implementacje open source (posortowane według nazwy):
- clixon to łańcuch narzędzi oparty na YANG, zawierający interaktywne interfejsy CLI, NETCONF i RESTCONF napisane w C.
- goyang to parser i kompilator YANG napisany w Go w celu tworzenia obiektów języka Go
- jnc to kompilator YANG-to-Java-API oparty na pyang
- libyang to parser i zestaw narzędzi YANG napisany w C i udostępniający API w C
- pyang to rozszerzalny walidator i konwerter YANG napisany w Pythonie
- pyangbind to oparty na pyang generator powiązań Pythona
- Sysrepo to oparty na YANG konfiguracyjny i operacyjny magazyn danych dla aplikacji Unix/Linux.
- yangbuilder to builder dla YANG, zaimplementowany w Apache Groovy (generowanie modeli danych yang za pomocą Apache Groovy , utrzymywanie podobnych modeli z jedną bazą kodu źródłowego)
- yang-ide to wtyczka Eclipse do edycji i wizualizacji modeli YANG
-
yang-js to parser i ewaluator YANG napisany w CoffeeScript/JavaScript dla Node.js i przeglądarki internetowej
- yang-express to oparty na yang-js generator frameworka sieciowego Express.js
- yang-swagger to oparty na yang-js generator specyfikacji Swagger/OpenAPI
- yangson to biblioteka Pythona 3 do pracy z zakodowaną w JSON konfiguracją i danymi stanu modelowanymi przy użyciu języka modelowania danych YANG.
- YANG Tools to zestaw narzędzi OpenDaylight Project napisany w Javie
- Yang-Explorer — jest opartą na pyang przeglądarką Yang i aplikacją RPC Builder
- ydk-gen to kompilator YANG-to-API generujący interfejsy API w wielu językach (np. Python, C++)
- yuma123 to toolchain netconf/YANG napisany w C, udostępniający: libyuma - API do tworzenia aplikacji wspierających kompilację modułów YANG w czasie wykonywania, netconfd - modułowy serwer, yangcli - interaktywne narzędzie wiersza poleceń
Implementacje z zamkniętym kodem źródłowym (posortowane według nazwy):
- confd to zestaw narzędzi komercyjnego agenta zarządzania, zawierający kompilator YANG
- MasterYANG to projektant, wizualizator i edytor modeli YANG dla systemu Windows
- Visual YANG Designer to twórca/edytor/modeler/konstruktor/projektant plików definicji YANG i kompilator YANG zaimplementowany w Javie
- yumapro to zestaw narzędzi agenta zarządzania komercyjnego, zawierający kompilator YANG
Linki zewnętrzne
- Carl Moberg (2015-11-05). YANG na przykładzie (YouTube). Jokohama: zespół IETF EDU. Zarchiwizowane od oryginału w dniu 2021-12-21.
- Stefana Wallina (18.10.2014). Samouczek YANG (YouTube). Sztokholm: ogon-f. Zarchiwizowane od oryginału w dniu 2021-12-21.
- Katalog modeli YANG — katalog online z interfejsem API REST
- Centrala YANG - informacje i samouczki YANG
- Forum dyskusyjne YANG - Forum społeczności użytkowników ConfD do omawiania pytań związanych z YANG.
- Lista klientów i serwerów opartych na YANG znajduje się na stronie NETCONF .
- ISBN 978-0135180396 - „Programowanie sieciowe za pomocą YANG: Struktura automatyzacji sieci za pomocą YANG, NETCONF, RESTCONF i gNMI”