YANG
Yet Another Next Generation ( YANG , /jæŋ/, som rimmar på "hänga") är ett datamodelleringsspråk för definition av data som skickas över nätverkshanteringsprotokoll som NETCONF och RESTCONF. YANG-datamodelleringsspråket underhålls av NETMOD-arbetsgruppen i Internet Engineering Task Force (IETF) och publicerades initialt som RFC 6020 i oktober 2010, med en uppdatering i augusti 2016 ( RFC 7950 ). Datamodelleringsspråket kan användas för att modellera både konfigurationsdata och tillståndsdata för nätverkselement. Dessutom kan YANG användas för att definiera formatet för händelsemeddelanden som sänds ut av nätverkselement och det tillåter datamodellerare att definiera signaturen för fjärrproceduranrop som kan anropas på nätverkselement via NETCONF-protokollet. Språket, som är protokolloberoende, kan sedan konverteras till vilket kodningsformat som helst, t.ex. XML eller JSON , som nätverkskonfigurationsprotokollet stöder.
YANG är ett modulärt språk som representerar datastrukturer i ett XML- trädformat. Datamodelleringsspråket kommer med ett antal inbyggda datatyper. Ytterligare applikationsspecifika datatyper kan härledas från de inbyggda datatyperna. Mer komplexa återanvändbara datastrukturer kan representeras som grupperingar. YANG-datamodeller kan använda XPATH- uttryck för att definiera begränsningar för elementen i en YANG-datamodell.
Historia
Många nätverkshanteringsprotokoll har associerade datamodelleringsspråk. Den första allmänt använda Internetstandarden för nätverkshantering var Simple Network Management Protocol ( SNMP). Datamodelleringsspråket som är associerat med SNMP kallades Structure of Management Information (SMI). Själva SMI-språket var baserat på 1988 års version av Abstract Syntax Notation One ( ASN.1). Den nuvarande versionen av SMI-språket, SMIv2 definierat i RFC 2578 , 2579 och 2580 , har utvecklats till en utökad delmängd av ASN.1.
I slutet av 1990-talet startades ett projekt för att skapa en ersättare för SMIv2, som kallades SMIng. En motivering var att frikoppla SMIng från hanteringsprotokollet SNMP och att ge SMIng en syntaktisk struktur som både är lätt att tolka för datorprogram och lätt att lära sig för personer som är bekanta med programmeringsspråk som använder en C-liknande notation. Även om SMIng-projektet inte lyckades i IETF, publicerades SMIng-specifikationerna som experimentella dokument i maj 2004 ( RFC 3780 , 3781 ).
Strax efter utvecklingen av NETCONF -protokollet i IETF blev det klart att ett datamodelleringsspråk behövdes för att definiera datamodeller som manipulerades av NETCONF-protokollet. Ett designteam skapade ett förslag som blev grunden för YANG-språket. Den syntaktiska strukturen och bastypsystemet var i huvudsak lånade från SMIng. Men baserat på lärdomarna från SMIng-projektet gjordes inga försök att göra YANG-protokollet neutralt. Istället knyter YANG till begreppen i NETCONF-protokollet, såsom antagandet att datamodellinstanser kan serialiseras till XML . Standardisering av YANG startade med bildandet av NETMOD-arbetsgruppen i april 2008. YANG 1.0-specifikationen publicerades som RFC 6020 i oktober 2010. Nyligen har NETMOD-arbetsgruppen arbetat med YANG 1.1, som publicerades i augusti 2016 i RFC 7950 .
Exempel
Följande YANG-modulexempel -sporter
visar en datamodell för lagsporter. Modulen deklarerar ett namnområde och ett prefix och importerar typbiblioteksmodulen ietf-yang-typer
innan typsäsongen definieras
. Den definierar sedan en containersport som
inkluderar en lista över personer
och en lista över lag
. Ett lag har en lista över spelare som refererar personer via leafref
-typen och dess vägbegränsning
.
0
module exempel-sport { namnutrymme "http://example.com/exempel-sport" ; prefix sport ; import ietf-yang-typer { prefix yang ; } typedef season { typ sträng ; description "Namnet på en sportsäsong, inklusive typ och år, t.ex. ' Champions League 2014/2015'." ; } container sports { config true ; list person { nyckel "namn" ; leaf name { typ string ; } leaf födelsedag { typ yang : datum-och-tid ; obligatorisk sann ; } } list team { key "name" ; leaf name { typ string ; } list player { key "name season" ; unikt nummer ; bladnamn { typ leafref { sökväg "/sports/person/namn " ; } } leaf season { typ season ; } bladnummer { typ uint16 ; _ obligatorisk sann ; } bladpoäng { typ uint16 ; _ standard ; } } } } }
JSON-kodning
Kodblocket nedan visar JSON- representationen av en instansiering av exempel-sportdatamodellen
.
{ "example-sports:sports" : { "person" : [ { "name" : "Lionel Andrés Messi" , "birthday" : "1987-06-24T00:00:00-00:00" }, { "name " : "Cristiano Ronaldo" , "födelsedag" : "1985-02-05T00:00:00-00:00" } ], "lag" : [ { "namn" : "FC Barcelona" , "spelare" : [ { "name" : "Lionel Andrés Messi" , "säsong" : "Champions League 2014/2015" , "nummer" : 10 , "scores" : 43 } ] }, { "name" : "Real Madrid" , "spelare" : [ { "name" : "Cristiano Ronaldo" , " season" : "Champions League 2014/2015" , "nummer" : 7 , "scores" : 48 } ] } ] } }
XML-kodning
Kodblocket nedan visar XML- representationen av en instansiering av exempel-sportdatamodellen
.
<data xmlns= "urn:ietf:params:xml:ns:netconf:base:1.0" > <sports xmlns= "http://example.com/example-sports" > <person> <namn> Lionel Andrés Messi < /namn> <födelsedag> 1987-06-24T00:00:00-00:00 </birthday> </person> <person> <namn> Cristiano Ronaldo </name> <födelsedag> 1985-02-05T00:00: 00-00:00 </birthday> </person> <team> <name> FC Barcelona </name> <player> <name> Lionel Andrés Messi </name> <säsong> Champions League 2014/2015 </season> <number> 10 </number> <scores> 43 </scores> </player> </team> <team> <name> Real Madrid </name> <player> <name> Cristiano Ronaldo </name> <säsong > Champions League 2014/2015 </säsong> <number> 7 </number> <scores> 48 </scores> </player> </team> </sports> </data>
Dokumentation
Språkspecifikationer och arkitektoniska dokument
Följande begäran om kommentarer (RFC) definierar YANG-språket och några grundläggande tillägg:
- RFC 6020 : YANG - Ett datamodelleringsspråk för nätverkskonfigurationsprotokollet (NETCONF)
- RFC 6110 : Kartläggning av YANG till dokumentschemadefinitionsspråk och validering av NETCONF-innehåll
- RFC 7950 : YANG 1.1 Data Modeling Language [ersätter inte RFC 6020 ]
- RFC 7951 : JSON-kodning av data modellerad med YANG
- RFC 7952 : Definiera och använda metadata med YANG
- RFC 8342 : Network Management Datastore Architecture (NMDA)
- RFC 8525 : YANG Library [föråldrade RFC 7895 ]
- RFC 8528 : YANG Schema Mount
- RFC 8791 : YANG Data Structure Extensions
- RFC 9254 : Kodning av data modellerad med YANG i kortfattad binär objektrepresentation (CBOR)
Riktlinjer och stödjande dokumentation
Följande förfrågningar om kommentarer ger riktlinjer och stödjande dokumentation:
- RFC 8407 : Riktlinjer för författare och granskare av dokument som innehåller YANG-datamodeller [föråldrade RFC 6087 ]
- RFC 8199 : YANG-modulklassificering
- RFC 8340 : YANG-träddiagram
- RFC 8969 : Ett ramverk för automatisering av tjänster och nätverkshantering med YANG
- RFC 9195 : Ett filformat för YANG-instansdata
IETF-användning
Standardspårprotokollspecifikationer
Följande förfrågningar om kommentarer definierar standardspårprotokoll som (delvis) definieras med YANG-moduler:
- RFC 6241 : Network Configuration Protocol (NETCONF)
- RFC 6243 : Med-default Capability för NETCONF
- RFC 6470 : Network Configuration Protocol (NETCONF) Base Notifications
- RFC 8040 : RESTCONF-protokoll
- RFC 8071 : NETCONF Call Home och RESTCONF Call Home
- RFC 8072 : YANG Patch Media Type
- RFC 8341 : Modell för åtkomstkontroll för nätverkskonfiguration [föråldrad RFC 6536 ]
- RFC 8526 : NETCONF-tillägg för att stödja nätverkshanteringens datalagringsarkitektur
- RFC 8527 : RESTCONF-tillägg för att stödja nätverkshanteringens datalagringsarkitektur
- RFC 8572 : Secure Zero Touch Provisioning (SZTP)
- RFC 8639 : Prenumeration på YANG-meddelanden
- RFC 8640 : Dynamisk prenumeration på YANG Events and Datastores över NETCONF
- RFC 8641 : Prenumeration på YANG Notifications for Datastore Updates
- RFC 8650 : Dynamisk prenumeration på YANG Events and Datastores över RESTCONF
Standardspår datamodeller
Följande RFC definierar standardspår YANG-datamodeller:
- RFC 6022 : YANG-modul för NETCONF-övervakning
- RFC 6991 : Vanliga YANG-datatyper [föråldrade RFC 6021 ]
- RFC 6643 : Översättning av strukturen för ledningsinformation version 2 (SMIv2) MIB-moduler till YANG-moduler
- RFC 6728 : Konfigurationsdatamodell för protokollen för export av IP-flödesinformation (IPFIX) och paketsampling (PSAMP)
- RFC 7224 : IANA-gränssnittstyp YANG-modul
- RFC 7317 : En YANG-datamodell för systemhantering
- RFC 7407 : En YANG-datamodell för SNMP-konfiguration
- RFC 8177 : YANG Datamodell för nyckelringar
- RFC 8194 : En YANG-datamodell för LMAP-mätmedel
- RFC 8294 : Vanliga YANG-datatyper för ruttområdet
- RFC 8299 : YANG-datamodell för L3VPN-tjänstleverans
- RFC 8343 : En YANG-datamodell för gränssnittshantering [föråldrad RFC 7223 ]
- RFC 8344 : En YANG-datamodell för IP-hantering [föråldrad RFC 7277 ]
- RFC 8345 : En YANG-datamodell för nätverkstopologier
- RFC 8346 : En YANG-datamodell för lager 3-topologier
- RFC 8347 : En YANG-datamodell för VRRP (Virtual Router Redundancy Protocol)
- RFC 8348 : En YANG-datamodell för maskinvaruhantering
- RFC 8349 : En YANG-datamodell för routinghantering (NMDA-version) [föråldrad RFC 8022 ]
- RFC 8366 : En kupongartefakt för bootstrapping-protokoll
- RFC 8431 : En YANG-datamodell för ruttinformationsbasen (RIB)
- RFC 8466 : En YANG-datamodell för Layer 2 Virtual Private Network (L2VPN) Service Delivery
- RFC 8512 : En YANG-modul för nätverksadressöversättning (NAT) och nätverksprefixöversättning (NPT)
- RFC 8513 : En YANG-datamodell för Dual-Stack Lite (DS-Lite)
- RFC 8519 : YANG-datamodell för listor för nätverksåtkomstkontroll (ACL)
- RFC 8520 : Tillverkare Användning Beskrivning Specifikation
- RFC 8529 : YANG-datamodell för nätverksinstanser
- RFC 8530 : YANG-modell för logiska nätverkselement
- RFC 8531 : Generisk YANG-datamodell för anslutningsorienterade operations-, administrations- och underhållsprotokoll (OAM)
- RFC 8532 : Generisk YANG-datamodell för hantering av operations-, administrations- och underhållsprotokoll (OAM) som använder anslutningslös kommunikation
- RFC 8533 : En YANG-datamodell för hämtningsmetoder för hantering av operations-, administrations- och underhållsprotokoll (OAM) som använder anslutningslös kommunikation
- RFC 8542 : En YANG-datamodell för tygtopologi i datacenternätverk
- RFC 8561 : En YANG-datamodell för mikrovågsradiolänk
- RFC 8575 : YANG-datamodell för Precision Time Protocol (PTP)
- RFC 8632 : En YANG-datamodell för larmhantering
- RFC 8652 : En YANG-datamodell för Internet Group Management Protocol (IGMP) och Multicast Listener Discovery (MLD)
- RFC 8675 : En YANG-datamodell för tunnelgränssnittstyper
- RFC 8676 : YANG-moduler för IPv4-i-IPv6-adress plus port (A+P) mjuktrådar
- RFC 8695 : En YANG-datamodell för RIP (Roting Information Protocol)
- RFC 8776 : Vanliga YANG-datatyper för trafikteknik
- RFC 8795 : YANG Data Model for Traffic Engineering (TE) Topologier
- RFC 8808 : A YANG-datamodell för fabriksinställningar
- RFC 8916 : En YANG-datamodell för Multicast Source Discovery Protocol (MSDP)
- RFC 8944 : En YANG-datamodell för nätverkstopologier för lager 2
- RFC 8960 : En YANG-datamodell för MPLS-bas
- RFC 8819 : YANG-modultaggar
- RFC 9020 : YANG-datamodell för segmentrouting
- RFC 9061 : En YANG-datamodell för IPsec-flödesskydd baserad på mjukvarudefinierat nätverk (SDN)
- RFC 9067 : En YANG-datamodell för routingpolicy
- RFC 9070 : YANG Datamodell för MPLS LDP
- RFC 9093 : En YANG-datamodell för lager 0-typer
- RFC 9094 : En YANG-datamodell för våglängdsväxlade optiska nätverk (WSON)
- RFC 9105 : En YANG-datamodell för Terminal Access Controller Access-Control System Plus (TACACS+)
- RFC 9108 : YANG-typer för DNS-klasser och resursposttyper
- RFC 9127 : YANG Data Model for Bidirectional Forwarding Detection (BFD)
- RFC 9166 : En YANG-datamodell för Internet Group Management Protocol (IGMP) och Multicast Listener Discovery (MLD) snooping
- RFC 9179 : En YANG-gruppering för geografiska platser
- RFC 9181 : En vanlig YANG-datamodell för lager 2 och lager 3 VPN
- RFC 9196 : YANG-moduler som beskriver funktioner för system- och datalagringsuppdateringsmeddelanden
- RFC 9243 : En YANG-datamodell för DHCPv6-konfiguration
- RFC 9249 : En YANG-datamodell för NTP
- RFC 9291 : En YANG-nätverksdatamodell för Layer 2 VPN
- RFC 9314 : YANG Data Model for Bidirectional Forwarding Detection (BFD)
- RFC 9128 : YANG Data Model for Protocol Independent Multicast (PIM)
- RFC 9129 : YANG-datamodell för OSPF-protokollet
- RFC 9130 : YANG-datamodell för IS-IS-protokollet
- RFC 9194 : En YANG-modul för IS-IS omvänd metrisk
- RFC 9348 : En YANG-datamodell för IP-trafikflödessäkerhet
- RFC 9363 : A YANG Data Model for Static Context Header Compression (SCHC)
Experimentella specifikationer
Följande förfrågningar om kommentarer är experimentella specifikationer som använder eller utökar YANG:
Genomföranden
Implementeringar med öppen källkod (sorterade efter namn):
- clixon är en YANG-baserad verktygskedja inklusive interaktiva CLI-, NETCONF- och RESTCONF-gränssnitt skrivna i C.
- goyang är en YANG-parser och kompilator skriven i Go för att producera Go-språkobjekt
- jnc är en pyang-baserad YANG-till-Java-API-kompilator
- libyang är en YANG-parser och verktygslåda skriven i C och tillhandahåller API i C
- pyang är en utbyggbar YANG-validator och omvandlare skriven i Python
- pyangbind är en pyang-baserad Python-bindningsgenerator
- Sysrepo är en YANG-baserad konfigurations- och driftsdatalagring för Unix/Linux-applikationer.
- yangbuilder är en byggare för YANG, implementerad i Apache Groovy (generera yang-datamodeller med Apache Groovy , underhåll liknande modeller med en källkodsbas)
- yang-ide är ett Eclipse-plugin för redigering och visualisering av YANG-modeller
-
yang-js är en YANG-tolkare och utvärderare skriven i CoffeeScript/JavaScript för Node.js och webbläsaren
- yang-express är en yang-js-baserad Express.js webbramverksgenerator
- yang-swagger är en yang-js-baserad Swagger/OpenAPI-specifikationsgenerator
- yangson är ett Python 3-bibliotek för att arbeta med JSON-kodad konfiguration och tillståndsdata som modelleras med hjälp av YANG-datamodelleringsspråket.
- YANG Tools är en OpenDaylight Project- verktygsuppsättning skriven i Java
- Yang-Explorer - är en pyang-baserad Yang Browser och RPC Builder Application
- ydk-gen är en YANG-till-API-kompilator som genererar API:er på flera språk (t.ex. Python, C++)
- yuma123 är netconf/YANG-verktygskedja skriven i C som tillhandahåller: libyuma - API för utveckling av applikationer som stöder runtime-kompilering av YANG-moduler, netconfd - modulär server, yangcli - interaktivt kommandoradsverktyg
Implementeringar med sluten källkod (sorterade efter namn):
- confd är en verktygssats för kommersiella hanteringsagenter inklusive en YANG-kompilator
- MasterYANG är en YANG-modelldesigner, visualiserare och redigerare för Windows
- Visual YANG Designer är en YANG definition fil skapare/redigerare/modellerare/byggare/designer och YANG kompilator implementerad i Java
- yumapro är en verktygssats för kommersiella hanteringsagenter inklusive en YANG-kompilator
externa länkar
- Carl Moberg (2015-11-05). YANG genom exempel (YouTube). Yokohama: IETF EDU Team. Arkiverad från originalet 2021-12-21.
- Stefan Wallin (2014-10-18). YANG Handledning (YouTube). Stockholm: svans-f. Arkiverad från originalet 2021-12-21.
- YANG Model Catalog - Onlinekatalog med ett REST API
- YANG central - YANG information och handledning
- YANG Diskussionsforum - ConfD User Community Forum för att diskutera YANG-relaterade frågor.
- För en lista över YANG-baserade klienter och servrar se NETCONF- sidan.
- ISBN 978-0135180396 - "Network Programmability with YANG: The Structure of Network Automation with YANG, NETCONF, RESTCONF och gNMI"