SlideShare una empresa de Scribd logo
1 de 133
Tutorial: NETCONF and YANG

Presented by Stefan Wallin, Tail-f
TUTORIAL: NETCONF AND YANG

Table of Contents
Standards background, motivation
and history
•

Operators‟ management requirements
captured in RFC 3535

•

Implications of transactional management

Introduction to NETCONF and YANG
•

What makes NETCONF/YANG different?

•

The meaning of transactions

NETCONF Overview and Examples
•

NETCONF Transport, Extensibility

•

NETCONF Operations

•

Example: VPN Provisioning using NETCONF
Network-wide Transactions

©2013 TAIL-F all rights reserved

YANG Overview and Examples
•

YANG Types, Data Definitions

•

YANG Actions & Notifications

•

Example: Device Model

•

Example: Service Model

Demos
•

Creating a YANG module

•

Extending YANG for code generation

•

Loading the YANG module on a Device

•

Managing a network using NETCONF

Current IETF Status
•

NETCONF & NETMOD Working Groups
MAY 27, 2013

2
TUTORIAL: NETCONF AND YANG

NETCONF and YANG Tutorial Part 1
What is it?
•

NETCONF and YANG in 2 minutes

Standards background, motivation and history
•

Operators‟ management requirements captured in RFC 3535

•

Implications of transactional management

Demonstration of NETCONF and YANG

©2013 TAIL-F all rights reserved

MAY 27, 2013

3
TUTORIAL: NETCONF AND YANG

NETCONF and YANG

What is it?

©2013 TAIL-F all rights reserved

MAY 27, 2013

4
TUTORIAL: NETCONF AND YANG

NETCONF and YANG in Context

Yang YANG Models
ManagementModels

Applications

NETCONF
Manager

NETCONF

YANG Models

©2013 TAIL-F all rights reserved

YANG Models

YANG Models

MAY 27, 2013

5
TUTORIAL: NETCONF AND YANG

What is a Data-Model? What is a Network Management Protocol?
•

Data-Model

•

A data-model explicitly and precisely
determines the structure, syntax and
semantics of the data…

•

…that is externally visible

•

Consistent and complete

Protocol

Data-Model

•

Protocol
•
•

©2013 TAIL-F all rights reserved

Remote primitives to view and manipulate the
data
Encoding of the data as defined by the datamodel

MAY 27, 2013

6
TUTORIAL: NETCONF AND YANG

Confusion and Comparison
•

Data-Models and information Models
•

• Not everything
• Not always detailed and precise
• Starting-point for data-model

Protocol
The SNMP Protocol
NETCONF
•
Data-Model

MIB Modules
YANG Modules

Information models are for humans

Protocol
•

Confusion between domain-specific network
management protocols and general RPC
mechanisms
• NETCONF vs. CORBA, SOAP, REST, …

©2013 TAIL-F all rights reserved

MAY 27, 2013

7
Standards background, motivation and history
RFC 3535: Operators’ problems and requirements on network
management
TUTORIAL: NETCONF AND YANG

Informational RFC 3535
Abstract
This document provides an overview of a
workshop held by the Internet Architecture
Board (IAB) on Network Management. The
workshop was hosted by CNRI in
Reston, VA, USA on June 4 thru June
6, 2002. The goal of the workshop was to
continue the important dialog started
between network operators and protocol
developers, and to guide the IETFs focus
on future work regarding network
management.

©2013 TAIL-F all rights reserved

•

SNMP had failed
•
•

•

For configuration, that is
Extensive use in fault handling
and monitoring

CLI scripting
•

“Market share” 70%+

configuration

MAY 27, 2013

9
TUTORIAL: NETCONF AND YANG

Operator Requirement #1/14
1. Ease of use is a key requirement for
any network management technology
from the operators point of view.

Maybe not assume integrators and
software developers for any addition
or change

Manage

©2013 TAIL-F all rights reserved

MAY 27, 2013

10
TUTORIAL: NETCONF AND YANG

Operator Requirement #2-3/14
2. It is necessary to make a clear
distinction between configuration
data, data that describes operational
state and statistics.
3. It is required to be able to fetch
separately configuration
data, operational state data, and
statistics from devices, and to be able to
compare these between devices.

©2013 TAIL-F all rights reserved

•

Clearly separating configuration

•

Ability to compare across devices

$show running-config

MAY 27, 2013

11
TUTORIAL: NETCONF AND YANG

Operator Requirement #4-5/14
4. It is necessary to enable operators to
concentrate on the configuration of the
network as a whole rather than
individual devices.
5. Support for configuration
transactions across a number of devices
would significantly simplify network
configuration management.

•

Service and Network management, not
only device management

•

Network wide transactions

VPN Configuration
All or nothing

©2013 TAIL-F all rights reserved

MAY 27, 2013

12
TUTORIAL: NETCONF AND YANG

Operator Requirement #6-7/14
6. Given configuration A and configuration
B, it should be possible to generate the
operations necessary to get from A to B
with minimal state changes and effects on
network and systems. It is important to
minimize the impact caused by
configuration changes.
7. A mechanism to dump and restore
configurations is a primitive operation
needed by operators. Standards for pulling
and pushing configurations from/to
devices are desirable.

©2013 TAIL-F all rights reserved

•

Devices figure out ordering

•

No unnecessary changes

•

Finally: backup/restore of
configuration

The litmus-test of a management interface

configuration

MAY 27, 2013

13
TUTORIAL: NETCONF AND YANG

Operator Requirement #8, 10/14
8. It must be easy to do consistency
checks of configurations over time and
between the ends of a link in order to
determine the changes between two
configurations and whether those
configurations are consistent.
10. It is highly desirable that text
processing tools such as diff, and version
management tools such as RCS or
CVS, can be used to process
configurations, which implies that devices
should not arbitrarily reorder data such as
access control lists.

©2013 TAIL-F all rights reserved

•

Validation of configuration

•

Validation at network level

•

Text based configuration

Text
VPN Configuration
Valid?

MAY 27, 2013

14
TUTORIAL: NETCONF AND YANG

Operator Requirement #9/14
9. Network wide configurations are
typically stored in central master
databases and transformed into formats
that can be pushed to devices, either by
generating sequences of CLI commands
or complete configuration files that are
pushed to devices. There is no common
database schema …, although the
models used by various operators are
probably very similar.

•

Standardized data models

Interfaces Data-Model

It is desirable to extract, document, and
standardize the common parts of these
network wide configuration
database schemas.

©2013 TAIL-F all rights reserved

MAY 27, 2013

15
TUTORIAL: NETCONF AND YANG

Operator Requirement #13/14
13. It is important to distinguish between
the distribution of configurations and the
activation of a certain configuration.

•

Support for multiple configuration sets

•

Delayed, orchestrated activation

Devices should be able to hold multiple
configurations.

Config, Config, Commit

©2013 TAIL-F all rights reserved

MAY 27, 2013

16
TUTORIAL: NETCONF AND YANG

Implications of RFC 3535, legacy situation

OSS
NMS
NETCONF
EMS
Manager

Cost and
complexity

•
•
•

©2013 TAIL-F all rights reserved

No well-defined protocols and
data-models
Lack of atomicity
Ordering problem

MAY 27, 2013

18
TUTORIAL: NETCONF AND YANG

Implications of RFC 3535, with transactions

OSS
NMS
NETCONF
EMS
Manager

Reduced
Cost and
complexity

©2013 TAIL-F all rights reserved

Cost/
Value
Transactions
Models
Standardized
Protocols
MAY 27, 2013

19
TUTORIAL: NETCONF AND YANG

NETCONF was designed to
conform to RFC 3535.
Today many operators require
NETCONF and YANG in devices.
NETCONF makes a difference on
the bottom line.

©2013 TAIL-F all rights reserved

MAY 27, 2013

20
TUTORIAL: NETCONF AND YANG

Introduction to NETCONF

©2013 TAIL-F all rights reserved

MAY 27, 2013

21
TUTORIAL: NETCONF AND YANG

What makes NETCONF/YANG different?
SNMP

NETCONF

SOAP

REST

Standard

IETF

IETF

W3C

-

Resources

OIDs

Paths

Defined in
MIBs

YANG Core
Models

SMI

YANG

SNMP

Encoding
Transport
Stack

Data models
Data
Modeling
Language
Management
Operations

©2013 TAIL-F all rights reserved

URLs

(WSDL, not
data)

Undefined,
(WSDL),
WADL, text…

NETCONF

In the XML
Schema, not
standardized

HTTP
operations

BER

XML

XML

XML,
JSON,…

UDP

SSH
TCP

SSL
HTTP
TCP

SSL
HTTP
TCP

“RESTConf”

MAY 27, 2013

22
TUTORIAL: NETCONF AND YANG

What makes NETCONF/YANG different?
SNMP

NETCONF

•

GET

•

<get-config>

•

GET-NEXT

•

<edit-config>

•

SET

•

<copy-config>

•

TRAP

•

<delete-config>

•

…

•

<get>

•

<lock>

•

…

… so what?

©2013 TAIL-F all rights reserved

… same same?

MAY 27, 2013

23
TUTORIAL: NETCONF AND YANG

What makes NETCONF/YANG different?

This is where the difference is:
In the supported use cases!

Use Case

SNMP

NETCONF

Get collection of status fields

Yes

Yes. Bulk xfer up to
10x faster. Really.

Set collection of configuration fields

Yes, up to 64kB

Yes

Set configuration fields in transaction

No

Yes

Transactions across multiple network elements

No

Yes

Invoke administrative actions

Well…

Yes

Send event notifications

Yes

Yes, connected

Backup and restore configuration

Usually not

Yes

Secure protocol

v3 is fair

Yes

Test configuration before final commit

No

Yes

©2013 TAIL-F all rights reserved

MAY 27, 2013

24
TUTORIAL: NETCONF AND YANG

The Meaning of Transactions
The four properties that define a transaction: ACID
Atomicity
•

Transactions are indivisible, all-or-nothing

Consistency
•

Transactions are all-at-once

•

There is no internal order inside a transaction, it is a set of changes, not a sequence

•

Implies that { create A, create B } and { create B, create A } are identical

•

Implies that a system behaving differently with respect to the sequence is not transactional

Independence

•

Parallel transactions do not interfere with each other

•

Transactions appear to happen always-in-sequence

Durability
•

Committed data always-sticks, i.e. remains in the system even in the case of a fail-over, power
failure, restart, etc

©2013 TAIL-F all rights reserved

MAY 27, 2013

25
TUTORIAL: NETCONF AND YANG

The Meaning of Transactions
•

Consider transaction A
•

Add interface eth5

•

Add route 55.66.0.0/24 over interface eth5

•

Transactions are all-at-once, there is no internal ordering

•

Transaction A is therefore equivalent to
•

Add route 55.66.0.0/24 over interface eth5

•

Add interface eth5

Obviously, the order matters in the execution.
But it is not the manager’s concern in a transactional system.

©2013 TAIL-F all rights reserved

MAY 27, 2013

26
TUTORIAL: NETCONF AND YANG

The Meaning of Transactions
Backup
•

Read the configuration
•

•

Manager does not need to know
which elements are configuration

Save result to a file
•

Send the saved configuration
•

No need to sort data

•

All-or-nothing semantics

•

No PDU size limit

Use diff and other XML processing
tools

•

•

Human readable XML file

•

Restore

Edit file, if desired

©2013 TAIL-F all rights reserved

MAY 27, 2013

27
TUTORIAL: NETCONF AND YANG

The Meaning of Transactions
Service Activation
•

Operator creates new service in OSS
GUI
•

•

•

IPTV service, HD quality

•

•

Three routers

•

Two firewalls

•

One billing machine

©2013 TAIL-F all rights reserved

•

All-or-nothing semantics across all
devices

•

Some IPTV server edits

No need to sort data

•

OSS computes configuration
changes to send to network
•

OSS sends configuration change to
all concerned devices in a network
wide transaction

Each device validates

Optionally test service
•

Confirm or roll back

MAY 27, 2013

28
TUTORIAL: NETCONF AND YANG

Network-wide Transactions is the most
important leap in network management
technology since SNMP.
The error recovery and sequencing tasks are
removed from the manager side.
This is usually more than half the cost in a
mature system; more than the entire cost of
the managed devices.

©2013 TAIL-F all rights reserved

MAY 27, 2013

29
TUTORIAL: NETCONF AND YANG

Who ?
NETCONF
•

Phil Shafer, Rob Enns
•

•

•

Cisco Systems

Ted Goddard
•

•

Jacobs University, SNMP SMIng

Martin Björklund
•

•

Juniper, XML

Jürgen Schönwälder
•

Yumaworks

Ken Crozier Eliot Lear
•

•

Tail-f

Andy Bierman
•

•

Jacobs University

Phil Shafer
•

Martin Björklund
•

•

•

Jürgen Schönwälder
•

•

Juniper

YANG

Tail-f, Vendor specific

David Partain
•

Ericsson, made it happen

IceSoft

•

Steve Waldbusser

•

Margaret Wasserman
•

Painless Security, LLC

©2013 TAIL-F all rights reserved

MAY 27, 2013

30
TUTORIAL: NETCONF AND YANG

NETCONF Overview and Examples

©2013 TAIL-F all rights reserved

MAY 27, 2013

31
TUTORIAL: NETCONF AND YANG

NETCONF Transport
NETCONF messages are encoded in XML
•

Each message is framed by
•

NETCONF 1.0: a character sequence ]]>]]>

•

NETCONF 1.1: a line with the number of characters to read in ASCII

NETCONF messages are encrypted by SSH
•

NETCONF over SOAP, BEEP (both now deprecated) and TLS are also defined, but not used

•

SSH provides authentication, integrity and confidentiality

NETCONF is connected oriented using TCP
•

No need for manager to request resends

•

Efficient use of the medium

©2013 TAIL-F all rights reserved

MAY 27, 2013

32
TUTORIAL: NETCONF AND YANG

NETCONF Extensibility
When a NETCONF Manager connects to a NETCONF Server (Device), they say
<hello>
The contents of the <hello> message declares which NETCONF Capabilities each
party is capable of.
•

Some capabilities are defined by the base NETCONF specification

•

Each YANG Data model the device knows is also a capability

•

Other specifications (standards body or proprietary) also define capabilities

By declaring support for a capability in <hello>, the manager will know which
operations it can submit to the Device.
Extensions go in separate XML namespaces, which makes it easier to build
backwards and forwards compatible management applications.
©2013 TAIL-F all rights reserved

MAY 27, 2013

33
TUTORIAL: NETCONF AND YANG

NETCONF Configuration Data Stores

Startup
•

Running

Candidate

Files… / URLs…

Named configuration stores
•

Each data store may hold a full copy of the configuration

•

Running is mandatory, Startup and Candidate optional (capabilities :startup, :candidate)

•

Running may or may not be directly writable (:writable-running)
•

Need to copy from other stores if not directly writable

©2013 TAIL-F all rights reserved

MAY 27, 2013

34
TUTORIAL: NETCONF AND YANG

NETCONF Transactions, Network-wide Transactions
NETCONF allows a Manager to send down a set of configuration changes, or an
entirely new configuration, in a single <edit-config> transaction.
When doing so, the Manager does not need to
•

Figure out which order to send down the configuration changes in. All different sequences
are treated equal.

•

Recover if the transaction fails. If the transaction was unsuccessful because of

•

inconsistency in the configuration

•

an out of memory condition

•

any other reason

… none of the transaction content has been activated.

The transaction did not roll back. It was simply never activated.

©2013 TAIL-F all rights reserved

MAY 27, 2013

35
TUTORIAL: NETCONF AND YANG

NETCONF Transactions, Network-wide Transactions
Using the Candidate data store a NETCONF Manager can implement a network wide
transaction.
•

