< draft-ietf-spring-sr-yang-15.txt   draft-ietf-spring-sr-yang-16.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: July 12, 2020 Futurewei Expires: January 10, 2021 Futurewei
A. Lindem A. Lindem
Cisco Systems Cisco Systems
P. Sarkar P. Sarkar
Individual Individual
J. Tantsura J. Tantsura
Apstra Apstra
January 9, 2020 July 9, 2020
YANG Data Model for Segment Routing YANG Data Model for Segment Routing
draft-ietf-spring-sr-yang-15 draft-ietf-spring-sr-yang-16
Abstract Abstract
This document defines a YANG data model ([RFC6020], [RFC7950]) for This document defines a YANG data model ([RFC6020], [RFC7950]) for
segment routing ([RFC8402]) configuration and operation. This YANG segment routing ([RFC8402]) configuration and operation. This YANG
model is intended to be used on network elements to configure or model is intended to be used on network elements to configure or
operate segment routing MPLS data plane [RFC8660]. This document operate segment routing MPLS data plane [RFC8660]. 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 42 skipping to change at page 1, line 42
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 July 12, 2020. This Internet-Draft will expire on January 10, 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 31 skipping to change at page 2, line 31
3. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 3. Design of the Data Model . . . . . . . . . . . . . . . . . . 3
4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5
5. IGP Control plane configuration . . . . . . . . . . . . . . . 6 5. IGP Control plane configuration . . . . . . . . . . . . . . . 6
5.1. IGP interface configuration . . . . . . . . . . . . . . . 7 5.1. IGP interface configuration . . . . . . . . . . . . . . . 7
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. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8 7. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 8
8. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 8. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8
9. Security Considerations . . . . . . . . . . . . . . . . . . . 26 9. Security Considerations . . . . . . . . . . . . . . . . . . . 27
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 27 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 28
12.1. Normative References . . . . . . . . . . . . . . . . . . 27 12.1. Normative References . . . . . . . . . . . . . . . . . . 28
12.2. Informative References . . . . . . . . . . . . . . . . . 29 12.2. Informative References . . . . . . . . . . . . . . . . . 30
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 Appendix A. Configuration example . . . . . . . . . . . . . . . 30
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32
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 48 skipping to change at page 3, line 48
3. Design of the Data Model 3. Design of the Data Model
Module ietf-segment-routing augments the routing container in the Module ietf-segment-routing augments the routing container in the
ietf-routing model [RFC8349], and defines generic segment routing ietf-routing model [RFC8349], and defines generic segment routing
configuration and operational state. This module is augmented by configuration and operational state. This module is augmented by
modules supporting different data planes. modules supporting different data planes.
Module ietf-segment-routing-mpls augments ietf-segment-routing, and Module ietf-segment-routing-mpls augments ietf-segment-routing, and
supports SR MPLS data plane configuration and operational state. supports SR MPLS data plane configuration and operational state.
module: ietf-segment-routing module: ietf-segment-routing
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-msd
| +--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
| | +--rw value-type? enumeration | | +--rw value-type? enumeration
| | +--rw start-sid uint32 | | +--rw start-sid uint32
| | +--rw range? uint32 | | +--rw range? uint32
| | +--rw algorithm identityref | | +--rw algorithm identityref
| +--rw connected-prefix-sid-map | +--rw connected-prefix-sid-map
| | +--rw connected-prefix-sid* [prefix algorithm] | | +--rw connected-prefix-sid* [prefix algorithm]
| | +--rw prefix inet:ip-prefix | | +--rw prefix inet:ip-prefix
| | +--rw value-type? enumeration | | +--rw value-type? enumeration
| | +--rw start-sid uint32 | | +--rw start-sid uint32
| | +--rw range? uint32 | | +--rw range? uint32
| | +--rw algorithm identityref | | +--rw algorithm identityref
| | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | | +--rw last-hop-behavior? enumeration
| +--rw local-prefix-sid | +--rw local-prefix-sid
| +--rw local-prefix-sid* [prefix algorithm] | +--rw local-prefix-sid* [prefix algorithm]
| +--rw prefix inet:ip-prefix | +--rw prefix inet:ip-prefix
| +--rw value-type? enumeration | +--rw value-type? enumeration
| +--rw start-sid uint32 | +--rw start-sid uint32
| +--rw range? uint32 | +--rw range? uint32
| +--rw algorithm identityref | +--rw algorithm identityref
+--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
+--rw srlb +--rw srlb
| +--rw srlb* [lower-bound upper-bound] | +--rw srlb* [lower-bound upper-bound]
| +--rw lower-bound uint32 | +--rw lower-bound uint32
| +--rw upper-bound uint32 | +--rw upper-bound uint32
+--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 scope? enumeration | +--ro scope? enumeration
+--ro sid-db +--ro sid-db
+--ro sid* [target sid source source-protocol binding-type] +--ro sid* [target sid source source-protocol binding-type]
+--ro target string +--ro target string
+--ro sid uint32 +--ro sid uint32
+--ro algorithm? uint8 +--ro algorithm? uint8
+--ro source inet:ip-address +--ro source inet:ip-address
+--ro used? boolean +--ro used? boolean
+--ro source-protocol -> /rt:routing +--ro source-protocol -> /rt:routing
/control-plane-protocols /control-plane-protocols
/control-plane-protocol/name /control-plane-protocol/name
+--ro binding-type enumeration +--ro binding-type enumeration
+--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-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-id
| +--ro original-target? string | +--ro original-target? string
| +--ro original-sid-rtr-id? router-id | +--ro original-sid-rtr-id? router-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
4. Configuration 4. Configuration
The module ietf-segment-routing-mpls augments the "/rt:routing/ The module ietf-segment-routing-mpls augments the "/rt:routing/
sr:segment-routing:" with a sr-mpls container. This container sr:segment-routing:" with a sr-mpls container. This container
defines all the configuration parameters related to segment-routing defines all the configuration parameters related to segment-routing
MPLS data plane. MPLS data plane.
The sr-mpls configuration is split in global configuration and The sr-mpls configuration is split in global configuration and
interface configuration. interface configuration.
skipping to change at page 8, line 51 skipping to change at page 8, line 51
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.
8. YANG Module 8. YANG Module
The following RFCs and drafts are not referenced in the document text The following RFCs and drafts are not referenced in the document text
but are referenced in the ietf-segment-rouuting-common.yang and/or but are referenced in the ietf-segment-rouuting-common.yang and/or
ietf-segment-routing.yang module: [RFC6991], [RFC8294], [RFC8476], ietf-segment-routing.yang module: [RFC6991], [RFC8294], [RFC8476],
and [RFC8491]. and [RFC8491].
<CODE BEGINS> file "ietf-segment-routing@2020-01-09.yang" <CODE BEGINS> file "ietf-segment-routing@2020-07-09.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
Management (NMDA Version)";
}
organization organization
"IETF SPRING - SPRING Working Group"; "IETF SPRING - SPRING Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/spring/> "WG Web: <http://tools.ietf.org/wg/spring/>
WG List: <mailto:spring@ietf.org> WG List: <mailto:spring@ietf.org>
Editor: Stephane Litkowski Editor: Stephane Litkowski
<mailto:slitkows.ietf@gmail.com> <mailto:slitkows.ietf@gmail.com>
Editor: Yingzhen Qu Editor: Yingzhen Qu
<mailto:yingzhen.qu@futurewei.com> <mailto:yingzhen.qu@futurewei.com>
Author: Acee Lindem Author: Acee Lindem
<mailto:acee@cisco.com> <mailto:acee@cisco.com>
Author: Pushpasis Sarkar Author: Pushpasis Sarkar
<mailto:pushpasis.ietf@gmail.com> <mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura Author: Jeff Tantsura
<jefftant.ietf@gmail.com> <jefftant.ietf@gmail.com>
"; ";
description description
"The YANG module defines a generic configuration model for "The YANG module defines a generic configuration model for
Segment Routing common across all of the vendor Segment Routing common across all of the vendor
implementations. It's to be augmented by different SR data implementations. It's to be augmented by different SR data
planes. planes.
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).
This version of this YANG module is part of RFC XXXX;
see the RFC itself for full legal notices.
reference "RFC XXXX"; The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
revision 2020-01-09 { NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
description 'MAY', and 'OPTIONAL' in this document are to be interpreted as
"Initial Version"; described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
reference "RFC XXXX: YANG Data Model for Segment Routing."; they appear in all capitals, as shown here.";
}
augment "/rt:routing" { reference "RFC XXXX";
description
"This augments routing data model (RFC 8349)
with Segment Routing (SR).";
container segment-routing {
description
"Segment Routing configuration. This container
is to be augmented by different SR data planes.";
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-segment-routing-common@2020-01-09.yang"
module ietf-segment-routing-common {
yang-version 1.1;
namespace
"urn:ietf:params:xml:ns:yang:ietf-segment-routing-common";
prefix sr-cmn;
import ietf-inet-types { revision 2020-07-09 {
prefix inet; description
} "Initial Version";
reference "RFC XXXX: YANG Data Model for Segment Routing.";
}
organization augment "/rt:routing" {
"IETF SPRING - SPRING Working Group"; description
"This module augments routing data model (RFC 8349)
with Segment Routing (SR).";
container segment-routing {
description
"Segment Routing configuration. This container
is to be augmented by different SR data planes.";
reference "RFC 8402: Segment Routing Architecture";
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-segment-routing-common@2020-07-09.yang"
module ietf-segment-routing-common {
yang-version 1.1;
namespace
"urn:ietf:params:xml:ns:yang:ietf-segment-routing-common";
prefix sr-cmn;
contact import ietf-inet-types {
"WG Web: <http://tools.ietf.org/wg/spring/> prefix inet;
WG List: <mailto:spring@ietf.org> reference "RFC 6991: Common YANG Data Types";
}
Editor: Stephane Litkowski organization
<mailto:slitkows.ietf@gmail.com> "IETF SPRING - SPRING Working Group";
Editor: Yingzhen Qu
<mailto:yingzhen.qu@futurewei.com>
Author: Acee Lindem contact
<mailto:acee@cisco.com> "WG Web: <http://tools.ietf.org/wg/spring/>
Author: Pushpasis Sarkar WG List: <mailto:spring@ietf.org>
<mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
"; Editor: Stephane Litkowski
description <mailto:slitkows.ietf@gmail.com>
"The YANG module defines a collection of generic types and Editor: Yingzhen Qu
grouping for Segment Routing (SR) as described in RFC 8402. <mailto:yingzhen.qu@futurewei.com>
Copyright (c) 2020 IETF Trust and the persons identified as Author: Acee Lindem
authors of the code. All rights reserved. <mailto:acee@cisco.com>
Author: Pushpasis Sarkar
<mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
Redistribution and use in source and binary forms, with or ";
without modification, is permitted pursuant to, and subject description
to the license terms contained in, the Simplified BSD License "The YANG module defines a collection of generic types and
set forth in Section 4.c of the IETF Trust's Legal Provisions grouping for Segment Routing (SR) as described in RFC 8402.
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; This YANG model conforms to the Network Management
see the RFC itself for full legal notices."; Datastore Architecture (NMDA) as described in RFC 8242.
reference "RFC XXXX"; Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
revision 2020-01-09 { Redistribution and use in source and binary forms, with or
description without modification, is permitted pursuant to, and subject
"Initial version"; to the license terms contained in, the Simplified BSD License
reference "RFC XXXX: YANG Data Model for Segment Routing."; set forth in Section 4.c of the IETF Trust's Legal Provisions
} Relating to IETF Documents
(http://trustee.ietf.org/license-info).
feature sid-last-hop-behavior { This version of this YANG module is part of RFC XXXX;
description see the RFC itself for full legal notices.
"Configurable last hop behavior.";
}
identity prefix-sid-algorithm { The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
description NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
"Base identity for prefix-sid algorithm."; '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.";
identity prefix-sid-algorithm-shortest-path { reference "RFC XXXX";
base prefix-sid-algorithm;
description
"Shortest Path First (SPF) prefix-sid algorithm. This
is the default algorthm.";
}
identity prefix-sid-algorithm-strict-spf { revision 2020-07-09 {
base prefix-sid-algorithm; description
description "Initial version";
"This algorithm mandates that the packet is forwarded reference "RFC XXXX: YANG Data Model for Segment Routing.";
according to ECMP-aware SPF algorithm."; }
feature sid-last-hop-behavior {
description
"Configurable last hop behavior.";
reference "RFC 8660: Segment Routing with the MPLS Data Plane";
}
} identity prefix-sid-algorithm {
description
"Base identity for prefix-sid algorithm.";
}
grouping srlr { identity prefix-sid-algorithm-shortest-path {
description base prefix-sid-algorithm;
"Grouping for SR Label Range configuration."; description
leaf lower-bound { "Shortest Path First (SPF) prefix-sid algorithm. This
type uint32; is the default algorithm.";
description }
"Lower value in the label range.";
}
leaf upper-bound {
type uint32;
must "../lower-bound < ../upper-bound" {
error-message
"The upper-bound must be larger than the lower-bound.";
description
"The value must be greater than 'lower-bound'.";
}
description
"Upper value in the label range.";
}
}
grouping srgb { identity prefix-sid-algorithm-strict-spf {
description base prefix-sid-algorithm;
"Grouping for SR Global Label range."; description
list srgb { "This algorithm mandates that the packet is forwarded
key "lower-bound upper-bound"; according to ECMP-aware SPF algorithm.";
ordered-by user; }
description
"List of global blocks to be advertised.";
uses srlr;
}
}
grouping srlb { grouping srlr {
description description
"Grouping for SR Local Block range."; "Grouping for SR Label Range configuration.";
list srlb { leaf lower-bound {
key "lower-bound upper-bound"; type uint32;
ordered-by user; description
description "Lower value in the label range.";
"List of SRLBs."; }
uses srlr; leaf upper-bound {
} type uint32;
} must "../lower-bound < ../upper-bound" {
error-message
"The upper-bound must be larger than the lower-bound.";
description
"The value must be greater than 'lower-bound'.";
}
description
"Upper value in the label range.";
}
}
grouping sid-value-type { grouping srgb {
description description
"Defines how the SID value is expressed."; "Grouping for SR Global Label range.";
leaf value-type { list srgb {
type enumeration { key "lower-bound upper-bound";
enum "index" { ordered-by user;
description description
"The value will be interpreted as an index."; "List of global blocks to be advertised.";
} uses srlr;
enum "absolute" { }
description }
"The value will become interpreted as an absolute
value.";
}
}
default "index";
description
"This leaf defines how value must be interpreted.";
}
}
grouping prefix-sid { grouping srlb {
description description
"This grouping defines cfg of prefix SID."; "Grouping for SR Local Block range.";
leaf prefix { list srlb {
type inet:ip-prefix; key "lower-bound upper-bound";
description ordered-by user;
"connected prefix sid."; description
} "List of SRLBs.";
uses prefix-sid-attributes; uses srlr;
} }
}
grouping ipv4-sid { grouping sid-value-type {
description description
"Grouping for an IPv4 prefix SID."; "Defines how the SID value is expressed.";
leaf prefix { leaf value-type {
type inet:ipv4-prefix; type enumeration {
description enum "index" {
"Connected IPv4 prefix sid."; description
} "The value will be interpreted as an index.";
uses prefix-sid-attributes; }
} enum "absolute" {
grouping ipv6-sid { description
description "The value will become interpreted as an absolute
"Grouping for an IPv6 prefix SID."; value.";
leaf prefix { }
type inet:ipv6-prefix; }
description default "index";
"Connected ipv6 prefix sid."; description
"This leaf defines how value must be interpreted.";
}
}
} grouping prefix-sid {
uses prefix-sid-attributes; description
} "This grouping defines cfg of prefix SID.";
leaf prefix {
type inet:ip-prefix;
description
"connected prefix sid.";
}
uses prefix-sid-attributes;
}
grouping last-hop-behavior { grouping ipv4-sid {
description description
"Defines last hop behavior"; "Grouping for an IPv4 prefix SID.";
leaf last-hop-behavior { leaf prefix {
if-feature "sid-last-hop-behavior"; type inet:ipv4-prefix;
type enumeration { description
enum "explicit-null" { "Connected IPv4 prefix sid.";
description }
"Use explicit-null for the SID."; uses prefix-sid-attributes;
} }
enum "no-php" { grouping ipv6-sid {
description description
"Do not use Penultimate Hop Popping (PHP) "Grouping for an IPv6 prefix SID.";
for the SID."; leaf prefix {
} type inet:ipv6-prefix;
enum "php" { description
description "Connected ipv6 prefix sid.";
"Use PHP for the SID."; }
} uses prefix-sid-attributes;
} }
description
"Configure last hop behavior.";
}
}
grouping node-capabilities { grouping last-hop-behavior {
description description
"Containing SR node capabilities."; "Defines last hop behavior";
container node-capabilities { leaf last-hop-behavior {
config false; if-feature "sid-last-hop-behavior";
description type enumeration {
"Shows the SR capability of the node."; enum "explicit-null" {
leaf entropy-readable-label-depth { description
type uint8; "Use explicit-null for the SID.";
description }
"Maximum label stack depth that a router can read."; enum "no-php" {
} description
} "Do not use Penultimate Hop Popping (PHP)
} for the SID.";
}
enum "php" {
description
"Use PHP for the SID.";
}
}
description
"Configure last hop behavior.";
}
}
grouping prefix-sid-attributes { grouping node-capabilities {
description description
"Grouping for Segment Routing (SR) prefix attributes."; "Containing SR node capabilities.";
uses sid-value-type; container node-capabilities {
leaf start-sid { config false;
type uint32; description
mandatory true; "Shows the SR capability of the node.";
description leaf entropy-readable-label-depth {
"Value associated with prefix. The value must be type uint8;
interpreted in the context of value-type."; description
} "Maximum label stack depth that a router can read.";
leaf range { }
type uint32; }
description }
"Indicates how many SIDs can be allocated.";
}
leaf algorithm {
type identityref {
base prefix-sid-algorithm;
}
description
"Prefix-sid algorithm.";
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-segment-routing-mpls@2020-01-09.yang"
module ietf-segment-routing-mpls {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls";
prefix sr-mpls;
import ietf-inet-types { grouping prefix-sid-attributes {
prefix inet; description
} "Grouping for Segment Routing (SR) prefix attributes.";
import ietf-routing { uses sid-value-type;
prefix rt; leaf start-sid {
} type uint32;
import ietf-interfaces { mandatory true;
prefix if; description
} "Value associated with prefix. The value must be
import ietf-routing-types { interpreted in the context of value-type.";
prefix rt-types; }
} leaf range {
import ietf-segment-routing { type uint32;
prefix sr; description
} "Indicates how many SIDs can be allocated.";
import ietf-segment-routing-common { }
prefix sr-cmn; leaf algorithm {
} type identityref {
base prefix-sid-algorithm;
}
description
"Prefix-sid algorithm.";
}
}
}
<CODE ENDS>
<CODE BEGINS> file "ietf-segment-routing-mpls@2020-07-09.yang"
module ietf-segment-routing-mpls {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls";
prefix sr-mpls;
organization import ietf-inet-types {
"IETF SPRING - SPRING Working Group"; prefix inet;
contact reference "RFC 6991: Common YANG Data Types";
"WG Web: <http://tools.ietf.org/wg/spring/> }
WG List: <mailto:spring@ietf.org> import ietf-routing {
prefix rt;
reference "RFC 8349: A YANG Data Model for Routing
Management (NMDA Version)";
}
import ietf-interfaces {
prefix if;
reference "RFC 8343: A YANG Data Model for Interface
Management (NMDA Version)";
}
import ietf-routing-types {
prefix rt-types;
reference "RFC 8294: Common YANG Data Types for the
Routing Area";
}
import ietf-segment-routing {
prefix sr;
}
import ietf-segment-routing-common {
prefix sr-cmn;
}
Editor: Stephane Litkowski organization
<mailto:slitkows.ietf@gmail.com> "IETF SPRING - SPRING Working Group";
Editor: Yingzhen Qu contact
<mailto:yingzhen.qu@futurewei.com> "WG Web: <http://tools.ietf.org/wg/spring/>
WG List: <mailto:spring@ietf.org>
Author: Acee Lindem Editor: Stephane Litkowski
<mailto:acee@cisco.com> <mailto:slitkows.ietf@gmail.com>
Author: Pushpasis Sarkar Editor: Yingzhen Qu
<mailto:pushpasis.ietf@gmail.com> <mailto:yingzhen.qu@futurewei.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
"; Author: Acee Lindem
description <mailto:acee@cisco.com>
"The YANG module defines a generic configuration model for Author: Pushpasis Sarkar
Segment Routing MPLS data plane. <mailto:pushpasis.ietf@gmail.com>
Author: Jeff Tantsura
<jefftant.ietf@gmail.com>
Copyright (c) 2020 IETF Trust and the persons identified as ";
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or description
without modification, is permitted pursuant to, and subject "The YANG module defines a generic configuration model for
to the license terms contained in, the Simplified BSD License Segment Routing MPLS data plane.
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; This YANG model conforms to the Network Management
see the RFC itself for full legal notices."; Datastore Architecture (NMDA) as described in RFC 8242.
reference "RFC XXXX"; Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
revision 2020-01-09 { Redistribution and use in source and binary forms, with or
description without modification, is permitted pursuant to, and subject
"Initial Version"; to the license terms contained in, the Simplified BSD License
reference "RFC XXXX: YANG Data Model for Segment Routing."; set forth in Section 4.c of the IETF Trust's Legal Provisions
} Relating to IETF Documents
(http://trustee.ietf.org/license-info).
feature mapping-server { This version of this YANG module is part of RFC XXXX;
description see the RFC itself for full legal notices.
"Support for Segment Routing Mapping Server (SRMS).";
}
feature protocol-srgb {
description
"Support for per-protocol Segment Routing Global Block
(SRGB) configuration.";
}
feature max-sid-depth { The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
description NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
"Support for signaling MSD (Maximum SID Depth) in IGP."; '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.";
typedef system-id { reference "RFC XXXX";
type string {
pattern
'[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";
}
typedef router-id { revision 2020-07-09 {
type union { description
type system-id; "Initial Version";
type rt-types:router-id; reference "RFC XXXX: YANG Data Model for Segment Routing.";
} }
description
"OSPF/BGP router-id or ISIS system ID.";
}
grouping sr-controlplane { feature mapping-server {
description description
"Defines protocol configuration."; "Support for Segment Routing Mapping Server (SRMS).";
container segment-routing { reference "RFC 8661: Segment Routing MPLS Interworking with LDP";
description }
"Segment Routing global configuration.";
leaf enabled {
type boolean;
default "false";
description
"Enables segment-routing protocol extensions.";
}
container bindings {
description
"Control of binding advertisement and reception.";
container advertise {
description
"Control advertisement of local mappings
in binding TLVs.";
leaf-list policies {
type string;
description
"List of binding advertisement policies.";
}
}
leaf receive {
type boolean;
default "true";
description
"Allow the reception and usage of binding TLVs.";
}
}
}
}
grouping igp-interface { feature protocol-srgb {
description description
"Grouping for IGP interface configuration."; "Support for per-protocol Segment Routing Global Block
container segment-routing { (SRGB) configuration.";
description reference "RFC 8660: Segment Routing with the MPLS Data Plane";
"Container for SR interface configuration."; }
container adjacency-sid {
description
"Adjacency SID configuration.";
list adj-sids {
key "value";
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 mannual adj-SID.";
}
description
"List of adj-sid configuration.";
}
list advertise-adj-group-sid {
key "group-id";
description
"Control advertisement of S flag. Enable advertisement
of a common Adj-SID for parallel links.";
leaf group-id { feature max-sid-depth {
type uint32; description
description "Support for signaling MSD (Maximum SID Depth) in IGP.";
"The value is an internal value to identify a reference "RFC 8476: Signaling Maximum SID Depth (MSD)
group-ID. Interfaces with the same group-ID will be Using OSPF
bundled together."; RFC 8491: Signaling Maximum SID Depth (MSD)
} Using IS-IS";
} }
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 the interface is protected. In this case, will
be advertised with backup flag set, the other will
be advertised with theo 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.";
}
}
}
}
grouping max-sid-depth { typedef system-id {
description type string {
"Maximum SID Depth (MSD)D configuration grouping."; pattern
leaf node-msd { '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
type uint8; }
description description
"Node MSD is the lowest MSD supported by the node."; "This type defines IS-IS system-id using pattern,
} An example system-id is 0143.0438.AEF0";
container link-msd { }
description
"MSD supported by an individual interface.";
list link-msds {
key "interface";
description
"List of link MSDs.";
leaf interface {
type if:interface-ref;
description
"Reference to device interface.";
}
leaf msd {
type uint8;
description
"MSD supported by the interface.";
}
}
}
}
augment "/rt:routing/sr:segment-routing" { typedef router-id {
description type union {
"This augments routing data model (RFC 8349) type system-id;
with Segment Routing (SR)."; type rt-types:router-id;
container sr-mpls { }
description description
"Segment Routing global configuration."; "OSPF/BGP router-id or ISIS system ID.";
uses sr-cmn:node-capabilities; }
container msd {
if-feature "max-sid-depth";
description
"MSD configuration.";
uses max-sid-depth;
}
container bindings {
description
"List of bindings.";
container mapping-server {
if-feature "mapping-server";
description
"Configuration of mapping-server local entries.";
list policy {
key "name";
description
"List mapping-server policies.";
leaf name {
type string;
description
"Name of the mapping policy.";
}
container entries {
description
"IPv4/IPv6 mapping entries.";
list mapping-entry {
key "prefix algorithm";
description
"Mapping entries.";
uses sr-cmn:prefix-sid;
}
}
}
}
container connected-prefix-sid-map {
description
"Prefix SID configuration.";
list connected-prefix-sid {
key "prefix algorithm";
description
"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 {
description
"Local sid configuration.";
list local-prefix-sid {
key "prefix algorithm";
description
"List of local IPv4/IPv6 prefix-sids.";
uses sr-cmn:prefix-sid;
}
}
}
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 { grouping sr-controlplane {
config false; description
description "Defines protocol configuration.";
"List of label blocks currently in use."; container segment-routing {
leaf lower-bound { description
type uint32; "Segment Routing global configuration.";
description leaf enabled {
"Lower bound of the label block."; type boolean;
} default "false";
leaf upper-bound { description
type uint32; "Enables segment-routing protocol extensions.";
description }
"Upper bound of the label block."; container bindings {
} description
leaf size { "Control of binding advertisement and reception.";
type uint32; container advertise {
description description
"Number of indexes in the block."; "Control advertisement of local mappings
} in binding TLVs.";
leaf free { leaf-list policies {
type uint32; type string;
description description
"Number of free indexes in the block."; "List of binding advertisement policies.";
} }
leaf used { }
type uint32; leaf receive {
description type boolean;
"Number of indexes in use in the block."; default "true";
} description
leaf scope { "Allow the reception and usage of binding TLVs.";
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
"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 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 { grouping igp-interface {
description description
"This notification is sent when SRGB blocks received from "Grouping for IGP interface configuration.";
routers conflict."; container segment-routing {
list srgb-collisions { description
description "Container for SR interface configuration.";
"List of SRGB blocks that conflict."; container adjacency-sid {
leaf lower-bound { description
type uint32; "Adjacency SID configuration.";
description list adj-sids {
"Lower value in the block."; key "value";
} uses sr-cmn:sid-value-type;
leaf upper-bound { leaf value {
type uint32; type uint32;
description description
"Upper value in the block."; "Value of the Adj-SID.";
} }
leaf routing-protocol { leaf protected {
type leafref { type boolean;
path "/rt:routing/rt:control-plane-protocols/" default false;
+ "rt:control-plane-protocol/rt:name"; description
} "It is used to protect the mannual adj-SID.";
description }
"Routing protocol reference for SRGB collision."; description
} "List of adj-sid configuration.";
leaf originating-rtr-id { }
type router-id; list advertise-adj-group-sid {
description key "group-id";
"Originating Router ID of this SRGB block."; description
} "Control advertisement of S flag. Enable advertisement
of a common Adj-SID for parallel links.";
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
"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 the interface is protected. In this case, will
be advertised with backup flag set, the other will
be advertised with theo 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.";
}
}
}
}
} grouping max-sid-depth {
} description
notification segment-routing-global-sid-collision { "Maximum SID Depth (MSD)D configuration grouping.";
description leaf node-msd {
"This notification is sent when a new mapping is learned type uint8;
containing s mapping where the SID is already used. description
The notification generation must be throttled with at least "Node MSD is the lowest MSD supported by the node.";
a 5 second gap between notifications."; }
leaf received-target { container link-msd {
type string; description
description "MSD supported by an individual interface.";
"Target received in the router advertisement that caused list link-msds {
the SID collision."; key "interface";
} description
leaf new-sid-rtr-id { "List of link MSDs.";
type router-id; leaf interface {
description type if:interface-ref;
"Router ID that advertised the conflicting SID."; description
} "Reference to device interface.";
leaf original-target {
type string; }
description leaf msd {
"Target already available in the database with the same SID type uint8;
as the received target."; description
} "MSD supported by the interface.";
leaf original-sid-rtr-id { }
type router-id; }
description }
"Router-ID for the router that originally advertised the }
conflicting SID, i.e., the instance in the database.";
} augment "/rt:routing/sr:segment-routing" {
leaf index { description
type uint32; "This augments routing data model (RFC 8349)
description with Segment Routing (SR).";
"Value of the index used by two different prefixes."; container sr-mpls {
} description
leaf routing-protocol { "Segment Routing global configuration.";
type leafref { uses sr-cmn:node-capabilities;
path "/rt:routing/rt:control-plane-protocols/" container msd {
+ "rt:control-plane-protocol/rt:name"; if-feature "max-sid-depth";
} description
description "MSD configuration.";
"Routing protocol reference for conflicting SID."; uses max-sid-depth;
} }
} container bindings {
notification segment-routing-index-out-of-range { description
description "List of bindings.";
"This notification is sent when a binding is received container mapping-server {
containing a segment index which is out of the local if-feature "mapping-server";
configured ranges. The notification generation must be description
throttled with at least a 5 second gap between "Configuration of mapping-server local entries.";
notifications."; list policy {
leaf received-target { key "name";
type string; description
description "List mapping-server policies.";
"Target received in the router advertisement with leaf name {
the out-of-range index."; type string;
} description
leaf received-index { "Name of the mapping policy.";
type uint32; }
description container entries {
"Value of the index received."; description
} "IPv4/IPv6 mapping entries.";
leaf routing-protocol { list mapping-entry {
type leafref { key "prefix algorithm";
path "/rt:routing/rt:control-plane-protocols/" description
+ "rt:control-plane-protocol/rt:name"; "Mapping entries.";
} uses sr-cmn:prefix-sid;
description
"Routing protocol reference for out-of-range indexd."; }
} }
} }
} }
<CODE ENDS> container connected-prefix-sid-map {
description
"Prefix SID configuration.";
list connected-prefix-sid {
key "prefix algorithm";
description
"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 {
description
"Local sid configuration.";
list local-prefix-sid {
key "prefix algorithm";
description
"List of local IPv4/IPv6 prefix-sids.";
uses sr-cmn:prefix-sid;
}
}
}
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
"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 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
"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 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 {
description
"This notification is sent when SRGB blocks received from
routers conflict.";
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
"This notification is sent when a new mapping is learned
containing s 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-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
"Router-ID for the router that originally advertised the
conflicting 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";
}
description
"Routing protocol reference for conflicting SID.";
}
}
notification segment-routing-index-out-of-range {
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
"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>
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 29, line 46 skipping to change at page 30, line 46
Routing with the MPLS Data Plane", RFC 8660, Routing with the MPLS Data Plane", RFC 8660,
DOI 10.17487/RFC8660, December 2019, DOI 10.17487/RFC8660, December 2019,
<https://www.rfc-editor.org/info/rfc8660>. <https://www.rfc-editor.org/info/rfc8660>.
12.2. Informative References 12.2. Informative References
[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>.
Appendix A. Configuration example
The following is an XML example using the SR MPLS YANG modules.
<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>198.51.100.0/24</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>192.0.2.0/24</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>
Authors' Addresses Authors' Addresses
Stephane Litkowski Stephane Litkowski
Cisco Systems Cisco Systems
Email: slitkows.ietf@gmail.com Email: slitkows.ietf@gmail.com
Yingzhen Qu Yingzhen Qu
Futurewei Futurewei
Email: yingzhen.qu@futurewei.com Email: yingzhen.qu@futurewei.com
Acee Lindem Acee Lindem
Cisco Systems Cisco Systems
301 Mindenhall Way 301 Mindenhall Way
Cary, NC 27513 Cary, NC 27513
US US
 End of changes. 69 change blocks. 
890 lines changed or deleted 987 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/