draft-ietf-spring-sr-yang-01.txt   draft-ietf-spring-sr-yang-02.txt 
SPRING Working Group S. Litkowski SPRING Working Group S. Litkowski
Internet-Draft Orange Business Service Internet-Draft Orange Business Service
Intended status: Standards Track Y. Qu Intended status: Standards Track Y. Qu
Expires: April 19, 2016 Cisco Systems Expires: September 19, 2016 Cisco Systems
P. Sarkar P. Sarkar
Juniper Networks Juniper Networks
J. Tantsura J. Tantsura
Ericsson Ericsson
October 17, 2015 March 18, 2016
YANG Data Model for Segment Routing YANG Data Model for Segment Routing
draft-ietf-spring-sr-yang-01 draft-ietf-spring-sr-yang-02
Abstract Abstract
This document defines a YANG data model ([RFC6020]) for segment This document defines a YANG data model ([RFC6020]) for segment
routing ([I-D.ietf-spring-segment-routing]) configuration and routing ([I-D.ietf-spring-segment-routing]) configuration and
operation. This YANG model is intended to be used on network operation. This YANG model is intended to be used on network
elements to configure or operate segment routing. This document elements to configure or operate segment routing. This document
defines also generic containers that SHOULD be reused by IGP protocol defines also generic containers that SHOULD be reused by IGP protocol
modules to support segment routing. modules to support segment routing.
skipping to change at page 1, line 46 skipping to change at page 1, line 46
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 19, 2016. This Internet-Draft will expire on September 19, 2016.
Copyright Notice Copyright Notice
Copyright (c) 2015 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
skipping to change at page 2, line 32 skipping to change at page 2, line 32
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Tree diagram . . . . . . . . . . . . . . . . . . . . . . 3
2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3
3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5
4. IGP Control plane configuration . . . . . . . . . . . . . . . 6 4. IGP Control plane configuration . . . . . . . . . . . . . . . 6
4.1. IGP interface configuration . . . . . . . . . . . . . . . 6 4.1. IGP interface configuration . . . . . . . . . . . . . . . 6
4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6
4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6
4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7
5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 7 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8
7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8
8. Security Considerations . . . . . . . . . . . . . . . . . . . 21 8. Security Considerations . . . . . . . . . . . . . . . . . . . 23
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 23
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23
11. Normative References . . . . . . . . . . . . . . . . . . . . 21 11. Normative References . . . . . . . . . . . . . . . . . . . . 23
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23
1. Introduction 1. Introduction
This document defines a YANG data model for segment routing This document defines a YANG data model for segment routing
configuration and operation. This document does not define the IGP configuration and operation. This document does not define the IGP
extensions to support segment routing but defines generic groupings extensions to support segment routing but defines generic groupings
that SHOULD be reused by IGP extension modules. The reason of this that SHOULD be reused by IGP extension modules. The reason of this
design choice is to not require implementations to support all IGP design choice is to not require implementations to support all IGP
extensions. For example, an implementation may support IS-IS extensions. For example, an implementation may support IS-IS
extension but not OSPF. extension but not OSPF.
skipping to change at page 3, line 35 skipping to change at page 3, line 35
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2. Design of the Data Model 2. Design of the Data Model
As the module definition is just starting, it is expected that there As the module definition is just starting, it is expected that there
will be changes as the module matures. will be changes as the module matures.
module: ietf-segment-routing module: ietf-segment-routing
augment /rt:routing/rt:routing-instance: augment /rt:routing:
+--rw segment-routing +--rw segment-routing
+--rw transport-type? identityref +--rw transport-type? identityref
+--rw bindings +--rw bindings
| +--rw mapping-server {mapping-server}? | +--rw mapping-server {mapping-server}?
| | +--rw policy* [name] | | +--rw policy* [name]
| | +--rw name string | | +--rw name string
| | +--rw ipv4 | | +--rw ipv4
| | | +--rw mapping-entry* [prefix] | | | +--rw mapping-entry* [prefix]
| | | +--rw prefix inet:ipv4-prefix | | | +--rw prefix inet:ipv4-prefix
| | | +--rw value-type? enumeration | | | +--rw value-type? enumeration
skipping to change at page 4, line 24 skipping to change at page 4, line 24
| +--rw ipv6-prefix-sid* [prefix] | +--rw ipv6-prefix-sid* [prefix]
| +--rw prefix inet:ipv6-prefix | +--rw prefix inet:ipv6-prefix
| +--rw value-type? enumeration | +--rw value-type? enumeration
| +--rw start-sid uint32 | +--rw start-sid uint32
| +--rw range? uint32 | +--rw range? uint32
| +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}?
+--rw global-srgb +--rw global-srgb
+--rw srgb* [lower-bound upper-bound] +--rw srgb* [lower-bound upper-bound]
+--rw lower-bound uint32 +--rw lower-bound uint32
+--rw upper-bound uint32 +--rw upper-bound uint32
augment /rt:routing-state/rt:routing-instance: augment /rt:routing-state:
+--ro segment-routing +--ro segment-routing
+--ro node-capabilities +--ro node-capabilities
| +--ro transport-planes* [transport-plane] | +--ro transport-planes* [transport-plane]
| | +--ro transport-plane identityref | | +--ro transport-plane identityref
| +--ro segment-stack-push-limit? uint8 | +--ro segment-stack-push-limit? uint8
| +--ro readable-label-stack-depth? uint8 | +--ro readable-label-stack-depth? uint8
+--ro label-blocks* +--ro label-blocks*
| +--ro lower-bound? uint32 | +--ro lower-bound? uint32
| +--ro upper-bound? uint32 | +--ro upper-bound? uint32
| +--ro size? uint32 | +--ro size? uint32
| +--ro free? uint32 | +--ro free? uint32
| +--ro used? uint32 | +--ro used? uint32
+--ro global-sid-list +--ro global-sid-list
+--ro sid* [target sid source source-protocol binding-type] +--ro sid* [target sid source source-protocol binding-type]
+--ro target string +--ro target string
+--ro sid uint32 +--ro sid uint32
+--ro algorithm? uint8 +--ro algorithm? uint8
+--ro source inet:ip-address +--ro source inet:ip-address
+--ro used? boolean +--ro used? boolean
+--ro source-protocol leafref +--ro source-protocol -> /rt:routing-state/routing-protocols/
routing-protocol/name
+--ro binding-type enumeration +--ro binding-type enumeration
notifications: notifications:
+---n segment-routing-global-srgb-collision
| +--ro srgb-collisions*
| +--ro lower-bound? uint32
| +--ro upper-bound? uint32
| +--ro routing-protocol? -> /rt:routing-state/routing-protocols/
routing-protocol/name
| +--ro originating-rtr-id? router-id
+---n segment-routing-global-sid-collision +---n segment-routing-global-sid-collision
| +--ro received-target? string | +--ro received-target? string
| +--ro original-target? string | +--ro new-sid-rtr-id? router-id
| +--ro index? uint32 | +--ro original-target? string
| +--ro routing-protocol? leafref | +--ro original-sid-rtr-id? router-id
| +--ro index? uint32
| +--ro routing-protocol? -> /rt:routing-state/routing-protocols/
routing-protocol/name
+---n segment-routing-index-out-of-range +---n segment-routing-index-out-of-range
+--ro received-target? string +--ro received-target? string
+--ro received-index? uint32 +--ro received-index? uint32
+--ro routing-protocol? leafref +--ro routing-protocol? -> /rt:routing-state/routing-protocols/
routing-protocol/name
3. Configuration 3. Configuration
This module augments the "/rt:routing/rt:routing-instance:" with a This module augments the "/rt:routing/rt:routing-instance:" with a
segment-routing container. This container defines all the segment-routing container. This container defines all the
configuration parameters related to segment-routing for this configuration parameters related to segment-routing for this
particular routing-instance. particular routing-instance.
The segment-routing configuration is split in global routing-instance The segment-routing configuration is split in global routing-instance
configuration and interface configuration. configuration and interface configuration.
skipping to change at page 7, line 50 skipping to change at page 8, line 7
The operational states contains information reflecting the usage of The operational states contains information reflecting the usage of
allocated SRGB labels. allocated SRGB labels.
It also includes a list of all global SIDs, their associated It also includes a list of all global SIDs, their associated
bindings, and other information such as the source protocol and bindings, and other information such as the source protocol and
algorithm. algorithm.
6. Notifications 6. Notifications
The model proposes two notifications for segment-routing. The model defines the following notifications for segment-routing.
o segment-routing-global-srgb-collision: Rasied when a control plan
advertised SRGB blocks have conflicts.
o segment-routing-global-sid-collision: Raised when a control plane o segment-routing-global-sid-collision: Raised when a control plane
advertised index is already associated with another target (in advertised index is already associated with another target (in
this version, the only defined targets are IPv4 and IPv6 this version, the only defined targets are IPv4 and IPv6
prefixes). prefixes).
o segment-routing-index-out-of-range: Raised when a control plane o segment-routing-index-out-of-range: Raised when a control plane
advertised index fall outside the range of SRGBs configured for advertised index fall outside the range of SRGBs configured for
the network device. the network device.
7. YANG Module 7. YANG Module
<CODE BEGINS> file "ietf-segment-routing@2015-10-17.yang" <CODE BEGINS> file "ietf-segment-routing@2016-03-18.yang"
module ietf-segment-routing { module ietf-segment-routing {
namespace "urn:ietf:params:xml:ns:" namespace "urn:ietf:params:xml:ns:"
+ "yang:ietf-segment-routing"; + "yang:ietf-segment-routing";
prefix sr; prefix sr;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types {
prefix "yang";
}
import ietf-routing { import ietf-routing {
prefix "rt"; prefix "rt";
} }
organization organization
"IETF SPRING Working Group"; "IETF SPRING Working Group";
contact contact
"WG List: <mailto:spring@ietf.org> "WG List: <mailto:spring@ietf.org>
skipping to change at page 9, line 10 skipping to change at page 9, line 19
Author: Jeff Tantsura Author: Jeff Tantsura
<jeff.tantsura@ericsson.com> <jeff.tantsura@ericsson.com>
"; ";
description description
"The YANG module defines a generic configuration model for "The YANG module defines a generic configuration model for
Segment routing common across all of the vendor Segment routing common across all of the vendor
implementations."; implementations.";
revision 2016-03-18 {
description "
* Add notification segment-routing-global-srgb-collision
* Add router-id to segment-routing-global-sid-collision
* Remove routing-instance
* Add typedef router-id
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2015-10-17 { revision 2015-10-17 {
description " description "
* Add per-protocol SRGB config feature * Add per-protocol SRGB config feature
* Move SRBG config to a grouping * Move SRBG config to a grouping
"; ";
reference reference
"RFC XXXX: YANG Data Model for Segment Routing."; "RFC XXXX: YANG Data Model for Segment Routing.";
} }
revision 2015-06-22 { revision 2015-06-22 {
description " description "
skipping to change at page 10, line 19 skipping to change at page 10, line 40
feature sid-last-hop-behavior { feature sid-last-hop-behavior {
description description
"Configurable last hop behavior."; "Configurable last hop behavior.";
} }
feature protocol-srgb { feature protocol-srgb {
description description
"Support per-protocol srgb configuration."; "Support per-protocol srgb configuration.";
} }
/* Type Definitions */
typedef system-id {
type string {
pattern
'[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.00';
}
description
"This type defines ISIS system id using pattern,
system id looks like : 0143.0438.AeF0.00";
}
typedef router-id {
type union {
type system-id;
type yang:dotted-quad;
}
description
"OSPF/BGP router id or ISIS system ID.";
}
/* Groupings */ /* Groupings */
grouping srgb-cfg { grouping srgb-cfg {
list srgb { list srgb {
key "lower-bound upper-bound"; key "lower-bound upper-bound";
ordered-by user; ordered-by user;
leaf lower-bound { leaf lower-bound {
type uint32; type uint32;
description description
"Lower value in the block."; "Lower value in the block.";
skipping to change at page 15, line 4 skipping to change at page 15, line 46
} }
description description
"Defines the adjacency SID properties."; "Defines the adjacency SID properties.";
} }
description description
"container for SR interface cfg."; "container for SR interface cfg.";
} }
description description
"Grouping for IGP interface cfg."; "Grouping for IGP interface cfg.";
} }
/* Cfg */ /* Cfg */
augment "/rt:routing/rt:routing-instance" { augment "/rt:routing" {
description description
"This augments routing-instance "This augments routing-instance
configuration with segment-routing."; configuration with segment-routing.";
container segment-routing { container segment-routing {
leaf transport-type { leaf transport-type {
type identityref { type identityref {
base segment-routing-transport; base segment-routing-transport;
} }
default "segment-routing-transport-mpls"; default "segment-routing-transport-mpls";
description "Dataplane to be used."; description "Dataplane to be used.";
} }
container bindings { container bindings {
container mapping-server { container mapping-server {
skipping to change at page 17, line 4 skipping to change at page 17, line 44
uses srgb-cfg; uses srgb-cfg;
description description
"Global SRGB configuration."; "Global SRGB configuration.";
} }
description description
"segment routing global config."; "segment routing global config.";
} }
} }
/* Operational states */ /* Operational states */
augment "/rt:routing-state/rt:routing-instance" {
augment "/rt:routing-state" {
description description
"This augments the operational states "This augments the operational states
with segment-routing."; with segment-routing.";
container segment-routing { container segment-routing {
container node-capabilities { container node-capabilities {
list transport-planes { list transport-planes {
key transport-plane; key transport-plane;
leaf transport-plane { leaf transport-plane {
type identityref { type identityref {
base segment-routing-transport; base segment-routing-transport;
skipping to change at page 19, line 4 skipping to change at page 19, line 46
type inet:ip-address; type inet:ip-address;
description description
"IP address of the router than own "IP address of the router than own
the binding."; the binding.";
} }
leaf used { leaf used {
type boolean; type boolean;
description description
"Defines if the binding is used "Defines if the binding is used
in forwarding plane."; in forwarding plane.";
} }
leaf source-protocol { leaf source-protocol {
type leafref { type leafref {
path "/rt:routing-state/rt:routing-instance/" + path "/rt:routing-state/rt:routing-protocols/"
"rt:routing-protocols/rt:routing-protocol/rt:name"; + "rt:routing-protocol/rt:name";
} }
description description
"Rtg protocol that owns the binding"; "Rtg protocol that owns the binding";
} }
leaf binding-type { leaf binding-type {
type enumeration { type enumeration {
enum prefix-sid { enum prefix-sid {
description description
"Binding is learned from "Binding is learned from
a prefix SID."; a prefix SID.";
skipping to change at page 19, line 44 skipping to change at page 20, line 37
description description
"List of prefix and SID associations."; "List of prefix and SID associations.";
} }
description description
"Segment routing operational states."; "Segment routing operational states.";
} }
} }
/* Notifications */ /* Notifications */
notification segment-routing-global-srgb-collision {
list srgb-collisions {
leaf lower-bound {
type uint32;
description
"Lower value in the block.";
}
leaf upper-bound {
type uint32;
description
"Upper value in the block.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing-state/rt:routing-protocols/"
+ "rt:routing-protocol/rt:name";
}
description
"Routing protocol reference that received the event.";
}
leaf originating-rtr-id {
type router-id;
description
"Originating router id of this SRGB block.";
}
description
"List of SRGB blocks that conflict.";
}
description
"This notification is sent when received SRGB blocks from
a router conflict.";
}
notification segment-routing-global-sid-collision { notification segment-routing-global-sid-collision {
leaf received-target { leaf received-target {
type string; type string;
description description
"Target received in the controlplane that "Target received in the controlplane that
caused SID collision."; caused SID collision.";
} }
leaf new-sid-rtr-id {
type router-id;
description
"Router Id that advertising the conflicting SID.";
}
leaf original-target { leaf original-target {
type string; type string;
description description
"Target already available in database that have the same SID "Target already available in database that have the same SID
as the received target."; as the received target.";
} }
leaf original-sid-rtr-id {
type router-id;
description
"Original router ID that advertised the conflicting SID.";
}
leaf index { leaf index {
type uint32; type uint32;
description description
"Value of the index used by two different prefixes."; "Value of the index used by two different prefixes.";
} }
leaf routing-protocol { leaf routing-protocol {
type leafref { type leafref {
path "/rt:routing-state/rt:routing-instance/" + path "/rt:routing-state/rt:routing-protocols/"
"rt:routing-protocols/rt:routing-protocol/rt:name"; + "rt:routing-protocol/rt:name";
} }
description description
"Routing protocol reference that received the event."; "Routing protocol reference that received the event.";
} }
description description
"This notification is sent when a new mapping is learned "This notification is sent when a new mapping is learned
, containing mapping , containing mapping
where the SID is already used. where the SID is already used.
The notification generation must be throttled with at least The notification generation must be throttled with at least
a 5 second gap. "; a 5 second gap. ";
skipping to change at page 20, line 43 skipping to change at page 22, line 31
"Target received in the controlplane "Target received in the controlplane
that caused SID collision."; that caused SID collision.";
} }
leaf received-index { leaf received-index {
type uint32; type uint32;
description description
"Value of the index received."; "Value of the index received.";
} }
leaf routing-protocol { leaf routing-protocol {
type leafref { type leafref {
path "/rt:routing-state/rt:routing-instance/" + path "/rt:routing-state/rt:routing-protocols/" +
"rt:routing-protocols/rt:routing-protocol/rt:name"; "rt:routing-protocol/rt:name";
} }
description description
"Routing protocol reference that received the event."; "Routing protocol reference that received the event.";
} }
description description
"This notification is sent when a binding "This notification is sent when a binding
is received, containing a segment index is received, containing a segment index
which is out of the local configured ranges. which is out of the local configured ranges.
The notification generation must be throttled with at least The notification generation must be throttled with at least
a 5 second gap. "; a 5 second gap. ";
 End of changes. 29 change blocks. 
31 lines changed or deleted 124 lines changed or added

This html diff was produced by rfcdiff 1.44. The latest version is available from http://tools.ietf.org/tools/rfcdiff/