yang boot camp the yang gang ietf 71 netconf modeling language netconf base protocol (rfc 4741) rpc...
TRANSCRIPT
YANG Boot Camp
The YANG Gang
IETF 71
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
YANG modulesDevices
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
• Email, patch, and RFC friendly
YANG Concepts
leafs
config data
types
RPCs notifications
Standard Models
Proprietary Models
containers
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 www.yang-central.org
Semantics and syntax
YANG
Relax-NGXML Schema Anything Else
Legacy tools
OutgoingXML
SemanticWorld
SyntacticWorld
Validation
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
Modules and submodules
Header statements yang-version, namespace, prefix
Linkage statement import and include
Meta information organization, contact
Revision history revision
SubX SubY SubZ
SubA
Mod1
Mod2
Include
Import
Include
module acme-module { namespace "http://acme.example.com/module"; prefix acme;
import "yang-types" { prefix yang; } include "acme-system";
organization "ACME Inc."; contact [email protected]; description "The module for entities implementing the ACME products";
revision 2007-06-09 { description "Initial revision."; } …}
The "leaf" Statement
YANG Example:
leaf host-name { type string; mandatory true; config true; description "Hostname for this system";}
A leaf has one value no children one instance
NETCONF XML Encoding:
<host-name>my.example.com</host-name>
The "leaf-list" Statement
YANG Example:
leaf-list domain-search { type string; ordered-by user; description "List of domain names to search";}
A leaf-list has one value no children multiple instances
NETCONF XML Encoding:
<domain-search>high.example.com</domain-search><domain-search>low.example.com</domain-search><domain-search>everywhere.example.com</domain-search>
YANG Example:
container system { container services { container ssh { presence "Enables SSH"; description "SSH service specific configuration"; // more leafs, containers and stuff here... } }}
The "container" Statement A container has
no value holds related children one instance
NETCONF XML Encoding:
<system> <services> <ssh/> </services></system>
May have specific meaning (presence)
Or may simply contain other nodes
The "must" Statement
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"; units seconds; type uint32; must "$this < ../access-timeout" { error-app-tag retry-timer-invalid; error-message "The retry timer must be " + "less than the access timeout"; } }}
Constrains nodes by XPath expression
The "list" Statement
YANG Example:
list user { key name; leaf name { type string; } leaf uid { type uint32; } leaf full-name { type string; } leaf class { type string; 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></user><user> <name>rzull</name> <full-name>Repun</full-name></user>
A list is uniquely identified
by key(s) holds related
children no value multiple instances
The "augment" Statement
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>2112-04-01T12:00:00</other:expire></user>
Extends data model Current or imported
modules Inserts nodes
Into an existing hierarchy Nodes appear in current
module's namespace Original (augmented)
module is unchanged
The "when" Statement
YANG Example:
augment system/login/user { when "class = wheel"; leaf shell { type string; }}
NETCONF XML Encoding:
<user> <name>alicew</name> <class>wheel</class> <other:shell>/bin/tcsh</other:shell></user>
Makes sparse augmentation Nodes are only
added when condition is true
"when" is XPath expression
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
YANG Example:
typedef percent { type uint16 { range "0 .. 100"; } description "Percentage";}
leaf completed { type percent;}
Derived types
NETCONF XML Encoding:
<completed>20</completed>
Constraints range length pattern
• regex
A modules may use types imported from other modules
YANG Example:
leaf limit { description "Number to allow"; type union { type uint16 { range "0 .. 100"; } type enumeration { enum none { description "No limit"; } } }}
The "union" type
Allows a leaf to contain a superset of types
NETCONF XML Encoding:
<limit>20</limit>
NETCONF XML Encoding:
<limit>none</limit>
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>192.0.2.1</address> <port>22</port> </destination></peer>
YANG Example:
choice transfer-method { leaf transfer-interval { description "Frequency at which file transfer happens"; type uint { range "15 .. 2880"; } units minutes; }
leaf transfer-on-commit { description "Transfer after each commit"; type empty; }}
The "choice" Statement
Allow only one member of the choice to exist in a valid config datastore
NETCONF XML Encoding:
<transfer-on-commit/>
YANG Example:
anyxml software-version { description "Number to allow";}
The "anyxml" Statement
Allows arbitrary XML content to be carried in YANG-based models Opaque Limited operations
• Bulk onlyNETCONF XML Encoding:
<software-version> <base>A10.2</base> <routing>B4.2</routing> <snmp>C87.12</snmp></software-version>
The "rpc" Statement
Defines RPC method names input parameters output parameters
rpc activate-software-image { input { leaf image-name { type string; } } output { leaf status { type string; } }}
<rpc xmlns="urn:mumble"> <activate-software-image> <image-name>image.tgz</image-name> </activate-software-image></rpc>
The "notification" Statement
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"; } }}
Defines notification Name Content
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
Tools (yang-central.org)
pyang (python) Validates YANG Translates between YANG and YIN (XML) Generates XSD
yangto (binary) Validates YANG Generates XSD, dependencies, etc
libsmi Translates SMI/SMIv2 MIBs to YANG
Other goodies Emacs mode
What can you do to help?
Read the draft There's a lot more in there
Join the mailing list [email protected] https://www.ietf.org/mailman/listinfo/yang
Try out the tools www.yang-central.org
Tutorial (this) at: http://www.yang-central.org/twiki/bin/view/Main/YangTutorials