| < draft-ietf-spring-sr-yang-00.txt | draft-ietf-spring-sr-yang-01.txt > | |||
|---|---|---|---|---|
| SPRING Working Group S. Litkowski | SPRING Working Group S. Litkowski | |||
| Internet-Draft Orange Business Service | Internet-Draft Orange Business Service | |||
| Intended status: Standards Track Y. Qu | Intended status: Standards Track Y. Qu | |||
| Expires: January 21, 2016 Cisco Systems | Expires: April 19, 2016 Cisco Systems | |||
| P. Sarkar | P. Sarkar | |||
| Juniper Networks | Juniper Networks | |||
| J. Tantsura | J. Tantsura | |||
| Ericsson | Ericsson | |||
| July 20, 2015 | October 17, 2015 | |||
| YANG Data Model for Segment Routing | YANG Data Model for Segment Routing | |||
| draft-ietf-spring-sr-yang-00 | draft-ietf-spring-sr-yang-01 | |||
| Abstract | Abstract | |||
| This document defines a YANG data model ([RFC6020]) for segment | This document defines a YANG data model ([RFC6020]) for segment | |||
| routing ([I-D.ietf-spring-segment-routing]) configuration and | routing ([I-D.ietf-spring-segment-routing]) configuration and | |||
| operation. This YANG model is intended to be used on network | operation. This YANG model is intended to be used on network | |||
| elements to configure or operate segment routing. This document | elements to configure or operate segment routing. This document | |||
| defines also generic containers that SHOULD be reused by IGP protocol | defines also generic containers that SHOULD be reused by IGP protocol | |||
| modules to support segment routing. | modules to support segment routing. | |||
| skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
| 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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 21, 2016. | This Internet-Draft will expire on April 19, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://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 34 ¶ | skipping to change at page 2, line 34 ¶ | |||
| 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 | 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. IGP Control plane configuration . . . . . . . . . . . . . . . 6 | 4. IGP Control plane configuration . . . . . . . . . . . . . . . 6 | |||
| 4.1. IGP interface configuration . . . . . . . . . . . . . . . 6 | 4.1. IGP interface configuration . . . . . . . . . . . . . . . 6 | |||
| 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6 | 4.1.1. Adjacency SID properties . . . . . . . . . . . . . . 6 | |||
| 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6 | 4.1.1.1. Bundling . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7 | 4.1.1.2. Protection . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. States . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 21 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 21 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines a YANG data model for segment routing | This document defines a YANG data model for segment routing | |||
| configuration and operation. This document does not define the IGP | configuration and operation. This document does not define the IGP | |||
| extensions to support segment routing but defines generic groupings | extensions to support segment routing but defines generic groupings | |||
| that SHOULD be reused by IGP extension modules. The reason of this | that SHOULD be reused by IGP extension modules. The reason of this | |||
| skipping to change at page 4, line 20 ¶ | skipping to change at page 4, line 20 ¶ | |||
| | | +--rw start-sid uint32 | | | +--rw start-sid uint32 | |||
| | | +--rw range? uint32 | | | +--rw range? uint32 | |||
| | | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | | | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | |||
| | +--rw ipv6 | | +--rw ipv6 | |||
| | +--rw ipv6-prefix-sid* [prefix] | | +--rw ipv6-prefix-sid* [prefix] | |||
| | +--rw prefix inet:ipv6-prefix | | +--rw prefix inet:ipv6-prefix | |||
| | +--rw value-type? enumeration | | +--rw value-type? enumeration | |||
| | +--rw start-sid uint32 | | +--rw start-sid uint32 | |||
| | +--rw range? uint32 | | +--rw range? uint32 | |||
| | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | | +--rw last-hop-behavior? enumeration {sid-last-hop-behavior}? | |||
| +--rw srgb* [lower-bound upper-bound] | +--rw global-srgb | |||
| +--rw lower-bound uint32 | +--rw srgb* [lower-bound upper-bound] | |||
| +--rw upper-bound uint32 | +--rw lower-bound uint32 | |||
| +--rw upper-bound uint32 | ||||
| augment /rt:routing-state/rt:routing-instance: | augment /rt:routing-state/rt:routing-instance: | |||
| +--ro segment-routing | +--ro segment-routing | |||
| +--ro node-capabilities | +--ro node-capabilities | |||
| | +--ro transport-planes* [transport-plane] | | +--ro transport-planes* [transport-plane] | |||
| | | +--ro transport-plane identityref | | | +--ro transport-plane identityref | |||
| | +--ro segment-stack-push-limit? uint8 | | +--ro segment-stack-push-limit? uint8 | |||
| | +--ro readable-label-stack-depth? uint8 | | +--ro readable-label-stack-depth? uint8 | |||
| +--ro label-blocks* | +--ro label-blocks* | |||
| | +--ro lower-bound? uint32 | | +--ro lower-bound? uint32 | |||
| | +--ro upper-bound? uint32 | | +--ro upper-bound? uint32 | |||
| skipping to change at page 8, line 16 ¶ | skipping to change at page 8, line 16 ¶ | |||
| 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. | |||
| 7. YANG Module | 7. YANG Module | |||
| <CODE BEGINS> file "ietf-segment-routing@2015-06-22.yang" | <CODE BEGINS> file "ietf-segment-routing@2015-10-17.yang" | |||
| module ietf-segment-routing { | module ietf-segment-routing { | |||
| namespace "urn:ietf:params:xml:ns:" | namespace "urn:ietf:params:xml:ns:" | |||
| + "yang:ietf-segment-routing"; | + "yang:ietf-segment-routing"; | |||
| prefix sr; | prefix sr; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-routing { | import ietf-routing { | |||
| prefix "rt"; | prefix "rt"; | |||
| } | } | |||
| organization | organization | |||
| "IETF SPRING Working Group"; | "IETF SPRING Working Group"; | |||
| contact | contact | |||
| "WG List: <mailto:spring@ietf.org> | "WG List: <mailto:spring@ietf.org> | |||
| Editor: Stephane Litkowski | Editor: Stephane Litkowski | |||
| <mailto:stephane.litkowski@orange.com> | <mailto:stephane.litkowski@orange.com> | |||
| Acee Lindem | Author: Acee Lindem | |||
| <mailto:acee@cisco.com> | <mailto:acee@cisco.com> | |||
| Yingzhen Qu | Author: Yingzhen Qu | |||
| <mailto:yiqu@cisco.com> | <mailto:yiqu@cisco.com> | |||
| Pushpasis Sarkar | Author: Pushpasis Sarkar | |||
| <mailto:psarkar@juniper.net> | <mailto:psarkar@juniper.net> | |||
| Ing-Wher Chen | Author: Ing-Wher Chen | |||
| <mailto:ing-wher.chen@ericsson.com> | <mailto:ing-wher.chen@ericsson.com> | |||
| Jeff Tantsura | Author: Jeff Tantsura | |||
| <jeff.tantsura@ericsson.com> | <jeff.tantsura@ericsson.com> | |||
| "; | "; | |||
| description | description | |||
| "The YANG module defines a generic configuration model for | "The YANG module defines a generic configuration model for | |||
| Segment routing common across all of the vendor | Segment routing common across all of the vendor | |||
| implementations."; | implementations."; | |||
| revision 2015-06-22 { | revision 2015-10-17 { | |||
| description | description " | |||
| " | * Add per-protocol SRGB config feature | |||
| * Move SRBG config to a grouping | ||||
| "; | ||||
| reference | ||||
| "RFC XXXX: YANG Data Model for Segment Routing."; | ||||
| } | ||||
| revision 2015-06-22 { | ||||
| description " | ||||
| * Prefix SID config moved to | * Prefix SID config moved to | |||
| connected-prefix-sid-map in global SR cfg | connected-prefix-sid-map in global SR cfg | |||
| rather than IGP. | rather than IGP. | |||
| "; | "; | |||
| reference "draft-litkowski-spring-sr-yang-01"; | reference "draft-litkowski-spring-sr-yang-01"; | |||
| } | } | |||
| revision 2015-04-23 { | revision 2015-04-23 { | |||
| description " | description " | |||
| * Node flag deprecated from prefixSID | * Node flag deprecated from prefixSID | |||
| * SR interface cfg moved to protocol | * SR interface cfg moved to protocol | |||
| * Adding multiple binding policies for SRMS | * Adding multiple binding policies for SRMS | |||
| "; | "; | |||
| reference ""; | reference ""; | |||
| } | } | |||
| revision 2015-02-27 { | revision 2015-02-27 { | |||
| description "Initial"; | description "Initial"; | |||
| reference "draft-litkowski-spring-sr-yang-00"; | reference "draft-litkowski-spring-sr-yang-00"; | |||
| } | } | |||
| /* Identities */ | ||||
| identity segment-routing-transport { | ||||
| description | ||||
| "Base identity for segment routing transport."; | ||||
| } | ||||
| identity segment-routing-transport-mpls { | ||||
| base segment-routing-transport; | ||||
| description | ||||
| "This identity represents MPLS transport for segment | ||||
| routing."; | ||||
| } | ||||
| /* Features */ | ||||
| feature mapping-server { | ||||
| description | ||||
| "Support of SRMS."; | ||||
| } | ||||
| feature sid-last-hop-behavior { | ||||
| description | ||||
| "Configurable last hop behavior."; | ||||
| } | ||||
| /* Groupings */ | ||||
| grouping controlplane-cfg { | ||||
| container segment-routing { | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "Enables segment-routing | ||||
| protocol extensions."; | ||||
| } | ||||
| container bindings { | ||||
| container advertise { | ||||
| leaf-list policies { | ||||
| type string; | ||||
| description | ||||
| "List of policies to be advertised."; | ||||
| } | ||||
| description | ||||
| "Authorize the advertise | ||||
| of local mappings in binding TLV."; | ||||
| } | ||||
| leaf receive { | ||||
| type boolean; | ||||
| default true; | ||||
| description | ||||
| "Authorize the reception and usage | ||||
| of binding TLV."; | ||||
| } | ||||
| description | ||||
| "Control of binding advertisement | ||||
| and reception."; | ||||
| } | ||||
| description | /* Identities */ | |||
| "segment routing global config."; | identity segment-routing-transport { | |||
| } | description | |||
| description | "Base identity for segment routing transport."; | |||
| "Defines protocol configuration."; | } | |||
| } | identity segment-routing-transport-mpls { | |||
| base segment-routing-transport; | ||||
| description | ||||
| "This identity represents MPLS transport for segment | ||||
| routing."; | ||||
| } | ||||
| grouping sid-value-type { | /* Features */ | |||
| leaf value-type { | feature mapping-server { | |||
| type enumeration { | description | |||
| enum index { | "Support of SRMS."; | |||
| 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."; | ||||
| } | ||||
| description | ||||
| "Defines how the SID value is expressed."; | ||||
| } | ||||
| grouping ipv4-sid-cfg { | feature sid-last-hop-behavior { | |||
| description | ||||
| "Configurable last hop behavior."; | ||||
| } | ||||
| leaf prefix { | feature protocol-srgb { | |||
| type inet:ipv4-prefix; | description | |||
| description | "Support per-protocol srgb configuration."; | |||
| "connected prefix sid."; | } | |||
| } | ||||
| uses sid-value-type; | /* Groupings */ | |||
| leaf start-sid { | grouping srgb-cfg { | |||
| type uint32; | list srgb { | |||
| mandatory true; | key "lower-bound upper-bound"; | |||
| description | ordered-by user; | |||
| "Value associated with | leaf lower-bound { | |||
| prefix. The value must | type uint32; | |||
| be interpreted in the | description | |||
| context of value-type."; | "Lower value in the block."; | |||
| } | } | |||
| leaf upper-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Upper value in the block."; | ||||
| } | ||||
| description | ||||
| "List of global blocks to be | ||||
| advertised."; | ||||
| } | ||||
| description | ||||
| "Grouping for SRGB configuration."; | ||||
| } | ||||
| leaf range { | grouping controlplane-cfg { | |||
| type uint32; | container segment-routing { | |||
| description | leaf enabled { | |||
| "Describes how many SIDs could be | type boolean; | |||
| allocated."; | default false; | |||
| } | description | |||
| description | "Enables segment-routing | |||
| "This grouping defines cfg of prefix SID."; | protocol extensions."; | |||
| } | ||||
| container bindings { | ||||
| container advertise { | ||||
| leaf-list policies { | ||||
| type string; | ||||
| description | ||||
| "List of policies to be advertised."; | ||||
| } | ||||
| description | ||||
| "Authorize the advertise | ||||
| of local mappings in binding TLV."; | ||||
| } | ||||
| leaf receive { | ||||
| type boolean; | ||||
| default true; | ||||
| description | ||||
| "Authorize the reception and usage | ||||
| of binding TLV."; | ||||
| } | ||||
| description | ||||
| "Control of binding advertisement | ||||
| and reception."; | ||||
| } | ||||
| } | description | |||
| "segment routing global config."; | ||||
| } | ||||
| description | ||||
| "Defines protocol configuration."; | ||||
| } | ||||
| grouping ipv6-sid-cfg { | grouping sid-value-type { | |||
| leaf prefix { | leaf value-type { | |||
| type inet:ipv6-prefix; | type enumeration { | |||
| description | enum index { | |||
| "connected prefix sid."; | 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."; | ||||
| } | ||||
| description | ||||
| "Defines how the SID value is expressed."; | ||||
| } | ||||
| uses sid-value-type; | grouping ipv4-sid-cfg { | |||
| leaf start-sid { | leaf prefix { | |||
| type uint32; | type inet:ipv4-prefix; | |||
| mandatory true; | description | |||
| description | "connected prefix sid."; | |||
| "Value associated with | } | |||
| prefix. The value must | ||||
| be interpreted in the | ||||
| context of value-type."; | ||||
| } | ||||
| leaf range { | uses sid-value-type; | |||
| type uint32; | ||||
| description | ||||
| "Describes how many SIDs could be | ||||
| allocated."; | ||||
| } | ||||
| description | leaf start-sid { | |||
| "This grouping defines cfg of prefix SID."; | type uint32; | |||
| } | mandatory true; | |||
| description | ||||
| "Value associated with | ||||
| prefix. The value must | ||||
| be interpreted in the | ||||
| context of value-type."; | ||||
| } | ||||
| grouping last-hop-behavior { | leaf range { | |||
| leaf last-hop-behavior { | type uint32; | |||
| if-feature sid-last-hop-behavior; | description | |||
| type enumeration { | "Describes how many SIDs could be | |||
| enum explicit-null { | allocated."; | |||
| description | } | |||
| "Use explicit-null for the SID."; | description | |||
| } | "This grouping defines cfg of prefix SID."; | |||
| enum no-php { | } | |||
| description | ||||
| "Do no use PHP for the SID."; | ||||
| } | ||||
| enum php { | ||||
| description | ||||
| "Use PHP for the SID."; | ||||
| } | ||||
| } | grouping ipv6-sid-cfg { | |||
| description | leaf prefix { | |||
| "Configure last hop behavior."; | type inet:ipv6-prefix; | |||
| } | description | |||
| description | "connected prefix sid."; | |||
| "Defines last hop behavior"; | } | |||
| } | ||||
| grouping igp-interface-cfg { | uses sid-value-type; | |||
| container segment-routing { | ||||
| container adjacency-sid { | leaf start-sid { | |||
| list advertise-adj-group-sid { | type uint32; | |||
| key group-id; | mandatory true; | |||
| description | ||||
| "Value associated with | ||||
| prefix. The value must | ||||
| be interpreted in the | ||||
| context of value-type."; | ||||
| } | ||||
| leaf group-id { | leaf range { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "Describes how many SIDs could be | ||||
| allocated."; | ||||
| } | ||||
| "The value is an internal value to identify | description | |||
| a group-ID. Interfaces with the same | "This grouping defines cfg of prefix SID."; | |||
| group-ID will be bundled together. | } | |||
| "; | ||||
| } | ||||
| description | ||||
| "Control advertisement of S flag. | ||||
| Enable to advertise a common Adj-SID | ||||
| for parallel links."; | ||||
| } | ||||
| leaf advertise-protection { | ||||
| type enumeration { | ||||
| enum "single" { | ||||
| description | ||||
| "A single Adj-SID is associated | ||||
| with the adjacency and reflects | ||||
| the protection configuration."; | ||||
| } | ||||
| enum "dual" { | ||||
| description | ||||
| "Two Adj-SIDs will be associated | ||||
| with the adjacency if interface | ||||
| is protected. In this case | ||||
| one will be enforced with | ||||
| backup flag set, the other | ||||
| will be enforced to backup flag unset. | ||||
| In case, protection is not configured, | ||||
| a single Adj-SID will be advertised | ||||
| with backup flag unset."; | ||||
| } | grouping last-hop-behavior { | |||
| } | leaf last-hop-behavior { | |||
| description | if-feature sid-last-hop-behavior; | |||
| "If set, the Adj-SID refers to an | type enumeration { | |||
| adjacency being protected."; | enum explicit-null { | |||
| } | description | |||
| description | "Use explicit-null for the SID."; | |||
| "Defines the adjacency SID properties."; | } | |||
| } | enum no-php { | |||
| description | description | |||
| "container for SR interface cfg."; | "Do no use PHP for the SID."; | |||
| } | } | |||
| description | enum php { | |||
| "Grouping for IGP interface cfg."; | description | |||
| } | "Use PHP for the SID."; | |||
| } | ||||
| } | ||||
| description | ||||
| "Configure last hop behavior."; | ||||
| } | ||||
| description | ||||
| "Defines last hop behavior"; | ||||
| } | ||||
| /* Cfg */ | grouping igp-interface-cfg { | |||
| container segment-routing { | ||||
| augment "/rt:routing/rt:routing-instance" { | container adjacency-sid { | |||
| description | list advertise-adj-group-sid { | |||
| "This augments routing-instance | key group-id; | |||
| configuration with segment-routing."; | leaf group-id { | |||
| container segment-routing { | type uint32; | |||
| leaf transport-type { | description | |||
| type identityref { | ||||
| base segment-routing-transport; | ||||
| } | ||||
| default "segment-routing-transport-mpls"; | ||||
| description "Dataplane to be used."; | ||||
| } | ||||
| container bindings { | ||||
| container mapping-server { | ||||
| if-feature mapping-server; | ||||
| list policy { | ||||
| key name; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the mapping policy."; | ||||
| } | ||||
| container ipv4 { | ||||
| list mapping-entry { | ||||
| key prefix; | ||||
| uses ipv4-sid-cfg; | ||||
| description | "The value is an internal value to identify | |||
| "Mapping entries."; | a group-ID. Interfaces with the same | |||
| } | group-ID will be bundled together. | |||
| description | "; | |||
| "IPv4 mapping entries."; | } | |||
| } | description | |||
| container ipv6 { | "Control advertisement of S flag. | |||
| list mapping-entry { | Enable to advertise a common Adj-SID | |||
| key prefix; | for parallel links."; | |||
| uses ipv6-sid-cfg; | } | |||
| description | leaf advertise-protection { | |||
| "Mapping entries."; | type enumeration { | |||
| } | enum "single" { | |||
| description | description | |||
| "IPv6 mapping entries."; | "A single Adj-SID is associated | |||
| } | with the adjacency and reflects | |||
| description | the protection configuration."; | |||
| "Definition of mapping policy."; | } | |||
| } | enum "dual" { | |||
| description | description | |||
| "Configuration of mapping-server | "Two Adj-SIDs will be associated | |||
| local entries."; | with the adjacency if interface | |||
| } | is protected. In this case | |||
| container connected-prefix-sid-map { | one will be enforced with | |||
| container ipv4 { | backup flag set, the other | |||
| list ipv4-prefix-sid { | will be enforced to backup flag unset. | |||
| key prefix; | In case, protection is not configured, | |||
| uses ipv4-sid-cfg; | a single Adj-SID will be advertised | |||
| uses last-hop-behavior; | with backup flag unset."; | |||
| description | } | |||
| "List of prefix SID | } | |||
| mapped to IPv4 local prefixes."; | description | |||
| } | "If set, the Adj-SID refers to an | |||
| description | adjacency being protected."; | |||
| "Parameters associated with IPv4 prefix SID"; | } | |||
| } | description | |||
| container ipv6 { | "Defines the adjacency SID properties."; | |||
| list ipv6-prefix-sid { | } | |||
| key prefix; | description | |||
| uses ipv6-sid-cfg; | "container for SR interface cfg."; | |||
| uses last-hop-behavior; | } | |||
| description | description | |||
| "List of prefix SID | "Grouping for IGP interface cfg."; | |||
| mapped to IPv6 local prefixes."; | } | |||
| } | /* Cfg */ | |||
| description | ||||
| "Parameters associated with IPv6 prefix SID"; | ||||
| } | ||||
| description | ||||
| "Prefix SID configuration."; | ||||
| } | ||||
| description | ||||
| "List of bindings."; | ||||
| } | ||||
| list srgb { | ||||
| key "lower-bound upper-bound"; | ||||
| ordered-by user; | ||||
| leaf lower-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Lower value in the block."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Upper value in the block."; | ||||
| } | ||||
| description | ||||
| "List of global blocks to be | ||||
| advertised."; | ||||
| } | ||||
| description | ||||
| "segment routing global config."; | ||||
| } | ||||
| } | ||||
| /* Operational states */ | augment "/rt:routing/rt:routing-instance" { | |||
| description | ||||
| "This augments routing-instance | ||||
| configuration with segment-routing."; | ||||
| container segment-routing { | ||||
| leaf transport-type { | ||||
| type identityref { | ||||
| base segment-routing-transport; | ||||
| } | ||||
| default "segment-routing-transport-mpls"; | ||||
| description "Dataplane to be used."; | ||||
| } | ||||
| container bindings { | ||||
| container mapping-server { | ||||
| if-feature mapping-server; | ||||
| list policy { | ||||
| key name; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the mapping policy."; | ||||
| } | ||||
| container ipv4 { | ||||
| list mapping-entry { | ||||
| key prefix; | ||||
| uses ipv4-sid-cfg; | ||||
| augment "/rt:routing-state/rt:routing-instance" { | description | |||
| description | "Mapping entries."; | |||
| "This augments the operational states | } | |||
| with segment-routing."; | description | |||
| container segment-routing { | "IPv4 mapping entries."; | |||
| container node-capabilities { | } | |||
| list transport-planes { | container ipv6 { | |||
| key transport-plane; | list mapping-entry { | |||
| leaf transport-plane { | key prefix; | |||
| type identityref { | uses ipv6-sid-cfg; | |||
| base segment-routing-transport; | description | |||
| } | "Mapping entries."; | |||
| description | } | |||
| "Transport plane supported"; | description | |||
| } | "IPv6 mapping entries."; | |||
| description | } | |||
| "List of supported transport planes."; | description | |||
| } | "Definition of mapping policy."; | |||
| leaf segment-stack-push-limit { | } | |||
| type uint8; | description | |||
| description | "Configuration of mapping-server | |||
| "Describes the number of segments | local entries."; | |||
| that can be pushed by the node."; | } | |||
| } | container connected-prefix-sid-map { | |||
| leaf readable-label-stack-depth { | container ipv4 { | |||
| type uint8; | list ipv4-prefix-sid { | |||
| description | key prefix; | |||
| "Number of MPLS labels that | uses ipv4-sid-cfg; | |||
| can be read in the stack."; | uses last-hop-behavior; | |||
| } | description | |||
| description | "List of prefix SID | |||
| "Shows the SR capability of the node."; | mapped to IPv4 local prefixes."; | |||
| } | } | |||
| list label-blocks { | description | |||
| leaf lower-bound { | "Parameters associated with IPv4 prefix SID"; | |||
| type uint32; | } | |||
| description | container ipv6 { | |||
| "Lower bound of the label block."; | list ipv6-prefix-sid { | |||
| } | key prefix; | |||
| leaf upper-bound { | uses ipv6-sid-cfg; | |||
| type uint32; | uses last-hop-behavior; | |||
| description | description | |||
| "Upper bound of the label block."; | "List of prefix SID | |||
| } | mapped to IPv6 local prefixes."; | |||
| leaf size { | } | |||
| type uint32; | description | |||
| description | "Parameters associated with IPv6 prefix SID"; | |||
| "Number of indexes in the block."; | } | |||
| } | description | |||
| leaf free { | "Prefix SID configuration."; | |||
| type uint32; | } | |||
| description | description | |||
| "Number of indexes free in the block."; | "List of bindings."; | |||
| } | } | |||
| leaf used { | container global-srgb { | |||
| type uint32; | uses srgb-cfg; | |||
| description | description | |||
| "Number of indexes used in the block."; | "Global SRGB configuration."; | |||
| } | } | |||
| description | description | |||
| "List of labels blocks currently | "segment routing global config."; | |||
| in use."; | } | |||
| } | } | |||
| container global-sid-list { | /* Operational states */ | |||
| list sid { | augment "/rt:routing-state/rt:routing-instance" { | |||
| key "target sid source source-protocol binding-type"; | description | |||
| ordered-by system; | "This augments the operational states | |||
| leaf target { | with segment-routing."; | |||
| type string; | container segment-routing { | |||
| description | container node-capabilities { | |||
| "Defines the target of the binding. | list transport-planes { | |||
| It can be a prefix or something else."; | key transport-plane; | |||
| } | leaf transport-plane { | |||
| leaf sid { | type identityref { | |||
| type uint32; | base segment-routing-transport; | |||
| description | } | |||
| "Index associated with the prefix."; | description | |||
| } | "Transport plane supported"; | |||
| leaf algorithm { | } | |||
| type uint8; | description | |||
| description | "List of supported transport planes."; | |||
| "Algorithm to be used for the prefix | } | |||
| SID."; | leaf segment-stack-push-limit { | |||
| } | type uint8; | |||
| leaf source { | description | |||
| type inet:ip-address; | "Describes the number of segments | |||
| description | that can be pushed by the node."; | |||
| "IP address of the router than own | } | |||
| the binding."; | leaf readable-label-stack-depth { | |||
| } | type uint8; | |||
| leaf used { | description | |||
| type boolean; | "Number of MPLS labels that | |||
| description | can be read in the stack."; | |||
| "Defines if the binding is used | } | |||
| in forwarding plane."; | description | |||
| } | "Shows the SR capability of the node."; | |||
| leaf source-protocol { | } | |||
| type leafref { | list label-blocks { | |||
| path "/rt:routing-state/rt:routing-instance/" + | leaf lower-bound { | |||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | type uint32; | |||
| } | description | |||
| description | "Lower bound of the label block."; | |||
| "Rtg protocol that owns the binding"; | } | |||
| } | leaf upper-bound { | |||
| leaf binding-type { | type uint32; | |||
| type enumeration { | description | |||
| enum prefix-sid { | "Upper bound of the label block."; | |||
| description | } | |||
| "Binding is learned from | leaf size { | |||
| a prefix SID."; | type uint32; | |||
| } | description | |||
| enum binding-tlv { | "Number of indexes in the block."; | |||
| description | ||||
| "Binding is learned from | ||||
| a binding TLV."; | ||||
| } | } | |||
| } | leaf free { | |||
| description | type uint32; | |||
| "Type of binding."; | description | |||
| } | "Number of indexes free in the block."; | |||
| description | } | |||
| "Binding."; | leaf used { | |||
| type uint32; | ||||
| description | ||||
| "Number of indexes used in the block."; | ||||
| } | ||||
| description | ||||
| "List of labels blocks currently | ||||
| in use."; | ||||
| } | ||||
| } | container global-sid-list { | |||
| description | list sid { | |||
| "List of prefix and SID associations."; | key "target sid source source-protocol binding-type"; | |||
| } | ordered-by system; | |||
| description | leaf target { | |||
| "Segment routing operational states."; | type string; | |||
| } | description | |||
| } | "Defines the target of the binding. | |||
| It can be a prefix or something else."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description | ||||
| "Index associated with the prefix."; | ||||
| } | ||||
| leaf algorithm { | ||||
| type uint8; | ||||
| description | ||||
| "Algorithm to be used for the prefix | ||||
| SID."; | ||||
| } | ||||
| leaf source { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IP address of the router than own | ||||
| the binding."; | ||||
| } | ||||
| leaf used { | ||||
| type boolean; | ||||
| description | ||||
| "Defines if the binding is used | ||||
| in forwarding plane."; | ||||
| /* Notifications */ | } | |||
| leaf source-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-instance/" + | ||||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Rtg 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."; | ||||
| } | ||||
| description | ||||
| "Binding."; | ||||
| notification segment-routing-global-sid-collision { | } | |||
| leaf received-target { | description | |||
| type string; | "List of prefix and SID associations."; | |||
| description | } | |||
| "Target received in the controlplane that | description | |||
| caused SID collision."; | "Segment routing operational states."; | |||
| } | } | |||
| leaf original-target { | } | |||
| type string; | ||||
| description | ||||
| "Target already available in database that have the same SID | ||||
| as the received target."; | ||||
| } | ||||
| leaf index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index used by two different prefixes."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-instance/" + | ||||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference that received the event."; | ||||
| } | ||||
| description | ||||
| "This notification is sent when a new mapping is learned | ||||
| , containing mapping | ||||
| where the SID is already used. | ||||
| The notification generation must be throttled with at least | ||||
| a 5 second gap. "; | ||||
| } | ||||
| notification segment-routing-index-out-of-range { | ||||
| leaf received-target { | ||||
| type string; | ||||
| description | ||||
| "Target received in the controlplane | ||||
| that caused SID collision."; | ||||
| } | ||||
| leaf received-index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index received."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-instance/" + | ||||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference that received the event."; | ||||
| } | ||||
| 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. "; | ||||
| } | ||||
| } | /* Notifications */ | |||
| <CODE ENDS> | notification segment-routing-global-sid-collision { | |||
| leaf received-target { | ||||
| type string; | ||||
| description | ||||
| "Target received in the controlplane that | ||||
| caused SID collision."; | ||||
| } | ||||
| leaf original-target { | ||||
| type string; | ||||
| description | ||||
| "Target already available in database that have the same SID | ||||
| as the received target."; | ||||
| } | ||||
| leaf index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index used by two different prefixes."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-instance/" + | ||||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference that received the event."; | ||||
| } | ||||
| description | ||||
| "This notification is sent when a new mapping is learned | ||||
| , containing mapping | ||||
| where the SID is already used. | ||||
| The notification generation must be throttled with at least | ||||
| a 5 second gap. "; | ||||
| } | ||||
| notification segment-routing-index-out-of-range { | ||||
| leaf received-target { | ||||
| type string; | ||||
| description | ||||
| "Target received in the controlplane | ||||
| that caused SID collision."; | ||||
| } | ||||
| leaf received-index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index received."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing-state/rt:routing-instance/" + | ||||
| "rt:routing-protocols/rt:routing-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference that received the event."; | ||||
| } | ||||
| 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. "; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 8. Security Considerations | 8. Security Considerations | |||
| TBD. | TBD. | |||
| 9. Acknowledgements | 9. Acknowledgements | |||
| Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins, | Authors would like to thank Derek Yeung, Acee Lindem, Greg Hankins, | |||
| Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge for their | Hannes Gredler, Uma Chunduri, Jeffrey Zhang, Shradda Hedge for their | |||
| contributions. | contributions. | |||
| End of changes. 52 change blocks. | ||||
| 564 lines changed or deleted | 579 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/ | ||||