yang boot camp the yang gang ietf 71 netconf modeling language netconf base protocol (rfc 4741) rpc...

28

Upload: krista-butrum

Post on 02-Apr-2015

226 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 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
Page 2: 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

YANG Boot Camp

The YANG Gang

IETF 71

Page 3: 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

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

Page 4: 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

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

Page 5: 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

YANG Concepts

leafs

config data

types

RPCs notifications

Standard Models

Proprietary Models

containers

Page 6: 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

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

Page 7: 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

Semantics and syntax

YANG

Relax-NGXML Schema Anything Else

Legacy tools

OutgoingXML

SemanticWorld

SyntacticWorld

Validation

Page 8: 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

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

Page 9: 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

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

Page 10: 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

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."; } …}

Page 11: 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

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>

Page 12: 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

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>

Page 13: 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

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

Page 14: 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

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

Page 15: 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

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

Page 16: 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

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

Page 17: 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

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

Page 18: 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

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

Page 19: 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

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

Page 20: 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

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>

Page 21: 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

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>

Page 22: 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

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/>

Page 23: 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

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>

Page 24: 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

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>

Page 25: 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

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

Page 26: 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

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

Page 27: 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

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

Page 28: 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

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