39
Yang Modeling in OpenDaylight Jan Medved

Yang in OpenDaylight

Embed Size (px)

DESCRIPTION

Slides from Talk by Jan Medved on Yang modeling and its support in OpenDaylight meetup http://www.meetup.com/OpenDaylight-Silicon-Valley/events/212834752 Yang is a data modeling language that is rapidly being adopted to model Netconf, an IETF standardized network management protocol, as well as to model other data interfaces in OpenDaylight. Join us for the talk by expert Jan Medved to learn about Yang and its usage within OpenDaylight.

Citation preview

Page 1: Yang in OpenDaylight

Yang Modeling in OpenDaylight

Jan Medved

Page 2: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Agenda

•  Yang Overview

•  Netconf/Yang in OpenDaylight

•  Example/Demo

•  Pointers

Page 3: Yang in OpenDaylight

Yang Overview

Page 4: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

YANG Concepts

leafs

config data

types

RPCs notifications

Standard Models

Proprietary Models

containers

Page 6: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Semantics and syntax

YANG

Relax-NG XML Schema Anything Else

Legacy tools Out

going XML

Semantic World

Syntactic World

Validation

Page 8: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 n  A container has"

n  no value"n  holds related children"n  one instance"

NETCONF XML Encoding:!!

<system>! <services>! <ssh/>! </services>!</system>!

May have specific meaning (presence)

Or may simply contain other nodes

Page 14: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Built-in ^ypes

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

The "grouping" Statement 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>!

•  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

Page 22: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

YANG Example:!!anyxml software-version {! description "Number to allow";!}!

The "anyxml" Statement

NETCONF XML Encoding:!!<software-version>! <base>A10.2</base>! <routing>B4.2</routing>! <snmp>C87.12</snmp>!</software-version> !

•  Allows arbitrary XML content to be carried in YANG-based models –  Opaque –  Limited operations

•  Bulk only

Page 24: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

The "rpc" Statement

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

•  Defines RPC –  method names –  input parameters –  output parameters