Send a configuration change to the candidate of each participating device

•

Validate candidate

•

If all participants are fine, tell all participating devices to commit changes

Confirmed-commit allows a manager to activate a change, and test it for a while
•

Measure KPIs, test connectivity, …

If satisfactory, commit. If not, drop the connection to the devices.
•

Connection closed/lost is the NETCONF command for abort transaction

•

All devices will roll back

©2013 TAIL-F all rights reserved

MAY 27, 2013

36
TUTORIAL: NETCONF AND YANG

NETCONF Base Operations
•

<get>

•

<delete-config>

•

<get-config>

•

<lock>

•

<edit-config>

•

<unlock>

•

test-option (:validate)

•

<close-session>

•

error-option

•

<kill-session>

•

operation

•

<copy-config>

•

<commit> (:candidate, :confirmed)

•

<discard-changes> (:candidate)

•

<cancel-commit> (:candidate)

©2013 TAIL-F all rights reserved

MAY 27, 2013

37
TUTORIAL: NETCONF AND YANG

NETCONF Example Configuration Sequence
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="5">
<edit-config xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<target>
<candidate/>
</target>
<test-option>test-then-set</test-option>
<error-option>rollback-on-error</error-option>
<config>
<interface xmlns=”urn:ietf:params:xml:ns:yang:ietf-interfaces">
<name>eth1</name>
<ipv4-address>192.168.5.10</ipv4-address>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"
<macaddr>aa:bb:cc:dd:ee:ff</macaddr>
message-id="5">
</interface>
<ok/>
</config>
</rpc-reply>
</edit-config>
</rpc>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="6">
<validate>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"
<source>
message-id="6">
<candidate/>
<ok/>
</source>
</rpc-reply>
</validate>
</rpc>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="7">
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"
<commit>
message-id=“7">
<confirmed/>
<ok/>
</commit>
©2013 TAIL-F all rights reserved
</rpc-reply>
</rpc>

MAY 27, 2013

38
TUTORIAL: NETCONF AND YANG

NETCONF RFC6241 Optional Capabilities
:writable-running

:candidate
:confirmed-commit
:rollback-on-error
:validate
:startup
:url (scheme=http, ftp, file, …)
:xpath (filters)

©2013 TAIL-F all rights reserved

MAY 27, 2013

39
TUTORIAL: NETCONF AND YANG

Non-base NETCONF Capabilities
:notification, :interleave (RFC 5277)

:partial-lock (RFC 5717)
:with-defaults (RFC 6243)
:ietf-netconf-monitoring (RFC 6022)
And you can define your own, like
:actions (tail-f)
:inactive (tail-f)

©2013 TAIL-F all rights reserved

MAY 27, 2013

40
TUTORIAL: NETCONF AND YANG

NETCONF Operations

©2013 TAIL-F all rights reserved

MAY 27, 2013

41
TUTORIAL: NETCONF AND YANG

NETCONF <hello> Operation
•

Capabilities exchange

•

Encoding

•

Data model ID exchange

•

Framing
•

NETCONF 1.0 EOM, ]]>]]>

•

NETCONF 1.1 Chunk Framing

<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
</capabilities>
</hello>

©2013 TAIL-F all rights reserved

MAY 27, 2013

42
TUTORIAL: NETCONF AND YANG

NETCONF <hello> Operation
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability
<capability>urn:ietf:params:netconf:capability:xpath:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capabilit
<capability>http://tail-f.com/ns/netconf/with-defaults/1.0</capability>
<capability>http://tail-f.com/ns/netconf/actions/1.0</capability>
<capability>http://tail-f.com/ns/netconf/commit/1.0</capability>
<capability>http://tail-f.com/ns/example/dhcpd?module=dhcpd</capability>
<capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2010-09-24&amp;module=ietf-inettypes</capability>
</capabilities>
<session-id>5</session-id>
</hello>
©2013 TAIL-F all rights reserved

MAY 27, 2013

43
TUTORIAL: NETCONF AND YANG

NETCONF <get-config> Operation
•

Sub-tree filtering

•

XPATH filtering

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1">
<get-config>
<source>
<running/>
</source>
<filter xmlns="http://tail-f.com/ns/aaa/1.1">
<aaa/>
</filter>
</get-config>
</rpc>

©2013 TAIL-F all rights reserved

MAY 27, 2013

44
TUTORIAL: NETCONF AND YANG

NETCONF <get-config> Operation
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1">
<data>
<aaa xmlns="http://tail-f.com/ns/aaa/1.1">
<authentication>
<users>
<user>
<name>admin</name>
<uid>9000</uid>
<gid>0</gid>
<password>$1$3ZHhR6Ow$acznsyClFc0keo3B3BVjx/</password>
<ssh_keydir>/var/confd/homes/admin/.ssh</ssh_keydir>
<homedir>/var/confd/homes/admin</homedir>
</user>
<user>
<name>oper</name>
…
</users>
</authentication>
</aaa>
</data>
</rpc-reply>
©2013 TAIL-F all rights reserved

MAY 27, 2013

45
TUTORIAL: NETCONF AND YANG

NETCONF <edit-config> Operation
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1">
<edit-config>
<target><running/></target>
<config>
<dhcp xmlns="http://tail-f.com/ns/example/dhcpd"
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1">
<defaultLeaseTime nc:operation="merge”>PT1H
</defaultLeaseTime>
</dhcp>
</config>
</edit-config>
</rpc>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

46
TUTORIAL: NETCONF AND YANG

NETCONF <edit-config> Operation
nc:test-option (:validate)

nc:operation

test-then-set (default)

merge

set

replace

test-only

create

nc:error-option
stop-on-error (default)

Error if item to delete does
not exist

delete
remove (:base:1.1)

continue-on-error

rollback-on-error
(:rollback-on-error)

©2013 TAIL-F all rights reserved

Ok if item to delete does not
exist

MAY 27, 2013

47
TUTORIAL: NETCONF AND YANG

NETCONF <copy-config> Operation
•

Copy configuration data between stores or URLs

<rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<copy-config>
<target><running/></target>
<source>
<url>https://user@example.com:passphrase/cfg/new.txt
</url>
</source>
</copy-config>
</rpc>
<rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

48
TUTORIAL: NETCONF AND YANG

NETCONF <delete-config> Operation
•

Delete a complete data store (not running)

<rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<delete-config>
<target>
<startup/>
</target>
</delete-config>
</rpc>
<rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

49
TUTORIAL: NETCONF AND YANG

NETCONF <lock>, <unlock> Operation
•

Lock/unlock a complete data store

<rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<lock>
<target>
<candidate/>
</target>
</lock>
</rpc>
<rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

50
TUTORIAL: NETCONF AND YANG

NETCONF <get> Operation
•

Read configuration and status

<rpc message-id="101” xmlns=”urn:ietf:param
<get>
<filter type="subtree">
<top xmlns="http://example.com/ns/dhc
<interfaces>
<interface>
<ifName>eth0</ifName>
</interface>
</interfaces>
</top>
</filter>
</get>

©2013 TAIL-F all rights reserved

<rpc-reply message-id="101” xmlns=“urn:ie
<data>
<top xmlns="http://example.com/ns/dhc
<interfaces>
<interface>
<ifName>eth0</ifName>
<ifInOctets>45621</ifInOctets>
<ifOutOctets>774344</ifOutOctet
</interface>
</interfaces>
</top>
</data>
</rpc-reply>

MAY 27, 2013

51
TUTORIAL: NETCONF AND YANG

NETCONF <close-session> Operation
•

Polite way of disconnecting

<rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<close-session/>
</rpc>
<rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

52
TUTORIAL: NETCONF AND YANG

NETCONF <kill-session> Operation
•

Not so polite way of disconnecting another session
Releases any locks, aborts any confirmed commit related to session

<rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<kill-session>
<session-id>17</session-id>
</kill-session>
</rpc>
<rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<ok/>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

53
TUTORIAL: NETCONF AND YANG

Additional NETCONF operations by capabilities
•

<commit>, <discard-changes> (:candidate)

•

<validate> (:validate)
•

Copy candidate to running

•

Discard changes in candidate (copy running to candidate)

•

<create-subscription> (:notification)

•

<partial-lock>, <partial-unlock> (:partial-lock)

•

<commit>, <cancel-commit> (:commit)

•

<get-schema> (:ietf-netconf-monitoring)

©2013 TAIL-F all rights reserved

MAY 27, 2013

54
TUTORIAL: NETCONF AND YANG

Event Notifications
•

What is right for you?

•

NETCONF

•

SNMP Traps over UDP

•

Requires open connection

•

SYSLOG Messages over UDP

•

Supports replay

•

NETCONF Notifications over SSH

•

Define your own

•

SNMP
•
•

 www.rfc-editor.org/rfc/rfc5277.txt

©2013 TAIL-F all rights reserved

Limited payload

•

•

Much used, works ok
Connection-less

SYSLOG
•

Lacks standard format

MAY 27, 2013

56
TUTORIAL: NETCONF AND YANG

Example:
VPN provisioning using NETCONF
Network-wide Transactions

©2013 TAIL-F all rights reserved

MAY 27, 2013

57
TUTORIAL: NETCONF AND YANG

VPN Scenario
•

•

They have a management station
connected to all the devices in the
network to provision and monitor
services

•

Site A

An operator owns a network of routers
and other equipment from different
vendors

Now, we need to set up a VPN
between two customer sites

•

There is no point what so ever to
make any changes on any device
unless all changes succeed

•

We need a Network-wide Transaction

North

Site B

East
West

©2013 TAIL-F all rights reserved

MAY 27, 2013

58
TUTORIAL: NETCONF AND YANG

Site A

Hello
•

North

Exchange capabilities

>>>>> Router-West (Sun Nov 15 14:41:25 CET 2009)
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
</capabilities>
</hello>

Site B

East

West

<<<< Router-West (Sun Nov 15 14:41:25 CET 2009)
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>http://tail-f.com/ns/netconf/actions/1.0</capability>
<capability>http://tail-f.com/ns/aaa/1.1</capability>
<capability>http://tail-f.com/ns/example/quagga/1.0</capability>
</capabilities>
<session-id>4</session-id>
</hello>
©2013 TAIL-F all rights reserved

MAY 27, 2013

59
TUTORIAL: NETCONF AND YANG

Lock the candidate data stores

>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="2">
<nc:lock>
<nc:target>
<nc:candidate></nc:candidate>
</nc:target>
</nc:lock>
</nc:rpc>

<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="2">
<ok></ok>
</rpc-reply>
©2013 TAIL-F all rights reserved

MAY 27, 2013

61
TUTORIAL: NETCONF AND YANG

Lock the running data stores

>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="3">
<nc:lock>
<nc:target>
<nc:running></nc:running>
</nc:target>
</nc:lock>
</nc:rpc>

<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="3">
<ok></ok>
</rpc-reply>
©2013 TAIL-F all rights reserved

MAY 27, 2013

62
TUTORIAL: NETCONF AND YANG

Copy running to candidates (logically)
>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="4">
<nc:copy-config>
<nc:target>
<nc:candidate></nc:candidate>
</nc:target>
<nc:source>
<nc:running></nc:running>
</nc:source>
</nc:copy-config>
</nc:rpc>

<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="4">
<ok></ok>
</rpc-reply>
©2013 TAIL-F all rights reserved

MAY 27, 2013

63
TUTORIAL: NETCONF AND YANG

Edit the candidates
>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="5">
<nc:edit-config>
<nc:target><nc:candidate></nc:candidate></nc:target>
<nc:config>
<quagga:system xmlns:quagga="http://tail-f.com/ns/example/quagga
<quagga:vpn>
<quagga:ipsec>
<quagga:tunnel>
<quagga:name>volvo-0</quagga:name>
<quagga:local-endpoint>10.7.7.4</quagga:local-endpoint>
<quagga:local-net>33.44.55.0</quagga:local-net>
<quagga:local-net-mask>255.255.255.0</quagga:local-net-mas
<quagga:remote-endpoint>10.3.4.1</quagga:remote-endpoint>
<quagga:remote-net>62.34.65.0</quagga:remote-net>
<quagga:pre-shared-key>ford</quagga:pre<quagga:encryption-algo>default
<quagga:hash-algo>defau
©2013 TAIL-F all rights reserved

MAY 27, 2013

64
TUTORIAL: NETCONF AND YANG

Validate candidates
>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="6">
<nc:validate>
<nc:source>
<nc:candidate></nc:candidate>
</nc:source>
</nc:validate>
</nc:rpc>

<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="6">
<ok></ok>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

65
TUTORIAL: NETCONF AND YANG

Commit candidates to running
>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="7">
<nc:commit></nc:commit>
</nc:rpc>
<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="7">
<ok></ok>
</rpc-reply>

Confidential Information | January 27, 2014
©2013 TAIL-F all rights reserved

MAY 27, 2013

66
TUTORIAL: NETCONF AND YANG

