Presentation is loading. Please wait.

Presentation is loading. Please wait.

YANG Boot Camp The YANG Gang IETF 71. YANG Boot Camp The YANG Gang IETF 71.

Similar presentations


Presentation on theme: "YANG Boot Camp The YANG Gang IETF 71. YANG Boot Camp The YANG Gang IETF 71."— Presentation transcript:

1

2 YANG Boot Camp The YANG Gang IETF 71

3 NETCONF Modeling Language
NETCONF base protocol (rfc 4741) RPC mechanism and operations Left content and data models for future work Operations allow any XML <get>, <get-config> and <edit-config> Mgmt Application Devices YANG modules

4 YANG is …. A NETCONF modeling language
Think SMI for NETCONF Models semantics and data organization Syntax falls out of semantics Able to model config data, state data, RPCs, and notifications Based on SMIng syntax Text-based , patch, and RFC friendly

5 YANG Concepts Standard Models Proprietary Models config data RPCs
notifications containers leafs types

6 YANG .... Directly maps to XML content (on the wire) Extensible
Add new content to existing data models Without changing the original model Add new statements to the YANG language Vendor extensions and future proofing Preserves investment in SNMP MIBs libsmi translates MIBs to YANG See tools at

7 Semantics and syntax Semantic World YANG Syntactic World XML Schema
Relax-NG Anything Else Out going XML Legacy tools Validation

8 YANG values .... Readers and reviewers time and learning curve
Readability is highest priority Limited Scope Doesn't boil the ocean Maximize utility within that scope Can be extended in the future Experience gained by existing implementations Based on four proprietary modeling languages Years of experience within multiple vendors Quality draft backed by running code

9 Modules and submodules
Header statements yang-version, namespace, prefix Linkage statement import and include Meta information organization, contact Revision history revision Mod1 Import Mod2 Include SubA Include SubX SubY SubZ

