draft-ietf-spring-sr-yang-04.txt   draft-ietf-spring-sr-yang-05.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 27, 2017 Cisco Systems Expires: May 1, 2017 Cisco Systems
P. Sarkar P. Sarkar
Juniper Networks
J. Tantsura J. Tantsura
Individual Individual
October 24, 2016 October 28, 2016
YANG Data Model for Segment Routing YANG Data Model for Segment Routing
draft-ietf-spring-sr-yang-04 draft-ietf-spring-sr-yang-05
Abstract Abstract
This document defines a YANG data model ([RFC6020], [RFC7950]) for This document defines a YANG data model ([RFC6020], [RFC7950]) for
segment routing ([I-D.ietf-spring-segment-routing]) configuration and segment 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 45
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 27, 2017. This Internet-Draft will expire on May 1, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 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
skipping to change at page 2, line 27 skipping to change at page 2, line 27
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
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 . . . . . . . . . . . . . . . 7
4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7
4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7
4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7
5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8
7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8
8. Security Considerations . . . . . . . . . . . . . . . . . . . 24 8. Security Considerations . . . . . . . . . . . . . . . . . . . 26
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 26
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26
11. Normative References . . . . . . . . . . . . . . . . . . . . 25 11. Normative References . . . . . . . . . . . . . . . . . . . . 26
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27
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 38 skipping to change at page 3, line 38
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: augment /rt:routing:
+--rw segment-routing +--rw segment-routing
+--rw transport-type? identityref +--rw transport-type? identityref
+--rw msd {msd}?
| +--rw node-msd? uint8
| +--rw link-msd
| +--rw link-msds* [interface]
| +--rw interface if:interface-ref
| +--rw msd? uint8
+--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 algorithm] | | | +--rw mapping-entry* [prefix algorithm]
| | | +--rw prefix inet:ipv4-prefix | | | +--rw prefix inet:ipv4-prefix
| | | +--rw value-type? enumeration | | | +--rw value-type? enumeration
| | | +--rw start-sid uint32 | | | +--rw start-sid uint32
| | | +--rw range? uint32 | | | +--rw range? uint32
skipping to change at page 4, line 33 skipping to change at page 4, line 39
| +--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: 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 readable-label-stack-depth? uint8 | +--ro readable-label-stack-depth? uint8
+--ro msd
| +--ro node-msd? uint8
| +--ro link-msd
| +--ro link-msds* [interface]
| +--ro interface if:interface-ref
| +--ro msd? 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
skipping to change at page 8, line 27 skipping to change at page 8, line 40
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-common@2016-10-24.yang" <CODE BEGINS> file "ietf-segment-routing-common@2016-10-28.yang"
module ietf-segment-routing-common { module ietf-segment-routing-common {
namespace "urn:ietf:params:xml:ns:" namespace "urn:ietf:params:xml:ns:"
+ "yang:ietf-segment-routing-common"; + "yang:ietf-segment-routing-common";
prefix sr-cmn; prefix sr-cmn;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
organization organization
"IETF SPRING Working Group"; "IETF SPRING Working Group";
contact contact
"WG List: <mailto:spring@ietf.org> "WG List: <mailto:spring@ietf.org>
Editor: Stephane Litkowski Editor: Stephane Litkowski
<mailto:stephane.litkowski@orange.com> <mailto:stephane.litkowski@orange.com>
Author: Acee Lindem Author: Acee Lindem
<mailto:acee@cisco.com> <mailto:acee@cisco.com>
Author: Yingzhen Qu Author: Yingzhen Qu
<mailto:yiqu@cisco.com> <mailto:yiqu@cisco.com>
Author: Pushpasis Sarkar Author: Pushpasis Sarkar
<mailto:psarkar@juniper.net> <mailto:pushpasis.ietf@gmail.com>
Author: Ing-Wher Chen Author: Jeff Tantsura
<mailto:ing-wher.chen@ericsson.com> <jefftant.ietf@gmail.com>
Author: Jeff Tantsura
<jeff.tantsura@ericsson.com>
"; ";
description description
"The YANG module defines a collection of types and groupings for "The YANG module defines a collection of types and groupings for
Segment routing."; Segment routing.";
revision 2016-10-24 { revision 2016-10-28 {
description "Initial"; description "
reference * Add support of MSD (Maximum SID Depth)
"RFC XXXX: YANG Data Model for Segment Routing."; * Update contact info
} ";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
/* Identities */ revision 2016-10-24 {
identity segment-routing-transport { description "Initial";
description reference
"Base identity for segment routing transport."; "RFC XXXX: YANG Data Model for Segment Routing.";
} }
identity segment-routing-transport-mpls {
base segment-routing-transport;
description
"This identity represents MPLS transport for segment
routing.";
}
identity prefix-sid-algorithm { /* Identities */
description identity segment-routing-transport {
"Base identity for prefix-sid algorithm."; description
} "Base identity for segment routing transport.";
}
identity segment-routing-transport-mpls {
base segment-routing-transport;
description
"This identity represents MPLS transport for segment
routing.";
}
identity prefix-sid-algorithm {
description
"Base identity for prefix-sid algorithm.";
}
identity prefix-sid-algorithm-shortest-path { identity prefix-sid-algorithm-shortest-path {
base prefix-sid-algorithm; base prefix-sid-algorithm;
description description
"The default behavior of prefix-sid algorithm."; "The default behavior of prefix-sid algorithm.";
} }
identity prefix-sid-algorithm-strict-spf { identity prefix-sid-algorithm-strict-spf {
base prefix-sid-algorithm; base prefix-sid-algorithm;
description description
"This algorithm mandates that the packet is forwared "This algorithm mandates that the packet is forwared
according to ECMP-aware SPF algorithm."; according to ECMP-aware SPF algorithm.";
} }
/* Features */ /* Features */
feature sid-last-hop-behavior {
description
"Configurable last hop behavior.";
}
/* Groupings */ feature sid-last-hop-behavior {
description
"Configurable last hop behavior.";
}
grouping srgb-cfg { /* Groupings */
list srgb {
key "lower-bound upper-bound";
ordered-by user;
leaf lower-bound {
type uint32;
description
"Lower value in the block.";
}
leaf upper-bound {
type uint32;
description
"Upper value in the block.";
}
description
"List of global blocks to be
advertised.";
}
description
"Grouping for SRGB configuration.";
}
grouping sid-value-type { grouping srgb-cfg {
leaf value-type { list srgb {
type enumeration { key "lower-bound upper-bound";
enum index { ordered-by user;
description leaf lower-bound {
"The value will be type uint32;
interpreted as an index."; description
} "Lower value in the block.";
enum absolute { }
description leaf upper-bound {
"The value will become type uint32;
interpreted as an absolute description
value."; "Upper value in the block.";
} }
} description
default index; "List of global blocks to be
description advertised.";
"This leaf defines how value }
must be interpreted."; description
"Grouping for SRGB configuration.";
}
grouping sid-value-type {
leaf value-type {
type enumeration {
enum index {
description
"The value will be
interpreted as an index.";
}
enum absolute {
description
"The value will become
interpreted as an absolute
value.";
}
}
default index;
description
"This leaf defines how value
must be interpreted.";
}
description
"Defines how the SID value is expressed.";
}
} grouping ipv4-sid-cfg {
description
"Defines how the SID value is expressed.";
}
grouping ipv4-sid-cfg { leaf prefix {
type inet:ipv4-prefix;
description
"connected prefix sid.";
}
leaf prefix { uses prefix-sid-attributes;
type inet:ipv4-prefix;
description
"connected prefix sid.";
}
uses prefix-sid-attributes; description
"This grouping defines cfg of prefix SID.";
}
description grouping ipv6-sid-cfg {
"This grouping defines cfg of prefix SID."; leaf prefix {
} type inet:ipv6-prefix;
description
"connected prefix sid.";
}
grouping ipv6-sid-cfg { uses prefix-sid-attributes;
leaf prefix {
type inet:ipv6-prefix;
description
"connected prefix sid.";
}
uses prefix-sid-attributes; description
"This grouping defines cfg of prefix SID.";
}
description grouping last-hop-behavior {
"This grouping defines cfg of prefix SID."; leaf last-hop-behavior {
} if-feature sid-last-hop-behavior;
type enumeration {
enum explicit-null {
description
"Use explicit-null for the SID.";
}
enum no-php {
description
"Do no use PHP for the SID.";
}
enum php {
description
"Use PHP for the SID.";
}
}
description
"Configure last hop behavior.";
}
description
"Defines last hop behavior";
}
grouping last-hop-behavior { grouping node-capabilities {
leaf last-hop-behavior { description "Containing SR node capabilities.";
if-feature sid-last-hop-behavior; container node-capabilities {
type enumeration { list transport-planes {
enum explicit-null { key transport-plane;
description leaf transport-plane {
"Use explicit-null for the SID."; type identityref {
} base segment-routing-transport;
enum no-php { }
description description
"Do no use PHP for the SID."; "Transport plane supported";
} }
enum php { description
description "List of supported transport planes.";
"Use PHP for the SID."; }
} leaf readable-label-stack-depth {
type uint8;
description
"Number of MPLS labels that
can be read in the stack.";
}
description
"Shows the SR capability of the node.";
} // node-capabilities
} // sr-node-capabilities
} grouping prefix-sid-attributes {
description description "Containing SR attributes for a prefix.";
"Configure last hop behavior.";
}
description
"Defines last hop behavior";
}
grouping node-capabilities { uses sid-value-type;
description "Containing SR node capabilities."; leaf start-sid {
container node-capabilities { type uint32;
list transport-planes { mandatory true;
key transport-plane; description
leaf transport-plane { "Value associated with
type identityref { prefix. The value must
base segment-routing-transport; be interpreted in the
} context of value-type.";
description }
"Transport plane supported";
}
description
"List of supported transport planes.";
}
leaf segment-stack-push-limit {
type uint8;
description
"Describes the number of segments
that can be pushed by the node.";
}
leaf readable-label-stack-depth {
type uint8;
description
"Number of MPLS labels that
can be read in the stack.";
}
description
"Shows the SR capability of the node.";
} // node-capabilities
} // sr-node-capabilities
grouping prefix-sid-attributes { leaf range {
description "Containing SR attributes for a prefix."; type uint32;
description
"Describes how many SIDs could be
allocated.";
}
uses sid-value-type; leaf algorithm {
leaf start-sid { type identityref {
type uint32; base prefix-sid-algorithm;
mandatory true; }
description description "Prefix-sid algorithm.";
"Value associated with }
prefix. The value must } //prefix-sid-attributes
be interpreted in the }
context of value-type."; <CODE ENDS>
} <CODE BEGINS> file "ietf-segment-routing@2016-10-28.yang"
module ietf-segment-routing {
namespace "urn:ietf:params:xml:ns:"
+ "yang:ietf-segment-routing";
prefix sr;
leaf range { import ietf-inet-types {
type uint32; prefix "inet";
description }
"Describes how many SIDs could be
allocated.";
}
leaf algorithm { import ietf-yang-types {
type identityref { prefix "yang";
base prefix-sid-algorithm; }
} import ietf-routing {
description "Prefix-sid algorithm."; prefix "rt";
} }
} //prefix-sid-attributes
}
<CODE ENDS>
<CODE BEGINS> file "ietf-segment-routing@2016-10-24.yang"
module ietf-segment-routing {
namespace "urn:ietf:params:xml:ns:"
+ "yang:ietf-segment-routing";
prefix sr;
import ietf-inet-types { import ietf-interfaces {
prefix "inet"; prefix "if";
} }
import ietf-yang-types { import ietf-segment-routing-common {
prefix "yang"; prefix "sr-cmn";
} }
import ietf-routing { organization
prefix "rt"; "IETF SPRING Working Group";
}
import ietf-segment-routing-common { contact
prefix "sr-cmn"; "WG List: <mailto:spring@ietf.org>
}
organization Editor: Stephane Litkowski
"IETF SPRING Working Group"; <mailto:stephane.litkowski@orange.com>
contact Author: Acee Lindem
"WG List: <mailto:spring@ietf.org> <mailto:acee@cisco.com>
Author: Yingzhen Qu
<mailto:yiqu@cisco.com>
Author: Pushpasis Sarkar
<mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
Editor: Stephane Litkowski ";
<mailto:stephane.litkowski@orange.com>
Author: Acee Lindem description
<mailto:acee@cisco.com> "The YANG module defines a generic configuration model for
Author: Yingzhen Qu Segment routing common across all of the vendor
<mailto:yiqu@cisco.com> implementations.";
Author: Pushpasis Sarkar
<mailto:psarkar@juniper.net>
Author: Ing-Wher Chen
<mailto:ing-wher.chen@ericsson.com>
Author: Jeff Tantsura
<jeff.tantsura@ericsson.com>
"; revision 2016-10-28 {
description "
* Add support of MSD (Maximum SID Depth)
* Update contact info
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
description revision 2016-10-24 {
"The YANG module defines a generic configuration model for description "
Segment routing common across all of the vendor * Moved common SR types and groupings to a seperate module
implementations."; ";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2016-07-07 {
description "
* Add support of prefix-sid algorithm configuration
* change routing-protocols to control-plane-protocols
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2016-03-17 {
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 {
description "
* Add per-protocol SRGB config feature
* Move SRBG config to a grouping
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2015-06-22 {
description "
* Prefix SID config moved to
connected-prefix-sid-map in global SR cfg
rather than IGP.
";
reference "draft-litkowski-spring-sr-yang-01";
}
revision 2015-04-23 {
description "
* Node flag deprecated from prefixSID
* SR interface cfg moved to protocol
* Adding multiple binding policies for SRMS
";
reference "";
}
revision 2015-02-27 {
description "Initial";
reference "draft-litkowski-spring-sr-yang-00";
}
revision 2016-10-24 { /* Features */
description "
* Moved common SR types and groupings to a seperate module
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2016-07-07 {
description "
* Add support of prefix-sid algorithm configuration
* change routing-protocols to control-plane-protocols
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2016-03-17 {
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 {
description "
* Add per-protocol SRGB config feature
* Move SRBG config to a grouping
";
reference
"RFC XXXX: YANG Data Model for Segment Routing.";
}
revision 2015-06-22 {
description "
* Prefix SID config moved to
connected-prefix-sid-map in global SR cfg
rather than IGP.
";
reference "draft-litkowski-spring-sr-yang-01";
}
revision 2015-04-23 {
description "
* Node flag deprecated from prefixSID
* SR interface cfg moved to protocol
* Adding multiple binding policies for SRMS
";
reference "";
}
revision 2015-02-27 {
description "Initial";
reference "draft-litkowski-spring-sr-yang-00";
}
/* Features */ feature mapping-server {
description
"Support of SRMS.";
}
feature mapping-server { feature protocol-srgb {
description description
"Support of SRMS."; "Support per-protocol srgb configuration.";
} }
feature protocol-srgb { feature msd {
description description
"Support per-protocol srgb configuration."; "Support of signaling MSD (Maximum SID Depth) in IGP.";
} }
/* Type Definitions */ /* Type Definitions */
typedef system-id { typedef system-id {
type string { type string {
pattern pattern
'[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.00'; '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.00';
} }
description description
"This type defines ISIS system id using pattern, "This type defines ISIS system id using pattern,
system id looks like : 0143.0438.AeF0.00"; system id looks like : 0143.0438.AeF0.00";
} }
typedef router-id { typedef router-id {
type union { type union {
type system-id; type system-id;
type yang:dotted-quad; type yang:dotted-quad;
} }
description description
"OSPF/BGP router id or ISIS system ID."; "OSPF/BGP router id or ISIS system ID.";
} }
/* Groupings */ /* Groupings */
grouping controlplane-cfg { grouping controlplane-cfg {
container segment-routing { container segment-routing {
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default false;
description description
"Enables segment-routing "Enables segment-routing
protocol extensions."; protocol extensions.";
} }
container bindings { container bindings {
container advertise { container advertise {
leaf-list policies { leaf-list policies {
type string; type string;
description description
"List of policies to be advertised."; "List of policies to be advertised.";
} }
description description
"Authorize the advertise "Authorize the advertise
of local mappings in binding TLV."; of local mappings in binding TLV.";
} }
leaf receive { leaf receive {
type boolean; type boolean;
default true; default true;
description description
"Authorize the reception and usage "Authorize the reception and usage
of binding TLV."; of binding TLV.";
} }
description description
"Control of binding advertisement "Control of binding advertisement
and reception."; and reception.";
} }
description
"segment routing global config.";
}
description
"Defines protocol configuration.";
}
grouping igp-interface-cfg { description
container segment-routing { "segment routing global config.";
}
description
"Defines protocol configuration.";
}
container adjacency-sid { grouping igp-interface-cfg {
list advertise-adj-group-sid { container segment-routing {
key group-id;
leaf group-id { container adjacency-sid {
type uint32; list advertise-adj-group-sid {
description key group-id;
"The value is an internal value to identify
a group-ID. Interfaces with the same
group-ID will be bundled together.";
}
description
"Control advertisement of S flag.
Enable to advertise a common Adj-SID
for parallel links.";
}
leaf advertise-protection {
type enumeration {
enum "single" {
description
"A single Adj-SID is associated
with the adjacency and reflects
the protection configuration.";
}
enum "dual" {
description
"Two Adj-SIDs will be associated
with the adjacency if interface
is protected. In this case
one will be enforced with
backup flag set, the other
will be enforced to backup flag unset.
In case, protection is not configured,
a single Adj-SID will be advertised
with backup flag unset.";
}
}
description
"If set, the Adj-SID refers to an
adjacency being protected.";
}
description
"Defines the adjacency SID properties.";
}
description
"container for SR interface cfg.";
}
description
"Grouping for IGP interface cfg.";
}
/* Cfg */ leaf group-id {
type uint32;
description
"The value is an internal value to identify
a group-ID. Interfaces with the same
group-ID will be bundled together.";
augment "/rt:routing" { }
description description
"This augments routing-instance "Control advertisement of S flag.
configuration with segment-routing."; Enable to advertise a common Adj-SID
container segment-routing { for parallel links.";
leaf transport-type { }
type identityref { leaf advertise-protection {
base sr-cmn:segment-routing-transport; type enumeration {
} enum "single" {
default "sr-cmn:segment-routing-transport-mpls"; description
description "Dataplane to be used."; "A single Adj-SID is associated
} with the adjacency and reflects
container bindings { the protection configuration.";
container mapping-server { }
if-feature mapping-server; enum "dual" {
list policy { description
key name; "Two Adj-SIDs will be associated
leaf name { with the adjacency if interface
type string; is protected. In this case
description one will be enforced with
"Name of the mapping policy."; backup flag set, the other
} will be enforced to backup flag unset.
container ipv4 { In case, protection is not configured,
list mapping-entry { a single Adj-SID will be advertised
key "prefix algorithm"; with backup flag unset.";
uses sr-cmn:ipv4-sid-cfg; }
}
description
"If set, the Adj-SID refers to an
adjacency being protected.";
}
description
"Defines the adjacency SID properties.";
}
description
"container for SR interface cfg.";
}
description
"Grouping for IGP interface cfg.";
}
description grouping msd-cfg {
"Mapping entries."; leaf node-msd {
} type uint8;
description description
"IPv4 mapping entries."; "Node MSD is the lowest MSD supported by the node.";
} }
container ipv6 { container link-msd {
list mapping-entry { list link-msds {
key "prefix algorithm"; key interface;
uses sr-cmn:ipv6-sid-cfg; leaf interface {
description type if:interface-ref;
"Mapping entries."; description
} "Name of the interface.";
description }
"IPv6 mapping entries."; leaf msd {
} type uint8;
description description
"Definition of mapping policy."; "SID depth of the interface associated with the link.";
} }
description description
"Configuration of mapping-server "List of link MSDs.";
local entries."; }
} description
container connected-prefix-sid-map { "Link MSD is a number represetns the particular link MSD value.";
container ipv4 { }
list ipv4-prefix-sid { description
key "prefix algorithm"; "MSD configuration grouping.";
uses sr-cmn:ipv4-sid-cfg; }
uses sr-cmn:last-hop-behavior;
description
"List of prefix SID
mapped to IPv4 local prefixes.";
}
description
"Parameters associated with IPv4 prefix SID";
}
container ipv6 {
list ipv6-prefix-sid {
key "prefix algorithm";
uses sr-cmn:ipv6-sid-cfg;
uses sr-cmn:last-hop-behavior;
description
"List of prefix SID
mapped to IPv6 local prefixes.";
}
description
"Parameters associated with IPv6 prefix SID";
}
description
"Prefix SID configuration.";
}
description
"List of bindings.";
}
container global-srgb {
uses sr-cmn:srgb-cfg;
description
"Global SRGB configuration.";
}
description
"segment routing global config.";
}
}
/* Operational states */ /* Cfg */
augment "/rt:routing-state" { augment "/rt:routing" {
description description
"This augments the operational states "This augments routing-instance
with segment-routing."; configuration with segment-routing.";
container segment-routing { container segment-routing {
uses sr-cmn:node-capabilities; leaf transport-type {
list label-blocks { type identityref {
leaf lower-bound { base sr-cmn:segment-routing-transport;
type uint32; }
description default "sr-cmn:segment-routing-transport-mpls";
"Lower bound of the label block."; description "Dataplane to be used.";
} }
leaf upper-bound { container msd {
type uint32; if-feature msd;
description uses msd-cfg;
"Upper bound of the label block."; description
} "MSD configuration.";
leaf size { }
type uint32; container bindings {
description container mapping-server {
"Number of indexes in the block."; if-feature mapping-server;
} list policy {
leaf free { key name;
type uint32; leaf name {
description type string;
"Number of indexes free in the block."; description
} "Name of the mapping policy.";
leaf used { }
type uint32; container ipv4 {
description list mapping-entry {
"Number of indexes used in the block."; key "prefix algorithm";
} uses sr-cmn:ipv4-sid-cfg;
description
"List of labels blocks currently
in use.";
} description
"Mapping entries.";
}
description
"IPv4 mapping entries.";
}
container ipv6 {
list mapping-entry {
key "prefix algorithm";
uses sr-cmn:ipv6-sid-cfg;
description
"Mapping entries.";
}
description
"IPv6 mapping entries.";
}
description
"Definition of mapping policy.";
}
description
"Configuration of mapping-server
local entries.";
}
container connected-prefix-sid-map {
container ipv4 {
list ipv4-prefix-sid {
key "prefix algorithm";
uses sr-cmn:ipv4-sid-cfg;
uses sr-cmn:last-hop-behavior;
description
"List of prefix SID
mapped to IPv4 local prefixes.";
}
description
"Parameters associated with IPv4 prefix SID";
}
container ipv6 {
list ipv6-prefix-sid {
key "prefix algorithm";
uses sr-cmn:ipv6-sid-cfg;
uses sr-cmn:last-hop-behavior;
description
"List of prefix SID
mapped to IPv6 local prefixes.";
}
description
"Parameters associated with IPv6 prefix SID";
}
description
"Prefix SID configuration.";
}
description
"List of bindings.";
}
container global-srgb {
uses sr-cmn:srgb-cfg;
description
"Global SRGB configuration.";
}
description
"segment routing global config.";
}
}
container global-sid-list { /* Operational states */
list sid {
key "target sid source source-protocol binding-type";
ordered-by system;
leaf target {
type string;
description
"Defines the target of the binding.
It can be a prefix or something else.";
}
leaf sid {
type uint32;
description
"Index associated with the prefix.";
}
leaf algorithm {
type uint8;
description
"Algorithm to be used for the prefix
SID.";
}
leaf source {
type inet:ip-address;
description
"IP address of the router than own
the binding.";
}
leaf used {
type boolean;
description
"Defines if the binding is used
in forwarding plane.";
}
leaf source-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Rtg protocol that owns the binding";
}
leaf binding-type {
type enumeration {
enum prefix-sid {
description
"Binding is learned from
a prefix SID.";
}
enum binding-tlv {
description
"Binding is learned from
a binding TLV.";
}
}
description
"Type of binding.";
}
description
"Binding.";
} augment "/rt:routing-state" {
description description
"List of prefix and SID associations."; "This augments the operational states
} with segment-routing.";
description container segment-routing {
"Segment routing operational states."; uses sr-cmn:node-capabilities;
} container msd {
} uses msd-cfg;
description
"MSD configuration state.";
}
list label-blocks {
leaf lower-bound {
type uint32;
description
"Lower bound of the label block.";
}
leaf upper-bound {
type uint32;
description
"Upper bound of the label block.";
}
leaf size {
type uint32;
description
"Number of indexes in the block.";
}
leaf free {
type uint32;
description
"Number of indexes free in the block.";
}
leaf used {
type uint32;
description
"Number of indexes used in the block.";
}
description
"List of labels blocks currently
in use.";
}
/* Notifications */ container global-sid-list {
list sid {
key "target sid source source-protocol binding-type";
ordered-by system;
leaf target {
type string;
description
"Defines the target of the binding.
It can be a prefix or something else.";
}
leaf sid {
type uint32;
description
"Index associated with the prefix.";
}
leaf algorithm {
type uint8;
description
"Algorithm to be used for the prefix
SID.";
}
leaf source {
type inet:ip-address;
description
"IP address of the router than own
the binding.";
}
leaf used {
type boolean;
description
"Defines if the binding is used
in forwarding plane.";
}
leaf source-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Rtg protocol that owns the binding";
}
leaf binding-type {
type enumeration {
enum prefix-sid {
description
"Binding is learned from
a prefix SID.";
}
enum binding-tlv {
description
"Binding is learned from
a binding TLV.";
}
}
description
"Type of binding.";
}
description
"Binding.";
notification segment-routing-global-srgb-collision { }
list srgb-collisions { description
leaf lower-bound { "List of prefix and SID associations.";
type uint32; }
description description
"Lower value in the block."; "Segment routing operational states.";
} }
leaf upper-bound { }
type uint32;
description /* Notifications */
"Upper value in the block.";
} notification segment-routing-global-srgb-collision {
leaf routing-protocol { list srgb-collisions {
type leafref { leaf lower-bound {
path "/rt:routing-state/rt:control-plane-protocols/" type uint32;
+ "rt:control-plane-protocol/rt:name"; description
} "Lower value in the block.";
description }
"Routing protocol reference that received the event."; leaf upper-bound {
} type uint32;
leaf originating-rtr-id { description
type router-id; "Upper value in the block.";
description }
"Originating router id of this SRGB block."; leaf routing-protocol {
} type leafref {
description path "/rt:routing-state/rt:control-plane-protocols/"
"List of SRGB blocks that conflict."; + "rt:control-plane-protocol/rt:name";
} }
description description
"This notification is sent when received SRGB blocks from
a router conflict.";
}
notification segment-routing-global-sid-collision {
leaf received-target {
type string;
description
"Target received in the controlplane that
caused SID collision.";
}
leaf new-sid-rtr-id {
type router-id;
description
"Router Id that advertising the conflicting SID.";
}
leaf original-target {
type string;
description
"Target already available in database that have the same SID
as the received target.";
}
leaf original-sid-rtr-id {
type router-id;
description
"Original router ID that advertised the conflicting SID.";
}
leaf index {
type uint32;
description
"Value of the index used by two different prefixes.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Routing protocol reference that received the event.";
}
description
"This notification is sent when a new mapping is learned
, containing mapping
where the SID is already used.
The notification generation must be throttled with at least
a 5 second gap. ";
}
notification segment-routing-index-out-of-range {
leaf received-target {
type string;
description
"Target received in the controlplane
that caused SID collision.";
}
leaf received-index {
type uint32;
description
"Value of the index received.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/" +
"rt:control-plane-protocol/rt:name";
}
description
"Routing protocol reference that received the event."; "Routing protocol reference that received the event.";
} }
description leaf originating-rtr-id {
"This notification is sent when a binding type router-id;
is received, containing a segment index description
which is out of the local configured ranges. "Originating router id of this SRGB block.";
The notification generation must be throttled with at least }
a 5 second gap. "; 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 {
leaf received-target {
type string;
description
"Target received in the controlplane that
caused SID collision.";
}
leaf new-sid-rtr-id {
type router-id;
description
"Router Id that advertising the conflicting SID.";
}
leaf original-target {
type string;
description
"Target already available in database that have the same SID
as the received target.";
} }
<CODE ENDS> leaf original-sid-rtr-id {
type router-id;
description
"Original router ID that advertised the conflicting SID.";
}
leaf index {
type uint32;
description
"Value of the index used by two different prefixes.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Routing protocol reference that received the event.";
}
description
"This notification is sent when a new mapping is learned
, containing mapping
where the SID is already used.
The notification generation must be throttled with at least
a 5 second gap. ";
}
notification segment-routing-index-out-of-range {
leaf received-target {
type string;
description
"Target received in the controlplane
that caused SID collision.";
}
leaf received-index {
type uint32;
description
"Value of the index received.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing-state/rt:control-plane-protocols/" +
"rt:control-plane-protocol/rt:name";
}
description
"Routing protocol reference that received the event.";
}
description
"This notification is sent when a binding
is received, containing a segment index
which is out of the local configured ranges.
The notification generation must be throttled with at least
a 5 second gap. ";
}
}
<CODE ENDS>
8. Security Considerations 8. Security Considerations
TBD. TBD.
9. Acknowledgements 9. Acknowledgements
Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins, Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins,
Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge for their Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge for their
contributions. contributions.
skipping to change at page 25, line 16 skipping to change at page 26, line 33
TBD. TBD.
11. Normative References 11. Normative References
[I-D.ietf-spring-segment-routing] [I-D.ietf-spring-segment-routing]
Filsfils, C., Previdi, S., Decraene, B., Litkowski, S., Filsfils, C., Previdi, S., Decraene, B., Litkowski, S.,
and R. Shakir, "Segment Routing Architecture", draft-ietf- and R. Shakir, "Segment Routing Architecture", draft-ietf-
spring-segment-routing-09 (work in progress), July 2016. spring-segment-routing-09 (work in progress), July 2016.
[I-D.tantsura-isis-segment-routing-msd]
Tantsura, J. and U. Chunduri, "Signaling MSD (Maximum SID
Depth) using IS-IS", draft-tantsura-isis-segment-routing-
msd-02 (work in progress), September 2016.
[I-D.tantsura-ospf-segment-routing-msd]
Tantsura, J. and U. Chunduri, "Signaling MSD (Maximum SID
Depth) using OSPF", draft-tantsura-ospf-segment-routing-
msd-01 (work in progress), September 2016.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the
Network Configuration Protocol (NETCONF)", RFC 6020, Network Configuration Protocol (NETCONF)", RFC 6020,
October 2010. October 2010.
[RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language",
RFC 7950, August 2016. RFC 7950, August 2016.
skipping to change at page 25, line 39 skipping to change at page 27, line 18
Orange Business Service Orange Business Service
Email: stephane.litkowski@orange.com Email: stephane.litkowski@orange.com
Yingzhen Qu Yingzhen Qu
Cisco Systems Cisco Systems
Email: yiqu@cisco.com Email: yiqu@cisco.com
Pushpasis Sarkar Pushpasis Sarkar
Juniper Networks Individual
Email: psarkar@juniper.net Email: pushpasis.ietf@gmail.com
Jeff Tantsura Jeff Tantsura
Individual Individual
Email: jefftant.ietf@gmail.com Email: jefftant.ietf@gmail.com
 End of changes. 80 change blocks. 
732 lines changed or deleted 806 lines changed or added

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