| < 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/ | ||||