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