| < draft-ietf-spring-sr-yang-17.txt | draft-ietf-spring-sr-yang-18.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: January 10, 2021 Futurewei | Expires: January 27, 2021 Futurewei | |||
| A. Lindem | A. Lindem | |||
| Cisco Systems | Cisco Systems | |||
| P. Sarkar | P. Sarkar | |||
| Individual | Individual | |||
| J. Tantsura | J. Tantsura | |||
| Apstra | Apstra | |||
| July 9, 2020 | July 26, 2020 | |||
| YANG Data Model for Segment Routing | YANG Data Model for Segment Routing | |||
| draft-ietf-spring-sr-yang-17 | draft-ietf-spring-sr-yang-18 | |||
| 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 January 10, 2021. | This Internet-Draft will expire on January 27, 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 7, line 30 ¶ | skipping to change at page 7, line 30 ¶ | |||
| 5.1.1. Adjacency SID properties | 5.1.1. Adjacency SID properties | |||
| 5.1.1.1. Bundling | 5.1.1.1. Bundling | |||
| In case of parallel IP links between routers, an additional Adjacency | In case of parallel IP links between routers, an additional Adjacency | |||
| SID [RFC8402] may be advertised representing more than one adjacency | SID [RFC8402] may be advertised representing more than one adjacency | |||
| (i.e., a bundle of adjacencies). The "advertise-adj-group-sid" | (i.e., a bundle of adjacencies). The "advertise-adj-group-sid" | |||
| configuration controls whether or not an additional adjacency SID is | configuration controls whether or not an additional adjacency SID is | |||
| advertised. | advertised. | |||
| The "advertise-adj-group-sid" would be a list of "group-id". The | The "advertise-adj-group-sid" is a list of "group-id". The "group- | |||
| "group-id" will permit to identify interfaces that must be bundled | id" will identify interfaces that are bundled together. | |||
| together. | ||||
| +-------+ +------+ | +-------+ +------+ | |||
| | | ------- L1 ---- | | | | | ------- L1 ---- | | | |||
| | R1 | ------- L2 ---- | R2 | | | R1 | ------- L2 ---- | R2 | | |||
| | | ------- L3 ---- | | | | | ------- L3 ---- | | | |||
| | | ------- L4 ---- | | | | | ------- L4 ---- | | | |||
| +-------+ +------+ | +-------+ +------+ | |||
| In the figure above, R1 and R2 are interconnected by four links. A | In the figure above, R1 and R2 are interconnected by four links. A | |||
| routing protocol adjacency is established on each link. Operator | routing protocol adjacency is established on each link. Operator | |||
| would like to create segment-routing Adj-SID that represent some | would like to create segment-routing Adj-SID that represent some | |||
| bundles of links. We can imagine two different bundles : L1/L2 and | bundles of links. We can imagine two different bundles : L1/L2 and | |||
| L2/L3. To achieve this behavior, the service provider will configure | L3/L4. To achieve this behavior, the service provider will configure | |||
| a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for | a "group-id" X for both interfaces L1 and L2 and a "group-id" Y for | |||
| both interfaces L3 and L3. This will result in R1 advertising an | both interfaces L3 and L4. This will result in R1 advertising an | |||
| additional Adj-SID for each adjacency, for example a Adj-SID with S | additional Adj-SID for each adjacency, for example a Adj-SID with S | |||
| flag set and value of 400 will be added to L1 and L2. A Adj-SID with | flag set and value of 400 will be added to L1 and L2. A Adj-SID with | |||
| S flag set and value of 500 will be added to L3 and L4. As L1/L2 and | S flag set and value of 500 will be added to L3 and L4. As L1/L2 and | |||
| L3/L4 does not share the same "group-id", a different SID value will | L3/L4 does not share the same "group-id", a different SID value will | |||
| be allocated. | be allocated. | |||
| 5.1.1.2. Protection | 5.1.1.2. Protection | |||
| The "advertise-protection" defines how protection for an interface is | The "advertise-protection" defines how protection for an interface is | |||
| advertised. It does not control the activation or deactivation of | advertised. It does not control the activation or deactivation of | |||
| skipping to change at page 8, line 34 ¶ | skipping to change at page 8, line 32 ¶ | |||
| allocated SRGB labels. | allocated SRGB labels. | |||
| It also includes a list of all global SIDs, their associated | It also includes a list of all global SIDs, their associated | |||
| bindings, and other information such as the source protocol and | bindings, and other information such as the source protocol and | |||
| algorithm. | algorithm. | |||
| 7. Notifications | 7. Notifications | |||
| The model defines the following notifications for segment-routing. | The model defines the following notifications for segment-routing. | |||
| o segment-routing-global-srgb-collision: Rasied when a control plan | o segment-routing-global-srgb-collision: Rasied when a control plane | |||
| advertised SRGB blocks have conflicts. | advertised SRGB blocks have conflicts. | |||
| o segment-routing-global-sid-collision: Raised when a control plane | o segment-routing-global-sid-collision: Raised when a control plane | |||
| advertised index is already associated with another target (in | advertised index is already associated with another target (in | |||
| this version, the only defined targets are IPv4 and IPv6 | this version, the only defined targets are IPv4 and IPv6 | |||
| prefixes). | prefixes). | |||
| o segment-routing-index-out-of-range: Raised when a control plane | o segment-routing-index-out-of-range: Raised when a control plane | |||
| 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-07-09.yang" | <CODE BEGINS> file "ietf-segment-routing@2020-07-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 { | ||||
| prefix rt; | ||||
| reference "RFC 8349: A YANG Data Model for Routing | ||||
| Management (NMDA Version)"; | ||||
| } | ||||
| organization | ||||
| "IETF SPRING - SPRING Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/spring/> | ||||
| WG List: <mailto:spring@ietf.org> | ||||
| Editor: Stephane Litkowski | ||||
| <mailto:slitkows.ietf@gmail.com> | ||||
| Editor: Yingzhen Qu | ||||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | import ietf-routing { | |||
| <mailto:acee@cisco.com> | prefix rt; | |||
| Author: Pushpasis Sarkar | reference "RFC 8349: A YANG Data Model for Routing | |||
| <mailto:pushpasis.ietf@gmail.com> | Management (NMDA Version)"; | |||
| Author: Jeff Tantsura | } | |||
| <jefftant.ietf@gmail.com> | ||||
| "; | organization | |||
| description | "IETF SPRING - SPRING Working Group"; | |||
| "The YANG module defines a generic configuration model for | contact | |||
| Segment Routing common across all of the vendor | "WG Web: <http://tools.ietf.org/wg/spring/> | |||
| implementations. It's to be augmented by different SR data | WG List: <mailto:spring@ietf.org> | |||
| planes. | ||||
| This YANG model conforms to the Network Management | Author: Stephane Litkowski | |||
| Datastore Architecture (NMDA) as described in RFC 8242. | <mailto:slitkows.ietf@gmail.com> | |||
| Author: Yingzhen Qu | ||||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | ||||
| <mailto:acee@cisco.com> | ||||
| Author: Pushpasis Sarkar | ||||
| <mailto:pushpasis.ietf@gmail.com> | ||||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as | "; | |||
| authors of the code. All rights reserved. | description | |||
| "The YANG module defines a generic framework for Segment | ||||
| Routing. It is to be augmented by models for different | ||||
| SR data planes. | ||||
| Redistribution and use in source and binary forms, with or | This YANG model conforms to the Network Management | |||
| without modification, is permitted pursuant to, and subject | Datastore Architecture (NMDA) as described in RFC 8242. | |||
| 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; | Copyright (c) 2020 IETF Trust and the persons identified as | |||
| see the RFC itself for full legal notices. | authors of the code. All rights reserved. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | Redistribution and use in source and binary forms, with or | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | without modification, is permitted pursuant to, and subject | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | to the license terms contained in, the Simplified BSD License | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| they appear in all capitals, as shown here."; | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | ||||
| reference "RFC XXXX"; | This version of this YANG module is part of RFC XXXX; | |||
| see the RFC itself for full legal notices. | ||||
| revision 2020-07-09 { | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| description | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| "Initial Version"; | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| reference "RFC XXXX: YANG Data Model for Segment Routing."; | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| } | they appear in all capitals, as shown here."; | |||
| augment "/rt:routing" { | reference "RFC XXXX"; | |||
| 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; | ||||
| import ietf-inet-types { | revision 2020-07-24 { | |||
| prefix inet; | description | |||
| reference "RFC 6991: Common YANG Data Types"; | "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 models for different SR | ||||
| data planes."; | ||||
| reference "RFC 8402: Segment Routing Architecture."; | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| <CODE BEGINS> file "ietf-segment-routing-common@2020-07-24.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: Stephane Litkowski | |||
| Author: Jeff Tantsura | <mailto:slitkows.ietf@gmail.com> | |||
| <jefftant.ietf@gmail.com> | Author: Yingzhen Qu | |||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | ||||
| <mailto:acee@cisco.com> | ||||
| Author: Pushpasis Sarkar | ||||
| <mailto:pushpasis.ietf@gmail.com> | ||||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| "; | "; | |||
| description | description | |||
| "The YANG module defines a collection of generic types and | "The YANG module defines a collection of generic types and | |||
| grouping for Segment Routing (SR) as described in RFC 8402. | groupings for Segment Routing (SR) as described in RFC 8402. | |||
| This YANG model conforms to the Network Management | This YANG model conforms to the Network Management | |||
| Datastore Architecture (NMDA) as described in RFC 8242. | Datastore Architecture (NMDA) as described in RFC 8242. | |||
| Copyright (c) 2020 IETF Trust and the persons identified as | Copyright (c) 2020 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
| to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| 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"; | |||
| revision 2020-07-09 { | revision 2020-07-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 { | |||
| } | description | |||
| "Configurable last hop behavior."; | ||||
| reference "RFC 8660: Segment Routing with the MPLS Data Plane"; | ||||
| } | ||||
| feature sid-last-hop-behavior { | identity prefix-sid-algorithm { | |||
| description | description | |||
| "Configurable last hop behavior."; | "Base identity for prefix-sid algorithm."; | |||
| reference "RFC 8660: Segment Routing with the MPLS Data Plane"; | reference "RFC 8402: Segment Routing Architecture"; | |||
| } | } | |||
| identity prefix-sid-algorithm { | identity prefix-sid-algorithm-shortest-path { | |||
| description | base prefix-sid-algorithm; | |||
| "Base identity for prefix-sid algorithm."; | description | |||
| } | "Shortest Path First (SPF) prefix-sid algorithm. This | |||
| is the default algorithm."; | ||||
| } | ||||
| identity prefix-sid-algorithm-shortest-path { | identity prefix-sid-algorithm-strict-spf { | |||
| base prefix-sid-algorithm; | base prefix-sid-algorithm; | |||
| description | description | |||
| "Shortest Path First (SPF) prefix-sid algorithm. This | "This algorithm mandates that the packet is forwarded | |||
| is the default algorithm."; | according to ECMP-aware SPF algorithm."; | |||
| } | } | |||
| identity prefix-sid-algorithm-strict-spf { | grouping srlr { | |||
| base prefix-sid-algorithm; | description | |||
| description | "Grouping for SR Label Range configuration."; | |||
| "This algorithm mandates that the packet is forwarded | leaf lower-bound { | |||
| according to ECMP-aware SPF algorithm."; | type uint32; | |||
| } | description | |||
| "Lower value in the label range."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| must "../lower-bound < ../upper-bound" { | ||||
| error-message | ||||
| "The upper-bound must be larger than the lower-bound."; | ||||
| description | ||||
| "The value must be greater than 'lower-bound'."; | ||||
| } | ||||
| description | ||||
| "Upper value in the label range."; | ||||
| } | ||||
| } | ||||
| grouping srlr { | grouping srgb { | |||
| description | description | |||
| "Grouping for SR Label Range configuration."; | "Grouping for SR Global Label range."; | |||
| leaf lower-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Lower value in the label range."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| must "../lower-bound < ../upper-bound" { | ||||
| error-message | ||||
| "The upper-bound must be larger than the lower-bound."; | ||||
| description | ||||
| "The value must be greater than 'lower-bound'."; | ||||
| } | ||||
| description | ||||
| "Upper value in the label range."; | ||||
| } | ||||
| } | ||||
| grouping srgb { | ||||
| description | ||||
| "Grouping for SR Global Label range."; | ||||
| list srgb { | ||||
| key "lower-bound upper-bound"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of global blocks to be advertised."; | ||||
| uses srlr; | ||||
| } | ||||
| } | ||||
| grouping srlb { | list srgb { | |||
| description | key "lower-bound upper-bound"; | |||
| "Grouping for SR Local Block range."; | ordered-by user; | |||
| list srlb { | description | |||
| key "lower-bound upper-bound"; | "List of global blocks to be advertised."; | |||
| ordered-by user; | uses srlr; | |||
| description | } | |||
| "List of SRLBs."; | } | |||
| uses srlr; | ||||
| } | ||||
| } | ||||
| grouping sid-value-type { | grouping srlb { | |||
| description | description | |||
| "Defines how the SID value is expressed."; | "Grouping for SR Local Block range."; | |||
| leaf value-type { | list srlb { | |||
| type enumeration { | key "lower-bound upper-bound"; | |||
| enum "index" { | ordered-by user; | |||
| description | description | |||
| "The value will be interpreted as an index."; | "List of SRLBs."; | |||
| } | 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 sid-value-type { | |||
| description | description | |||
| "This grouping defines cfg of prefix SID."; | "Defines how the SID value is expressed."; | |||
| leaf value-type { | ||||
| type enumeration { | ||||
| enum "index" { | ||||
| description | ||||
| "The value will be interpreted as an index."; | ||||
| } | ||||
| enum "absolute" { | ||||
| description | ||||
| "The value will become interpreted as an absolute | ||||
| value."; | ||||
| } | ||||
| } | ||||
| default "index"; | ||||
| description | ||||
| "This leaf defines how value must be interpreted."; | ||||
| } | ||||
| } | ||||
| leaf prefix { | grouping prefix-sid { | |||
| type inet:ip-prefix; | description | |||
| description | "This grouping defines cfg of prefix SID."; | |||
| "connected prefix sid."; | leaf prefix { | |||
| } | type inet:ip-prefix; | |||
| uses prefix-sid-attributes; | description | |||
| } | "connected prefix sid."; | |||
| } | ||||
| uses prefix-sid-attributes; | ||||
| } | ||||
| grouping ipv4-sid { | grouping ipv4-sid { | |||
| description | description | |||
| "Grouping for an IPv4 prefix SID."; | "Grouping for an IPv4 prefix SID."; | |||
| leaf prefix { | leaf prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| description | description | |||
| "Connected IPv4 prefix sid."; | "Connected IPv4 prefix sid."; | |||
| } | } | |||
| uses prefix-sid-attributes; | uses prefix-sid-attributes; | |||
| } | } | |||
| grouping ipv6-sid { | grouping ipv6-sid { | |||
| description | description | |||
| "Grouping for an IPv6 prefix SID."; | "Grouping for an IPv6 prefix SID."; | |||
| leaf prefix { | leaf prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "Connected ipv6 prefix sid."; | "Connected ipv6 prefix sid."; | |||
| } | } | |||
| uses prefix-sid-attributes; | uses prefix-sid-attributes; | |||
| } | } | |||
| grouping last-hop-behavior { | grouping last-hop-behavior { | |||
| description | description | |||
| "Defines last hop behavior"; | "Defines last hop behavior"; | |||
| leaf last-hop-behavior { | leaf last-hop-behavior { | |||
| if-feature "sid-last-hop-behavior"; | if-feature "sid-last-hop-behavior"; | |||
| type enumeration { | type enumeration { | |||
| enum "explicit-null" { | enum "explicit-null" { | |||
| description | description | |||
| "Use explicit-null for the SID."; | "Use explicit-null for the SID."; | |||
| } | } | |||
| enum "no-php" { | enum "no-php" { | |||
| description | description | |||
| "Do not use Penultimate Hop Popping (PHP) | "Do not use Penultimate Hop Popping (PHP) | |||
| for the SID."; | for the SID."; | |||
| } | } | |||
| enum "php" { | enum "php" { | |||
| description | description | |||
| "Use PHP for the SID."; | "Use PHP for the SID."; | |||
| } | } | |||
| } | ||||
| description | ||||
| "Configure last hop behavior."; | ||||
| } | } | |||
| description | } | |||
| "Configure last hop behavior."; | ||||
| } | ||||
| } | ||||
| grouping node-capabilities { | grouping node-capabilities { | |||
| description | description | |||
| "Containing SR node capabilities."; | "Containing SR node capabilities."; | |||
| container node-capabilities { | container node-capabilities { | |||
| config false; | config false; | |||
| description | description | |||
| "Shows the SR capability of the node."; | "Shows the SR capability of the node."; | |||
| leaf entropy-readable-label-depth { | leaf entropy-readable-label-depth { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Maximum label stack depth that a router can read."; | "Maximum label stack depth that a router can read."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping prefix-sid-attributes { | grouping prefix-sid-attributes { | |||
| description | description | |||
| "Grouping for Segment Routing (SR) prefix attributes."; | "Grouping for Segment Routing (SR) prefix attributes."; | |||
| uses sid-value-type; | uses sid-value-type; | |||
| leaf start-sid { | leaf start-sid { | |||
| type uint32; | type uint32; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Value associated with prefix. The value must be | "Value associated with prefix. The value must be | |||
| interpreted in the context of value-type."; | interpreted in the context of value-type."; | |||
| } | } | |||
| leaf range { | leaf range { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Indicates how many SIDs can be allocated."; | "Indicates how many SIDs can be allocated."; | |||
| } | } | |||
| leaf algorithm { | leaf algorithm { | |||
| type identityref { | type identityref { | |||
| base prefix-sid-algorithm; | base prefix-sid-algorithm; | |||
| } | } | |||
| description | description | |||
| "Prefix-sid algorithm."; | "Prefix-sid algorithm."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| <CODE BEGINS> file "ietf-segment-routing-mpls@2020-07-09.yang" | <CODE BEGINS> file "ietf-segment-routing-mpls@2020-07-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; | |||
| } | } | |||
| import ietf-segment-routing-common { | import ietf-segment-routing-common { | |||
| prefix sr-cmn; | prefix sr-cmn; | |||
| } | } | |||
| 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 | Author: Stephane Litkowski | |||
| <mailto:slitkows.ietf@gmail.com> | <mailto:slitkows.ietf@gmail.com> | |||
| Editor: Yingzhen Qu | Author: Yingzhen Qu | |||
| <mailto:yingzhen.qu@futurewei.com> | <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> | ||||
| Author: Acee Lindem | "; | |||
| <mailto:acee@cisco.com> | description | |||
| Author: Pushpasis Sarkar | "The YANG module defines a generic configuration model for | |||
| <mailto:pushpasis.ietf@gmail.com> | Segment Routing MPLS data plane. | |||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| "; | This YANG model conforms to the Network Management | |||
| description | Datastore Architecture (NMDA) as described in RFC 8242. | |||
| "The YANG module defines a generic configuration model for | ||||
| Segment Routing MPLS data plane. | ||||
| This YANG model conforms to the Network Management | Copyright (c) 2020 IETF Trust and the persons identified as | |||
| Datastore Architecture (NMDA) as described in RFC 8242. | authors of the code. All rights reserved. | |||
| Copyright (c) 2020 IETF Trust and the persons identified as | Redistribution and use in source and binary forms, with or | |||
| authors of the code. All rights reserved. | 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). | ||||
| Redistribution and use in source and binary forms, with or | This version of this YANG module is part of RFC XXXX; | |||
| without modification, is permitted pursuant to, and subject | see the RFC itself for full legal notices. | |||
| 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; | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| see the RFC itself for full legal notices. | 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."; | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | reference "RFC XXXX"; | |||
| 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."; | ||||
| reference "RFC XXXX"; | revision 2020-07-24 { | |||
| description | ||||
| "Initial Version"; | ||||
| reference "RFC XXXX: YANG Data Model for Segment Routing."; | ||||
| } | ||||
| revision 2020-07-09 { | feature mapping-server { | |||
| description | description | |||
| "Initial Version"; | "Support for Segment Routing Mapping Server (SRMS)."; | |||
| reference "RFC XXXX: YANG Data Model for Segment Routing."; | reference "RFC 8661: Segment Routing MPLS Interworking with LDP"; | |||
| } | } | |||
| feature mapping-server { | feature protocol-srgb { | |||
| description | description | |||
| "Support for Segment Routing Mapping Server (SRMS)."; | "Support for per-protocol Segment Routing Global Block | |||
| reference "RFC 8661: Segment Routing MPLS Interworking with LDP"; | (SRGB) configuration."; | |||
| } | reference "RFC 8660: Segment Routing with the MPLS Data Plane"; | |||
| } | ||||
| feature protocol-srgb { | feature max-sid-depth { | |||
| description | description | |||
| "Support for per-protocol Segment Routing Global Block | "Support for signaling MSD (Maximum SID Depth) in IGP."; | |||
| (SRGB) configuration."; | reference "RFC 8476: Signaling Maximum SID Depth (MSD) | |||
| reference "RFC 8660: Segment Routing with the MPLS Data Plane"; | Using OSPF | |||
| } | RFC 8491: Signaling Maximum SID Depth (MSD) | |||
| feature max-sid-depth { | Using IS-IS"; | |||
| description | } | |||
| "Support for signaling MSD (Maximum SID Depth) in IGP."; | ||||
| reference "RFC 8476: Signaling Maximum SID Depth (MSD) | ||||
| Using OSPF | ||||
| RFC 8491: Signaling Maximum SID Depth (MSD) | ||||
| 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 | description | |||
| "This type defines IS-IS system-id using pattern, | "This type defines IS-IS system-id using pattern, | |||
| An example system-id is 0143.0438.AEF0"; | An example system-id is 0143.0438.AEF0"; | |||
| } | } | |||
| typedef router-id { | typedef router-id { | |||
| type union { | type union { | |||
| type system-id; | type system-id; | |||
| type rt-types:router-id; | type rt-types:router-id; | |||
| } | } | |||
| description | description | |||
| "OSPF/BGP router-id or ISIS system ID."; | "OSPF/BGP router-id or ISIS system ID."; | |||
| } | } | |||
| grouping sr-controlplane { | grouping sr-controlplane { | |||
| description | description | |||
| "Defines protocol configuration."; | "Defines protocol configuration."; | |||
| container segment-routing { | container segment-routing { | |||
| description | description | |||
| "Segment Routing global configuration."; | "Segment Routing global configuration."; | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default "false"; | default "false"; | |||
| description | description | |||
| "Enables segment-routing protocol extensions."; | "Enables segment-routing protocol extensions."; | |||
| } | } | |||
| container bindings { | container bindings { | |||
| description | description | |||
| "Control of binding advertisement and reception."; | "Control of binding advertisement and reception."; | |||
| container advertise { | container advertise { | |||
| description | description | |||
| "Control advertisement of local mappings | "Control advertisement of local mappings | |||
| in binding TLVs."; | in binding TLVs."; | |||
| leaf-list policies { | leaf-list policies { | |||
| type string; | type leafref { | |||
| description | path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls" | |||
| "List of binding advertisement policies."; | + "/sr-mpls:bindings/sr-mpls:mapping-server" | |||
| } | + "/sr-mpls:policy/sr-mpls:name"; | |||
| } | } | |||
| leaf receive { | description | |||
| type boolean; | "List of binding advertisement policies."; | |||
| default "true"; | } | |||
| description | } | |||
| "Allow the reception and usage of binding TLVs."; | leaf receive { | |||
| } | type boolean; | |||
| } | default "true"; | |||
| } | description | |||
| } | "Allow the reception and usage of binding TLVs."; | |||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping igp-interface { | grouping igp-interface { | |||
| description | description | |||
| "Grouping for IGP interface configuration."; | "Grouping for IGP interface configuration."; | |||
| container segment-routing { | container segment-routing { | |||
| description | description | |||
| "Container for SR interface configuration."; | "Container for SR interface configuration."; | |||
| container adjacency-sid { | container adjacency-sid { | |||
| description | description | |||
| "Adjacency SID configuration."; | "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; | |||
| description | leaf value { | |||
| "Value of the Adj-SID."; | type uint32; | |||
| } | description | |||
| leaf protected { | "Value of the Adj-SID."; | |||
| type boolean; | } | |||
| default false; | leaf protected { | |||
| description | type boolean; | |||
| "It is used to protect the mannual adj-SID."; | default false; | |||
| } | description | |||
| description | "It is used to protect the manual adj-SID."; | |||
| "List of adj-sid configuration."; | } | |||
| } | description | |||
| list advertise-adj-group-sid { | "List of adj-sid configuration."; | |||
| key "group-id"; | } | |||
| description | list advertise-adj-group-sid { | |||
| "Control advertisement of S flag. Enable advertisement | key "group-id"; | |||
| of a common Adj-SID for parallel links."; | description | |||
| leaf group-id { | "Control advertisement of S flag. Enable advertisement | |||
| type uint32; | of a common Adj-SID for parallel links."; | |||
| description | leaf group-id { | |||
| "The value is an internal value to identify a | type uint32; | |||
| group-ID. Interfaces with the same group-ID will be | description | |||
| bundled together."; | "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" { | leaf advertise-protection { | |||
| description | type enumeration { | |||
| "A single Adj-SID is associated with the adjacency | enum "single" { | |||
| and reflects the protection configuration."; | description | |||
| } | "A single Adj-SID is associated with the adjacency | |||
| enum "dual" { | and reflects the protection configuration."; | |||
| description | } | |||
| "Two Adj-SIDs will be associated with the adjacency | enum "dual" { | |||
| if the interface is protected. In this case, will | description | |||
| be advertised with backup flag set, the other will | "Two Adj-SIDs will be associated with the adjacency | |||
| be advertised with theo backup flag clear. In case | if the interface is protected. In this case, will | |||
| protection is not configured, single Adj-SID will | be advertised with backup flag set, the other will | |||
| be advertised with the backup flag clear."; | 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."; | |||
| } | } | |||
| } | } | |||
| } | ||||
| } | ||||
| grouping max-sid-depth { | grouping max-sid-depth { | |||
| description | description | |||
| "Maximum SID Depth (MSD)D configuration grouping."; | "Maximum SID Depth (MSD)D configuration grouping."; | |||
| leaf node-msd { | leaf node-msd { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Node MSD is the lowest MSD supported by the node."; | "Node MSD is the lowest MSD supported by the node."; | |||
| } | } | |||
| container link-msd { | container link-msd { | |||
| description | description | |||
| "MSD supported by an individual interface."; | "MSD supported by an individual interface."; | |||
| list link-msds { | list link-msds { | |||
| key "interface"; | key "interface"; | |||
| description | description | |||
| "List of link MSDs."; | "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" { | leaf interface { | |||
| description | type if:interface-ref; | |||
| "This augments routing data model (RFC 8349) | description | |||
| with Segment Routing (SR)."; | "Reference to device interface."; | |||
| container sr-mpls { | } | |||
| description | leaf msd { | |||
| "Segment Routing global configuration."; | type uint8; | |||
| uses sr-cmn:node-capabilities; | description | |||
| container msd { | "MSD supported by the interface."; | |||
| 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; | augment "/rt:routing/sr:segment-routing" { | |||
| } | description | |||
| } | "This augments routing data model (RFC 8349) | |||
| } | with Segment Routing (SR)."; | |||
| } | container sr-mpls { | |||
| container connected-prefix-sid-map { | description | |||
| description | "Segment Routing global configuration."; | |||
| "Prefix SID configuration."; | uses sr-cmn:node-capabilities; | |||
| list connected-prefix-sid { | container msd { | |||
| key "prefix algorithm"; | if-feature "max-sid-depth"; | |||
| description | description | |||
| "List of prefix SID mapped to IPv4/IPv6 | "MSD configuration."; | |||
| local prefixes."; | uses max-sid-depth; | |||
| uses sr-cmn:prefix-sid; | } | |||
| uses sr-cmn:last-hop-behavior; | container bindings { | |||
| } | description | |||
| } | "List of bindings."; | |||
| container local-prefix-sid { | container mapping-server { | |||
| description | if-feature "mapping-server"; | |||
| "Local sid configuration."; | description | |||
| list local-prefix-sid { | "Configuration of mapping-server local entries."; | |||
| key "prefix algorithm"; | list policy { | |||
| description | key "name"; | |||
| "List of local IPv4/IPv6 prefix-sids."; | description | |||
| uses sr-cmn:prefix-sid; | "List mapping-server policies."; | |||
| } | leaf name { | |||
| } | type string; | |||
| } | description | |||
| container global-srgb { | "Name of the mapping policy."; | |||
| description | } | |||
| "Global SRGB configuration."; | container entries { | |||
| uses sr-cmn:srgb; | description | |||
| } | "IPv4/IPv6 mapping entries."; | |||
| container srlb { | list mapping-entry { | |||
| description | key "prefix algorithm"; | |||
| "Segment Routing Local Block (SRLB) configuration."; | description | |||
| uses sr-cmn:srlb; | "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 { | list label-blocks { | |||
| config false; | config false; | |||
| description | description | |||
| "List of label blocks currently in use."; | "List of label blocks currently in use."; | |||
| leaf lower-bound { | leaf lower-bound { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Lower bound of the label block."; | "Lower bound of the label block."; | |||
| } | } | |||
| leaf upper-bound { | leaf upper-bound { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Upper bound of the label block."; | "Upper bound of the label block."; | |||
| } | } | |||
| leaf size { | leaf size { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Number of indexes in the block."; | "Number of indexes in the block."; | |||
| } | } | |||
| leaf free { | leaf free { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Number of free indexes in the block."; | "Number of free indexes in the block."; | |||
| } | } | |||
| leaf used { | leaf used { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Number of indexes in use in the block."; | "Number of indexes in use in the block."; | |||
| } | } | |||
| 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."; | "Scope of this label block."; | |||
| } | } | |||
| } | } | |||
| container sid-db { | container sid-db { | |||
| config false; | config false; | |||
| description | description | |||
| "List of prefix and SID associations."; | "List of prefix and SID associations."; | |||
| list sid { | list sid { | |||
| key "target sid source source-protocol binding-type"; | key "target sid source source-protocol binding-type"; | |||
| ordered-by system; | ordered-by system; | |||
| description | description | |||
| "SID Binding."; | "SID Binding."; | |||
| leaf target { | leaf target { | |||
| type string; | type string; | |||
| description | description | |||
| "Defines the target of the binding. It can be a | "Defines the target of the binding. It can be a | |||
| prefix or something else."; | prefix or something else."; | |||
| } | } | |||
| leaf sid { | leaf sid { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Index associated with the prefix."; | "Index associated with the prefix."; | |||
| } | } | |||
| leaf algorithm { | leaf algorithm { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Algorithm to be used for the prefix SID."; | "Algorithm to be used for the prefix SID."; | |||
| } | reference "RFC 8665: OSPF Extensions for Segment Routing | |||
| leaf source { | RFC 8667: IS-IS Extensions for Segment Routing"; | |||
| type inet:ip-address; | } | |||
| description | leaf source { | |||
| "IP address of the router that owns the binding."; | type inet:ip-address; | |||
| } | description | |||
| leaf used { | "IP address of the router that owns the binding."; | |||
| type boolean; | } | |||
| description | leaf used { | |||
| "Indicates if the binding is install in the | type boolean; | |||
| forwarding plane."; | description | |||
| } | "Indicates if the binding is install in the | |||
| leaf source-protocol { | forwarding plane."; | |||
| type leafref { | } | |||
| path "/rt:routing/rt:control-plane-protocols/" | leaf source-protocol { | |||
| + "rt:control-plane-protocol/rt:name"; | type leafref { | |||
| } | path "/rt:routing/rt:control-plane-protocols/" | |||
| description | + "rt:control-plane-protocol/rt:name"; | |||
| "Routing protocol that owns the binding"; | } | |||
| } | description | |||
| leaf binding-type { | "Routing protocol that owns the binding"; | |||
| type enumeration { | } | |||
| enum "prefix-sid" { | leaf binding-type { | |||
| description | type enumeration { | |||
| "Binding is learned from a prefix SID."; | enum "prefix-sid" { | |||
| } | description | |||
| enum "binding-tlv" { | "Binding is learned from a prefix SID."; | |||
| description | } | |||
| "Binding is learned from a binding TLV."; | enum "binding-tlv" { | |||
| } | description | |||
| } | "Binding is learned from a binding TLV."; | |||
| description | } | |||
| "Type of binding."; | } | |||
| } | description | |||
| leaf scope { | "Type of binding."; | |||
| type enumeration { | } | |||
| enum "global" { | leaf scope { | |||
| description | type enumeration { | |||
| "Global SID."; | enum "global" { | |||
| } | description | |||
| enum "local" { | "Global SID."; | |||
| description | } | |||
| "Local SID."; | enum "local" { | |||
| } | description | |||
| } | "Local SID."; | |||
| description | } | |||
| "SID scoping."; | } | |||
| } | 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 conflict."; | |||
| list srgb-collisions { | list srgb-collisions { | |||
| description | description | |||
| "List of SRGB blocks that conflict."; | "List of SRGB blocks that conflict."; | |||
| leaf lower-bound { | leaf lower-bound { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Lower value in the block."; | "Lower value in the block."; | |||
| } | } | |||
| leaf upper-bound { | leaf upper-bound { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Upper value in the block."; | "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 SRGB collision."; | "Routing protocol reference for SRGB collision."; | |||
| } | } | |||
| leaf originating-rtr-id { | leaf originating-rtr-id { | |||
| type router-id; | type router-id; | |||
| description | description | |||
| "Originating Router ID of this SRGB block."; | "Originating Router ID of this SRGB block."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| notification segment-routing-global-sid-collision { | notification segment-routing-global-sid-collision { | |||
| description | description | |||
| "This notification is sent when a new mapping is learned | "This notification is sent when a new mapping is learned | |||
| containing s mapping where the SID is already used. | containing s mapping where the SID is already used. | |||
| The notification generation must be throttled with at least | The notification generation must be throttled with at least | |||
| a 5 second gap between notifications."; | a 5 second gap between notifications."; | |||
| leaf received-target { | leaf received-target { | |||
| type string; | type string; | |||
| description | description | |||
| "Target received in the router advertisement that caused | "Target received in the router advertisement that caused | |||
| the SID collision."; | the SID collision."; | |||
| } | } | |||
| leaf new-sid-rtr-id { | leaf new-sid-rtr-id { | |||
| type router-id; | type router-id; | |||
| description | description | |||
| "Router ID that advertised the conflicting SID."; | "Router ID that advertised the conflicting SID."; | |||
| } | } | |||
| leaf original-target { | leaf original-target { | |||
| type string; | type string; | |||
| description | description | |||
| "Target already available in the database with the same SID | "Target already available in the database with the same SID | |||
| as the received target."; | as the received target."; | |||
| } | } | |||
| leaf original-sid-rtr-id { | leaf original-sid-rtr-id { | |||
| type router-id; | type router-id; | |||
| description | description | |||
| "Router-ID for the router that originally advertised the | "Router-ID for the router that originally advertised the | |||
| conflicting SID, i.e., the instance in the database."; | conflicting SID, i.e., the instance in the database."; | |||
| } | } | |||
| leaf index { | leaf index { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Value of the index used by two different prefixes."; | "Value of the index used by two different prefixes."; | |||
| } | } | |||
| 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 conflicting SID."; | |||
| } | } | |||
| } | } | |||
| notification segment-routing-index-out-of-range { | notification segment-routing-index-out-of-range { | |||
| description | description | |||
| "This notification is sent when a binding is received | "This notification is sent when a binding is received | |||
| containing a segment index which is out of the local | containing a segment index which is out of the local | |||
| configured ranges. The notification generation must be | configured ranges. The notification generation must be | |||
| throttled with at least a 5 second gap between | throttled with at least a 5 second gap between | |||
| notifications."; | notifications."; | |||
| leaf received-target { | leaf received-target { | |||
| type string; | type string; | |||
| description | description | |||
| "Target received in the router advertisement with | "Target received in the router advertisement with | |||
| the out-of-range index."; | the out-of-range index."; | |||
| } | } | |||
| leaf received-index { | leaf received-index { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Value of the index received."; | "Value of the index received."; | |||
| } | } | |||
| 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 out-of-range indexd."; | "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]. | |||
| End of changes. 70 change blocks. | ||||
| 840 lines changed or deleted | 845 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/ | ||||