10 module acme-module { namespace "http://acme.example.com/module"; prefix acme; import "yang-types" { prefix yang; } include "acme-system"; organization "ACME Inc."; contact description "The module for entities implementing the ACME products"; revision { description "Initial revision.";

11 The "leaf" Statement A leaf has one value no children one instance
YANG Example: leaf host-name { type string; mandatory true; config true; description "Hostname for this system"; } NETCONF XML Encoding: <host-name>my.example.com</host-name>

12 The "leaf-list" Statement
A leaf-list has one value no children multiple instances YANG Example: leaf-list domain-search { type string; ordered-by user; description "List of domain names to search"; } NETCONF XML Encoding: <domain-search>high.example.com</domain-search> <domain-search>low.example.com</domain-search> <domain-search>everywhere.example.com</domain-search>

13 The "container" Statement
A container has no value holds related children one instance YANG Example: container system { container services { container ssh { presence "Enables SSH"; description "SSH service specific configuration"; // more leafs, containers and stuff here... } May have specific meaning (presence) Or may simply contain other nodes NETCONF XML Encoding: <system> <services> <ssh/> </services> </system>

14 The "must" Statement Constrains nodes by XPath expression
container timeout { leaf access-timeout { description "Maximum time without server response"; units seconds; mandatory true; type uint32; } leaf retry-timer { description "Period to retry operation"; must "$this < ../access-timeout" { error-app-tag retry-timer-invalid; error-message "The retry timer must be " + "less than the access timeout";

15 The "list" Statement A list is uniquely identified by key(s)
holds related children no value multiple instances YANG Example: list user { key name; leaf name { type string; } leaf uid { type uint32; leaf full-name { leaf class { default viewer; NETCONF XML Encoding: <user> <name>glocks</name> <full-name>Goldie</full-name> <class>intruder</class> </user> <user> <name>snowey</name> <full-name>Snow</full-name> <class>free-loader</class> <name>rzull</name> <full-name>Repun</full-name>

16 The "augment" Statement Extends data model Inserts nodes
Current or imported modules Inserts nodes Into an existing hierarchy Nodes appear in current module's namespace Original (augmented) module is unchanged YANG Example: augment system/login/user { leaf expire { type yang:date-and-time; } NETCONF XML Encoding: <user> <name>alicew</name> <class>drop-out</class> <other:expire> T12:00:00</other:expire> </user>

17 The "when" Statement Makes sparse augmentation
YANG Example: augment system/login/user { when "class = wheel"; leaf shell { type string; } Makes sparse augmentation Nodes are only added when condition is true "when" is XPath expression NETCONF XML Encoding: <user> <name>alicew</name> <class>wheel</class> <other:shell>/bin/tcsh</other:shell> </user>

18 Built-in types Category Types Integral {,u}int{8,16,32,64} String
string, enumeration, boolean Binary Data binary Bit fields bits References instance-identifier, keyref Other empty

19 Derived types Constraints
YANG Example: typedef percent { type uint16 { range " "; } description "Percentage"; leaf completed { type percent; Constraints range length pattern regex A modules may use types imported from other modules NETCONF XML Encoding: <completed>20</completed>

20 The "union" type Allows a leaf to contain a superset of types
YANG Example: leaf limit { description "Number to allow"; type union { type uint16 { range " "; } type enumeration { enum none { description "No limit"; NETCONF XML Encoding: <limit>none</limit> NETCONF XML Encoding: <limit>20</limit>

21 The "grouping" Statement
Defines a reusable collection of nodes Use multiple times A modules may use groupings imported from other modules Refinement Use as structure, record, or object YANG Example grouping target { leaf address { type inet:ip-address; description "Target IP address"; } leaf port { type inet:ip-port; description "Target port number"; container peer { container destination { uses target; NETCONF XML Encoding: <peer> <destination> <address> </address> <port>22</port> </destination> </peer>

22 The "choice" Statement Allow only one member of the choice to exist in a valid config datastore YANG Example: choice transfer-method { leaf transfer-interval { description "Frequency at which file transfer happens"; type uint { range " "; } units minutes; leaf transfer-on-commit { description "Transfer after each commit"; type empty; NETCONF XML Encoding: <transfer-on-commit/>

23 The "anyxml" Statement Allows arbitrary XML content to be carried in YANG-based models Opaque Limited operations Bulk only YANG Example: anyxml software-version { description "Number to allow"; } NETCONF XML Encoding: <software-version> <base>A10.2</base> <routing>B4.2</routing> <snmp>C87.12</snmp> </software-version>

24 The "rpc" Statement Defines RPC method names input parameters
rpc activate-software-image { input { leaf image-name { type string; } output { leaf status { Defines RPC method names input parameters output parameters <rpc xmlns="urn:mumble"> <activate-software-image> <image-name>image.tgz</image-name> </activate-software-image> </rpc>

25 The "notification" Statement
Defines notification Name Content YANG Example: notification link-failure { description "A link failure has been detected"; leaf if-index { type int32 { range "1 .. max"; } } leaf if-name { type keyref { path "/interfaces/interface/name";

26 Semantic Differentiators
Notice that YANG is modeling the semantics and data organization Not just the syntax Statement Purpose unique Ensure unique values within list siblings keyref Ensure referential integrity config Indicate if a node is config data or not default Supply default value for leafs error-app-tag Define the tag used when constraint fails error-message Define the message used .... mandatory Node must exist in valid config datastore

27 Tools (yang-central.org)
pyang (python) Validates YANG Translates between YANG and YIN (XML) Generates XSD yangto (binary) Generates XSD, dependencies, etc libsmi Translates SMI/SMIv2 MIBs to YANG Other goodies Emacs mode

28 What can you do to help? Read the draft Join the mailing list
There's a lot more in there Join the mailing list https://www.ietf.org/mailman/listinfo/yang Try out the tools Tutorial (this) at:


Download ppt "YANG Boot Camp The YANG Gang IETF 71. YANG Boot Camp The YANG Gang IETF 71."

Similar presentations


Ads by Google