Page 25: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

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 in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Tools •  pyang (http://code.google.com/p/pyang/)”

– Validates YANG – Translates between YANG and YIN (XML) – Generates XSD

•  libsmi – Translates SMI/SMIv2 MIBs to YANG

• Editors/IDEs: – Emacs yang mode: http://www.emacswiki.org/emacs/yang-mode.el – Eclipse plugin:https://github.com/xored/yang-ide/wiki

• OpenDaylight Yang Tools: – https://wiki.opendaylight.org/view/YANG_Tools:Main

Page 28: Yang in OpenDaylight

Yang in OpenDaylight

Page 29: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

What Should and SDN Controller Look Like?

•  A platform for deploying SDN applications

•  Provide (or be associated with) an SDN application development environment.

Page 30: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

SDN Controller: Platform Requirements

•  Flexibility: –  Accommodate a variety of diverse applications –  Controller applications SHOULD use a common framework and programming model,

and provide consistent APIs to their client

•  Scale the development process: –  No infrastructure code hotspots –  Independent development of controller applications & short integration times

•  Run-time Extensibility & Modularity: –  Load new protocol and service/application plugins at run-time. –  Adapt to data schemas (models) discovered in the network

•  Performance & Scale

Page 31: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

SDN Controller: App Development Requirements

•  A domain-specific modeling language to describe internal and external system behavior

•  Modeling tools for the controller aligned with modeling tools for devices

•  Code generation from models: –  Enforce standard API contracts –  Generate boilerplate code performing repetitive and error-prone tasks –  Produce functionally equivalent APIs for different language bindings –  Model-to-model adaptations for services and devices –  Consumption of aligned device models

In the OpenDaylight Project, these requirements are satisfied with YANG (and YANG extensions) and via the YANG tool-chain, manifested

in the MD-SAL

Page 32: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

OpenDaylight: SDN Controller Architecture

Controller  

Service  Adapta1on  Layer  

Inventory  Manager  

Base  Network  Func1ons    

Topology  Exporter    Sta1s1cs  

Manager  Forwarding  

Rules  Manager  Topology  Exporter    Topology  Exporter    

Inventory  Manager  Inventory  Manager  

OpenFlow  1.0/1.3   BGP-­‐LS   PCEP   Netconf  

Client   OVSDB  

REST  APIs  

...  

Service  Func1ons    

PCEP  ...  Configura1on  Subsystem  

NETCONF  

LISP  

Network  Devices  

Applica1ons   Network  Applica1ons  Orchestra1on  &  Services  

Controller  PlaSorm  

Southbound  Interfaces  &  Protocol  Plugins  

Page 33: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

OpenDaylight: Software Architecture

Controller  Model-­‐Driven  SAL  (MD-­‐SAL)  

Protocol  Plugin  

RESTCONF  NETCONF  

Network  Devices   Applica1ons  

Service/App  Plugin  

Service/App  Plugin  

...  ...   Protocol  Plugin  

Config  Subsystem  

Messaging   Data  Store  

Remote  Controller  Instance  

Remote  Controller  Instance  

Network  Applica1ons  Orchestra1on  &  Services  

Controller  PlaSorm  

Plugins  &  Applica1ons  

Clustering  

Page 34: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Model-Driven SAL: Building the Network View Controller  PlaSorm  

NETCONF  

MD-­‐SAL  

...  BGP-­‐LS  Topology  

Exporter    

OpenFlow  Topology  Exporter  

 

Flow-­‐Capable  Node  Inventory  Manager  

 Model  

/Opera1onal   /Config  

network-­‐topo  

p1   p2  

BGP-­‐LS  BGPv4   BGPv6  

nodes   links   prefixes  

n1   n2   nx   l2  l1  ...   ...   lx   ...   px  

OpenFlow  

nodes  

BGP-­‐LS  Protocol  Plugin  

Groups  

Table/1  

Flow/2  

Table-­‐stats  

Sta1s1cs  Manager    

Model  Model  Model  

nc:1   nc:2  

Flow-­‐stats  Flow-­‐stats  

of:1   of:2  Of:n  

...  

Tables   Meters  

Table/2   Table/n  

Flow/1   Flow/n  ...  

Ports  

Page 35: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Controller  

MD-SAL Details

   MD-­‐SAL  

Data  Store  DOM  Broker  BA-­‐BI  Connector  

Mapping  Service  

Codec  Registry  

Schema  Service  

Codec  Generator  

Binding-­‐Aware  Broker  

Binding-­‐Aware  to  Binding-­‐Independent  Data  Transla5on  

Binding-­‐Aware  Plugin  Binding-­‐Independent  

Plugin/Client  (Netconf/Restconf)  

Forwarding  Rules  Manager,    Stats  Manager,  BGP-­‐LS/PCEP  

External  Clients  

Page 36: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

Building a Plugin/Application

Model  Model  Yang  Model  

Java  API  Defini1on  Java  API  Defini1on  Generated  API  Defini1on  

Module  Implementa1ons  

Yang  Tools  

“Plugin”  OSGI  Bundle  

1

4

Generate  APIs  

Create  Plugin  Bundle  Deploy  

Maven  Build  Tools  

Module  Implementa1ons  Plugin  source  code  

“API”    OSGI  Bundle  

Maven  Build  Tools  

2

3

Create  API  Bundle  

4 Deploy  

Controller

Page 37: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

ODL Yang Resources •  YangTools main page:

–  https://wiki.opendaylight.org/view/YANG_Tools:Main

•  Code Generation demo –  https://wiki.opendaylight.org/view/Yang_Tools:Code_Generation_Demo

•  Java “Binding Specification”: –  https://wiki.opendaylight.org/view/YANG_Tools:YANG_to_Java_Mapping

•  DLUX •  Main page: https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main •  YangUI: https://wiki.opendaylight.org/view/OpenDaylight_dlux:yangUI-user

•  Controller: –  Swagger UI Explorer:

•  http://localhost:8181/apidoc/explorer/index.html –  DLUX (YangUI):

•  http://localhost:8181/dlux/index.html

Page 38: Yang in OpenDaylight

© 2014 Cisco and/or its affiliates. All rights reserved. Presentation_ID Cisco Public

ODL Netconf Resources

•  Config Subsystem: –  How to configure the Netconf connector (client):

•  https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Examples:Netconf –  Netopeer installation

•  https://wiki.opendaylight.org/view/OpenDaylight_Controller:Config:Examples:Netconf:Manual_netopeer_installation

•  Netconf test tool: –  https://wiki.opendaylight.org/view/OpenDaylight_Controller:Netconf:Testtool

Page 39: Yang in OpenDaylight

Thank You