< draft-ietf-spring-sr-yang-23.txt   draft-ietf-spring-sr-yang-24.txt >
SPRING Working Group S. Litkowski SPRING Working Group S. Litkowski
Internet-Draft Cisco Systems Internet-Draft Cisco Systems
Intended status: Standards Track Y. Qu Intended status: Standards Track Y. Qu
Expires: May 20, 2021 Futurewei Expires: May 28, 2021 Futurewei
A. Lindem A. Lindem
Cisco Systems Cisco Systems
P. Sarkar P. Sarkar
Individual Individual
J. Tantsura J. Tantsura
Apstra Apstra
November 16, 2020 November 24, 2020
YANG Data Model for Segment Routing YANG Data Model for Segment Routing
draft-ietf-spring-sr-yang-23 draft-ietf-spring-sr-yang-24
Abstract Abstract
This document defines a YANG data model for segment routing This document defines a YANG data model for segment routing
configuration and operation, which is to be augmented by different configuration and operation, which is to be augmented by different
segment routing data planes. The document also defines a YANG model segment routing data planes. The document also defines a YANG model
that is intended to be used on network elements to configure or that is intended to be used on network elements to configure or
operate segment routing MPLS data plane, as well as some generic operate segment routing MPLS data plane, as well as some generic
containers to be reused by IGP protocol modules to support segment containers to be reused by IGP protocol modules to support segment
routing. routing.
skipping to change at page 1, line 43 skipping to change at page 1, line 43
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 https://datatracker.ietf.org/drafts/current/. Drafts is at https://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 May 20, 2021. This Internet-Draft will expire on May 28, 2021.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 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
(https://trustee.ietf.org/license-info) in effect on the date of (https://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 35 skipping to change at page 2, line 35
5.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7 5.1.1. Adjacency SID properties . . . . . . . . . . . . . . 7
5.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7 5.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 7
5.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 8 5.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 8
6. State Data . . . . . . . . . . . . . . . . . . . . . . . . . 8 6. State Data . . . . . . . . . . . . . . . . . . . . . . . . . 8
7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8
8. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 8 8. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 8
8.1. YANG Module for Segment Routing . . . . . . . . . . . . . 9 8.1. YANG Module for Segment Routing . . . . . . . . . . . . . 9
8.2. YANG Module for Segment Routing Common Types . . . . . . 10 8.2. YANG Module for Segment Routing Common Types . . . . . . 10
8.3. YANG Module for Segment Routing MPLS . . . . . . . . . . 16 8.3. YANG Module for Segment Routing MPLS . . . . . . . . . . 16
9. Security Considerations . . . . . . . . . . . . . . . . . . . 28 9. Security Considerations . . . . . . . . . . . . . . . . . . . 28
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 29
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 29 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
12.1. Normative References . . . . . . . . . . . . . . . . . . 29 12.1. Normative References . . . . . . . . . . . . . . . . . . 30
12.2. Informative References . . . . . . . . . . . . . . . . . 32 12.2. Informative References . . . . . . . . . . . . . . . . . 32
Appendix A. Configuration example . . . . . . . . . . . . . . . 32 Appendix A. Configuration examples . . . . . . . . . . . . . . . 32
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 A.1. SR MPLS with IPv4 . . . . . . . . . . . . . . . . . . . . 32
A.2. SR MPLS with IPv6 . . . . . . . . . . . . . . . . . . . . 35
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38
1. Introduction 1. Introduction
This document defines a YANG data model [RFC7950] for segment routing This document defines a YANG data model [RFC7950] for segment routing
[RFC8402] configuration and operation. The document also defines a [RFC8402] configuration and operation. The document also defines a
YANG model that is intended to be used on network elements to YANG model that is intended to be used on network elements to
configure or operate segment routing MPLS data plane [RFC8660]. This configure or operate segment routing MPLS data plane [RFC8660]. This
document does not define the IGP extensions to support segment document does not define the IGP extensions to support segment
routing but defines generic groupings that SHOULD be reused by IGP routing but defines generic groupings that SHOULD be reused by IGP
extension modules. The reason of this design choice is to not extension modules. The reason of this design choice is to not
skipping to change at page 4, line 16 skipping to change at page 4, line 19
augment /rt:routing: augment /rt:routing:
+--rw segment-routing +--rw segment-routing
module: ietf-segment-routing-mpls module: ietf-segment-routing-mpls
augment /rt:routing/sr:segment-routing: augment /rt:routing/sr:segment-routing:
+--rw sr-mpls +--rw sr-mpls
+--ro node-capabilities +--ro node-capabilities
| +--ro entropy-readable-label-depth? uint8 | +--ro entropy-readable-label-depth? uint8
+--rw msd {max-sid-depth}? +--rw msd {max-sid-depth}?
| +--rw node-msd? uint8 | +--rw node-msd? uint8
| +--rw link-msd | +--rw link-msds
| +--rw link-msds* [interface] | +--rw link-msds* [interface]
| +--rw interface if:interface-ref | +--rw interface if:interface-ref
| +--rw msd? uint8 | +--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 entries | | +--rw entries
| | +--rw mapping-entry* [prefix algorithm] | | +--rw mapping-entry* [prefix algorithm]
| | +--rw prefix inet:ip-prefix | | +--rw prefix inet:ip-prefix
skipping to change at page 5, line 33 skipping to change at page 5, line 36
+--ro scope? enumeration +--ro scope? enumeration
notifications: notifications:
+---n segment-routing-global-srgb-collision +---n segment-routing-global-srgb-collision
| +--ro srgb-collisions* [] | +--ro srgb-collisions* []
| +--ro lower-bound? uint32 | +--ro lower-bound? uint32
| +--ro upper-bound? uint32 | +--ro upper-bound? uint32
| +--ro routing-protocol? -> /rt:routing | +--ro routing-protocol? -> /rt:routing
| /control-plane-protocols | /control-plane-protocols
| /control-plane-protocol/name | /control-plane-protocol/name
| +--ro originating-rtr-id? router-id | +--ro originating-rtr-id? router-or-system-id
+---n segment-routing-global-sid-collision +---n segment-routing-global-sid-collision
| +--ro received-target? string | +--ro received-target? string
| +--ro new-sid-rtr-id? router-id | +--ro new-sid-rtr-id? router-or-system-id
| +--ro original-target? string | +--ro original-target? string
| +--ro original-sid-rtr-id? router-id | +--ro original-sid-rtr-id? router-or-system-id
| +--ro index? uint32 | +--ro index? uint32
| +--ro routing-protocol? -> /rt:routing | +--ro routing-protocol? -> /rt:routing
| /control-plane-protocols | /control-plane-protocols
| /control-plane-protocol/name | /control-plane-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? -> /rt:routing +--ro routing-protocol? -> /rt:routing
/control-plane-protocols /control-plane-protocols
/control-plane-protocol/name /control-plane-protocol/name
skipping to change at page 9, line 11 skipping to change at page 9, line 11
but are referenced in the ietf-segment-routing-common.yang and/or but are referenced in the ietf-segment-routing-common.yang and/or
ietf-segment-routing.yang module: [RFC6991], [RFC8294], [RFC8476], ietf-segment-routing.yang module: [RFC6991], [RFC8294], [RFC8476],
[RFC8491], [RFC8665], and [RFC8667]. [RFC8491], [RFC8665], and [RFC8667].
8.1. YANG Module for Segment Routing 8.1. YANG Module for Segment Routing
ietf-segment-routing.yang: This module defines a generic framework ietf-segment-routing.yang: This module defines a generic framework
for Segment Routing, and it is to be augmented by models for for Segment Routing, and it is to be augmented by models for
different SR data planes. different SR data planes.
<CODE BEGINS> file "ietf-segment-routing@2020-11-16.yang" <CODE BEGINS> file "ietf-segment-routing@2020-11-24.yang"
module ietf-segment-routing { module ietf-segment-routing {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing"; namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing";
prefix sr; prefix sr;
import ietf-routing { import ietf-routing {
prefix rt; prefix rt;
reference "RFC 8349: A YANG Data Model for Routing reference "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)"; Management (NMDA Version)";
} }
skipping to change at page 10, line 19 skipping to change at page 10, line 19
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices. see the RFC itself for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as 'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here."; they appear in all capitals, as shown here.";
reference "RFC XXXX"; reference "RFC XXXX: YANG Data Model for Segment Routing.";
revision 2020-11-16 { revision 2020-11-24 {
description description
"Initial Version"; "Initial Version";
reference "RFC XXXX: YANG Data Model for Segment Routing."; reference "RFC XXXX: YANG Data Model for Segment Routing.";
} }
augment "/rt:routing" { augment "/rt:routing" {
description description
"This module augments routing data model (RFC 8349) "This module augments routing data model (RFC 8349)
with Segment Routing (SR)."; with Segment Routing (SR).";
container segment-routing { container segment-routing {
skipping to change at page 10, line 47 skipping to change at page 10, line 47
} }
} }
} }
<CODE ENDS> <CODE ENDS>
8.2. YANG Module for Segment Routing Common Types 8.2. YANG Module for Segment Routing Common Types
ietf-segment-routing-common.yang: This module defines a collection of ietf-segment-routing-common.yang: This module defines a collection of
generic types and groupings for SR as defined in [RFC8402]. generic types and groupings for SR as defined in [RFC8402].
<CODE BEGINS> file "ietf-segment-routing-common@2020-08-17.yang" <CODE BEGINS> file "ietf-segment-routing-common@2020-11-24.yang"
module ietf-segment-routing-common { module ietf-segment-routing-common {
yang-version 1.1; yang-version 1.1;
namespace namespace
"urn:ietf:params:xml:ns:yang:ietf-segment-routing-common"; "urn:ietf:params:xml:ns:yang:ietf-segment-routing-common";
prefix sr-cmn; prefix sr-cmn;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference "RFC 6991: Common YANG Data Types"; reference "RFC 6991: Common YANG Data Types";
} }
skipping to change at page 12, line 9 skipping to change at page 12, line 9
This version of this YANG module is part of RFC XXXX; This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices. see the RFC itself for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as 'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here."; they appear in all capitals, as shown here.";
reference "RFC XXXX"; reference "RFC XXXX: YANG Data Model for Segment Routing.";
revision 2020-11-16 { revision 2020-11-24 {
description description
"Initial version"; "Initial version";
reference "RFC XXXX: YANG Data Model for Segment Routing."; reference "RFC XXXX: YANG Data Model for Segment Routing.";
} }
feature sid-last-hop-behavior { feature sid-last-hop-behavior {
description description
"Configurable last hop behavior."; "Configurable last hop behavior.";
reference "RFC 8660: Segment Routing with the MPLS Data Plane"; reference "RFC 8660: Segment Routing with the MPLS Data Plane";
} }
skipping to change at page 13, line 7 skipping to change at page 13, line 7
"Grouping for SR Label Range configuration."; "Grouping for SR Label Range configuration.";
leaf lower-bound { leaf lower-bound {
type uint32; type uint32;
description description
"Lower value in the label range."; "Lower value in the label range.";
} }
leaf upper-bound { leaf upper-bound {
type uint32; type uint32;
must "../lower-bound < ../upper-bound" { must "../lower-bound < ../upper-bound" {
error-message error-message
"The upper-bound must be larger than the lower-bound."; "The upper-bound must be greater than the lower-bound.";
description description
"The value must be greater than 'lower-bound'."; "The value must be greater than 'lower-bound'.";
} }
description description
"Upper value in the label range."; "Upper value in the label range.";
} }
} }
grouping srgb { grouping srgb {
description description
skipping to change at page 16, line 20 skipping to change at page 16, line 20
description description
"Prefix-sid algorithm."; "Prefix-sid algorithm.";
} }
} }
} }
<CODE ENDS> <CODE ENDS>
8.3. YANG Module for Segment Routing MPLS 8.3. YANG Module for Segment Routing MPLS
ietf-segment-routing-mpls.yang: This module defines the configuration ietf-segment-routing-mpls.yang: This module defines the configuration
and operation states for Segment Routing MPLS data plane. and operational states for Segment Routing MPLS data plane.
<CODE BEGINS> file "ietf-segment-routing-mpls@2020-11-16.yang" <CODE BEGINS> file "ietf-segment-routing-mpls@2020-11-24.yang"
module ietf-segment-routing-mpls { module ietf-segment-routing-mpls {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"; namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls";
prefix sr-mpls; prefix sr-mpls;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference "RFC 6991: Common YANG Data Types"; reference "RFC 6991: Common YANG Data Types";
} }
import ietf-routing { import ietf-routing {
prefix rt; prefix rt;
reference "RFC 8349: A YANG Data Model for Routing reference "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)"; Management (NMDA Version)";
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
reference "RFC 8343: A YANG Data Model for Interface reference "RFC 8343: A YANG Data Model for Interface
Management (NMDA Version)"; Management (NMDA Version)";
} }
import ietf-routing-types { import ietf-routing-types {
prefix rt-types; prefix rt-types;
reference "RFC 8294: Common YANG Data Types for the reference "RFC 8294: Common YANG Data Types for the
Routing Area"; Routing Area";
} }
import ietf-segment-routing { import ietf-segment-routing {
prefix sr; prefix sr;
} reference "RFC XXXX: YANG Data Model for Segment Routing.";
import ietf-segment-routing-common { }
prefix sr-cmn; import ietf-segment-routing-common {
} prefix sr-cmn;
organization reference "RFC XXXX: YANG Data Model for Segment Routing.";
"IETF SPRING - SPRING Working Group"; }
contact
"WG Web: <http://tools.ietf.org/wg/spring/>
WG List: <mailto:spring@ietf.org>
Author: Stephane Litkowski organization
<mailto:slitkows.ietf@gmail.com> "IETF SPRING - SPRING Working Group";
Author: Yingzhen Qu contact
<mailto:yingzhen.qu@futurewei.com> "WG Web: <http://tools.ietf.org/wg/spring/>
Author: Acee Lindem WG List: <mailto:spring@ietf.org>
<mailto:acee@cisco.com>
Author: Pushpasis Sarkar
<mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
"; Author: Stephane Litkowski
description <mailto:slitkows.ietf@gmail.com>
"The YANG module defines a generic configuration model for Author: Yingzhen Qu
Segment Routing MPLS data plane. <mailto:yingzhen.qu@futurewei.com>
Author: Acee Lindem
<mailto:acee@cisco.com>
Author: Pushpasis Sarkar
<mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
This YANG model conforms to the Network Management ";
Datastore Architecture (NMDA) as described in RFC 8242. description
"The YANG module defines a generic configuration model for
Segment Routing MPLS data plane.
Copyright (c) 2020 IETF Trust and the persons identified as This YANG model conforms to the Network Management
authors of the code. All rights reserved. Datastore Architecture (NMDA) as described in RFC 8242.
Redistribution and use in source and binary forms, with or Copyright (c) 2020 IETF Trust and the persons identified as
without modification, is permitted pursuant to, and subject authors of the code. All rights reserved.
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; Redistribution and use in source and binary forms, with or
see the RFC itself for full legal notices. without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL This version of this YANG module is part of RFC XXXX;
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', see the RFC itself for full legal notices.
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.";
reference "RFC XXXX"; The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.";
revision 2020-11-16 { reference "RFC XXXX: YANG Data Model for Segment Routing.";
description revision 2020-11-24 {
"Initial Version"; description
reference "RFC XXXX: YANG Data Model for Segment Routing."; "Initial Version";
} reference "RFC XXXX: YANG Data Model for Segment Routing.";
}
feature mapping-server { feature mapping-server {
description description
"Support for Segment Routing Mapping Server (SRMS)."; "Support for Segment Routing Mapping Server (SRMS).";
reference "RFC 8661: Segment Routing MPLS Interworking reference "RFC 8661: Segment Routing MPLS Interworking
with LDP"; with LDP";
} }
feature protocol-srgb { feature protocol-srgb {
description description
"Support for per-protocol Segment Routing Global Block "Support for per-protocol Segment Routing Global Block
(SRGB) configuration."; (SRGB) configuration.";
reference "RFC 8660: Segment Routing with the MPLS reference "RFC 8660: Segment Routing with the MPLS
Data Plane"; Data Plane";
} }
feature max-sid-depth { feature max-sid-depth {
description description
"Support for signaling MSD (Maximum SID Depth) in IGP."; "Support for signaling MSD (Maximum SID Depth) in IGP.";
reference "RFC 8476: Signaling Maximum SID Depth (MSD) reference "RFC 8476: Signaling Maximum SID Depth (MSD)
Using OSPF Using OSPF
RFC 8491: Signaling Maximum SID Depth (MSD) RFC 8491: Signaling Maximum SID Depth (MSD)
Using IS-IS"; Using IS-IS";
} }
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}'; '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
}
description
"This type defines IS-IS system-id using pattern,
An example system-id is 0143.0438.AEF0";
} }
description
"This type defines IS-IS system-id using pattern,
An example system-id is 0143.0438.AEF0";
}
typedef router-id { typedef router-or-system-id {
type union { type union {
type system-id; type rt-types:router-id;
type rt-types:router-id; type system-id;
}
description
"OSPF/BGP router-id or ISIS system ID.";
} }
description
grouping sr-control-plane { "OSPF/BGP router-id or ISIS system ID.";
}
grouping sr-control-plane {
description
"Defines protocol configuration.";
container segment-routing {
description description
"Defines protocol configuration."; "Segment Routing global configuration.";
container segment-routing { leaf enabled {
type boolean;
default "false";
description description
"Segment Routing global configuration."; "Enables segment-routing protocol extensions.";
leaf enabled { }
type boolean; container bindings {
default "false"; if-feature mapping-server;
description description
"Enables segment-routing protocol extensions."; "Control of binding advertisement and reception.";
} container advertise {
container bindings {
if-feature mapping-server;
description description
"Control of binding advertisement and reception."; "Control advertisement of local mappings
container advertise { in binding TLVs.";
description leaf-list policies {
"Control advertisement of local mappings type leafref {
in binding TLVs."; path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls"
leaf-list policies { + "/sr-mpls:bindings/sr-mpls:mapping-server"
type leafref { + "/sr-mpls:policy/sr-mpls:name";
path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls"
+ "/sr-mpls:bindings/sr-mpls:mapping-server"
+ "/sr-mpls:policy/sr-mpls:name";
}
description
"List of binding advertisement policies.";
}
} }
leaf receive {
type boolean;
default "true";
description description
"Allow the reception and usage of binding TLVs."; "List of binding advertisement policies.";
} }
} }
leaf receive {
type boolean;
default "true";
description
"Allow the reception and usage of binding TLVs.";
}
} }
} }
}
grouping igp-interface { grouping igp-interface {
description
"Grouping for IGP interface configuration.";
container segment-routing {
description description
"Grouping for IGP interface configuration."; "Container for SR interface configuration.";
container segment-routing { container adjacency-sid {
description description
"Container for SR interface configuration."; "Adjacency SID configuration.";
container adjacency-sid { reference "RFC 8660: Segment Routing with the MPLS
description Data Plane";
"Adjacency SID configuration."; list adj-sids {
reference "RFC 8660: Segment Routing with the MPLS key "value";
Data Plane"; uses sr-cmn:sid-value-type;
list adj-sids { leaf value {
key "value"; type uint32;
uses sr-cmn:sid-value-type;
leaf value {
type uint32;
description
"Value of the Adj-SID.";
}
leaf protected {
type boolean;
default false;
description
"It is used to protect the manual adj-SID.";
}
leaf weight {
type uint8;
description
"The load-balancing factor over parallel adjacencies.";
reference "RFC 8402: Segment Routing Architecture
RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment
Routing";
}
description description
"List of adj-sid configuration."; "Value of the Adj-SID.";
} }
list advertise-adj-group-sid { leaf protected {
key "group-id"; type boolean;
default false;
description description
"Control advertisement of S flag. Enable advertisement "It is used to protect the manual adj-SID, e.g. using
of a common Adj-SID for parallel links."; IPFRR or MPLS-FRR.";
leaf group-id { }
type uint32; leaf weight {
type uint8;
description
"The load-balancing factor over parallel adjacencies.";
reference "RFC 8402: Segment Routing Architecture
RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment
Routing";
}
description
"List of adj-sid configuration.";
}
list advertise-adj-group-sid {
key "group-id";
description
"Control advertisement of S or G flag. Enable advertisement
of a common Adj-SID for parallel links.";
reference "RFC 8665: OSPF Extensions for Segment Routing
Section 6.1
RFC 8667: IS-IS Extensions for Segment
Routing Section 2.2.1";
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.";
}
}
leaf advertise-protection {
type enumeration {
enum "single" {
description description
"The value is an internal value to identify a "A single Adj-SID is associated with the adjacency
group-ID. Interfaces with the same group-ID will be and reflects the protection configuration.";
bundled together.";
} }
} enum "dual" {
leaf advertise-protection { description
type enumeration { "Two Adj-SIDs will be associated with the adjacency
enum "single" { if the interface is protected. In this case, will
description be advertised with backup flag set, the other will
"A single Adj-SID is associated with the adjacency be advertised with the backup flag clear. In case
and reflects the protection configuration."; protection is not configured, single Adj-SID will
} be advertised with the backup flag clear.";
enum "dual" {
description
"Two Adj-SIDs will be associated with the adjacency
if the interface is protected. In this case, will
be advertised with backup flag set, the other will
be advertised with the backup flag clear. In case
protection is not configured, single Adj-SID will
be advertised with the backup flag clear.";
}
} }
description
"If set, the Adj-SID refers to a protected adjacency.";
} }
description
"If set, the Adj-SID refers to a protected adjacency.";
reference "RFC 8665: OSPF Extensions for Segment Routing
Section 6.1
RFC 8667: IS-IS Extensions for Segment
Routing Section 2.2.1";
} }
} }
} }
}
grouping max-sid-depth { grouping max-sid-depth {
description
"Maximum SID Depth (MSD)D configuration grouping.";
leaf node-msd {
type uint8;
description description
"Maximum SID Depth (MSD)D configuration grouping."; "Node MSD is the lowest MSD supported by the node.";
leaf node-msd { }
type uint8; container link-msds {
description description
"Node MSD is the lowest MSD supported by the node."; "MSD supported by an individual interface.";
} list link-msds {
container link-msd { key "interface";
description description
"MSD supported by an individual interface."; "List of link MSDs.";
list link-msds { leaf interface {
key "interface"; type if:interface-ref;
description description
"List of link MSDs."; "Reference to device interface.";
leaf interface { }
type if:interface-ref; leaf msd {
description type uint8;
"Reference to device interface."; description
} "MSD supported by the interface.";
leaf msd {
type uint8;
description
"MSD supported by the interface.";
}
} }
} }
} }
}
augment "/rt:routing/sr:segment-routing" { augment "/rt:routing/sr:segment-routing" {
description
"This augments routing data model (RFC 8349)
with Segment Routing (SR).";
container sr-mpls {
description description
"This augments routing data model (RFC 8349) "Segment Routing global configuration.";
with Segment Routing (SR)."; uses sr-cmn:node-capabilities;
container sr-mpls { container msd {
if-feature "max-sid-depth";
description description
"Segment Routing global configuration."; "MSD configuration.";
uses sr-cmn:node-capabilities; uses max-sid-depth;
container msd { }
if-feature "max-sid-depth"; container bindings {
description description
"MSD configuration."; "List of bindings.";
uses max-sid-depth; container mapping-server {
} if-feature "mapping-server";
container bindings {
description description
"List of bindings."; "Configuration of mapping-server local entries.";
container mapping-server { list policy {
if-feature "mapping-server"; key "name";
description description
"Configuration of mapping-server local entries."; "List mapping-server policies.";
list policy { leaf name {
key "name"; type string;
description description
"List mapping-server policies."; "Name of the mapping policy.";
leaf name { }
type string; container entries {
description description
"Name of the mapping policy."; "IPv4/IPv6 mapping entries.";
} list mapping-entry {
container entries { key "prefix algorithm";
description description
"IPv4/IPv6 mapping entries."; "Mapping entries.";
list mapping-entry { uses sr-cmn:prefix-sid;
key "prefix algorithm";
description
"Mapping entries.";
uses sr-cmn:prefix-sid;
}
} }
} }
} }
container connected-prefix-sid-map { }
container connected-prefix-sid-map {
description
"Prefix SID configuration.";
list connected-prefix-sid {
key "prefix algorithm";
description description
"Prefix SID configuration."; "List of prefix SID mapped to IPv4/IPv6
list connected-prefix-sid { local prefixes.";
key "prefix algorithm"; uses sr-cmn:prefix-sid;
description uses sr-cmn:last-hop-behavior;
"List of prefix SID mapped to IPv4/IPv6
local prefixes.";
uses sr-cmn:prefix-sid;
uses sr-cmn:last-hop-behavior;
}
} }
container local-prefix-sid { }
container local-prefix-sid {
description
"Local sid configuration.";
list local-prefix-sid {
key "prefix algorithm";
description description
"Local sid configuration."; "List of local IPv4/IPv6 prefix-sids.";
list local-prefix-sid { uses sr-cmn:prefix-sid;
key "prefix algorithm";
description
"List of local IPv4/IPv6 prefix-sids.";
uses sr-cmn:prefix-sid;
}
} }
} }
container global-srgb { }
container global-srgb {
description
"Global SRGB configuration.";
uses sr-cmn:srgb;
}
container srlb {
description
"Segment Routing Local Block (SRLB) configuration.";
uses sr-cmn:srlb;
}
list label-blocks {
config false;
description
"List of label blocks currently in use.";
leaf lower-bound {
type uint32;
description description
"Global SRGB configuration."; "Lower bound of the label block.";
uses sr-cmn:srgb;
} }
container srlb { leaf upper-bound {
type uint32;
description description
"Segment Routing Local Block (SRLB) configuration."; "Upper bound of the label block.";
uses sr-cmn:srlb;
} }
leaf size {
list label-blocks { type uint32;
config false;
description description
"List of label blocks currently in use."; "Number of indexes in the block.";
leaf lower-bound { }
type uint32; leaf free {
type uint32;
description
"Number of free indexes in the block.";
}
leaf used {
type uint32;
description
"Number of indexes in use in the block.";
}
leaf scope {
type enumeration {
enum "global" {
description
"Global SID.";
}
enum "local" {
description
"Local SID.";
}
}
description
"Scope of this label block.";
}
}
container sid-db {
config false;
description
"List of prefix and SID associations.";
list sid {
key "target sid source source-protocol binding-type";
ordered-by system;
description
"SID Binding.";
leaf target {
type string;
description description
"Lower bound of the label block."; "Defines the target of the binding. It can be a
prefix or something else.";
} }
leaf upper-bound { leaf sid {
type uint32; type uint32;
description description
"Upper bound of the label block."; "Index associated with the prefix.";
} }
leaf size { leaf algorithm {
type uint32; type uint8;
description description
"Number of indexes in the block."; "Algorithm to be used for the prefix SID.";
reference "RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment
Routing";
} }
leaf free { leaf source {
type uint32; type inet:ip-address;
description description
"Number of free indexes in the block."; "IP address of the router that owns the binding.";
} }
leaf used { leaf used {
type uint32; type boolean;
description description
"Number of indexes in use in the block."; "Indicates if the binding is installed in the
forwarding plane.";
}
leaf source-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Routing 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.";
} }
leaf scope { leaf scope {
type enumeration { type enumeration {
enum "global" { enum "global" {
description description
"Global SID."; "Global SID.";
} }
enum "local" { enum "local" {
description description
"Local SID."; "Local SID.";
} }
} }
description description
"Scope of this label block."; "SID scoping.";
}
}
container sid-db {
config false;
description
"List of prefix and SID associations.";
list sid {
key "target sid source source-protocol binding-type";
ordered-by system;
description
"SID Binding.";
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.";
reference "RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment
Routing";
}
leaf source {
type inet:ip-address;
description
"IP address of the router that owns the binding.";
}
leaf used {
type boolean;
description
"Indicates if the binding is install in the
forwarding plane.";
}
leaf source-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Routing 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.";
}
leaf scope {
type enumeration {
enum "global" {
description
"Global SID.";
}
enum "local" {
description
"Local SID.";
}
}
description
"SID scoping.";
}
} }
} }
} }
} }
}
notification segment-routing-global-srgb-collision { notification segment-routing-global-srgb-collision {
description description
"This notification is sent when SRGB blocks received from "This notification is sent when SRGB blocks received from
routers conflict."; routers collide.";
list srgb-collisions { list srgb-collisions {
description
"List of SRGB blocks that conflict.";
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/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"Routing protocol reference for SRGB collision.";
}
leaf originating-rtr-id {
type router-id;
description
"Originating Router ID of this SRGB block.";
}
}
}
notification segment-routing-global-sid-collision {
description description
"This notification is sent when a new mapping is learned "List of SRGB blocks that collide.";
containing s mapping where the SID is already used. leaf lower-bound {
The notification generation must be throttled with at least type uint32;
a 5 second gap between notifications.";
leaf received-target {
type string;
description
"Target received in the router advertisement that caused
the SID collision.";
}
leaf new-sid-rtr-id {
type router-id;
description
"Router ID that advertised the conflicting SID.";
}
leaf original-target {
type string;
description
"Target already available in the database with the same SID
as the received target.";
}
leaf original-sid-rtr-id {
type router-id;
description description
"Router-ID for the router that originally advertised the "Lower value in the block.";
conflicting SID, i.e., the instance in the database.";
} }
leaf index { leaf upper-bound {
type uint32; type uint32;
description description
"Value of the index used by two different prefixes."; "Upper value in the block.";
} }
leaf routing-protocol { leaf routing-protocol {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name"; + "rt:control-plane-protocol/rt:name";
} }
description description
"Routing protocol reference for conflicting SID."; "Routing protocol reference for SRGB collision.";
} }
} leaf originating-rtr-id {
notification segment-routing-index-out-of-range { type router-or-system-id;
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 between
notifications.";
leaf received-target {
type string;
description description
"Target received in the router advertisement with "Originating Router ID of this SRGB block.";
the out-of-range index.";
} }
leaf received-index { }
type uint32; }
description notification segment-routing-global-sid-collision {
"Value of the index received."; description
"This notification is sent when a new mapping is learned
containing a mapping where the SID is already used.
The notification generation must be throttled with at least
a 5 second gap between notifications.";
leaf received-target {
type string;
description
"Target received in the router advertisement that caused
the SID collision.";
}
leaf new-sid-rtr-id {
type router-or-system-id;
description
"Router ID that advertised the colliding SID.";
}
leaf original-target {
type string;
description
"Target already available in the database with the same SID
as the received target.";
}
leaf original-sid-rtr-id {
type router-or-system-id;
description
"Router-ID for the router that originally advertised the
conlliding SID, i.e., the instance in the database.";
}
leaf index {
type uint32;
description
"Value of the index used by two different prefixes.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
} }
leaf routing-protocol { description
type leafref { "Routing protocol reference for colliding SID.";
path "/rt:routing/rt:control-plane-protocols/" }
+ "rt:control-plane-protocol/rt:name"; }
} notification segment-routing-index-out-of-range {
description description
"Routing protocol reference for out-of-range indexd."; "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 between
notifications.";
leaf received-target {
type string;
description
"Target received in the router advertisement with
the out-of-range index.";
}
leaf received-index {
type uint32;
description
"Value of the index received.";
}
leaf routing-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
} }
description
"Routing protocol reference for out-of-range indexd.";
} }
} }
<CODE ENDS> }
<CODE ENDS>
9. Security Considerations 9. Security Considerations
The YANG modules specified in this document define a schema for data The YANG modules specified in this document define a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
is the secure transport layer, and the mandatory-to-implement secure is the secure transport layer, and the mandatory-to-implement secure
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
is HTTPS, and the mandatory-to-implement secure transport is TLS is HTTPS, and the mandatory-to-implement secure transport is TLS
[RFC5246]. [RFC5246].
skipping to change at page 28, line 48 skipping to change at page 29, line 12
to these data nodes without proper protection can have a negative to these data nodes without proper protection can have a negative
effect on network operations. effect on network operations.
Some of the readable data nodes in the modules may be considered Some of the readable data nodes in the modules may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. notification) to these data nodes.
10. Acknowledgements 10. Acknowledgements
Authors would like to thank Derek Yeung, Greg Hankins, Hannes The authors would like to thank Derek Yeung, Greg Hankins, Hannes
Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge, Les Ginsberg for Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge, Les Ginsberg for
their contributions. their contributions.
Thanks to Ladislav Lhotka for his thorough reviews and helpful Thanks to Ladislav Lhotka and Tom Petch for their thorough reviews
comments. and helpful comments.
11. IANA Considerations 11. IANA Considerations
This document registers a URI in the IETF XML registry [RFC3688]. This document registers a URI in the IETF XML registry [RFC3688].
Following the format in [RFC3688], the following registration is Following the format in [RFC3688], the following registration is
requested to be made: requested to be made:
URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-commmon URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-commmon
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
skipping to change at page 29, line 34 skipping to change at page 29, line 45
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
This document registers a YANG module in the YANG Module Names This document registers a YANG module in the YANG Module Names
registry [RFC6020]. registry [RFC6020].
name: ietf-segment-routing-common name: ietf-segment-routing-common
namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common
prefix: sr-cmn prefix: sr-cmn
reference: RFC XXXX reference: RFC XXXX
name: ietf-segment-routing name: ietf-segment-routing-mpls
namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing
prefix: sr prefix: sr
reference: RFC XXXX reference: RFC XXXX
name: ietf-segment-routing name: ietf-segment-routing
namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls
prefix: sr-mpls prefix: sr-mpls
reference: RFC XXXX reference: RFC XXXX
12. References 12. References
12.1. Normative References 12.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
skipping to change at page 32, line 16 skipping to change at page 32, line 34
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
<https://www.rfc-editor.org/info/rfc8340>. <https://www.rfc-editor.org/info/rfc8340>.
[RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
"Handling Long Lines in Content of Internet-Drafts and "Handling Long Lines in Content of Internet-Drafts and
RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
<https://www.rfc-editor.org/info/rfc8792>. <https://www.rfc-editor.org/info/rfc8792>.
Appendix A. Configuration example Appendix A. Configuration examples
Note: '\' line wrapping per [RFC8792]. Note: '\' line wrapping per [RFC8792].
The following is an XML example using the SR MPLS YANG modules. A.1. SR MPLS with IPv4
The following is an XML example using the SR MPLS YANG modules with
IPv4 addresses.
<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"> <routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<segment-routing <segment-routing
xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing"> xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing">
<sr-mpls <sr-mpls
xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"> xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls">
<msd> <msd>
<node-msd>5</node-msd> <node-msd>5</node-msd>
</msd> </msd>
<bindings> <bindings>
skipping to change at page 34, line 46 skipping to change at page 34, line 46
"algorithm": "ietf-segment-routing-common:\ "algorithm": "ietf-segment-routing-common:\
prefix-sid-algorithm-strict-spf", prefix-sid-algorithm-strict-spf",
"start-sid": 100, "start-sid": 100,
"range": 1, "range": 1,
"last-hop-behavior": "php" "last-hop-behavior": "php"
} }
] ]
} }
}, },
"global-srgb": { "global-srgb": {
"srgb": [
{
"lower-bound": 45000,
"upper-bound": 55000
}
]
}
}
}
}
}
A.2. SR MPLS with IPv6
The following is an XML example using the SR MPLS YANG modules with
IPv6 addresses.
<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<segment-routing
xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing">
<sr-mpls
xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls">
<msd>
<node-msd>5</node-msd>
</msd>
<bindings>
<mapping-server>
<policy>
<name>mapping 1</name>
<entries>
<mapping-entry>
<prefix>2001:db8:aaaa:bbbb::/64</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang\
:ietf-segment-routing-common">\
sr-cmn:prefix-sid-algorithm-shortest-path\
</algorithm>
<start-sid>200</start-sid>
<range>100</range>
</mapping-entry>
</entries>
</policy>
</mapping-server>
<connected-prefix-sid-map>
<connected-prefix-sid>
<prefix>2001:db8:aaaa:cccc::/64</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang:\
ietf-segment-routing-common">\
sr-cmn:prefix-sid-algorithm-strict-spf</algorithm>
<start-sid>100</start-sid>
<range>1</range>
<last-hop-behavior>php</last-hop-behavior>
</connected-prefix-sid>
</connected-prefix-sid-map>
</bindings>
<global-srgb>
<srgb>
<lower-bound>45000</lower-bound>
<upper-bound>55000</upper-bound>
</srgb>
</global-srgb>
</sr-mpls>
</segment-routing>
</routing>
The following is the same example using JSON format.
{
"ietf-routing:routing": {
"ietf-segment-routing:segment-routing": {
"ietf-segment-routing-mpls:sr-mpls": {
"msd": {
"node-msd": 5
},
"bindings": {
"mapping-server": {
"policy": [
{
"name": "mapping 1",
"entries": {
"mapping-entry": [
{
"prefix": "2001:db8:aaaa:bbbb::/64",
"algorithm": "ietf-segment-routing-common:\
prefix-sid-algorithm-shortest-path",
"start-sid": 200,
"range": 100
}
]
}
}
]
},
"connected-prefix-sid-map": {
"connected-prefix-sid": [
{
"prefix": "2001:db8:aaaa:cccc::/64",
"algorithm": "ietf-segment-routing-common:\
prefix-sid-algorithm-strict-spf",
"start-sid": 100,
"range": 1,
"last-hop-behavior": "php"
}
]
}
},
"global-srgb": {
"srgb": [ "srgb": [
{ {
"lower-bound": 45000, "lower-bound": 45000,
"upper-bound": 55000 "upper-bound": 55000
} }
] ]
} }
} }
} }
 End of changes. 108 change blocks. 
489 lines changed or deleted 608 lines changed or added

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