summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9020.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9020.txt')
-rw-r--r--doc/rfc/rfc9020.txt1768
1 files changed, 1768 insertions, 0 deletions
diff --git a/doc/rfc/rfc9020.txt b/doc/rfc/rfc9020.txt
new file mode 100644
index 0000000..1a7316f
--- /dev/null
+++ b/doc/rfc/rfc9020.txt
@@ -0,0 +1,1768 @@
+
+
+
+
+Internet Engineering Task Force (IETF) S. Litkowski
+Request for Comments: 9020 Cisco Systems
+Category: Standards Track Y. Qu
+ISSN: 2070-1721 Futurewei
+ A. Lindem
+ Cisco Systems
+ P. Sarkar
+ VMware, Inc
+ J. Tantsura
+ Juniper Networks
+ May 2021
+
+
+ YANG Data Model for Segment Routing
+
+Abstract
+
+ This document defines three YANG data models. The first is for
+ Segment Routing (SR) configuration and operation, which is to be
+ augmented by different Segment Routing data planes. The next is a
+ YANG data model that defines a collection of generic types and
+ groupings for SR. The third module defines the configuration and
+ operational states for the Segment Routing MPLS data plane.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9020.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology and Notation
+ 2.1. Tree Diagram
+ 2.2. Prefixes in Data Node Names
+ 3. Design of the Data Model
+ 4. Configuration
+ 5. IGP Control-Plane Configuration
+ 5.1. IGP Interface Configuration
+ 5.1.1. Adjacency SID (Adj-SID) Properties
+ 5.1.1.1. Bundling
+ 5.1.1.2. Protection
+ 6. State Data
+ 7. Notifications
+ 8. YANG Modules
+ 8.1. YANG Module for Segment Routing
+ 8.2. YANG Module for Segment Routing Common Types
+ 8.3. YANG Module for Segment Routing MPLS
+ 9. Security Considerations
+ 10. IANA Considerations
+ 11. References
+ 11.1. Normative References
+ 11.2. Informative References
+ Appendix A. Configuration Examples
+ A.1. SR-MPLS with IPv4
+ A.2. SR-MPLS with IPv6
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ This document defines three YANG data models [RFC7950]. The first
+ one is for Segment Routing (SR) [RFC8402] configuration and
+ operation. This document does not define the IGP extensions to
+ support SR, but the second module defines generic groupings to be
+ reused by IGP extension modules. The reason for this design choice
+ is to not require implementations to support all IGP extensions. For
+ example, an implementation may support the IS-IS extension but not
+ the OSPF extension. The third YANG data model defines a module that
+ is intended to be used on network elements to configure or operate
+ the SR MPLS data plane [RFC8660].
+
+ The YANG modules in this document conform to the Network Management
+ Datastore Architecture (NMDA) [RFC8342].
+
+2. Terminology and Notation
+
+ 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 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+2.1. Tree Diagram
+
+ Tree diagrams used in this document follow the notation defined in
+ [RFC8340].
+
+2.2. Prefixes in Data Node Names
+
+ In this document, names of data nodes, actions, and other data model
+ objects are often used without a prefix, as long as it is clear from
+ the context in which YANG module each name is defined. Otherwise,
+ names are prefixed using the standard prefix associated with the
+ corresponding YANG module, as shown in Table 1.
+
+ +==========+====================+===========+
+ | Prefix | YANG module | Reference |
+ +==========+====================+===========+
+ | if | ietf-interfaces | [RFC8343] |
+ +----------+--------------------+-----------+
+ | rt | ietf-routing | [RFC8349] |
+ +----------+--------------------+-----------+
+ | rt-types | ietf-routing-types | [RFC8294] |
+ +----------+--------------------+-----------+
+ | yang | ietf-yang-types | [RFC6991] |
+ +----------+--------------------+-----------+
+ | inet | ietf-inet-types | [RFC6991] |
+ +----------+--------------------+-----------+
+
+ Table 1: Prefixes and Corresponding YANG
+ Modules
+
+3. Design of the Data Model
+
+ The ietf-segment-routing YANG module augments the routing container
+ in the ietf-routing model [RFC8349] and defines generic SR
+ configuration and operational state. This module is augmented by
+ modules supporting different data planes.
+
+ Module ietf-segment-routing-mpls augments ietf-segment-routing and
+ supports SR-MPLS data plane configuration and operational state.
+
+ Module ietf-segment-routing-common defines generic types and
+ groupings that SHOULD be reused by IGP extension modules.
+
+ module: ietf-segment-routing
+ augment /rt:routing:
+ +--rw segment-routing
+
+ module: ietf-segment-routing-mpls
+ augment /rt:routing/sr:segment-routing:
+ +--rw sr-mpls
+ +--rw bindings
+ | +--rw mapping-server {mapping-server}?
+ | | +--rw policy* [name]
+ | | +--rw name string
+ | | +--rw entries
+ | | +--rw mapping-entry* [prefix algorithm]
+ | | +--rw prefix inet:ip-prefix
+ | | +--rw value-type? enumeration
+ | | +--rw start-sid uint32
+ | | +--rw range? uint32
+ | | +--rw algorithm identityref
+ | +--rw connected-prefix-sid-map
+ | | +--rw connected-prefix-sid* [prefix algorithm]
+ | | +--rw prefix inet:ip-prefix
+ | | +--rw value-type? enumeration
+ | | +--rw start-sid uint32
+ | | +--rw range? uint32
+ | | +--rw algorithm identityref
+ | | +--rw last-hop-behavior? enumeration
+ | +--rw local-prefix-sid
+ | +--rw local-prefix-sid* [prefix algorithm]
+ | +--rw prefix inet:ip-prefix
+ | +--rw value-type? enumeration
+ | +--rw start-sid uint32
+ | +--rw range? uint32
+ | +--rw algorithm identityref
+ +--rw srgb
+ | +--rw srgb* [lower-bound upper-bound]
+ | +--rw lower-bound uint32
+ | +--rw upper-bound uint32
+ +--rw srlb
+ | +--rw srlb* [lower-bound upper-bound]
+ | +--rw lower-bound uint32
+ | +--rw upper-bound uint32
+ +--ro label-blocks* []
+ | +--ro lower-bound? uint32
+ | +--ro upper-bound? uint32
+ | +--ro size? uint32
+ | +--ro free? uint32
+ | +--ro used? uint32
+ | +--ro scope? enumeration
+ +--ro sid-db
+ +--ro sid* [target sid source source-protocol binding-type]
+ +--ro target string
+ +--ro sid uint32
+ +--ro algorithm? uint8
+ +--ro source inet:ip-address
+ +--ro used? boolean
+ +--ro source-protocol -> /rt:routing
+ /control-plane-protocols
+ /control-plane-protocol/name
+ +--ro binding-type enumeration
+ +--ro scope? enumeration
+
+ notifications:
+ +---n segment-routing-srgb-collision
+ | +--ro srgb-collisions* []
+ | +--ro lower-bound? uint32
+ | +--ro upper-bound? uint32
+ | +--ro routing-protocol? -> /rt:routing
+ | /control-plane-protocols
+ | /control-plane-protocol/name
+ | +--ro originating-rtr-id? router-or-system-id
+ +---n segment-routing-global-sid-collision
+ | +--ro received-target? string
+ | +--ro new-sid-rtr-id? router-or-system-id
+ | +--ro original-target? string
+ | +--ro original-sid-rtr-id? router-or-system-id
+ | +--ro index? uint32
+ | +--ro routing-protocol? -> /rt:routing
+ | /control-plane-protocols
+ | /control-plane-protocol/name
+ +---n segment-routing-index-out-of-range
+ +--ro received-target? string
+ +--ro received-index? uint32
+ +--ro routing-protocol? -> /rt:routing
+ /control-plane-protocols
+ /control-plane-protocol/name
+
+4. Configuration
+
+ The module ietf-segment-routing-mpls augments the "/rt:routing/
+ sr:segment-routing:" with an sr-mpls container. This container
+ defines all the configuration parameters related to the SR MPLS data
+ plane.
+
+ The sr-mpls configuration is split into global configuration and
+ interface configuration.
+
+ The global configuration includes:
+
+ Bindings: Defines Prefix to Segment Identifier (Prefix-SID)
+ mappings. The operator can control advertisement of Prefix-SIDs
+ independently for IPv4 and IPv6. Two types of mappings are
+ available:
+
+ Mapping-server: Maps prefixes that are not local to a SID.
+ Configuration of bindings does not automatically allow
+ advertisement of those bindings. Advertisement must be
+ controlled by each routing-protocol instance (see Section 5).
+ Multiple mapping policies may be defined.
+
+ Connected prefixes: Maps connected prefixes to a SID.
+ Advertisement of the mapping will be done by IGP when enabled
+ for SR (see Section 5). The SID value can be expressed as an
+ index (default) or an absolute value. The "last-hop-behavior"
+ configuration dictates the MPLS Penultimate Hop Popping (PHP)
+ behavior: "explicit-null", "php", or "non-php".
+
+ Segment Routing Global Block (SRGB): Defines a list of label blocks
+ represented by a pair of lower-bound/upper-bound labels. The SRGB
+ is also agnostic to the control plane used. So, all local
+ routing-protocol instances will have to advertise the same SRGB.
+
+ Segment Routing Local Block (SRLB): Defines a list of label blocks
+ represented by a pair of lower-bound/upper-bound labels reserved
+ for local SIDs.
+
+5. IGP Control-Plane Configuration
+
+ Support of SR extensions for a particular IGP control plane is
+ achieved by augmenting routing-protocol configuration with SR
+ extensions. This augmentation SHOULD be part of the routing-protocol
+ YANG modules as not to create any dependency for implementations to
+ support SR extensions for all routing protocols.
+
+ This module defines groupings that SHOULD be used by IGP SR modules.
+
+ The "sr-control-plane" grouping defines the generic global
+ configuration for the IGP.
+
+ The "enabled" leaf enables SR extensions for the routing-protocol
+ instance.
+
+ The "bindings" container controls the routing-protocol instance's
+ advertisement of local bindings and the processing of received
+ bindings.
+
+5.1. IGP Interface Configuration
+
+ The interface configuration is part of the "igp-interface" grouping
+ and includes Adjacency SID (Adj-SID) properties.
+
+5.1.1. Adjacency SID (Adj-SID) Properties
+
+5.1.1.1. Bundling
+
+ In case of parallel IP links between routers, an additional Adj-SID
+ [RFC8402] may be advertised representing more than one adjacency
+ (i.e., a bundle of adjacencies). The "advertise-adj-group-sid"
+ configuration controls for which group(s) an additional Adj-SID is
+ advertised.
+
+ The "advertise-adj-group-sid" is a list of group IDs. Each group ID
+ will identify interfaces that are bundled together.
+
+ +-------+ +------+
+ | | ------- L1 ---- | |
+ | R1 | ------- L2 ---- | R2 |
+ | | ------- L3 ---- | |
+ | | ------- L4 ---- | |
+ +-------+ +------+
+
+ In the figure above, R1 and R2 are interconnected by four links. A
+ routing protocol adjacency is established on each link. The operator
+ would like to create Adj-SIDs that represent bundles of links. We
+ can imagine two different bundles: L1/L2 and L3/L4. To achieve this
+ behavior, the operator will configure a "group-id" X for interfaces
+ L1 and L2 and a "group-id" Y for interfaces L3 and L4. This will
+ result in R1 advertising an additional Adj-SID for each adjacency.
+ For example, an Adj-SID with a value of 400 will be added to L1 and
+ L2, and an Adj-SID with a value of 500 will be added to L3 and L4.
+ As L1/L2 and L3/L4 do not share the same "group-id", a different SID
+ value will be allocated.
+
+5.1.1.2. Protection
+
+ The "advertise-protection" defines how protection for an interface is
+ advertised. It does not control the activation or deactivation of
+ protection. If the "single" option is used, a single Adj-SID will be
+ advertised for the interface. If the interface is protected, the
+ B-Flag for the Adj-SID advertisement will be set. If the "dual"
+ option is used and if the interface is protected, two Adj-SIDs will
+ be advertised for the interface adjacencies. One Adj-SID will always
+ have the B-Flag set, and the other will have the B-Flag clear. This
+ option is intended to be used in the case of traffic engineering
+ where a path must use either protected segments or unprotected
+ segments.
+
+6. State Data
+
+ The operational state contains information reflecting the usage of
+ allocated SRGB labels.
+
+ It also includes a list of all global SIDs, their associated
+ bindings, and other information, such as the associated source
+ protocol and algorithm.
+
+7. Notifications
+
+ The model defines the following notifications for SR.
+
+ segment-routing-srgb-collision: Raised when control-plane-advertised
+ SRGB blocks have conflicts
+
+ segment-routing-global-sid-collision: Raised when a control-plane-
+ advertised index is already associated with another target (in
+ this version, the only defined targets are IPv4 and IPv6 prefixes)
+
+ segment-routing-index-out-of-range: Raised when a control-plane-
+ advertised index falls outside the range of SRGBs configured for
+ the network device
+
+8. YANG Modules
+
+ There are three YANG modules included in this document.
+
+ The following RFCs are not referenced in the document text but are
+ referenced in the ietf-segment-routing.yang, ietf-segment-routing-
+ common.yang, and/or ietf-segment-routing-mpls.yang modules:
+ [RFC6991], [RFC8294], [RFC8661], [RFC8665], [RFC8667], [RFC8669], and
+ [RFC8814].
+
+8.1. YANG Module for Segment Routing
+
+ ietf-segment-routing.yang: This module defines a generic framework
+ for Segment Routing (SR), and it is to be augmented by models for
+ different SR data planes.
+
+ <CODE BEGINS> file "ietf-segment-routing@2021-05-26.yang"
+ module ietf-segment-routing {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing";
+ prefix sr;
+
+ import ietf-routing {
+ prefix rt;
+ reference "RFC 8349: A YANG Data Model for Routing
+ Management (NMDA Version)";
+ }
+
+ organization
+ "IETF SPRING - SPRING Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/spring/>
+ WG List: <mailto:spring@ietf.org>
+
+ Author: Stephane Litkowski
+ <mailto:slitkows.ietf@gmail.com>
+ Author: Yingzhen Qu
+ <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>
+
+ ";
+ description
+ "This YANG module defines a generic framework for Segment
+ Routing (SR). It is to be augmented by models for different
+ SR data planes.
+
+ This YANG module conforms to the Network Management
+ Datastore Architecture (NMDA), as described in RFC 8242.
+
+ 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.
+
+ Copyright (c) 2021 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ 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
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9020;
+ see the RFC itself for full legal notices.";
+
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing.";
+
+ revision 2021-05-26 {
+ description
+ "Initial version";
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing.";
+ }
+
+ augment "/rt:routing" {
+ description
+ "This module augments the routing data model (RFC 8349)
+ with Segment Routing (SR).";
+ container segment-routing {
+ description
+ "Segment Routing configuration. This container
+ is to be augmented by models for different SR
+ data planes.";
+ reference
+ "RFC 8402: Segment Routing Architecture.";
+ }
+ }
+ }
+ <CODE ENDS>
+
+8.2. YANG Module for Segment Routing Common Types
+
+ ietf-segment-routing-common.yang: This module defines a collection
+ of generic types and groupings for SR, as defined in [RFC8402].
+
+ <CODE BEGINS> file "ietf-segment-routing-common@2021-05-26.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 {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ organization
+ "IETF SPRING - SPRING Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/spring/>
+ WG List: <mailto:spring@ietf.org>
+
+ Author: Stephane Litkowski
+ <mailto:slitkows.ietf@gmail.com>
+ Author: Yingzhen Qu
+ <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>
+
+ ";
+ description
+ "This YANG module defines a collection of generic types and
+ groupings for Segment Routing (SR), as described in RFC 8402.
+
+ This YANG module conforms to the Network Management
+ Datastore Architecture (NMDA), as described in RFC 8242.
+
+ 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.
+
+ Copyright (c) 2021 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ 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
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9020;
+ see the RFC itself for full legal notices.";
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+
+ revision 2021-05-26 {
+ description
+ "Initial version";
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+ }
+
+ 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.";
+ reference
+ "RFC 8402: Segment Routing Architecture";
+ }
+
+ identity prefix-sid-algorithm-shortest-path {
+ base prefix-sid-algorithm;
+ description
+ "Shortest Path First (SPF) Prefix-SID algorithm. This
+ is the default algorithm.";
+ }
+
+ identity prefix-sid-algorithm-strict-spf {
+ base prefix-sid-algorithm;
+ description
+ "This algorithm mandates that the packet is forwarded
+ according to the ECMP-aware SPF algorithm.";
+ }
+
+ grouping srlr {
+ description
+ "Grouping for SR Label Range configuration.";
+ leaf lower-bound {
+ type uint32;
+ description
+ "Lower value in the label range.";
+ }
+ leaf upper-bound {
+ type uint32;
+ must '../lower-bound < ../upper-bound' {
+ error-message
+ "The upper-bound must be greater than the lower-bound.";
+ description
+ "The value must be greater than lower-bound.";
+ }
+ description
+ "Upper value in the label range.";
+ }
+ }
+
+ grouping srgb {
+ description
+ "Grouping for SR Global Label Range.";
+ list srgb {
+ key "lower-bound upper-bound";
+ ordered-by user;
+ description
+ "List of global blocks to be advertised.";
+ uses srlr;
+ }
+ }
+
+ grouping srlb {
+ description
+ "Grouping for SR Local Block Range.";
+ list srlb {
+ key "lower-bound upper-bound";
+ ordered-by user;
+ description
+ "List of SRLBs.";
+ uses srlr;
+ }
+ }
+
+ grouping sid-value-type {
+ description
+ "Defines how the SID value is expressed.";
+ leaf value-type {
+ type enumeration {
+ enum index {
+ description
+ "The value will be interpreted as an index.";
+ }
+ enum absolute {
+ description
+ "The value will become interpreted as an absolute
+ value.";
+ }
+ }
+ default "index";
+ description
+ "This leaf defines how the value must be interpreted.";
+ }
+ }
+
+ grouping prefix-sid {
+ description
+ "This grouping defines configuration of a Prefix-SID.";
+ leaf prefix {
+ type inet:ip-prefix;
+ description
+ "Connected Prefix-SID.";
+ }
+ uses prefix-sid-attributes;
+ }
+
+ grouping ipv4-sid {
+ description
+ "Grouping for an IPv4 Prefix-SID.";
+ leaf prefix {
+ type inet:ipv4-prefix;
+ description
+ "Connected IPv4 Prefix-SID.";
+ }
+ uses prefix-sid-attributes;
+ }
+
+ grouping ipv6-sid {
+ description
+ "Grouping for an IPv6 Prefix-SID.";
+ leaf prefix {
+ type inet:ipv6-prefix;
+ description
+ "Connected IPv6 Prefix-SID.";
+ }
+ uses prefix-sid-attributes;
+ }
+
+ grouping last-hop-behavior {
+ description
+ "Defines last-hop behavior.";
+ leaf last-hop-behavior {
+ if-feature "sid-last-hop-behavior";
+ type enumeration {
+ enum explicit-null {
+ description
+ "Use explicit-null for the SID.";
+ }
+ enum no-php {
+ description
+ "Do not use MPLS Penultimate Hop Popping (PHP)
+ for the SID.";
+ }
+ enum php {
+ description
+ "Use MPLS PHP for the SID.";
+ }
+ }
+ description
+ "Configure last-hop behavior.";
+ }
+ }
+
+ grouping prefix-sid-attributes {
+ description
+ "Grouping for Segment Routing (SR) prefix attributes.";
+ uses sid-value-type;
+ leaf start-sid {
+ type uint32;
+ mandatory true;
+ description
+ "Value associated with prefix. The value must be
+ interpreted in the context of sid-value-type.";
+ }
+ 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>
+
+8.3. YANG Module for Segment Routing MPLS
+
+ ietf-segment-routing-mpls.yang: This module defines the
+ configuration and operational states for the Segment Routing MPLS
+ data plane.
+
+ <CODE BEGINS> file "ietf-segment-routing-mpls@2021-05-26.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 {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing
+ 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;
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+ }
+ import ietf-segment-routing-common {
+ prefix sr-cmn;
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+ }
+
+ organization
+ "IETF SPRING - SPRING Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/spring/>
+ WG List: <mailto:spring@ietf.org>
+
+ Author: Stephane Litkowski
+ <mailto:slitkows.ietf@gmail.com>
+ Author: Yingzhen Qu
+ <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>
+
+ ";
+ description
+ "This YANG module defines a generic configuration model for
+ the Segment Routing MPLS data plane.
+
+ This YANG module conforms to the Network Management
+ Datastore Architecture (NMDA), as described in RFC 8242.
+
+ 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.
+
+ Copyright (c) 2021 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ 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
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9020;
+ see the RFC itself for full legal notices.";
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+
+ revision 2021-05-26 {
+ description
+ "Initial version";
+ reference
+ "RFC 9020: YANG Data Model for Segment Routing";
+ }
+
+ feature mapping-server {
+ description
+ "Support for Segment Routing Mapping Server (SRMS).";
+ reference
+ "RFC 8661: Segment Routing MPLS Interworking
+ with LDP";
+ }
+
+ feature protocol-srgb {
+ description
+ "Support for per-protocol Segment Routing Global Block
+ (SRGB) configuration.";
+ reference
+ "RFC 8660: Segment Routing with the MPLS
+ Data Plane";
+ }
+
+ typedef system-id {
+ type string {
+ pattern '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
+ }
+ description
+ "This type defines an IS-IS system-id using a pattern.
+ An example system-id is 0143.0438.AEF0.";
+ }
+
+ typedef router-or-system-id {
+ type union {
+ type rt-types:router-id;
+ type system-id;
+ }
+ description
+ "OSPF/BGP router-id or IS-IS system ID.";
+ }
+
+ grouping sr-control-plane {
+ description
+ "Defines protocol configuration.";
+ container segment-routing {
+ description
+ "Segment Routing global configuration.";
+ leaf enabled {
+ type boolean;
+ default "false";
+ description
+ "Enables Segment Routing control-plane protocol
+ extensions.";
+ }
+ container bindings {
+ if-feature "mapping-server";
+ description
+ "Control of binding advertisement and reception.";
+ container advertise {
+ description
+ "Control advertisement of local mappings
+ in binding TLVs.";
+ leaf-list policies {
+ type leafref {
+ 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
+ "Allow the reception and usage of binding TLVs.";
+ }
+ }
+ }
+ }
+
+ grouping igp-interface {
+ description
+ "Grouping for IGP interface configuration.";
+ container segment-routing {
+ description
+ "Container for SR interface configuration.";
+ container adjacency-sid {
+ description
+ "Adjacency SID (Adj-SID) configuration.";
+ reference
+ "RFC 8660: Segment Routing with the MPLS
+ Data Plane";
+ 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 Adj-SID, e.g., using
+ IP Fast Reroute (IPFRR) or MPLS-FRR.";
+ }
+ 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-SIDs and their configuration.";
+ }
+ list advertise-adj-group-sid {
+ key "group-id";
+ description
+ "Control advertisement of S-flag 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
+ "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, one
+ Adj-SID will be advertised with the backup-flag
+ set and the other with the backup-flag clear. In
+ the case where protection is not configured, a
+ single Adj-SID will be advertised with the
+ backup-flag clear.";
+ }
+ }
+ 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";
+ }
+ }
+ }
+ }
+
+ augment "/rt:routing/sr:segment-routing" {
+ description
+ "This augments the routing data model (RFC 8349)
+ with Segment Routing (SR) using the MPLS data plane.";
+ container sr-mpls {
+ description
+ "Segment Routing global configuration and
+ operational state.";
+ 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 mappings of Prefix-SIDs 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 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.";
+ reference
+ "RFC 8665: OSPF Extensions for Segment Routing
+ RFC 8667: IS-IS Extensions for Segment
+ Routing
+ RFC 8669: Segment Routing Prefix Segment
+ Identifier Extensions to BGP";
+ }
+ 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 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 {
+ type enumeration {
+ enum global {
+ description
+ "Global SID.";
+ }
+ enum local {
+ description
+ "Local SID.";
+ }
+ }
+ description
+ "SID scoping.";
+ }
+ }
+ }
+ }
+ }
+
+ notification segment-routing-srgb-collision {
+ description
+ "This notification is sent when SRGB blocks received from
+ different routers collide.";
+ list srgb-collisions {
+ description
+ "List of SRGB blocks that collide.";
+ 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-or-system-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 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
+ colliding 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 colliding SID.";
+ }
+ }
+
+ notification segment-routing-index-out-of-range {
+ description
+ "This notification is sent when a binding is received
+ containing a segment index that 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
+ "A human-readable string representing the target
+ received in the protocol-specific advertisement
+ corresponding to 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 indexed.";
+ }
+ }
+ }
+ <CODE ENDS>
+
+9. Security Considerations
+
+ The YANG modules specified in this document define a schema for data
+ that is designed to be accessed via network management protocols,
+ such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF
+ layer is the secure transport layer, and the mandatory-to-implement
+ secure transport is Secure Shell (SSH) [RFC6242]. The lowest
+ RESTCONF layer is HTTPS, and the mandatory-to-implement secure
+ transport is TLS [RFC8446].
+
+ The Network Configuration Access Control Model (NACM) [RFC8341]
+ provides the means to restrict access for particular NETCONF or
+ RESTCONF users to a preconfigured subset of all available NETCONF or
+ RESTCONF protocol operations and content.
+
+ There are a number of data nodes defined in the modules that are
+ writable/creatable/deletable (i.e., config true, which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ * /segment-routing
+
+ * /segment-routing/mpls
+
+ * /segment-routing/mpls/bindings -- Modification to the local
+ bindings could result in a Denial-of-Service (DoS) attack. An
+ attacker may also try to create segment conflicts (using the same
+ segment identifier for different purposes) to redirect traffic
+ within the trusted domain. However, the traffic will remain
+ within the trusted domain. Redirection could be used to route the
+ traffic to compromised nodes within the trusted domain or to avoid
+ certain security functions (e.g., firewall). Refer to Section 8.1
+ of [RFC8402] for a discussion of the SR-MPLS trusted domain.
+
+ * /segment-routing/mpls/srgb -- Modification of the Segment Routing
+ Global Block (SRGB) could be used to mount a DoS attack. For
+ example, if the SRGB size is reduced to a very small value, a lot
+ of existing segments could no longer be installed leading to a
+ traffic disruption.
+
+ * /segment-routing/mpls/srlb -- Modification of the Segment Routing
+ Local Block (SRLB) could be used to mount a DoS attack similar to
+ those applicable to the SRGB.
+
+ Some of the readable data nodes in these YANG modules may be
+ considered sensitive or vulnerable in some network environments. It
+ is thus important to control read access (e.g., via get, get-config,
+ or notification) to these data nodes. These are the subtrees and
+ data nodes and their sensitivity/vulnerability:
+
+ * /segment-routing/mpls/bindings -- Knowledge of these data nodes
+ can be used to attack the local router with a Denial-of-Service
+ (DoS) attack.
+
+ * /segment-routing/mpls/sid-db -- Knowledge of these data nodes can
+ be used to attack the other routers in the SR domain with either a
+ Denial-of-Service (DoS) attack or redirection traffic destined for
+ those routers.
+
+10. IANA Considerations
+
+ This document registers a URI in the "IETF XML Registry" [RFC3688].
+ Following the format in [RFC3688], the following registration is
+ requested to be made:
+
+ ID: yang:ietf-segment-routing-common
+ URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ ID: yang:ietf-segment-routing
+ URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ ID: yang:ietf-segment-routing-mpls
+ URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls
+ Registrant Contact: The IESG.
+ XML: N/A, the requested URI is an XML namespace.
+
+ This document registers YANG modules in the "YANG Module Names"
+ registry [RFC6020].
+
+ Name: ietf-segment-routing-common
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common
+ Prefix: sr-cmn
+ Reference: RFC 9020
+
+ Name: ietf-segment-routing
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing
+ Prefix: sr
+ Reference: RFC 9020
+
+ Name: ietf-segment-routing-mpls
+ Maintained by IANA: N
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls
+ Prefix: sr-mpls
+ Reference: RFC 9020
+
+11. References
+
+11.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
+ "Common YANG Data Types for the Routing Area", RFC 8294,
+ DOI 10.17487/RFC8294, December 2017,
+ <https://www.rfc-editor.org/info/rfc8294>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8343] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 8343, DOI 10.17487/RFC8343, March 2018,
+ <https://www.rfc-editor.org/info/rfc8343>.
+
+ [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
+ Routing Management (NMDA Version)", RFC 8349,
+ DOI 10.17487/RFC8349, March 2018,
+ <https://www.rfc-editor.org/info/rfc8349>.
+
+ [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L.,
+ Decraene, B., Litkowski, S., and R. Shakir, "Segment
+ Routing Architecture", RFC 8402, DOI 10.17487/RFC8402,
+ July 2018, <https://www.rfc-editor.org/info/rfc8402>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S.,
+ Decraene, B., Litkowski, S., and R. Shakir, "Segment
+ Routing with the MPLS Data Plane", RFC 8660,
+ DOI 10.17487/RFC8660, December 2019,
+ <https://www.rfc-editor.org/info/rfc8660>.
+
+ [RFC8661] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S.,
+ Decraene, B., and S. Litkowski, "Segment Routing MPLS
+ Interworking with LDP", RFC 8661, DOI 10.17487/RFC8661,
+ December 2019, <https://www.rfc-editor.org/info/rfc8661>.
+
+ [RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler,
+ H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF
+ Extensions for Segment Routing", RFC 8665,
+ DOI 10.17487/RFC8665, December 2019,
+ <https://www.rfc-editor.org/info/rfc8665>.
+
+ [RFC8667] Previdi, S., Ed., Ginsberg, L., Ed., Filsfils, C.,
+ Bashandy, A., Gredler, H., and B. Decraene, "IS-IS
+ Extensions for Segment Routing", RFC 8667,
+ DOI 10.17487/RFC8667, December 2019,
+ <https://www.rfc-editor.org/info/rfc8667>.
+
+ [RFC8669] Previdi, S., Filsfils, C., Lindem, A., Ed., Sreekantiah,
+ A., and H. Gredler, "Segment Routing Prefix Segment
+ Identifier Extensions for BGP", RFC 8669,
+ DOI 10.17487/RFC8669, December 2019,
+ <https://www.rfc-editor.org/info/rfc8669>.
+
+ [RFC8814] Tantsura, J., Chunduri, U., Talaulikar, K., Mirsky, G.,
+ and N. Triantafillis, "Signaling Maximum SID Depth (MSD)
+ Using the Border Gateway Protocol - Link State", RFC 8814,
+ DOI 10.17487/RFC8814, August 2020,
+ <https://www.rfc-editor.org/info/rfc8814>.
+
+ [W3C.REC-xml11-20060816]
+ Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E.,
+ Yergeau, F., and J. Cowan, "Extensible Markup Language
+ (XML) 1.1 (Second Edition)", World Wide Web Consortium
+ Recommendation REC-xml11-20060816, 16 August 2006,
+ <https://www.w3.org/TR/2006/REC-xml11-20060816>.
+
+11.2. Informative References
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
+ "Handling Long Lines in Content of Internet-Drafts and
+ RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
+ <https://www.rfc-editor.org/info/rfc8792>.
+
+Appendix A. Configuration Examples
+
+ Note: '\' line wrapping per [RFC8792].
+
+A.1. SR-MPLS with IPv4
+
+ The following is an XML [W3C.REC-xml11-20060816] example using the
+ SR-MPLS YANG modules with IPv4 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">
+ <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>
+ <srgb>
+ <srgb>
+ <lower-bound>45000</lower-bound>
+ <upper-bound>55000</upper-bound>
+ </srgb>
+ </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": {
+ "bindings": {
+ "mapping-server": {
+ "policy": [
+ {
+ "name": "mapping 1",
+ "entries": {
+ "mapping-entry": [
+ {
+ "prefix": "198.51.100.0/24",
+ "algorithm": "ietf-segment-routing-common:\
+ prefix-sid-algorithm-shortest-path",
+ "start-sid": 200,
+ "range": 100
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "connected-prefix-sid-map": {
+ "connected-prefix-sid": [
+ {
+ "prefix": "192.0.2.0/24",
+ "algorithm": "ietf-segment-routing-common:\
+ prefix-sid-algorithm-strict-spf",
+ "start-sid": 100,
+ "range": 1,
+ "last-hop-behavior": "php"
+ }
+ ]
+ }
+ },
+ "srgb": {
+ "srgb": [
+ {
+ "lower-bound": 45000,
+ "upper-bound": 55000
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+
+A.2. SR-MPLS with IPv6
+
+ The following is an XML [W3C.REC-xml11-20060816] 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">
+ <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>
+ <srgb>
+ <srgb>
+ <lower-bound>45000</lower-bound>
+ <upper-bound>55000</upper-bound>
+ </srgb>
+ </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": {
+ "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"
+ }
+ ]
+ }
+ },
+ "srgb": {
+ "srgb": [
+ {
+ "lower-bound": 45000,
+ "upper-bound": 55000
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+
+Acknowledgements
+
+ The authors would like to thank Derek Yeung, Greg Hankins, Hannes
+ Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge, and Les Ginsberg
+ for their contributions.
+
+ Thanks to Ladislav Lhotka and Tom Petch for their thorough reviews
+ and helpful comments.
+
+ The authors would like to thank Benjamin Kaduk, Alvaro Retana, and
+ Roman Danyliw for IESG review and comments.
+
+Authors' Addresses
+
+ Stephane Litkowski
+ Cisco Systems
+
+ Email: slitkows.ietf@gmail.com
+
+
+ Yingzhen Qu
+ Futurewei
+
+ Email: yingzhen.qu@futurewei.com
+
+
+ Acee Lindem
+ Cisco Systems
+ 301 Mindenhall Way
+ Cary, NC 27513
+ United States of America
+
+ Email: acee@cisco.com
+
+
+ Pushpasis Sarkar
+ VMware, Inc
+
+ Email: pushpasis.ietf@gmail.com
+
+
+ Jeff Tantsura
+ Juniper Networks
+
+ Email: jefftant.ietf@gmail.com