Unlock candidates
>>>>> Router-West (Sun Nov 15 15:24:33 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="8">
<nc:unlock>
<nc:target>
<nc:candidate></nc:candidate>
</nc:target>
</nc:unlock>
</nc:rpc>
<<<< Router-West (Sun Nov 15 15:24:33 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="8">
<ok></ok>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

67
TUTORIAL: NETCONF AND YANG

Using confirmed-commit
•

Now do the same thing again, but instead of commit…

>>>>> Router-West (Sun Nov 15 15:29:19 CET 2009)
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="16">
<nc:commit>
<nc:confirmed></nc:confirmed>
<nc:confirm-timeout>120</nc:confirm-timeout>
</nc:commit>
</nc:rpc>
<<<< Router-West (Sun Nov 15 15:29:19 CET 2009)
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"
message-id="16">
<ok></ok>
</rpc-reply>

©2013 TAIL-F all rights reserved

MAY 27, 2013

68
TUTORIAL: NETCONF AND YANG

Disaster happens
•

One of the devices disconnected

•

The management station disconnects all the rest

•

They all roll back to the previous configuration

•

The management station reconnects

>>>>> Router-West (Sun Nov 15 15:30:22 CET 2009)
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
</capabilities>
</hello>
<<<< Router-West (Sun Nov 15 15:30:22 CET 2009)
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:netconf:capability:writable-running:1.
©2013 TAIL-F all rights reserved

MAY 27, 2013

69
TUTORIAL: NETCONF AND YANG

Common NETCONF Use Cases
•

Network-wide transactions

•

Applying and testing a configuration

•

Testing and rejecting a configuration

•

Rollback when device goes down

•

Transactions requiring all devices to be up

•

Backlogging transactions

•

Synchronizing

©2013 TAIL-F all rights reserved

MAY 27, 2013

70
TUTORIAL: NETCONF AND YANG

YANG Overview and Examples

©2013 TAIL-F all rights reserved

MAY 27, 2013

71
TUTORIAL: NETCONF AND YANG

YANG ?
acme-box module
•

Data modeling language
•

Configuration data

•

State data

•

Tree structure

•

properties container
name: string, config

Data and Types

interfaces container
interface: list, index = name

name: string, config
oper-state: enum, config
©2013 TAIL-F all rights reserved

MAY 27, 2013

72
TUTORIAL: NETCONF AND YANG

YANG Module Contents
Header information
Imports & Includes
Type definitions
Configuration & Operational
data declarations
Action (RPC) & Notification declarations

©2013 TAIL-F all rights reserved

MAY 27, 2013

73
TUTORIAL: NETCONF AND YANG

Imports & Includes
Module X Namespace
Fragment
A.yang

Module Y Namespace

import

include
Fragment
B.yang
include

include

Fragment
C.yang

Fragment
E.yang

Imported fragments are just
referenced, not included

Fragment
D.yang

Each included fragment is a
complete YANG file; can never
be included in any other
module/namespace
©2013 TAIL-F all rights reserved

MAY 27, 2013

74
TUTORIAL: NETCONF AND YANG

YANG Header

©2013 TAIL-F all rights reserved

MAY 27, 2013

75
TUTORIAL: NETCONF AND YANG

Each submodule belongs to one
specific main module

Submodules
module acme-module {
namespace “…”;
prefix acme;

submodule acme-system {
belongs-to acme-module {
prefix acme;
}

import ”ietf-yang-types" {
prefix yang;
}
include "acme-system";
organization "ACME Inc.";
contact joe@acme.example.com;
description ”Module describing the ACME
products”;
revision 2007-06-09 {
description "Initial revision.";
}

©2013 TAIL-F all rights reserved

import ”ietf-yang-types" {
prefix yang;
}
container system {
…
}
}
Attention: The submodule cannot
reference definitions in main module

MAY 27, 2013

76
TUTORIAL: NETCONF AND YANG

YANG Types

©2013 TAIL-F all rights reserved

MAY 27, 2013

77
TUTORIAL: NETCONF AND YANG

YANG Base Types
Type Name

Meaning

int8/16/32/64

Integer

Type may be a base type or
derived type

uint8/16/32/64

Unsigned integer

decimal64

Non-integer

string

Unicode string

enumeration

Set of alternatives

boolean

True or false

bits

Boolean array
Binary BLOB

leafref

Reference “pointer”

identityref

Unique identity

empty

•

Most YANG elements have a
data type

binary

•

No value, void

•

•

Derived types may be simple
typedefs or groupings
(structures)
There are 20+ base types to
start with

…and more
©2013 TAIL-F all rights reserved

MAY 27, 2013

78
TUTORIAL: NETCONF AND YANG

Typedef Statement
Defines a new simple type
typedef percent {
type uint16 {
range "0 .. 100";
}
description "Percentage";
}

percent
completed

leaf completed {
type percent;
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

79
TUTORIAL: NETCONF AND YANG

Type Restrictions

Integers

Strings

typedef my-base-int32-type {
type int32 {
range "1..4 | 10..20";
}
}

typedef my-base-str-type {
type string {
length "1..255";
}
}

typedef derived-int32 {
type my-base-int32-type {
range "11..max"; // 11..20
}
}

typedef derived-str {
type my-base-str-type {
length "11 | 42..max";
pattern "[0-9a-fA-F]*";
}
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

80
TUTORIAL: NETCONF AND YANG

Union Statement
A value that represents one of its member types
typedef threshold {
description ”Threshold value in percent";
type union {
type uint16 {
range "0 .. 100";
}
type enumeration {
enum disabled {
description "No threshold";
}
}
}
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

81
TUTORIAL: NETCONF AND YANG

Common YANG Types
•

Commonly used
YANG types defined
in RFC 6021

ipv4-address

gauge32/64

ipv6-address

object-identifier

ip-prefix

date-and-time

ipv4-prefix

timeticks

ipv6-prefix

timestamp

domain-name

to reference these
types as e.g.

phys-address

uri

ip-version

mac-address

type yang:counter64;

flow-label

bridgeid

port-number

vlanid

ip-address

•

counter32/64

… and more

Use

import “ietf-yang-types” {
prefix yang;
}

 www.rfc-editor.org/rfc/rfc6021.txt
©2013 TAIL-F all rights reserved

MAY 27, 2013

82
TUTORIAL: NETCONF AND YANG

Grouping Statement
Defines a new structured type
grouping target {
leaf address {
type inet:ip-address;
description "Target IP";
}
leaf port {
type inet:port-number;
description
"Target port number";
}
}
container peer {
container destination {
uses target;
}
}
©2013 TAIL-F all rights reserved

target
address
port

peer
destination
address
port

MAY 27, 2013

83
TUTORIAL: NETCONF AND YANG

Grouping Statement with Refine
Groupings may be refined when used

grouping target {
leaf address {
type inet:ip-address;
description "Target IP";
}
leaf port {
type inet:port-number;
description
"Target port number";
}
}

©2013 TAIL-F all rights reserved

container servers {
container http {
uses target {
refine port {
default 80;
}
}
}
}

MAY 27, 2013

84
TUTORIAL: NETCONF AND YANG

YANG Data Definitions

©2013 TAIL-F all rights reserved

MAY 27, 2013

85
TUTORIAL: NETCONF AND YANG

Leaf Statement
Holds a single value of a particular
type
Has no children
leaf host-name {
type string;
mandatory true;
config true;
description "Hostname for this system";
}
leaf cpu-temp {
type int32;
units degrees-celsius;
config false;
description ”Current temperature in CPU";
}
©2013 TAIL-F all rights reserved

host-name
cpu-temp

MAY 27, 2013

86
TUTORIAL: NETCONF AND YANG

Attributes for leaf
config

Whether this leaf is a configurable value (“true”) or operational value (“false”).
Inherited from parent container if not specified

default

Specifies default value for this leaf. Implies that leaf is optional

mandatory

Whether the leaf is mandatory (“true”) or optional (“false”)

must

XPath constraint that will be enforced for this leaf

type

The data type (and range etc) of this leaf

when

Conditional leaf, only present if XPath expression is true

description

Human readable definition and help text for this leaf

reference

Human readable reference to some other element or spec

units

Human readable unit specification (e.g. Hz, MB/s, ℉)

status

Whether this leaf is “current”, “deprecated” or “obsolete”

©2013 TAIL-F all rights reserved

MAY 27, 2013

87
TUTORIAL: NETCONF AND YANG

Container Statement
Groups related leafs and containers

system
services
ssh

container system {
container services {
container ssh {
presence "Enables SSH";
description "SSH service specific configuration";
// more leafs, containers and other things here...
}
}
}

©2013 TAIL-F all rights reserved

Presence

…
…

MAY 27, 2013

88
TUTORIAL: NETCONF AND YANG

Leaf-list Statement
Holds multiple values of a
particular type
Has no children

domain-search

leaf-list domain-search {
type string;
ordered-by user;
description "List of domain names to search";
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

89
TUTORIAL: NETCONF AND YANG

List Statement
user
name

uid

full-name

class
Default

list user {
key name;
leaf name {
type string;
}
leaf uid {
type uint32;
}
©2013 TAIL-F all rights reserved

leaf full-name {
type string;
}
leaf class {
type string;
default viewer;
}
}
MAY 27, 2013

90
TUTORIAL: NETCONF AND YANG

Attributes for list and leaf-list
max-elements

Max number of elements in list. If max-elements is not specified, there is no
upper limit, i.e. “unbounded”

min-elements

Min number of elements in list. If min-elements is not specified, there is no
lower limit, i.e. 0

ordered-by

List entries are sorted by “system” or “user”. System means elements are
sorted in a natural order (numerically, alphabetically, etc). User means the
order the operator entered them in is preserved.
“ordered-by user” is meaningful when the order among the elements have
significance, e.g. DNS server search order or firewall rules.

©2013 TAIL-F all rights reserved

MAY 27, 2013

91
TUTORIAL: NETCONF AND YANG

Keys
user
name

uid

full-name

class
Default

yang

1010

Yan Goode

admin

hawk

1152

Ron Hawk

oper

ling

1202

Lin Grossman

viewer

The key field is used to specify
which row we’re talking about.

/user[name=„yang‟]/name = yang
/user[name=„yang‟]/uid = 1010
/user[name=„yang‟]/class = admin

No two rows can have same key
value

/user[name=„ling‟]/class = viewer

©2013 TAIL-F all rights reserved

MAY 27, 2013

92
TUTORIAL: NETCONF AND YANG

Keys
user
uid

name

full-name

class
Default

1010

yang

Yan Goode

admin

1152

hawk

Ron Hawk

oper

1202

ling

Lin Grossman

viewer

If we want, we could select the
uid to be key instead.

/user[uid=„1010‟]/name = yang
/user[uid=„1010‟]/uid = 1010
/user[uid=„1010‟]/class = admin
/user[uid=„1202‟]/class = viewer

©2013 TAIL-F all rights reserved

MAY 27, 2013

93
TUTORIAL: NETCONF AND YANG

Unique Statement
user
uid

name

full-name

class
Default

1010

yang

Yan Goode

admin

1152

hawk

Ron Hawk

oper

1202

ling

Lin Grossman

viewer

Non- key fields can also be
declared unique.
Multiple fields can be declared
unique separately or in
combination
©2013 TAIL-F all rights reserved

list user {
key uid;
unique name;
…

No two rows above can have
same uid, nor name
MAY 27, 2013

94
TUTORIAL: NETCONF AND YANG

Leafref
To make an element reference one of
the rows in a list, set the element type
to leafref
For lists with multiple keys, the #leafrefs
must match #keys in list

©2013 TAIL-F all rights reserved

• A valid leafref can never be
null/empty
– But the parent leaf can be
optional

• A valid leafref can never
point to a row that has
been deleted or renamed
• System checks validity of
leafrefs automatically

MAY 27, 2013

96
TUTORIAL: NETCONF AND YANG

Leafref
interface
name

rip
address
0 .. 64

eth0.16
eth0.19

192.168.0.1

eth2.5

ifname
eth0.19

24.97.238.15

Here, the RIP routing
subsystem has a list of
leafrefs pointing out existing
interfaces

©2013 TAIL-F all rights reserved

network-ifname

container rip {
list network-ifname {
key ifname;
leaf ifname {
type leafref {
path “/interface/name”;
}
}

MAY 27, 2013

97
TUTORIAL: NETCONF AND YANG

YANG RPCs & Notifications

©2013 TAIL-F all rights reserved

MAY 27, 2013

100
TUTORIAL: NETCONF AND YANG

RPC Statement
Administrative actions with input
and output parameters

activate-software-image
image

rpc activate-software-image {
input {
leaf image {
type binary;
}
}
output {
leaf status {
type string;
}
}
}
©2013 TAIL-F all rights reserved

status

MAY 27, 2013

101
TUTORIAL: NETCONF AND YANG

Notification Statement
Notification with output parameters
config-change
notification config-change {
description
”The configuration changed";
leaf operator-name {
type string;
}
leaf-list change {
type instance-identifier;
}
}

operator-name
change

Instance-identifier values

<change>/ex:system/ex:services/ex:ssh/ex:port</change>
<change>/ex:system/ex:user[ex:name='fred']/ex:type</change>
<change>/ex:system/ex:server[ex:ip='192.0.2.1'][ex:port='80’]</change>
©2013 TAIL-F all rights reserved

MAY 27, 2013

102
TUTORIAL: NETCONF AND YANG

Advanced YANG Statements

©2013 TAIL-F all rights reserved

MAY 27, 2013

103
TUTORIAL: NETCONF AND YANG

Must Statement
Restricts valid values by Xpath 1.0 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";
units seconds;
type uint32;
must ”current() < ../access-timeout" {
error-app-tag retry-timer-invalid;
error-message "The retry timer must be "
+ "less than the access timeout";
}
}
}
©2013 TAIL-F all rights reserved

MAY 27, 2013

104
TUTORIAL: NETCONF AND YANG

Must Statement

leaf max-weight {
type uint32 {
range "0..1000";
}
default 100;
must "sum(/sys:sys/interface[enabled = 'true']/weight)
< current()" {
error-message "The total weight exceeds the configured
max weight";
}

}

©2013 TAIL-F all rights reserved

MAY 27, 2013

106
TUTORIAL: NETCONF AND YANG

Augment Statement
user
name

uid

full-name

class

+

expire

Default

augment /sys:system/sys:user {
leaf expire {
type yang:date-and-time;
}
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

107
TUTORIAL: NETCONF AND YANG

When Statement
user
name

uid

full-name

class
Default

+

expire

shell
When

augment /sys:system/sys:user {
when ”sys:class = „wheel‟";
leaf shell {
type string;
}
}

©2013 TAIL-F all rights reserved

MAY 27, 2013

108
TUTORIAL: NETCONF AND YANG

Choice Statement
Choice allows one of several
alternatives

transfer-method

transfer-interval
choice transfer-method {
leaf transfer-interval {
description "Frequency at which file transfer happens";
type uint16 {
range "15 .. 2880";
}
units minutes;
}
leaf transfer-on-commit {
description "Transfer after each commit";
type empty;
}
}
©2013 TAIL-F all rights reserved

transfer-on-commit

MAY 27, 2013

109
TUTORIAL: NETCONF AND YANG

Choice Statement
Each alternative may consist of multiple definitions

• Either as a named or anonymous group
choice counters {
case four-counters {
leaf threshold {…}
leaf ignore-count {…}
leaf ignore-time {…}
leaf reset-time {…}
}
container warning-only {
…
}
default four-counters;
}
©2013 TAIL-F all rights reserved

MAY 27, 2013

110
TUTORIAL: NETCONF AND YANG

Identity Statement
Identities for modeling families of related enumeration constants
module phys-if {
…
identity ethernet {
description
"Ethernet family of PHY
interfaces";
}
identity eth-1G {
base ethernet;
description "1 GigEth";
}
identity eth-10G {
base ethernet;
description "10 GigEth";
}
©2013 TAIL-F all rights reserved

module newer {
…
identity eth-40G {
base phys-if:ethernet;
description "40 GigEth";
}
identity eth-100G {
base phys-if:ethernet;
description "100 GigEth";
}
…
leaf eth-type {
type identityref {
base ”phys-if:ethernet";
}
}

MAY 27, 2013

111
TUTORIAL: NETCONF AND YANG

Feature Statement
Mark data as conditional
feature has-local-disk {
description
“System has a local file
system that can be used
for storing log files”;
}
container system {
container logging {
if-feature has-local-disk;
presence “Logging enabled”;
leaf buffer-size {
type filesize;
}
}
}
©2013 TAIL-F all rights reserved

system
logging
Feature, Presence

buffer-size

The features supported by a system are
meant to stay relatively constant. Adding
a feature is comparable to a hardware
upgrade.

MAY 27, 2013

112
TUTORIAL: NETCONF AND YANG

YANG Modeling Strategy

©2013 TAIL-F all rights reserved

MAY 27, 2013

114
TUTORIAL: NETCONF AND YANG

Constraints
•

On-board XPATH parser not required
•

•

XPATH is more formal than English, that‟s all

Debate: “Configuration validity must not depend on state”
•

Are operators right?

•

What are the implications?

•
•
•
•
•
•
•
©2013 TAIL-F all rights reserved

min-elements
max-elements
range
key/unique
leafref
must
when
MAY 27, 2013

115
TUTORIAL: NETCONF AND YANG

Structure
•

Model to mimic an existing interface?

•

Model for which interfaces?
•
•
•
•

•

What goes in each namespace?
•

•

Yang for NETCONF only?
All interfaces uses the Yang model?
Multiple models with transformations?
Multiple models that allow writing?
One, a few or many namespaces?

No configuration inside operational data
•

SNMP transient configuration

©2013 TAIL-F all rights reserved

MAY 27, 2013

116
TUTORIAL: NETCONF AND YANG

So what is configuration?
•

What is in the factory default?

•

Any probing at system boot?

•

Do you want pre-provisioning?

•

Do you want to support rollbacks?

•

Inserting a board, is that an act of configuration?

•

Do you need spontaneous reconfiguration?
•

Where does the configuration data originate from?

©2013 TAIL-F all rights reserved

MAY 27, 2013

117
TUTORIAL: NETCONF AND YANG

Versioning Yang Modules

You must / must not:

You may:

• Add a revision statement on
top
• Update
organization, contact, etc
• Do not rename module or
namespace
• Do not remove obsolete
definitions
• Do not reorder data
definitions

• Add
enum, bits, typedef, grouping,

©2013 TAIL-F all rights reserved

rpc, notification, extension, fe
ature, identity, case
• Add non-mandatory data
definitions
• Add mandatory data
definitions within new iffeature statements
 RFC 6020 sec 10

MAY 27, 2013

118
TUTORIAL: NETCONF AND YANG

Versioning Yang Modules (cont‟d)

You may:

You may:

• Add or update a status
statement: current 
deprecated  obsolete

• Change mandatory to false (or
remove it)

• Expand allowed range, length,
pattern

• Remove or relax min- & maxelements

• Add a default
(but not change it!)

• Add or clarify a description
without changing the
semantics

• Add units, add or update a
reference

• Change state data to optional
configuration
• Remove an if-feature

©2013 TAIL-F all rights reserved

MAY 27, 2013

119
TUTORIAL: NETCONF AND YANG

IETF Modeling Recommendations

• Describe
• Module, security considerations, references, definitions, …

• Top level
• Only one data definition (typ. container) on top level
• Top level data definitions optional

• Enumerations that grow
• Use identityref instead of enumeration

©2013 TAIL-F all rights reserved

MAY 27, 2013

120
TUTORIAL: NETCONF AND YANG

IETF Modeling Recommendations

• Specific types
• Use ranges, length restrictions, patterns
• Do not use signed types unless negative values needed

• Standard types
• When possible, use standard types,
e.g. „yang-types‟ defined in RFC 6021
• Make your own reusable „type modules‟

©2013 TAIL-F all rights reserved

MAY 27, 2013

121
TUTORIAL: NETCONF AND YANG

Yin, Yang and Yang Extensions

©2013 TAIL-F all rights reserved

MAY 27, 2013

122
TUTORIAL: NETCONF AND YANG

Yin – the XML representation of Yang

YANG
container dhcp {
leaf defaultLeaseTime {
type xs:duration;
default PT600S;
}
leaf maxLeaseTime {
type xs:duration;
default PT7200S;
}
leaf logFacility {
type loglevel;
default local7;
}

©2013 TAIL-F all rights reserved

YIN 月
<container name="dhcp">
<leaf name="defaultLeaseTime">
<type name="xs:duration"/>
Lossless
<default value="PT600S"/>
</leaf>
<leaf name="maxLeaseTime">
<type name="xs:duration"/>
<default value="PT7200S”/>
</leaf>
<leaf name="logFacility">
<type name="loglevel"/>
Lossless <default value="local7"/>
</leaf>

MAY 27, 2013

123
TUTORIAL: NETCONF AND YANG

YANG Extensions - Prototype
module prototype {
namespace "http://tail-f.com…
prefix prototype;

extension create {
argument keylist;
}
extension value {
argument value;
}
extension keylist-value {
argument keylist-value;
}
}

©2013 TAIL-F all rights reserved

module xyz {
list y {
config false;
tailf:cdb-oper;
prototype:create "b=1,c=0";
prototype:create "b=6,c=0";
prototype:create "b=6,c=1";
key "b c";
leaf b { type int32; }
leaf c { type int32; }
leaf d {
type string;
prototype:keylist-value
"b=1,c=0,cool";
prototype:keylist-value
"b=6,c=1,green";
}
MAY 27, 2013

124
TUTORIAL: NETCONF AND YANG

Yang Extensions - Prototype
Prototype
.yang

c "/xyz:x/xyz:y{1 0}"

prototype.py

XYZ
init
data

c "/xyz:x/xyz:y{6 0}"
c "/xyz:x/xyz:y{6 1}"
s "/xyz:x/xyz:y{1 0}/xyz:d" "cool"

pyang

s "/xyz:x/xyz:y{6 1}/xyz:d" "green"

confdc

ubuntu# show x

XYZ
.yang

XYZ

B C D
------------1 0 cool
6 0 -

6 1 green

©2013 TAIL-F all rights reserved

MAY 27, 2013

125
TUTORIAL: NETCONF AND YANG

Yang Extensions – View Transform Plugin
View
.yang

gen_trans.c
y
prototype.py

Virtual
.yang

©2013 TAIL-F all rights reserved

transform.c

pyang
confdc

Real
.yang

mapping.c

confdc

Virtual
view

list interface-problem {
view:pathmap "/iface";
view:keymap
"ifname2ifidx_keymap";
view:filter
"interface_problem_filter";
key name;
leaf name {
type interface-type;
}
}

Real
model

MAY 27, 2013

126
TUTORIAL: NETCONF AND YANG

Example:
Router Device Model (part of)

©2013 TAIL-F all rights reserved

MAY 27, 2013

127
TUTORIAL: NETCONF AND YANG

Example: Quagga Types
submodule quagga_common {
belongs-to quagga {
prefix quagga;
}
…
include quagga_top;
typedef PrefixLengthIPv4 {
type uint8 { range 0 .. 32; }
}
…
grouping inetNetworkAddressIPv4 {
leaf address {
type inet:ipv4-address;
mandatory true;
}
leaf prefix-length {
type PrefixLengthIPv4;
mandatory true;
}
}
typedef MacAddressType {
type string {
length 17;
pattern "([0-9a-fA-F][0-9a-fA-F]:){5}
([0-9a-fA-F][0-9a-fA-F])";
}
}
©2013 TAIL-F all rights reserved

typedef ACLLowRangeType {
type uint32 { range 1 .. 99; }
}
typedef ACLHighRangeType {
type uint32 { range 1300 .. 1999; }
}
typedef ACLExtType {
type union {
type ACLExtLowRangeType;
type ACLExtHighRangeType;
}
}
typedef InfiniteType {
type enumeration {
enum infinite;
}
}
typedef DateTimeInfiniteType {
type union {
type yang:date-and-time;
type InfiniteType;
}
}

MAY 27, 2013

128
TUTORIAL: NETCONF AND YANG

Example: Quagga Interface Configuration
submodule zebra_confd_if {
belongs-to quagga {
prefix quagga;
}
include confd_top;
include confd_common;
typedef BandwidthRangeType {
type uint64 { range "1 .. 10000000000"; }
}
augment "/system/interface" {
leaf bandwidth {
type BandwidthRangeType;
}
leaf link-detect {
type boolean;
default false;
}
leaf multicast {
type MulticastType;
default if-default;
}
leaf up {
type boolean;
default true;
}
}
}
©2013 TAIL-F all rights reserved

submodule zebra_confd_if_ip {
belongs-to quagga {
prefix quagga;
}
import ietf-inet-types {
prefix inet;
}
include confd_top;
include confd_common;
augment "/system/interface/ip" {
list address {
key "address prefix-length";
leaf address {
type inet:ipv4-address;
}
leaf prefix-length {
type PrefixLengthIPv4;
}
leaf label {
type string;
}
}
}
}

MAY 27, 2013

129
TUTORIAL: NETCONF AND YANG

Example: Quagga Status & Notification
submodule zebra_confd_stats_memory {
belongs-to quagga {
prefix quagga;
}
import tailf-common {
prefix tailf;
}
include confd_top;
include confd_common;
augment "/system/stats/memory" {
container zebra {
config false;
tailf:callpoint "zebraGetMemory";
uses memoryStatusType;
}
}
}

©2013 TAIL-F all rights reserved

notification saExpired {
leaf tunnelName {
type leafref {
path "/system/vpn/ipsec/tunnel/name";
}
mandatory true;
}
leaf spi {
type int64;
mandatory true;
}
}

MAY 27, 2013

130
TUTORIAL: NETCONF AND YANG

Example:
Q-in-Q Service Model

©2013 TAIL-F all rights reserved

MAY 27, 2013

131
TUTORIAL: NETCONF AND YANG

Example: Q-in-Q Service Model (complete)
module qinq-service {
namespace "http://com/example/qinq-service";
prefix qinq;

list edge-switch {
key switch;
leaf switch {
type leafref {path /ncs:devices/ncs:device/ncs:name;}
}
list edge-interface {
key interface;
leaf interface { type string; }
leaf-list c-vlan {
type uint32 { range 1..4094; }
}
}
leaf-list trunk-interface {
min-elements 1;
type string;
}
}
list core-switch {
key switch;
leaf switch {
type leafref {path /ncs:devices/ncs:device/ncs:name;}
}
leaf-list trunk-interface {
min-elements 1;
type string;
}
}

import tailf-common { prefix tailf; }
import tailf-ncs { prefix ncs; }
list qinq {
key name;
leaf name { type string; }
leaf s-vlan {
mandatory true;
type uint32 { range 1..4094; }
}
must "not (/qt:qinq[name != current()/name]
[s-vlan = current()/s-vlan])” {
error-message "The s-vlan must be unique within
the network”
}

}
©2013 TAIL-F all rights reserved

}

MAY 27, 2013

132
TUTORIAL: NETCONF AND YANG

Demos

©2013 TAIL-F all rights reserved

MAY 27, 2013

133
TUTORIAL: NETCONF AND YANG

Current IETF Status

©2013 TAIL-F all rights reserved

MAY 27, 2013

134
TUTORIAL: NETCONF AND YANG

NETCONF RFC Overview
•

RFC 3535 Informational: Background

•

RFC 6244 NETCONF+Yang Architectural Overview

•

RFC 6241 Base NETCONF Protocol

•

RFC 6242, 4743-4744, 5539 Transport Mappings

•

RFC 5277 Notifications

•

RFC 5717 Partial Locking

•

RFC 6243 With defaults

•

RFC 6470 Base Notifications

•

RFC 6536 NETCONF Access Control Model

 https://datatracker.ietf.org/wg/netconf/charter/
 www.rfc-editor.org/rfc/rfcXXXX.txt
©2013 TAIL-F all rights reserved

MAY 27, 2013

135
TUTORIAL: NETCONF AND YANG

YANG RFC Overview
•

RFC 6020 YANG Base Specification

•

RFC 6021 YANG Types

•

RFC 6087 Guidelines for YANG Authors and Reviewers

•

RFC 6110 Mapping and Validating YANG

•

RFC 6244 NETCONF+Yang Architectural Overview

•

RFC 6643 Translation of SMIv2 MIBs to YANG

 https://datatracker.ietf.org/wg/netmod/charter/
 https://www.ietf.org/iesg/directorate/yang-doctors.html
 http://www.yang-central.org/
©2013 TAIL-F all rights reserved

Start Here!

Rather than
risking getting
things wrong,
ask the
YANG Doctors
MAY 27, 2013

136
TUTORIAL: NETCONF AND YANG

©2013 TAIL-F all rights reserved

MAY 27, 2013

137
SDN and NETCONF/YANG

- a happy marriage
TUTORIAL: NETCONF AND YANG

http://www.slideshare.net/martin_casado/sdn-abstractions

©2013 TAIL-F all rights reserved

MAY 27, 2013

140
TUTORIAL: NETCONF AND YANG

NETCONF/YANG and SDN?
•

SDN is more than OpenFlow
•

•
•

But:

OF-CONFIG is YANG and NETCONF

SDN the big picture
•
•

•

Schenker et al: abstractions for network management
Transactions and data-models

Dynamic programmatic network configuration

©2013 TAIL-F all rights reserved

MAY 27, 2013

141

Más contenido relacionado

La actualidad más candente

Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Tail-f Systems
 
Module 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionModule 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionTail-f Systems
 
Advanced: 5G Service Based Architecture (SBA)
Advanced: 5G Service Based Architecture (SBA)Advanced: 5G Service Based Architecture (SBA)
Advanced: 5G Service Based Architecture (SBA)3G4G
 
Network Function Virtualization : Infrastructure Overview
Network Function Virtualization : Infrastructure OverviewNetwork Function Virtualization : Infrastructure Overview
Network Function Virtualization : Infrastructure Overviewsidneel
 
NFV +SDN (Network Function Virtualization)
NFV +SDN (Network Function Virtualization)NFV +SDN (Network Function Virtualization)
NFV +SDN (Network Function Virtualization)Hamidreza Bolhasani
 
Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)rjain51
 
NETCONF Call Home
NETCONF Call Home NETCONF Call Home
NETCONF Call Home ADVA
 
Orchestration in Action
Orchestration in ActionOrchestration in Action
Orchestration in ActionEricsson
 
OpenFlow tutorial
OpenFlow tutorialOpenFlow tutorial
OpenFlow tutorialopenflow
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
Next Generation Network Automation
Next Generation Network AutomationNext Generation Network Automation
Next Generation Network AutomationLaurent Ciavaglia
 
VXLAN BGP EVPN: Technology Building Blocks
VXLAN BGP EVPN: Technology Building BlocksVXLAN BGP EVPN: Technology Building Blocks
VXLAN BGP EVPN: Technology Building BlocksAPNIC
 

La actualidad más candente (20)

Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2
 
EVPN for Cloud Builders
EVPN for Cloud BuildersEVPN for Cloud Builders
EVPN for Cloud Builders
 
Module 1: ConfD Technical Introduction
Module 1: ConfD Technical IntroductionModule 1: ConfD Technical Introduction
Module 1: ConfD Technical Introduction
 
NETCONFとYANGの話
NETCONFとYANGの話NETCONFとYANGの話
NETCONFとYANGの話
 
Advanced: 5G Service Based Architecture (SBA)
Advanced: 5G Service Based Architecture (SBA)Advanced: 5G Service Based Architecture (SBA)
Advanced: 5G Service Based Architecture (SBA)
 
Using Netconf/Yang with OpenDalight
Using Netconf/Yang with OpenDalightUsing Netconf/Yang with OpenDalight
Using Netconf/Yang with OpenDalight
 
Network Function Virtualization : Infrastructure Overview
Network Function Virtualization : Infrastructure OverviewNetwork Function Virtualization : Infrastructure Overview
Network Function Virtualization : Infrastructure Overview
 
NFV +SDN (Network Function Virtualization)
NFV +SDN (Network Function Virtualization)NFV +SDN (Network Function Virtualization)
NFV +SDN (Network Function Virtualization)
 
Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)
 
NETCONF Call Home
NETCONF Call Home NETCONF Call Home
NETCONF Call Home
 
5G network architecture progress
5G network architecture progress5G network architecture progress
5G network architecture progress
 
Orchestration in Action
Orchestration in ActionOrchestration in Action
Orchestration in Action
 
Sensor networks: 6LoWPAN & LPWAN
Sensor networks: 6LoWPAN & LPWANSensor networks: 6LoWPAN & LPWAN
Sensor networks: 6LoWPAN & LPWAN
 
OpenFlow tutorial
OpenFlow tutorialOpenFlow tutorial
OpenFlow tutorial
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
Next Generation Network Automation
Next Generation Network AutomationNext Generation Network Automation
Next Generation Network Automation
 
NFV Tutorial
NFV TutorialNFV Tutorial
NFV Tutorial
 
VXLAN BGP EVPN: Technology Building Blocks
VXLAN BGP EVPN: Technology Building BlocksVXLAN BGP EVPN: Technology Building Blocks
VXLAN BGP EVPN: Technology Building Blocks
 
Introduction to 5G NR
Introduction to 5G NRIntroduction to 5G NR
Introduction to 5G NR
 
NFV & Openstack
NFV & OpenstackNFV & Openstack
NFV & Openstack
 

Destacado

Module 10: CDB Subscribers
Module 10: CDB SubscribersModule 10: CDB Subscribers
Module 10: CDB SubscribersTail-f Systems
 
Module 9: CDB Technical Intro
 Module 9: CDB Technical Intro Module 9: CDB Technical Intro
Module 9: CDB Technical IntroTail-f Systems
 
Module 11: Operational Data Providers
Module 11: Operational Data ProvidersModule 11: Operational Data Providers
Module 11: Operational Data ProvidersTail-f Systems
 
Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Kentaro Ebisawa
 
Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Tail-f Systems
 
Module 8: C Data Types
Module 8: C Data TypesModule 8: C Data Types
Module 8: C Data TypesTail-f Systems
 
Module 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceModule 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceTail-f Systems
 
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Systems
 
Dynamic Service Chaining
Dynamic Service Chaining Dynamic Service Chaining
Dynamic Service Chaining Tail-f Systems
 
Module 7: Installation and Getting Started
Module 7: Installation and Getting StartedModule 7: Installation and Getting Started
Module 7: Installation and Getting StartedTail-f Systems
 

Destacado (10)

Module 10: CDB Subscribers
Module 10: CDB SubscribersModule 10: CDB Subscribers
Module 10: CDB Subscribers
 
Module 9: CDB Technical Intro
 Module 9: CDB Technical Intro Module 9: CDB Technical Intro
Module 9: CDB Technical Intro
 
Module 11: Operational Data Providers
Module 11: Operational Data ProvidersModule 11: Operational Data Providers
Module 11: Operational Data Providers
 
Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16
 
Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View
 
Module 8: C Data Types
Module 8: C Data TypesModule 8: C Data Types
Module 8: C Data Types
 
Module 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceModule 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound Interface
 
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
 
Dynamic Service Chaining
Dynamic Service Chaining Dynamic Service Chaining
Dynamic Service Chaining
 
Module 7: Installation and Getting Started
Module 7: Installation and Getting StartedModule 7: Installation and Getting Started
Module 7: Installation and Getting Started
 

Similar a NETCONF YANG tutorial

NGON 2019 OIF Optical Masterclass
NGON 2019 OIF Optical MasterclassNGON 2019 OIF Optical Masterclass
NGON 2019 OIF Optical MasterclassLeah Wilkinson
 
Data models-and-automation-jp
Data models-and-automation-jpData models-and-automation-jp
Data models-and-automation-jpMiya Kohno
 
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław Borek
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław BorekPLNOG14: Service orchestration in provider network, Tail-f - Przemysław Borek
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław BorekPROIDEA
 
5G slicing and management tmf contribution
5G slicing and management   tmf contribution 5G slicing and management   tmf contribution
5G slicing and management tmf contribution Saurabh Verma
 
Virtualisation
VirtualisationVirtualisation
Virtualisationjsk1950
 
OIF Workshop at NGON & DCI World 2022
OIF Workshop at NGON & DCI World 2022OIF Workshop at NGON & DCI World 2022
OIF Workshop at NGON & DCI World 2022Leah Wilkinson
 
LTE: Building next-gen application services for mobile telecoms
LTE: Building next-gen application services for mobile telecomsLTE: Building next-gen application services for mobile telecoms
LTE: Building next-gen application services for mobile telecomsNuoDB
 
OpenConfig: collaborating to enable programmable network management
OpenConfig: collaborating to enable programmable network managementOpenConfig: collaborating to enable programmable network management
OpenConfig: collaborating to enable programmable network managementAnees Shaikh
 
Oct 2014: Update on 3GPP SA5
Oct 2014: Update on 3GPP SA5Oct 2014: Update on 3GPP SA5
Oct 2014: Update on 3GPP SA53G4G
 
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017Deborah Porchivina
 
244079168 lte-overview
244079168 lte-overview244079168 lte-overview
244079168 lte-overviewArbab Husain
 
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...Small Cell Forum
 
IRJET- Build SDN with Openflow Controller
IRJET-  	  Build SDN with Openflow ControllerIRJET-  	  Build SDN with Openflow Controller
IRJET- Build SDN with Openflow ControllerIRJET Journal
 
Service Chaining overview (English) 2015/10/05
Service Chaining overview (English) 2015/10/05Service Chaining overview (English) 2015/10/05
Service Chaining overview (English) 2015/10/05Kentaro Ebisawa
 
Introduction to YANG data models and their use in OpenDaylight: an overview
Introduction to YANG data models and their use in OpenDaylight: an overviewIntroduction to YANG data models and their use in OpenDaylight: an overview
Introduction to YANG data models and their use in OpenDaylight: an overviewCisco DevNet
 
NovoNet Vision and Operators' Perspective for ONAP
NovoNet Vision and Operators' Perspective for ONAPNovoNet Vision and Operators' Perspective for ONAP
NovoNet Vision and Operators' Perspective for ONAPITU
 
IOT_module_3.pdf
IOT_module_3.pdfIOT_module_3.pdf
IOT_module_3.pdfAmitH42
 
Cloudify: Open vCPE Design Concepts and Multi-Cloud Orchestration
Cloudify: Open vCPE Design Concepts and Multi-Cloud OrchestrationCloudify: Open vCPE Design Concepts and Multi-Cloud Orchestration
Cloudify: Open vCPE Design Concepts and Multi-Cloud OrchestrationCloudify Community
 

Similar a NETCONF YANG tutorial (20)

NGON 2019 OIF Optical Masterclass
NGON 2019 OIF Optical MasterclassNGON 2019 OIF Optical Masterclass
NGON 2019 OIF Optical Masterclass
 
Data models-and-automation-jp
Data models-and-automation-jpData models-and-automation-jp
Data models-and-automation-jp
 
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław Borek
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław BorekPLNOG14: Service orchestration in provider network, Tail-f - Przemysław Borek
PLNOG14: Service orchestration in provider network, Tail-f - Przemysław Borek
 
5G slicing and management tmf contribution
5G slicing and management   tmf contribution 5G slicing and management   tmf contribution
5G slicing and management tmf contribution
 
Virtualisation
VirtualisationVirtualisation
Virtualisation
 
OIF Workshop at NGON & DCI World 2022
OIF Workshop at NGON & DCI World 2022OIF Workshop at NGON & DCI World 2022
OIF Workshop at NGON & DCI World 2022
 
LTE: Building next-gen application services for mobile telecoms
LTE: Building next-gen application services for mobile telecomsLTE: Building next-gen application services for mobile telecoms
LTE: Building next-gen application services for mobile telecoms
 
OpenConfig: collaborating to enable programmable network management
OpenConfig: collaborating to enable programmable network managementOpenConfig: collaborating to enable programmable network management
OpenConfig: collaborating to enable programmable network management
 
Oct 2014: Update on 3GPP SA5
Oct 2014: Update on 3GPP SA5Oct 2014: Update on 3GPP SA5
Oct 2014: Update on 3GPP SA5
 
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017
"OIF Interop – the Key to Unlocking the Benefits of SDN" at OptiNet China 2017
 
244079168 lte-overview
244079168 lte-overview244079168 lte-overview
244079168 lte-overview
 
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...
SCF Partners' Day: Operations Overview Including Updates from NGMN, TIA, CTIA...
 
IRJET- Build SDN with Openflow Controller
IRJET-  	  Build SDN with Openflow ControllerIRJET-  	  Build SDN with Openflow Controller
IRJET- Build SDN with Openflow Controller
 
Service Chaining overview (English) 2015/10/05
Service Chaining overview (English) 2015/10/05Service Chaining overview (English) 2015/10/05
Service Chaining overview (English) 2015/10/05
 
Drx
DrxDrx
Drx
 
Introduction to YANG data models and their use in OpenDaylight: an overview
Introduction to YANG data models and their use in OpenDaylight: an overviewIntroduction to YANG data models and their use in OpenDaylight: an overview
Introduction to YANG data models and their use in OpenDaylight: an overview
 
Colt VCPE and NFV at L123 SDN WC 2015
Colt VCPE and NFV at L123 SDN WC 2015Colt VCPE and NFV at L123 SDN WC 2015
Colt VCPE and NFV at L123 SDN WC 2015
 
NovoNet Vision and Operators' Perspective for ONAP
NovoNet Vision and Operators' Perspective for ONAPNovoNet Vision and Operators' Perspective for ONAP
NovoNet Vision and Operators' Perspective for ONAP
 
IOT_module_3.pdf
IOT_module_3.pdfIOT_module_3.pdf
IOT_module_3.pdf
 
Cloudify: Open vCPE Design Concepts and Multi-Cloud Orchestration
Cloudify: Open vCPE Design Concepts and Multi-Cloud OrchestrationCloudify: Open vCPE Design Concepts and Multi-Cloud Orchestration
Cloudify: Open vCPE Design Concepts and Multi-Cloud Orchestration
 

Último

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 

Último (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 

NETCONF YANG tutorial

  • 1. Tutorial: NETCONF and YANG Presented by Stefan Wallin, Tail-f
  • 2. TUTORIAL: NETCONF AND YANG Table of Contents Standards background, motivation and history • Operators‟ management requirements captured in RFC 3535 • Implications of transactional management Introduction to NETCONF and YANG • What makes NETCONF/YANG different? • The meaning of transactions NETCONF Overview and Examples • NETCONF Transport, Extensibility • NETCONF Operations • Example: VPN Provisioning using NETCONF Network-wide Transactions ©2013 TAIL-F all rights reserved YANG Overview and Examples • YANG Types, Data Definitions • YANG Actions & Notifications • Example: Device Model • Example: Service Model Demos • Creating a YANG module • Extending YANG for code generation • Loading the YANG module on a Device • Managing a network using NETCONF Current IETF Status • NETCONF & NETMOD Working Groups MAY 27, 2013 2
  • 3. TUTORIAL: NETCONF AND YANG NETCONF and YANG Tutorial Part 1 What is it? • NETCONF and YANG in 2 minutes Standards background, motivation and history • Operators‟ management requirements captured in RFC 3535 • Implications of transactional management Demonstration of NETCONF and YANG ©2013 TAIL-F all rights reserved MAY 27, 2013 3
  • 4. TUTORIAL: NETCONF AND YANG NETCONF and YANG What is it? ©2013 TAIL-F all rights reserved MAY 27, 2013 4
  • 5. TUTORIAL: NETCONF AND YANG NETCONF and YANG in Context Yang YANG Models ManagementModels Applications NETCONF Manager NETCONF YANG Models ©2013 TAIL-F all rights reserved YANG Models YANG Models MAY 27, 2013 5
  • 6. TUTORIAL: NETCONF AND YANG What is a Data-Model? What is a Network Management Protocol? • Data-Model • A data-model explicitly and precisely determines the structure, syntax and semantics of the data… • …that is externally visible • Consistent and complete Protocol Data-Model • Protocol • • ©2013 TAIL-F all rights reserved Remote primitives to view and manipulate the data Encoding of the data as defined by the datamodel MAY 27, 2013 6
  • 7. TUTORIAL: NETCONF AND YANG Confusion and Comparison • Data-Models and information Models • • Not everything • Not always detailed and precise • Starting-point for data-model Protocol The SNMP Protocol NETCONF • Data-Model MIB Modules YANG Modules Information models are for humans Protocol • Confusion between domain-specific network management protocols and general RPC mechanisms • NETCONF vs. CORBA, SOAP, REST, … ©2013 TAIL-F all rights reserved MAY 27, 2013 7
  • 8. Standards background, motivation and history RFC 3535: Operators’ problems and requirements on network management
  • 9. TUTORIAL: NETCONF AND YANG Informational RFC 3535 Abstract This document provides an overview of a workshop held by the Internet Architecture Board (IAB) on Network Management. The workshop was hosted by CNRI in Reston, VA, USA on June 4 thru June 6, 2002. The goal of the workshop was to continue the important dialog started between network operators and protocol developers, and to guide the IETFs focus on future work regarding network management. ©2013 TAIL-F all rights reserved • SNMP had failed • • • For configuration, that is Extensive use in fault handling and monitoring CLI scripting • “Market share” 70%+ configuration MAY 27, 2013 9
  • 10. TUTORIAL: NETCONF AND YANG Operator Requirement #1/14 1. Ease of use is a key requirement for any network management technology from the operators point of view. Maybe not assume integrators and software developers for any addition or change Manage ©2013 TAIL-F all rights reserved MAY 27, 2013 10
  • 11. TUTORIAL: NETCONF AND YANG Operator Requirement #2-3/14 2. It is necessary to make a clear distinction between configuration data, data that describes operational state and statistics. 3. It is required to be able to fetch separately configuration data, operational state data, and statistics from devices, and to be able to compare these between devices. ©2013 TAIL-F all rights reserved • Clearly separating configuration • Ability to compare across devices $show running-config MAY 27, 2013 11
  • 12. TUTORIAL: NETCONF AND YANG Operator Requirement #4-5/14 4. It is necessary to enable operators to concentrate on the configuration of the network as a whole rather than individual devices. 5. Support for configuration transactions across a number of devices would significantly simplify network configuration management. • Service and Network management, not only device management • Network wide transactions VPN Configuration All or nothing ©2013 TAIL-F all rights reserved MAY 27, 2013 12
  • 13. TUTORIAL: NETCONF AND YANG Operator Requirement #6-7/14 6. Given configuration A and configuration B, it should be possible to generate the operations necessary to get from A to B with minimal state changes and effects on network and systems. It is important to minimize the impact caused by configuration changes. 7. A mechanism to dump and restore configurations is a primitive operation needed by operators. Standards for pulling and pushing configurations from/to devices are desirable. ©2013 TAIL-F all rights reserved • Devices figure out ordering • No unnecessary changes • Finally: backup/restore of configuration The litmus-test of a management interface configuration MAY 27, 2013 13
  • 14. TUTORIAL: NETCONF AND YANG Operator Requirement #8, 10/14 8. It must be easy to do consistency checks of configurations over time and between the ends of a link in order to determine the changes between two configurations and whether those configurations are consistent. 10. It is highly desirable that text processing tools such as diff, and version management tools such as RCS or CVS, can be used to process configurations, which implies that devices should not arbitrarily reorder data such as access control lists. ©2013 TAIL-F all rights reserved • Validation of configuration • Validation at network level • Text based configuration Text VPN Configuration Valid? MAY 27, 2013 14
  • 15. TUTORIAL: NETCONF AND YANG Operator Requirement #9/14 9. Network wide configurations are typically stored in central master databases and transformed into formats that can be pushed to devices, either by generating sequences of CLI commands or complete configuration files that are pushed to devices. There is no common database schema …, although the models used by various operators are probably very similar. • Standardized data models Interfaces Data-Model It is desirable to extract, document, and standardize the common parts of these network wide configuration database schemas. ©2013 TAIL-F all rights reserved MAY 27, 2013 15
  • 16. TUTORIAL: NETCONF AND YANG Operator Requirement #13/14 13. It is important to distinguish between the distribution of configurations and the activation of a certain configuration. • Support for multiple configuration sets • Delayed, orchestrated activation Devices should be able to hold multiple configurations. Config, Config, Commit ©2013 TAIL-F all rights reserved MAY 27, 2013 16
  • 17. TUTORIAL: NETCONF AND YANG Implications of RFC 3535, legacy situation OSS NMS NETCONF EMS Manager Cost and complexity • • • ©2013 TAIL-F all rights reserved No well-defined protocols and data-models Lack of atomicity Ordering problem MAY 27, 2013 18
  • 18. TUTORIAL: NETCONF AND YANG Implications of RFC 3535, with transactions OSS NMS NETCONF EMS Manager Reduced Cost and complexity ©2013 TAIL-F all rights reserved Cost/ Value Transactions Models Standardized Protocols MAY 27, 2013 19
  • 19. TUTORIAL: NETCONF AND YANG NETCONF was designed to conform to RFC 3535. Today many operators require NETCONF and YANG in devices. NETCONF makes a difference on the bottom line. ©2013 TAIL-F all rights reserved MAY 27, 2013 20
  • 20. TUTORIAL: NETCONF AND YANG Introduction to NETCONF ©2013 TAIL-F all rights reserved MAY 27, 2013 21
  • 21. TUTORIAL: NETCONF AND YANG What makes NETCONF/YANG different? SNMP NETCONF SOAP REST Standard IETF IETF W3C - Resources OIDs Paths Defined in MIBs YANG Core Models SMI YANG SNMP Encoding Transport Stack Data models Data Modeling Language Management Operations ©2013 TAIL-F all rights reserved URLs (WSDL, not data) Undefined, (WSDL), WADL, text… NETCONF In the XML Schema, not standardized HTTP operations BER XML XML XML, JSON,… UDP SSH TCP SSL HTTP TCP SSL HTTP TCP “RESTConf” MAY 27, 2013 22
  • 22. TUTORIAL: NETCONF AND YANG What makes NETCONF/YANG different? SNMP NETCONF • GET • <get-config> • GET-NEXT • <edit-config> • SET • <copy-config> • TRAP • <delete-config> • … • <get> • <lock> • … … so what? ©2013 TAIL-F all rights reserved … same same? MAY 27, 2013 23
  • 23. TUTORIAL: NETCONF AND YANG What makes NETCONF/YANG different? This is where the difference is: In the supported use cases! Use Case SNMP NETCONF Get collection of status fields Yes Yes. Bulk xfer up to 10x faster. Really. Set collection of configuration fields Yes, up to 64kB Yes Set configuration fields in transaction No Yes Transactions across multiple network elements No Yes Invoke administrative actions Well… Yes Send event notifications Yes Yes, connected Backup and restore configuration Usually not Yes Secure protocol v3 is fair Yes Test configuration before final commit No Yes ©2013 TAIL-F all rights reserved MAY 27, 2013 24
  • 24. TUTORIAL: NETCONF AND YANG The Meaning of Transactions The four properties that define a transaction: ACID Atomicity • Transactions are indivisible, all-or-nothing Consistency • Transactions are all-at-once • There is no internal order inside a transaction, it is a set of changes, not a sequence • Implies that { create A, create B } and { create B, create A } are identical • Implies that a system behaving differently with respect to the sequence is not transactional Independence • Parallel transactions do not interfere with each other • Transactions appear to happen always-in-sequence Durability • Committed data always-sticks, i.e. remains in the system even in the case of a fail-over, power failure, restart, etc ©2013 TAIL-F all rights reserved MAY 27, 2013 25
  • 25. TUTORIAL: NETCONF AND YANG The Meaning of Transactions • Consider transaction A • Add interface eth5 • Add route 55.66.0.0/24 over interface eth5 • Transactions are all-at-once, there is no internal ordering • Transaction A is therefore equivalent to • Add route 55.66.0.0/24 over interface eth5 • Add interface eth5 Obviously, the order matters in the execution. But it is not the manager’s concern in a transactional system. ©2013 TAIL-F all rights reserved MAY 27, 2013 26
  • 26. TUTORIAL: NETCONF AND YANG The Meaning of Transactions Backup • Read the configuration • • Manager does not need to know which elements are configuration Save result to a file • Send the saved configuration • No need to sort data • All-or-nothing semantics • No PDU size limit Use diff and other XML processing tools • • Human readable XML file • Restore Edit file, if desired ©2013 TAIL-F all rights reserved MAY 27, 2013 27
  • 27. TUTORIAL: NETCONF AND YANG The Meaning of Transactions Service Activation • Operator creates new service in OSS GUI • • • IPTV service, HD quality • • Three routers • Two firewalls • One billing machine ©2013 TAIL-F all rights reserved • All-or-nothing semantics across all devices • Some IPTV server edits No need to sort data • OSS computes configuration changes to send to network • OSS sends configuration change to all concerned devices in a network wide transaction Each device validates Optionally test service • Confirm or roll back MAY 27, 2013 28
  • 28. TUTORIAL: NETCONF AND YANG Network-wide Transactions is the most important leap in network management technology since SNMP. The error recovery and sequencing tasks are removed from the manager side. This is usually more than half the cost in a mature system; more than the entire cost of the managed devices. ©2013 TAIL-F all rights reserved MAY 27, 2013 29
  • 29. TUTORIAL: NETCONF AND YANG Who ? NETCONF • Phil Shafer, Rob Enns • • • Cisco Systems Ted Goddard • • Jacobs University, SNMP SMIng Martin Björklund • • Juniper, XML Jürgen Schönwälder • Yumaworks Ken Crozier Eliot Lear • • Tail-f Andy Bierman • • Jacobs University Phil Shafer • Martin Björklund • • • Jürgen Schönwälder • • Juniper YANG Tail-f, Vendor specific David Partain • Ericsson, made it happen IceSoft • Steve Waldbusser • Margaret Wasserman • Painless Security, LLC ©2013 TAIL-F all rights reserved MAY 27, 2013 30
  • 30. TUTORIAL: NETCONF AND YANG NETCONF Overview and Examples ©2013 TAIL-F all rights reserved MAY 27, 2013 31
  • 31. TUTORIAL: NETCONF AND YANG NETCONF Transport NETCONF messages are encoded in XML • Each message is framed by • NETCONF 1.0: a character sequence ]]>]]> • NETCONF 1.1: a line with the number of characters to read in ASCII NETCONF messages are encrypted by SSH • NETCONF over SOAP, BEEP (both now deprecated) and TLS are also defined, but not used • SSH provides authentication, integrity and confidentiality NETCONF is connected oriented using TCP • No need for manager to request resends • Efficient use of the medium ©2013 TAIL-F all rights reserved MAY 27, 2013 32
  • 32. TUTORIAL: NETCONF AND YANG NETCONF Extensibility When a NETCONF Manager connects to a NETCONF Server (Device), they say <hello> The contents of the <hello> message declares which NETCONF Capabilities each party is capable of. • Some capabilities are defined by the base NETCONF specification • Each YANG Data model the device knows is also a capability • Other specifications (standards body or proprietary) also define capabilities By declaring support for a capability in <hello>, the manager will know which operations it can submit to the Device. Extensions go in separate XML namespaces, which makes it easier to build backwards and forwards compatible management applications. ©2013 TAIL-F all rights reserved MAY 27, 2013 33
  • 33. TUTORIAL: NETCONF AND YANG NETCONF Configuration Data Stores Startup • Running Candidate Files… / URLs… Named configuration stores • Each data store may hold a full copy of the configuration • Running is mandatory, Startup and Candidate optional (capabilities :startup, :candidate) • Running may or may not be directly writable (:writable-running) • Need to copy from other stores if not directly writable ©2013 TAIL-F all rights reserved MAY 27, 2013 34
  • 34. TUTORIAL: NETCONF AND YANG NETCONF Transactions, Network-wide Transactions NETCONF allows a Manager to send down a set of configuration changes, or an entirely new configuration, in a single <edit-config> transaction. When doing so, the Manager does not need to • Figure out which order to send down the configuration changes in. All different sequences are treated equal. • Recover if the transaction fails. If the transaction was unsuccessful because of • inconsistency in the configuration • an out of memory condition • any other reason … none of the transaction content has been activated. The transaction did not roll back. It was simply never activated. ©2013 TAIL-F all rights reserved MAY 27, 2013 35
  • 35. TUTORIAL: NETCONF AND YANG NETCONF Transactions, Network-wide Transactions Using the Candidate data store a NETCONF Manager can implement a network wide transaction. • Send a configuration change to the candidate of each participating device • Validate candidate • If all participants are fine, tell all participating devices to commit changes Confirmed-commit allows a manager to activate a change, and test it for a while • Measure KPIs, test connectivity, … If satisfactory, commit. If not, drop the connection to the devices. • Connection closed/lost is the NETCONF command for abort transaction • All devices will roll back ©2013 TAIL-F all rights reserved MAY 27, 2013 36
  • 36. TUTORIAL: NETCONF AND YANG NETCONF Base Operations • <get> • <delete-config> • <get-config> • <lock> • <edit-config> • <unlock> • test-option (:validate) • <close-session> • error-option • <kill-session> • operation • <copy-config> • <commit> (:candidate, :confirmed) • <discard-changes> (:candidate) • <cancel-commit> (:candidate) ©2013 TAIL-F all rights reserved MAY 27, 2013 37
  • 37. TUTORIAL: NETCONF AND YANG NETCONF Example Configuration Sequence <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="5"> <edit-config xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <target> <candidate/> </target> <test-option>test-then-set</test-option> <error-option>rollback-on-error</error-option> <config> <interface xmlns=”urn:ietf:params:xml:ns:yang:ietf-interfaces"> <name>eth1</name> <ipv4-address>192.168.5.10</ipv4-address> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" <macaddr>aa:bb:cc:dd:ee:ff</macaddr> message-id="5"> </interface> <ok/> </config> </rpc-reply> </edit-config> </rpc> <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="6"> <validate> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" <source> message-id="6"> <candidate/> <ok/> </source> </rpc-reply> </validate> </rpc> <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="7"> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" <commit> message-id=“7"> <confirmed/> <ok/> </commit> ©2013 TAIL-F all rights reserved </rpc-reply> </rpc> MAY 27, 2013 38
  • 38. TUTORIAL: NETCONF AND YANG NETCONF RFC6241 Optional Capabilities :writable-running :candidate :confirmed-commit :rollback-on-error :validate :startup :url (scheme=http, ftp, file, …) :xpath (filters) ©2013 TAIL-F all rights reserved MAY 27, 2013 39
  • 39. TUTORIAL: NETCONF AND YANG Non-base NETCONF Capabilities :notification, :interleave (RFC 5277) :partial-lock (RFC 5717) :with-defaults (RFC 6243) :ietf-netconf-monitoring (RFC 6022) And you can define your own, like :actions (tail-f) :inactive (tail-f) ©2013 TAIL-F all rights reserved MAY 27, 2013 40
  • 40. TUTORIAL: NETCONF AND YANG NETCONF Operations ©2013 TAIL-F all rights reserved MAY 27, 2013 41
  • 41. TUTORIAL: NETCONF AND YANG NETCONF <hello> Operation • Capabilities exchange • Encoding • Data model ID exchange • Framing • NETCONF 1.0 EOM, ]]>]]> • NETCONF 1.1 Chunk Framing <?xml version="1.0" encoding="UTF-8"?> <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> </capabilities> </hello> ©2013 TAIL-F all rights reserved MAY 27, 2013 42
  • 42. TUTORIAL: NETCONF AND YANG NETCONF <hello> Operation <?xml version="1.0" encoding="UTF-8"?> <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> <capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability <capability>urn:ietf:params:netconf:capability:candidate:1.0</capability> <capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability <capability>urn:ietf:params:netconf:capability:xpath:1.0</capability> <capability>urn:ietf:params:netconf:capability:validate:1.0</capability> <capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capabilit <capability>http://tail-f.com/ns/netconf/with-defaults/1.0</capability> <capability>http://tail-f.com/ns/netconf/actions/1.0</capability> <capability>http://tail-f.com/ns/netconf/commit/1.0</capability> <capability>http://tail-f.com/ns/example/dhcpd?module=dhcpd</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2010-09-24&amp;module=ietf-inettypes</capability> </capabilities> <session-id>5</session-id> </hello> ©2013 TAIL-F all rights reserved MAY 27, 2013 43
  • 43. TUTORIAL: NETCONF AND YANG NETCONF <get-config> Operation • Sub-tree filtering • XPATH filtering <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1"> <get-config> <source> <running/> </source> <filter xmlns="http://tail-f.com/ns/aaa/1.1"> <aaa/> </filter> </get-config> </rpc> ©2013 TAIL-F all rights reserved MAY 27, 2013 44
  • 44. TUTORIAL: NETCONF AND YANG NETCONF <get-config> Operation <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1"> <data> <aaa xmlns="http://tail-f.com/ns/aaa/1.1"> <authentication> <users> <user> <name>admin</name> <uid>9000</uid> <gid>0</gid> <password>$1$3ZHhR6Ow$acznsyClFc0keo3B3BVjx/</password> <ssh_keydir>/var/confd/homes/admin/.ssh</ssh_keydir> <homedir>/var/confd/homes/admin</homedir> </user> <user> <name>oper</name> … </users> </authentication> </aaa> </data> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 45
  • 45. TUTORIAL: NETCONF AND YANG NETCONF <edit-config> Operation <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.1” message-id="1"> <edit-config> <target><running/></target> <config> <dhcp xmlns="http://tail-f.com/ns/example/dhcpd" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1"> <defaultLeaseTime nc:operation="merge”>PT1H </defaultLeaseTime> </dhcp> </config> </edit-config> </rpc> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 46
  • 46. TUTORIAL: NETCONF AND YANG NETCONF <edit-config> Operation nc:test-option (:validate) nc:operation test-then-set (default) merge set replace test-only create nc:error-option stop-on-error (default) Error if item to delete does not exist delete remove (:base:1.1) continue-on-error rollback-on-error (:rollback-on-error) ©2013 TAIL-F all rights reserved Ok if item to delete does not exist MAY 27, 2013 47
  • 47. TUTORIAL: NETCONF AND YANG NETCONF <copy-config> Operation • Copy configuration data between stores or URLs <rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <copy-config> <target><running/></target> <source> <url>https://user@example.com:passphrase/cfg/new.txt </url> </source> </copy-config> </rpc> <rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 48
  • 48. TUTORIAL: NETCONF AND YANG NETCONF <delete-config> Operation • Delete a complete data store (not running) <rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <delete-config> <target> <startup/> </target> </delete-config> </rpc> <rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 49
  • 49. TUTORIAL: NETCONF AND YANG NETCONF <lock>, <unlock> Operation • Lock/unlock a complete data store <rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <lock> <target> <candidate/> </target> </lock> </rpc> <rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 50
  • 50. TUTORIAL: NETCONF AND YANG NETCONF <get> Operation • Read configuration and status <rpc message-id="101” xmlns=”urn:ietf:param <get> <filter type="subtree"> <top xmlns="http://example.com/ns/dhc <interfaces> <interface> <ifName>eth0</ifName> </interface> </interfaces> </top> </filter> </get> ©2013 TAIL-F all rights reserved <rpc-reply message-id="101” xmlns=“urn:ie <data> <top xmlns="http://example.com/ns/dhc <interfaces> <interface> <ifName>eth0</ifName> <ifInOctets>45621</ifInOctets> <ifOutOctets>774344</ifOutOctet </interface> </interfaces> </top> </data> </rpc-reply> MAY 27, 2013 51
  • 51. TUTORIAL: NETCONF AND YANG NETCONF <close-session> Operation • Polite way of disconnecting <rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <close-session/> </rpc> <rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 52
  • 52. TUTORIAL: NETCONF AND YANG NETCONF <kill-session> Operation • Not so polite way of disconnecting another session Releases any locks, aborts any confirmed commit related to session <rpc message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <kill-session> <session-id>17</session-id> </kill-session> </rpc> <rpc-reply message-id="101” xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <ok/> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 53
  • 53. TUTORIAL: NETCONF AND YANG Additional NETCONF operations by capabilities • <commit>, <discard-changes> (:candidate) • <validate> (:validate) • Copy candidate to running • Discard changes in candidate (copy running to candidate) • <create-subscription> (:notification) • <partial-lock>, <partial-unlock> (:partial-lock) • <commit>, <cancel-commit> (:commit) • <get-schema> (:ietf-netconf-monitoring) ©2013 TAIL-F all rights reserved MAY 27, 2013 54
  • 54. TUTORIAL: NETCONF AND YANG Event Notifications • What is right for you? • NETCONF • SNMP Traps over UDP • Requires open connection • SYSLOG Messages over UDP • Supports replay • NETCONF Notifications over SSH • Define your own • SNMP • •  www.rfc-editor.org/rfc/rfc5277.txt ©2013 TAIL-F all rights reserved Limited payload • • Much used, works ok Connection-less SYSLOG • Lacks standard format MAY 27, 2013 56
  • 55. TUTORIAL: NETCONF AND YANG Example: VPN provisioning using NETCONF Network-wide Transactions ©2013 TAIL-F all rights reserved MAY 27, 2013 57
  • 56. TUTORIAL: NETCONF AND YANG VPN Scenario • • They have a management station connected to all the devices in the network to provision and monitor services • Site A An operator owns a network of routers and other equipment from different vendors Now, we need to set up a VPN between two customer sites • There is no point what so ever to make any changes on any device unless all changes succeed • We need a Network-wide Transaction North Site B East West ©2013 TAIL-F all rights reserved MAY 27, 2013 58
  • 57. TUTORIAL: NETCONF AND YANG Site A Hello • North Exchange capabilities >>>>> Router-West (Sun Nov 15 14:41:25 CET 2009) <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> </capabilities> </hello> Site B East West <<<< Router-West (Sun Nov 15 14:41:25 CET 2009) <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> <capability>http://tail-f.com/ns/netconf/actions/1.0</capability> <capability>http://tail-f.com/ns/aaa/1.1</capability> <capability>http://tail-f.com/ns/example/quagga/1.0</capability> </capabilities> <session-id>4</session-id> </hello> ©2013 TAIL-F all rights reserved MAY 27, 2013 59
  • 58. TUTORIAL: NETCONF AND YANG Lock the candidate data stores >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="2"> <nc:lock> <nc:target> <nc:candidate></nc:candidate> </nc:target> </nc:lock> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="2"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 61
  • 59. TUTORIAL: NETCONF AND YANG Lock the running data stores >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="3"> <nc:lock> <nc:target> <nc:running></nc:running> </nc:target> </nc:lock> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="3"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 62
  • 60. TUTORIAL: NETCONF AND YANG Copy running to candidates (logically) >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="4"> <nc:copy-config> <nc:target> <nc:candidate></nc:candidate> </nc:target> <nc:source> <nc:running></nc:running> </nc:source> </nc:copy-config> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="4"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 63
  • 61. TUTORIAL: NETCONF AND YANG Edit the candidates >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="5"> <nc:edit-config> <nc:target><nc:candidate></nc:candidate></nc:target> <nc:config> <quagga:system xmlns:quagga="http://tail-f.com/ns/example/quagga <quagga:vpn> <quagga:ipsec> <quagga:tunnel> <quagga:name>volvo-0</quagga:name> <quagga:local-endpoint>10.7.7.4</quagga:local-endpoint> <quagga:local-net>33.44.55.0</quagga:local-net> <quagga:local-net-mask>255.255.255.0</quagga:local-net-mas <quagga:remote-endpoint>10.3.4.1</quagga:remote-endpoint> <quagga:remote-net>62.34.65.0</quagga:remote-net> <quagga:pre-shared-key>ford</quagga:pre<quagga:encryption-algo>default <quagga:hash-algo>defau ©2013 TAIL-F all rights reserved MAY 27, 2013 64
  • 62. TUTORIAL: NETCONF AND YANG Validate candidates >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="6"> <nc:validate> <nc:source> <nc:candidate></nc:candidate> </nc:source> </nc:validate> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="6"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 65
  • 63. TUTORIAL: NETCONF AND YANG Commit candidates to running >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="7"> <nc:commit></nc:commit> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="7"> <ok></ok> </rpc-reply> Confidential Information | January 27, 2014 ©2013 TAIL-F all rights reserved MAY 27, 2013 66
  • 64. TUTORIAL: NETCONF AND YANG Unlock candidates >>>>> Router-West (Sun Nov 15 15:24:33 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="8"> <nc:unlock> <nc:target> <nc:candidate></nc:candidate> </nc:target> </nc:unlock> </nc:rpc> <<<< Router-West (Sun Nov 15 15:24:33 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="8"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 67
  • 65. TUTORIAL: NETCONF AND YANG Using confirmed-commit • Now do the same thing again, but instead of commit… >>>>> Router-West (Sun Nov 15 15:29:19 CET 2009) <nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" nc:message-id="16"> <nc:commit> <nc:confirmed></nc:confirmed> <nc:confirm-timeout>120</nc:confirm-timeout> </nc:commit> </nc:rpc> <<<< Router-West (Sun Nov 15 15:29:19 CET 2009) <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.1" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.1" message-id="16"> <ok></ok> </rpc-reply> ©2013 TAIL-F all rights reserved MAY 27, 2013 68
  • 66. TUTORIAL: NETCONF AND YANG Disaster happens • One of the devices disconnected • The management station disconnects all the rest • They all roll back to the previous configuration • The management station reconnects >>>>> Router-West (Sun Nov 15 15:30:22 CET 2009) <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> </capabilities> </hello> <<<< Router-West (Sun Nov 15 15:30:22 CET 2009) <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.1"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> <capability>urn:ietf:params:netconf:capability:writable-running:1. ©2013 TAIL-F all rights reserved MAY 27, 2013 69
  • 67. TUTORIAL: NETCONF AND YANG Common NETCONF Use Cases • Network-wide transactions • Applying and testing a configuration • Testing and rejecting a configuration • Rollback when device goes down • Transactions requiring all devices to be up • Backlogging transactions • Synchronizing ©2013 TAIL-F all rights reserved MAY 27, 2013 70
  • 68. TUTORIAL: NETCONF AND YANG YANG Overview and Examples ©2013 TAIL-F all rights reserved MAY 27, 2013 71
  • 69. TUTORIAL: NETCONF AND YANG YANG ? acme-box module • Data modeling language • Configuration data • State data • Tree structure • properties container name: string, config Data and Types interfaces container interface: list, index = name name: string, config oper-state: enum, config ©2013 TAIL-F all rights reserved MAY 27, 2013 72
  • 70. TUTORIAL: NETCONF AND YANG YANG Module Contents Header information Imports & Includes Type definitions Configuration & Operational data declarations Action (RPC) & Notification declarations ©2013 TAIL-F all rights reserved MAY 27, 2013 73
  • 71. TUTORIAL: NETCONF AND YANG Imports & Includes Module X Namespace Fragment A.yang Module Y Namespace import include Fragment B.yang include include Fragment C.yang Fragment E.yang Imported fragments are just referenced, not included Fragment D.yang Each included fragment is a complete YANG file; can never be included in any other module/namespace ©2013 TAIL-F all rights reserved MAY 27, 2013 74
  • 72. TUTORIAL: NETCONF AND YANG YANG Header ©2013 TAIL-F all rights reserved MAY 27, 2013 75
  • 73. TUTORIAL: NETCONF AND YANG Each submodule belongs to one specific main module Submodules module acme-module { namespace “…”; prefix acme; submodule acme-system { belongs-to acme-module { prefix acme; } import ”ietf-yang-types" { prefix yang; } include "acme-system"; organization "ACME Inc."; contact joe@acme.example.com; description ”Module describing the ACME products”; revision 2007-06-09 { description "Initial revision."; } ©2013 TAIL-F all rights reserved import ”ietf-yang-types" { prefix yang; } container system { … } } Attention: The submodule cannot reference definitions in main module MAY 27, 2013 76
  • 74. TUTORIAL: NETCONF AND YANG YANG Types ©2013 TAIL-F all rights reserved MAY 27, 2013 77
  • 75. TUTORIAL: NETCONF AND YANG YANG Base Types Type Name Meaning int8/16/32/64 Integer Type may be a base type or derived type uint8/16/32/64 Unsigned integer decimal64 Non-integer string Unicode string enumeration Set of alternatives boolean True or false bits Boolean array Binary BLOB leafref Reference “pointer” identityref Unique identity empty • Most YANG elements have a data type binary • No value, void • • Derived types may be simple typedefs or groupings (structures) There are 20+ base types to start with …and more ©2013 TAIL-F all rights reserved MAY 27, 2013 78
  • 76. TUTORIAL: NETCONF AND YANG Typedef Statement Defines a new simple type typedef percent { type uint16 { range "0 .. 100"; } description "Percentage"; } percent completed leaf completed { type percent; } ©2013 TAIL-F all rights reserved MAY 27, 2013 79
  • 77. TUTORIAL: NETCONF AND YANG Type Restrictions Integers Strings typedef my-base-int32-type { type int32 { range "1..4 | 10..20"; } } typedef my-base-str-type { type string { length "1..255"; } } typedef derived-int32 { type my-base-int32-type { range "11..max"; // 11..20 } } typedef derived-str { type my-base-str-type { length "11 | 42..max"; pattern "[0-9a-fA-F]*"; } } ©2013 TAIL-F all rights reserved MAY 27, 2013 80
  • 78. TUTORIAL: NETCONF AND YANG Union Statement A value that represents one of its member types typedef threshold { description ”Threshold value in percent"; type union { type uint16 { range "0 .. 100"; } type enumeration { enum disabled { description "No threshold"; } } } } ©2013 TAIL-F all rights reserved MAY 27, 2013 81
  • 79. TUTORIAL: NETCONF AND YANG Common YANG Types • Commonly used YANG types defined in RFC 6021 ipv4-address gauge32/64 ipv6-address object-identifier ip-prefix date-and-time ipv4-prefix timeticks ipv6-prefix timestamp domain-name to reference these types as e.g. phys-address uri ip-version mac-address type yang:counter64; flow-label bridgeid port-number vlanid ip-address • counter32/64 … and more Use import “ietf-yang-types” { prefix yang; }  www.rfc-editor.org/rfc/rfc6021.txt ©2013 TAIL-F all rights reserved MAY 27, 2013 82
  • 80. TUTORIAL: NETCONF AND YANG Grouping Statement Defines a new structured type grouping target { leaf address { type inet:ip-address; description "Target IP"; } leaf port { type inet:port-number; description "Target port number"; } } container peer { container destination { uses target; } } ©2013 TAIL-F all rights reserved target address port peer destination address port MAY 27, 2013 83
  • 81. TUTORIAL: NETCONF AND YANG Grouping Statement with Refine Groupings may be refined when used grouping target { leaf address { type inet:ip-address; description "Target IP"; } leaf port { type inet:port-number; description "Target port number"; } } ©2013 TAIL-F all rights reserved container servers { container http { uses target { refine port { default 80; } } } } MAY 27, 2013 84
  • 82. TUTORIAL: NETCONF AND YANG YANG Data Definitions ©2013 TAIL-F all rights reserved MAY 27, 2013 85
  • 83. TUTORIAL: NETCONF AND YANG Leaf Statement Holds a single value of a particular type Has no children leaf host-name { type string; mandatory true; config true; description "Hostname for this system"; } leaf cpu-temp { type int32; units degrees-celsius; config false; description ”Current temperature in CPU"; } ©2013 TAIL-F all rights reserved host-name cpu-temp MAY 27, 2013 86
  • 84. TUTORIAL: NETCONF AND YANG Attributes for leaf config Whether this leaf is a configurable value (“true”) or operational value (“false”). Inherited from parent container if not specified default Specifies default value for this leaf. Implies that leaf is optional mandatory Whether the leaf is mandatory (“true”) or optional (“false”) must XPath constraint that will be enforced for this leaf type The data type (and range etc) of this leaf when Conditional leaf, only present if XPath expression is true description Human readable definition and help text for this leaf reference Human readable reference to some other element or spec units Human readable unit specification (e.g. Hz, MB/s, ℉) status Whether this leaf is “current”, “deprecated” or “obsolete” ©2013 TAIL-F all rights reserved MAY 27, 2013 87
  • 85. TUTORIAL: NETCONF AND YANG Container Statement Groups related leafs and containers system services ssh container system { container services { container ssh { presence "Enables SSH"; description "SSH service specific configuration"; // more leafs, containers and other things here... } } } ©2013 TAIL-F all rights reserved Presence … … MAY 27, 2013 88
  • 86. TUTORIAL: NETCONF AND YANG Leaf-list Statement Holds multiple values of a particular type Has no children domain-search leaf-list domain-search { type string; ordered-by user; description "List of domain names to search"; } ©2013 TAIL-F all rights reserved MAY 27, 2013 89
  • 87. TUTORIAL: NETCONF AND YANG List Statement user name uid full-name class Default list user { key name; leaf name { type string; } leaf uid { type uint32; } ©2013 TAIL-F all rights reserved leaf full-name { type string; } leaf class { type string; default viewer; } } MAY 27, 2013 90
  • 88. TUTORIAL: NETCONF AND YANG Attributes for list and leaf-list max-elements Max number of elements in list. If max-elements is not specified, there is no upper limit, i.e. “unbounded” min-elements Min number of elements in list. If min-elements is not specified, there is no lower limit, i.e. 0 ordered-by List entries are sorted by “system” or “user”. System means elements are sorted in a natural order (numerically, alphabetically, etc). User means the order the operator entered them in is preserved. “ordered-by user” is meaningful when the order among the elements have significance, e.g. DNS server search order or firewall rules. ©2013 TAIL-F all rights reserved MAY 27, 2013 91
  • 89. TUTORIAL: NETCONF AND YANG Keys user name uid full-name class Default yang 1010 Yan Goode admin hawk 1152 Ron Hawk oper ling 1202 Lin Grossman viewer The key field is used to specify which row we’re talking about. /user[name=„yang‟]/name = yang /user[name=„yang‟]/uid = 1010 /user[name=„yang‟]/class = admin No two rows can have same key value /user[name=„ling‟]/class = viewer ©2013 TAIL-F all rights reserved MAY 27, 2013 92
  • 90. TUTORIAL: NETCONF AND YANG Keys user uid name full-name class Default 1010 yang Yan Goode admin 1152 hawk Ron Hawk oper 1202 ling Lin Grossman viewer If we want, we could select the uid to be key instead. /user[uid=„1010‟]/name = yang /user[uid=„1010‟]/uid = 1010 /user[uid=„1010‟]/class = admin /user[uid=„1202‟]/class = viewer ©2013 TAIL-F all rights reserved MAY 27, 2013 93
  • 91. TUTORIAL: NETCONF AND YANG Unique Statement user uid name full-name class Default 1010 yang Yan Goode admin 1152 hawk Ron Hawk oper 1202 ling Lin Grossman viewer Non- key fields can also be declared unique. Multiple fields can be declared unique separately or in combination ©2013 TAIL-F all rights reserved list user { key uid; unique name; … No two rows above can have same uid, nor name MAY 27, 2013 94
  • 92. TUTORIAL: NETCONF AND YANG Leafref To make an element reference one of the rows in a list, set the element type to leafref For lists with multiple keys, the #leafrefs must match #keys in list ©2013 TAIL-F all rights reserved • A valid leafref can never be null/empty – But the parent leaf can be optional • A valid leafref can never point to a row that has been deleted or renamed • System checks validity of leafrefs automatically MAY 27, 2013 96
  • 93. TUTORIAL: NETCONF AND YANG Leafref interface name rip address 0 .. 64 eth0.16 eth0.19 192.168.0.1 eth2.5 ifname eth0.19 24.97.238.15 Here, the RIP routing subsystem has a list of leafrefs pointing out existing interfaces ©2013 TAIL-F all rights reserved network-ifname container rip { list network-ifname { key ifname; leaf ifname { type leafref { path “/interface/name”; } } MAY 27, 2013 97
  • 94. TUTORIAL: NETCONF AND YANG YANG RPCs & Notifications ©2013 TAIL-F all rights reserved MAY 27, 2013 100
  • 95. TUTORIAL: NETCONF AND YANG RPC Statement Administrative actions with input and output parameters activate-software-image image rpc activate-software-image { input { leaf image { type binary; } } output { leaf status { type string; } } } ©2013 TAIL-F all rights reserved status MAY 27, 2013 101
  • 96. TUTORIAL: NETCONF AND YANG Notification Statement Notification with output parameters config-change notification config-change { description ”The configuration changed"; leaf operator-name { type string; } leaf-list change { type instance-identifier; } } operator-name change Instance-identifier values <change>/ex:system/ex:services/ex:ssh/ex:port</change> <change>/ex:system/ex:user[ex:name='fred']/ex:type</change> <change>/ex:system/ex:server[ex:ip='192.0.2.1'][ex:port='80’]</change> ©2013 TAIL-F all rights reserved MAY 27, 2013 102
  • 97. TUTORIAL: NETCONF AND YANG Advanced YANG Statements ©2013 TAIL-F all rights reserved MAY 27, 2013 103
  • 98. TUTORIAL: NETCONF AND YANG Must Statement Restricts valid values by Xpath 1.0 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"; units seconds; type uint32; must ”current() < ../access-timeout" { error-app-tag retry-timer-invalid; error-message "The retry timer must be " + "less than the access timeout"; } } } ©2013 TAIL-F all rights reserved MAY 27, 2013 104
  • 99. TUTORIAL: NETCONF AND YANG Must Statement leaf max-weight { type uint32 { range "0..1000"; } default 100; must "sum(/sys:sys/interface[enabled = 'true']/weight) < current()" { error-message "The total weight exceeds the configured max weight"; } } ©2013 TAIL-F all rights reserved MAY 27, 2013 106
  • 100. TUTORIAL: NETCONF AND YANG Augment Statement user name uid full-name class + expire Default augment /sys:system/sys:user { leaf expire { type yang:date-and-time; } } ©2013 TAIL-F all rights reserved MAY 27, 2013 107
  • 101. TUTORIAL: NETCONF AND YANG When Statement user name uid full-name class Default + expire shell When augment /sys:system/sys:user { when ”sys:class = „wheel‟"; leaf shell { type string; } } ©2013 TAIL-F all rights reserved MAY 27, 2013 108
  • 102. TUTORIAL: NETCONF AND YANG Choice Statement Choice allows one of several alternatives transfer-method transfer-interval choice transfer-method { leaf transfer-interval { description "Frequency at which file transfer happens"; type uint16 { range "15 .. 2880"; } units minutes; } leaf transfer-on-commit { description "Transfer after each commit"; type empty; } } ©2013 TAIL-F all rights reserved transfer-on-commit MAY 27, 2013 109
  • 103. TUTORIAL: NETCONF AND YANG Choice Statement Each alternative may consist of multiple definitions • Either as a named or anonymous group choice counters { case four-counters { leaf threshold {…} leaf ignore-count {…} leaf ignore-time {…} leaf reset-time {…} } container warning-only { … } default four-counters; } ©2013 TAIL-F all rights reserved MAY 27, 2013 110
  • 104. TUTORIAL: NETCONF AND YANG Identity Statement Identities for modeling families of related enumeration constants module phys-if { … identity ethernet { description "Ethernet family of PHY interfaces"; } identity eth-1G { base ethernet; description "1 GigEth"; } identity eth-10G { base ethernet; description "10 GigEth"; } ©2013 TAIL-F all rights reserved module newer { … identity eth-40G { base phys-if:ethernet; description "40 GigEth"; } identity eth-100G { base phys-if:ethernet; description "100 GigEth"; } … leaf eth-type { type identityref { base ”phys-if:ethernet"; } } MAY 27, 2013 111
  • 105. TUTORIAL: NETCONF AND YANG Feature Statement Mark data as conditional feature has-local-disk { description “System has a local file system that can be used for storing log files”; } container system { container logging { if-feature has-local-disk; presence “Logging enabled”; leaf buffer-size { type filesize; } } } ©2013 TAIL-F all rights reserved system logging Feature, Presence buffer-size The features supported by a system are meant to stay relatively constant. Adding a feature is comparable to a hardware upgrade. MAY 27, 2013 112
  • 106. TUTORIAL: NETCONF AND YANG YANG Modeling Strategy ©2013 TAIL-F all rights reserved MAY 27, 2013 114
  • 107. TUTORIAL: NETCONF AND YANG Constraints • On-board XPATH parser not required • • XPATH is more formal than English, that‟s all Debate: “Configuration validity must not depend on state” • Are operators right? • What are the implications? • • • • • • • ©2013 TAIL-F all rights reserved min-elements max-elements range key/unique leafref must when MAY 27, 2013 115
  • 108. TUTORIAL: NETCONF AND YANG Structure • Model to mimic an existing interface? • Model for which interfaces? • • • • • What goes in each namespace? • • Yang for NETCONF only? All interfaces uses the Yang model? Multiple models with transformations? Multiple models that allow writing? One, a few or many namespaces? No configuration inside operational data • SNMP transient configuration ©2013 TAIL-F all rights reserved MAY 27, 2013 116
  • 109. TUTORIAL: NETCONF AND YANG So what is configuration? • What is in the factory default? • Any probing at system boot? • Do you want pre-provisioning? • Do you want to support rollbacks? • Inserting a board, is that an act of configuration? • Do you need spontaneous reconfiguration? • Where does the configuration data originate from? ©2013 TAIL-F all rights reserved MAY 27, 2013 117
  • 110. TUTORIAL: NETCONF AND YANG Versioning Yang Modules You must / must not: You may: • Add a revision statement on top • Update organization, contact, etc • Do not rename module or namespace • Do not remove obsolete definitions • Do not reorder data definitions • Add enum, bits, typedef, grouping, ©2013 TAIL-F all rights reserved rpc, notification, extension, fe ature, identity, case • Add non-mandatory data definitions • Add mandatory data definitions within new iffeature statements  RFC 6020 sec 10 MAY 27, 2013 118
  • 111. TUTORIAL: NETCONF AND YANG Versioning Yang Modules (cont‟d) You may: You may: • Add or update a status statement: current  deprecated  obsolete • Change mandatory to false (or remove it) • Expand allowed range, length, pattern • Remove or relax min- & maxelements • Add a default (but not change it!) • Add or clarify a description without changing the semantics • Add units, add or update a reference • Change state data to optional configuration • Remove an if-feature ©2013 TAIL-F all rights reserved MAY 27, 2013 119
  • 112. TUTORIAL: NETCONF AND YANG IETF Modeling Recommendations • Describe • Module, security considerations, references, definitions, … • Top level • Only one data definition (typ. container) on top level • Top level data definitions optional • Enumerations that grow • Use identityref instead of enumeration ©2013 TAIL-F all rights reserved MAY 27, 2013 120
  • 113. TUTORIAL: NETCONF AND YANG IETF Modeling Recommendations • Specific types • Use ranges, length restrictions, patterns • Do not use signed types unless negative values needed • Standard types • When possible, use standard types, e.g. „yang-types‟ defined in RFC 6021 • Make your own reusable „type modules‟ ©2013 TAIL-F all rights reserved MAY 27, 2013 121
  • 114. TUTORIAL: NETCONF AND YANG Yin, Yang and Yang Extensions ©2013 TAIL-F all rights reserved MAY 27, 2013 122
  • 115. TUTORIAL: NETCONF AND YANG Yin – the XML representation of Yang YANG container dhcp { leaf defaultLeaseTime { type xs:duration; default PT600S; } leaf maxLeaseTime { type xs:duration; default PT7200S; } leaf logFacility { type loglevel; default local7; } ©2013 TAIL-F all rights reserved YIN 月 <container name="dhcp"> <leaf name="defaultLeaseTime"> <type name="xs:duration"/> Lossless <default value="PT600S"/> </leaf> <leaf name="maxLeaseTime"> <type name="xs:duration"/> <default value="PT7200S”/> </leaf> <leaf name="logFacility"> <type name="loglevel"/> Lossless <default value="local7"/> </leaf> MAY 27, 2013 123
  • 116. TUTORIAL: NETCONF AND YANG YANG Extensions - Prototype module prototype { namespace "http://tail-f.com… prefix prototype; extension create { argument keylist; } extension value { argument value; } extension keylist-value { argument keylist-value; } } ©2013 TAIL-F all rights reserved module xyz { list y { config false; tailf:cdb-oper; prototype:create "b=1,c=0"; prototype:create "b=6,c=0"; prototype:create "b=6,c=1"; key "b c"; leaf b { type int32; } leaf c { type int32; } leaf d { type string; prototype:keylist-value "b=1,c=0,cool"; prototype:keylist-value "b=6,c=1,green"; } MAY 27, 2013 124
  • 117. TUTORIAL: NETCONF AND YANG Yang Extensions - Prototype Prototype .yang c "/xyz:x/xyz:y{1 0}" prototype.py XYZ init data c "/xyz:x/xyz:y{6 0}" c "/xyz:x/xyz:y{6 1}" s "/xyz:x/xyz:y{1 0}/xyz:d" "cool" pyang s "/xyz:x/xyz:y{6 1}/xyz:d" "green" confdc ubuntu# show x XYZ .yang XYZ B C D ------------1 0 cool 6 0 - 6 1 green ©2013 TAIL-F all rights reserved MAY 27, 2013 125
  • 118. TUTORIAL: NETCONF AND YANG Yang Extensions – View Transform Plugin View .yang gen_trans.c y prototype.py Virtual .yang ©2013 TAIL-F all rights reserved transform.c pyang confdc Real .yang mapping.c confdc Virtual view list interface-problem { view:pathmap "/iface"; view:keymap "ifname2ifidx_keymap"; view:filter "interface_problem_filter"; key name; leaf name { type interface-type; } } Real model MAY 27, 2013 126
  • 119. TUTORIAL: NETCONF AND YANG Example: Router Device Model (part of) ©2013 TAIL-F all rights reserved MAY 27, 2013 127
  • 120. TUTORIAL: NETCONF AND YANG Example: Quagga Types submodule quagga_common { belongs-to quagga { prefix quagga; } … include quagga_top; typedef PrefixLengthIPv4 { type uint8 { range 0 .. 32; } } … grouping inetNetworkAddressIPv4 { leaf address { type inet:ipv4-address; mandatory true; } leaf prefix-length { type PrefixLengthIPv4; mandatory true; } } typedef MacAddressType { type string { length 17; pattern "([0-9a-fA-F][0-9a-fA-F]:){5} ([0-9a-fA-F][0-9a-fA-F])"; } } ©2013 TAIL-F all rights reserved typedef ACLLowRangeType { type uint32 { range 1 .. 99; } } typedef ACLHighRangeType { type uint32 { range 1300 .. 1999; } } typedef ACLExtType { type union { type ACLExtLowRangeType; type ACLExtHighRangeType; } } typedef InfiniteType { type enumeration { enum infinite; } } typedef DateTimeInfiniteType { type union { type yang:date-and-time; type InfiniteType; } } MAY 27, 2013 128
  • 121. TUTORIAL: NETCONF AND YANG Example: Quagga Interface Configuration submodule zebra_confd_if { belongs-to quagga { prefix quagga; } include confd_top; include confd_common; typedef BandwidthRangeType { type uint64 { range "1 .. 10000000000"; } } augment "/system/interface" { leaf bandwidth { type BandwidthRangeType; } leaf link-detect { type boolean; default false; } leaf multicast { type MulticastType; default if-default; } leaf up { type boolean; default true; } } } ©2013 TAIL-F all rights reserved submodule zebra_confd_if_ip { belongs-to quagga { prefix quagga; } import ietf-inet-types { prefix inet; } include confd_top; include confd_common; augment "/system/interface/ip" { list address { key "address prefix-length"; leaf address { type inet:ipv4-address; } leaf prefix-length { type PrefixLengthIPv4; } leaf label { type string; } } } } MAY 27, 2013 129
  • 122. TUTORIAL: NETCONF AND YANG Example: Quagga Status & Notification submodule zebra_confd_stats_memory { belongs-to quagga { prefix quagga; } import tailf-common { prefix tailf; } include confd_top; include confd_common; augment "/system/stats/memory" { container zebra { config false; tailf:callpoint "zebraGetMemory"; uses memoryStatusType; } } } ©2013 TAIL-F all rights reserved notification saExpired { leaf tunnelName { type leafref { path "/system/vpn/ipsec/tunnel/name"; } mandatory true; } leaf spi { type int64; mandatory true; } } MAY 27, 2013 130
  • 123. TUTORIAL: NETCONF AND YANG Example: Q-in-Q Service Model ©2013 TAIL-F all rights reserved MAY 27, 2013 131
  • 124. TUTORIAL: NETCONF AND YANG Example: Q-in-Q Service Model (complete) module qinq-service { namespace "http://com/example/qinq-service"; prefix qinq; list edge-switch { key switch; leaf switch { type leafref {path /ncs:devices/ncs:device/ncs:name;} } list edge-interface { key interface; leaf interface { type string; } leaf-list c-vlan { type uint32 { range 1..4094; } } } leaf-list trunk-interface { min-elements 1; type string; } } list core-switch { key switch; leaf switch { type leafref {path /ncs:devices/ncs:device/ncs:name;} } leaf-list trunk-interface { min-elements 1; type string; } } import tailf-common { prefix tailf; } import tailf-ncs { prefix ncs; } list qinq { key name; leaf name { type string; } leaf s-vlan { mandatory true; type uint32 { range 1..4094; } } must "not (/qt:qinq[name != current()/name] [s-vlan = current()/s-vlan])” { error-message "The s-vlan must be unique within the network” } } ©2013 TAIL-F all rights reserved } MAY 27, 2013 132
  • 125. TUTORIAL: NETCONF AND YANG Demos ©2013 TAIL-F all rights reserved MAY 27, 2013 133
  • 126. TUTORIAL: NETCONF AND YANG Current IETF Status ©2013 TAIL-F all rights reserved MAY 27, 2013 134
  • 127. TUTORIAL: NETCONF AND YANG NETCONF RFC Overview • RFC 3535 Informational: Background • RFC 6244 NETCONF+Yang Architectural Overview • RFC 6241 Base NETCONF Protocol • RFC 6242, 4743-4744, 5539 Transport Mappings • RFC 5277 Notifications • RFC 5717 Partial Locking • RFC 6243 With defaults • RFC 6470 Base Notifications • RFC 6536 NETCONF Access Control Model  https://datatracker.ietf.org/wg/netconf/charter/  www.rfc-editor.org/rfc/rfcXXXX.txt ©2013 TAIL-F all rights reserved MAY 27, 2013 135
  • 128. TUTORIAL: NETCONF AND YANG YANG RFC Overview • RFC 6020 YANG Base Specification • RFC 6021 YANG Types • RFC 6087 Guidelines for YANG Authors and Reviewers • RFC 6110 Mapping and Validating YANG • RFC 6244 NETCONF+Yang Architectural Overview • RFC 6643 Translation of SMIv2 MIBs to YANG  https://datatracker.ietf.org/wg/netmod/charter/  https://www.ietf.org/iesg/directorate/yang-doctors.html  http://www.yang-central.org/ ©2013 TAIL-F all rights reserved Start Here! Rather than risking getting things wrong, ask the YANG Doctors MAY 27, 2013 136
  • 129. TUTORIAL: NETCONF AND YANG ©2013 TAIL-F all rights reserved MAY 27, 2013 137
  • 130.
  • 131. SDN and NETCONF/YANG - a happy marriage
  • 132. TUTORIAL: NETCONF AND YANG http://www.slideshare.net/martin_casado/sdn-abstractions ©2013 TAIL-F all rights reserved MAY 27, 2013 140
  • 133. TUTORIAL: NETCONF AND YANG NETCONF/YANG and SDN? • SDN is more than OpenFlow • • • But: OF-CONFIG is YANG and NETCONF SDN the big picture • • • Schenker et al: abstractions for network management Transactions and data-models Dynamic programmatic network configuration ©2013 TAIL-F all rights reserved MAY 27, 2013 141

Notas del editor

  1. Mandatory “true” has some implications for the config. Must always be there, not upgradeable.
  2. Must expressions can touch the entire config, even config=false data. Evaluating them can be very expensive, care has to be taken when writing them. Dependency expressions are essential. They may easily become a performance hog. Adorn with tailf:dependency expressions. Easy to get a slow system since ConfD cannot know which expressions to evaluate.
  3. Unique needs to be used with care. The code becomes quadratic when large number of instances are added. Use with care.