| rfc9020xml2.original.xml | rfc9020.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-spring-sr-ya | ||||
| ng-30" number="9020" ipr="trust200902" category="std" obsoletes="" updates="" su | ||||
| bmissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" tocDepth="4 | ||||
| " symRefs="true" sortRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 3.5.0 --> | ||||
| <front> | ||||
| <title abbrev="SR YANG Data Model">YANG Data Model for Segment Routing</titl | ||||
| e> | ||||
| <seriesInfo name="RFC" value="9020"/> | ||||
| <author fullname="Stephane Litkowski" initials="S" surname="Litkowski"> | ||||
| <organization>Cisco Systems</organization> | ||||
| <address> | ||||
| <email>slitkows.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Yingzhen Qu" initials="Y" surname="Qu"> | ||||
| <organization>Futurewei</organization> | ||||
| <address> | ||||
| <email>yingzhen.qu@futurewei.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Acee Lindem" initials="A" surname="Lindem"> | ||||
| <organization>Cisco Systems</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>301 Mindenhall Way</street> | ||||
| <city>Cary</city> | ||||
| <region>NC</region> | ||||
| <code>27513</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>acee@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Pushpasis Sarkar" initials="P" surname="Sarkar"> | ||||
| <organization>VMware, Inc</organization> | ||||
| <address> | ||||
| <email>pushpasis.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Jeff Tantsura" initials="J" surname="Tantsura"> | ||||
| <organization>Juniper Networks</organization> | ||||
| <address> | ||||
| <email>jefftant.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="May" year="2021"/> | ||||
| <area/> | ||||
| <workgroup>SPRING Working Group</workgroup> | ||||
| <keyword>mpls</keyword> | ||||
| <abstract> | ||||
| <t> | ||||
| This document defines three YANG data models. The first is for | ||||
| Segment Routing (SR) configuration and operation, which is to be | ||||
| augmented by different Segment Routing data planes. The next is a | ||||
| YANG data model that defines a collection of generic types and groupings | ||||
| for SR. The third module defines the configuration and operational states | ||||
| for the Segment Routing MPLS data plane. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section anchor="introduction" toc="default" numbered="true"> | ||||
| <name>Introduction</name> | ||||
| <t> | ||||
| This document defines three YANG data models | ||||
| <xref target="RFC7950" format="default"/>. The first one is for | ||||
| Segment Routing (SR) <xref target="RFC8402" format="default"/> | ||||
| configuration and operation. | ||||
| This document does not define the IGP extensions to support SR, but th | ||||
| e second | ||||
| module defines generic | ||||
| groupings to be reused by IGP extension modules. The reason for this d | ||||
| esign choice | ||||
| is to not require implementations to support all IGP extensions. For ex | ||||
| ample, an implementation | ||||
| may support the IS-IS extension but not the OSPF extension. | ||||
| The third YANG data model | ||||
| defines a module that is intended to be used on network | ||||
| elements to configure or operate the SR MPLS data | ||||
| plane <xref target="RFC8660" format="default"/>. | ||||
| </t> | ||||
| <t>The YANG modules in this document conform to the Network Management | ||||
| Datastore Architecture (NMDA) <xref target="RFC8342" format="default"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="term" toc="default" numbered="true"> | ||||
| <name>Terminology and Notation</name> | ||||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14 | ||||
| >REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
| NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bc | ||||
| p14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
| to be interpreted as | ||||
| described in BCP 14 <xref target="RFC2119" format="default"/> <xref targ | ||||
| et="RFC8174" format="default"/> | ||||
| when, and only when, they appear in all capitals, as shown here.</t> | ||||
| <section anchor="tree-info" toc="default" numbered="true"> | ||||
| <name>Tree Diagram</name> | ||||
| <t>Tree diagrams used in this document follow the notation defined in | ||||
| <xref target="RFC8340" format="default"/>.</t> | ||||
| </section> | ||||
| <section anchor="sec.prefixes" numbered="true" toc="default"> | ||||
| <name>Prefixes in Data Node Names</name> | ||||
| <t>In this document, names of data nodes, actions, and other | ||||
| data model objects are often used without a prefix, as long as | ||||
| it is clear from the context in which YANG module each name is | ||||
| defined. Otherwise, names are prefixed using the standard prefix | ||||
| associated with the corresponding YANG module, as shown in <xref target= | ||||
| "tab.prefixes" format="default"/>.</t> | ||||
| <table anchor="tab.prefixes" align="center"> | ||||
| <name>Prefixes and Corresponding YANG Modules</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Prefix</th> | ||||
| <th align="left">YANG module</th> | ||||
| <th align="left">Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">if</td> | ||||
| <td align="left">ietf-interfaces</td> | ||||
| <td align="left"> | ||||
| <xref target="RFC8343" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">rt</td> | ||||
| <td align="left">ietf-routing</td> | ||||
| <td align="left"> | ||||
| <xref target="RFC8349" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">rt-types</td> | ||||
| <td align="left">ietf-routing-types</td> | ||||
| <td align="left"> | ||||
| <xref target="RFC8294" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">yang</td> | ||||
| <td align="left">ietf-yang-types</td> | ||||
| <td align="left"> | ||||
| <xref target="RFC6991" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">inet</td> | ||||
| <td align="left">ietf-inet-types</td> | ||||
| <td align="left"> | ||||
| <xref target="RFC6991" format="default"/></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="design" toc="default" numbered="true"> | ||||
| <name>Design of the Data Model</name> | ||||
| <t>The ietf-segment-routing YANG module augments the routing container in | ||||
| the | ||||
| ietf-routing model <xref target="RFC8349" format="default"/> and defines | ||||
| generic | ||||
| SR configuration and operational state. This module is | ||||
| augmented by modules supporting different data planes.</t> | ||||
| <t>Module ietf-segment-routing-mpls augments ietf-segment-routing and | ||||
| supports SR-MPLS data plane configuration and operational state.</t> | ||||
| <t>Module ietf-segment-routing-common defines generic types and groupings | ||||
| that <bcp14>SHOULD</bcp14> be reused by IGP extension modules.</t> | ||||
| <sourcecode type="yangtree"><![CDATA[ | ||||
| module: ietf-segment-routing | ||||
| augment /rt:routing: | ||||
| +--rw segment-routing | ||||
| module: ietf-segment-routing-mpls | ||||
| augment /rt:routing/sr:segment-routing: | ||||
| +--rw sr-mpls | ||||
| +--rw bindings | ||||
| | +--rw mapping-server {mapping-server}? | ||||
| | | +--rw policy* [name] | ||||
| | | +--rw name string | ||||
| | | +--rw entries | ||||
| | | +--rw mapping-entry* [prefix algorithm] | ||||
| | | +--rw prefix inet:ip-prefix | ||||
| | | +--rw value-type? enumeration | ||||
| | | +--rw start-sid uint32 | ||||
| | | +--rw range? uint32 | ||||
| | | +--rw algorithm identityref | ||||
| | +--rw connected-prefix-sid-map | ||||
| | | +--rw connected-prefix-sid* [prefix algorithm] | ||||
| | | +--rw prefix inet:ip-prefix | ||||
| | | +--rw value-type? enumeration | ||||
| | | +--rw start-sid uint32 | ||||
| | | +--rw range? uint32 | ||||
| | | +--rw algorithm identityref | ||||
| | | +--rw last-hop-behavior? enumeration | ||||
| | +--rw local-prefix-sid | ||||
| | +--rw local-prefix-sid* [prefix algorithm] | ||||
| | +--rw prefix inet:ip-prefix | ||||
| | +--rw value-type? enumeration | ||||
| | +--rw start-sid uint32 | ||||
| | +--rw range? uint32 | ||||
| | +--rw algorithm identityref | ||||
| +--rw srgb | ||||
| | +--rw srgb* [lower-bound upper-bound] | ||||
| | +--rw lower-bound uint32 | ||||
| | +--rw upper-bound uint32 | ||||
| +--rw srlb | ||||
| | +--rw srlb* [lower-bound upper-bound] | ||||
| | +--rw lower-bound uint32 | ||||
| | +--rw upper-bound uint32 | ||||
| +--ro label-blocks* [] | ||||
| | +--ro lower-bound? uint32 | ||||
| | +--ro upper-bound? uint32 | ||||
| | +--ro size? uint32 | ||||
| | +--ro free? uint32 | ||||
| | +--ro used? uint32 | ||||
| | +--ro scope? enumeration | ||||
| +--ro sid-db | ||||
| +--ro sid* [target sid source source-protocol binding-type] | ||||
| +--ro target string | ||||
| +--ro sid uint32 | ||||
| +--ro algorithm? uint8 | ||||
| +--ro source inet:ip-address | ||||
| +--ro used? boolean | ||||
| +--ro source-protocol -> /rt:routing | ||||
| /control-plane-protocols | ||||
| /control-plane-protocol/name | ||||
| +--ro binding-type enumeration | ||||
| +--ro scope? enumeration | ||||
| notifications: | ||||
| +---n segment-routing-srgb-collision | ||||
| | +--ro srgb-collisions* [] | ||||
| | +--ro lower-bound? uint32 | ||||
| | +--ro upper-bound? uint32 | ||||
| | +--ro routing-protocol? -> /rt:routing | ||||
| | /control-plane-protocols | ||||
| | /control-plane-protocol/name | ||||
| | +--ro originating-rtr-id? router-or-system-id | ||||
| +---n segment-routing-global-sid-collision | ||||
| | +--ro received-target? string | ||||
| | +--ro new-sid-rtr-id? router-or-system-id | ||||
| | +--ro original-target? string | ||||
| | +--ro original-sid-rtr-id? router-or-system-id | ||||
| | +--ro index? uint32 | ||||
| | +--ro routing-protocol? -> /rt:routing | ||||
| | /control-plane-protocols | ||||
| | /control-plane-protocol/name | ||||
| +---n segment-routing-index-out-of-range | ||||
| +--ro received-target? string | ||||
| +--ro received-index? uint32 | ||||
| +--ro routing-protocol? -> /rt:routing | ||||
| /control-plane-protocols | ||||
| /control-plane-protocol/name | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="how" toc="default" numbered="true"> | ||||
| <name>Configuration</name> | ||||
| <t> | ||||
| The module ietf-segment-routing-mpls augments the "/rt:routing/sr:segmen | ||||
| t-routing:" | ||||
| with an sr-mpls container. This container defines all the configuration | ||||
| parameters related to the SR MPLS data plane. | ||||
| </t> | ||||
| <t> | ||||
| The sr-mpls configuration is split into global configuration and interfa | ||||
| ce configuration. | ||||
| </t> | ||||
| <t>The global configuration includes: | ||||
| </t> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Bindings:</dt> | ||||
| <dd><t>Defines Prefix to Segment Identifier (Prefix-SID) mappings. | ||||
| The operator can control | ||||
| advertisement of Prefix-SIDs independently for IPv4 and IPv6. Two | ||||
| types of mappings are available:</t> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Mapping-server:</dt> | ||||
| <dd>Maps prefixes that are not local to a SID. Configuration of bindi | ||||
| ngs does not | ||||
| automatically allow advertisement of those | ||||
| bindings. Advertisement must be controlled by each | ||||
| routing-protocol instance (see <xref target="cp" format="default"/>). Mult | ||||
| iple mapping policies | ||||
| may be defined.</dd> | ||||
| <dt>Connected prefixes:</dt> | ||||
| <dd>Maps connected prefixes to a SID. Advertisement of the mapping | ||||
| will be done by IGP when enabled for SR (see <xref target="cp" | ||||
| format="default"/>). The SID value can be expressed as an index (defaul | ||||
| t) or an absolute | ||||
| value. The "last-hop-behavior" configuration dictates the MPLS Penult | ||||
| imate Hop Popping (PHP) | ||||
| behavior: "explicit-null", "php", or "non-php".</dd> | ||||
| </dl></dd> | ||||
| <dt>Segment Routing Global Block (SRGB):</dt> | ||||
| <dd>Defines a list of label | ||||
| blocks represented by a pair of lower-bound/upper-bound labels. | ||||
| The SRGB is also agnostic to the control plane used. So, all local | ||||
| routing-protocol instances will have to advertise the same SRGB.</dd> | ||||
| <dt>Segment Routing Local Block (SRLB):</dt> | ||||
| <dd>Defines a list of label | ||||
| blocks represented by a pair of lower-bound/upper-bound labels reserved fo | ||||
| r local SIDs.</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="cp" toc="default" numbered="true"> | ||||
| <name>IGP Control-Plane Configuration</name> | ||||
| <t> | ||||
| Support of SR extensions for a particular IGP control plane is achieved by a | ||||
| ugmenting routing-protocol configuration with SR extensions. | ||||
| This augmentation <bcp14>SHOULD</bcp14> be part of the routing-protocol | ||||
| YANG modules as not to create any dependency for implementations to support SR e | ||||
| xtensions for all routing protocols. | ||||
| </t> | ||||
| <t> | ||||
| This module defines groupings that <bcp14>SHOULD</bcp14> be used by IGP | ||||
| SR modules. | ||||
| </t> | ||||
| <t>The "sr-control-plane" grouping defines the generic global configuratio | ||||
| n for the IGP.</t> | ||||
| <t>The "enabled" leaf enables SR extensions for the | ||||
| routing-protocol instance.</t> | ||||
| <t>The "bindings" container controls the routing-protocol instance's | ||||
| advertisement of local bindings and the processing of received | ||||
| bindings.</t> | ||||
| <section anchor="igp-interface" toc="default" numbered="true"> | ||||
| <name>IGP Interface Configuration</name> | ||||
| <t>The interface configuration is part of the "igp-interface" grouping a | ||||
| nd includes Adjacency SID (Adj-SID) properties.</t> | ||||
| <section anchor="adj-cfg" toc="default" numbered="true"> | ||||
| <name>Adjacency SID (Adj-SID) Properties</name> | ||||
| <section anchor="adj-cfg-bundling" toc="default" numbered="true"> | ||||
| <name>Bundling</name> | ||||
| <t> | ||||
| In case of parallel IP links between routers, an additional Adj-SI | ||||
| D <xref target="RFC8402" | ||||
| format="default"/> may be advertised representing more than one adj | ||||
| acency (i.e., | ||||
| a bundle of adjacencies). The "advertise-adj-group-sid" configurat | ||||
| ion | ||||
| controls for which group(s) an additional Adj-SID is advertised. | ||||
| </t> | ||||
| <t>The "advertise-adj-group-sid" is a list of group IDs. Each group | ||||
| ID will identify interfaces that are bundled together.</t> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| +-------+ +------+ | ||||
| | | ------- L1 ---- | | | ||||
| | R1 | ------- L2 ---- | R2 | | ||||
| | | ------- L3 ---- | | | ||||
| | | ------- L4 ---- | | | ||||
| +-------+ +------+ | ||||
| ]]></artwork> | ||||
| <t> | ||||
| In the figure above, R1 and R2 are interconnected by four links. A | ||||
| routing protocol adjacency is established on each link. | ||||
| The operator would like to create Adj-SIDs that represent bundles | ||||
| of links. We can imagine two different bundles: L1/L2 and L3/L4. | ||||
| To achieve this behavior, the operator will configure a "group-id" | ||||
| X for interfaces L1 and L2 and a "group-id" Y for interfaces L3 and L4. | ||||
| This will result in R1 advertising an additional Adj-SID for each | ||||
| adjacency. For example, an Adj-SID with a value of 400 will be added to L1 and L | ||||
| 2, and | ||||
| an Adj-SID with a value of 500 will be added to L3 and L4. As L1/L | ||||
| 2 and L3/L4 do not share the same "group-id", a different SID value will be allo | ||||
| cated. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="adj-cfg-protection" toc="default" numbered="true"> | ||||
| <name>Protection</name> | ||||
| <t> | ||||
| The "advertise-protection" defines how protectio | ||||
| n for an interface | ||||
| is advertised. It does not control the activation or deactiv | ||||
| ation of | ||||
| protection. If the "single" option is used, a single Adj-SID | ||||
| will be | ||||
| advertised for the interface. If the interface is protected, | ||||
| the | ||||
| B-Flag for the Adj-SID advertisement will be set. If the "dua | ||||
| l" | ||||
| option is used and if the interface is protected, two Adj-SID | ||||
| s will | ||||
| be advertised for the interface adjacencies. One Adj-SID will | ||||
| always | ||||
| have the B-Flag set, and the other will have the B-Flag clear | ||||
| . | ||||
| This | ||||
| option is intended to be used in the case of traffic engineer | ||||
| ing | ||||
| where a path must use either protected segments or unprotecte | ||||
| d | ||||
| segments. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="states" toc="default" numbered="true"> | ||||
| <name>State Data</name> | ||||
| <t> | ||||
| The operational state contains information reflecting the usage of | ||||
| allocated SRGB labels. | ||||
| </t> | ||||
| <t>It also includes a list of all global SIDs, their associated | ||||
| bindings, and other information, such as the associated source protocol and | ||||
| algorithm.</t> | ||||
| </section> | ||||
| <section anchor="notif" toc="default" numbered="true"> | ||||
| <name>Notifications</name> | ||||
| <t> | ||||
| The model defines the following notifications for SR. | ||||
| </t> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>segment-routing-srgb-collision:</dt> | ||||
| <dd>Raised when control-plane-advertised SRGB blocks have conflicts</dd> | ||||
| <dt>segment-routing-global-sid-collision:</dt> | ||||
| <dd>Raised when a control-plane-advertised index is already associated wi | ||||
| th another target (in | ||||
| this version, the only defined targets are IPv4 and IPv6 prefixes)</dd> | ||||
| <dt>segment-routing-index-out-of-range:</dt> | ||||
| <dd>Raised when a control-plane-advertised index falls outside the range | ||||
| of SRGBs configured for | ||||
| the network device</dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section anchor="yang" toc="default" numbered="true"> | ||||
| <name>YANG Modules</name> | ||||
| <t>There are three YANG modules included in this document. </t> | ||||
| <t>The following RFCs are not referenced in the document text but | ||||
| are referenced in the ietf-segment-routing.yang, ietf-segment-routing-comm | ||||
| on.yang, | ||||
| and/or ietf-segment-routing-mpls.yang modules: | ||||
| <xref target="RFC6991" format="default"/>, <xref target="RFC8294" format=" | ||||
| default"/>, | ||||
| <xref target="RFC8661" format="default"/>, <xref target="RFC8665" format=" | ||||
| default"/>, | ||||
| <xref target="RFC8667" format="default"/>, <xref target="RFC8669" format=" | ||||
| default"/>, | ||||
| and <xref target="RFC8814" format="default"/>.</t> | ||||
| <section anchor="sr-yang" toc="default" numbered="true"> | ||||
| <name>YANG Module for Segment Routing</name> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>ietf-segment-routing.yang:</dt> | ||||
| <dd>This module defines a generic framework | ||||
| for Segment Routing (SR), and it is to be augmented by models for di | ||||
| fferent | ||||
| SR data planes.</dd> | ||||
| </dl> | ||||
| <sourcecode name="ietf-segment-routing@2021-04-01.yang" type="yang" markers="tru | ||||
| e"><![CDATA[ | ||||
| module ietf-segment-routing { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing"; | ||||
| prefix sr; | ||||
| import ietf-routing { | ||||
| prefix rt; | ||||
| reference "RFC 8349: A YANG Data Model for Routing | ||||
| Management (NMDA Version)"; | ||||
| } | ||||
| organization | ||||
| "IETF SPRING - SPRING Working Group"; | ||||
| contact | ||||
| "WG Web: <https://datatracker.ietf.org/wg/spring/> | ||||
| WG List: <mailto:spring@ietf.org> | ||||
| Author: Stephane Litkowski | ||||
| <mailto:slitkows.ietf@gmail.com> | ||||
| Author: Yingzhen Qu | ||||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | ||||
| <mailto:acee@cisco.com> | ||||
| Author: Pushpasis Sarkar | ||||
| <mailto:pushpasis.ietf@gmail.com> | ||||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| "; | ||||
| description | ||||
| "This YANG module defines a generic framework for Segment | ||||
| Routing (SR). It is to be augmented by models for different | ||||
| SR data planes. | ||||
| This YANG module conforms to the Network Management | ||||
| Datastore Architecture (NMDA), as described in RFC 8242. | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | ||||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | ||||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | ||||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | ||||
| they appear in all capitals, as shown here. | ||||
| Copyright (c) 2021 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC 9020; | ||||
| see the RFC itself for full legal notices."; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing."; | ||||
| revision 2021-04-01 { | ||||
| description | ||||
| "Initial version"; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing."; | ||||
| } | ||||
| augment "/rt:routing" { | ||||
| description | ||||
| "This module augments the routing data model (RFC 8349) | ||||
| with Segment Routing (SR)."; | ||||
| container segment-routing { | ||||
| description | ||||
| "Segment Routing configuration. This container | ||||
| is to be augmented by models for different SR | ||||
| data planes."; | ||||
| reference | ||||
| "RFC 8402: Segment Routing Architecture."; | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="sr-cmn-yang" toc="default" numbered="true"> | ||||
| <name>YANG Module for Segment Routing Common Types</name> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>ietf-segment-routing-common.yang:</dt> | ||||
| <dd>This module defines a collection of generic types and | ||||
| groupings for SR, as defined in <xref target="RFC8402" format="default" | ||||
| />.</dd> | ||||
| </dl> | ||||
| <sourcecode name="ietf-segment-routing-common@2021-04-01.yang" type="yang" marke | ||||
| rs="true"><![CDATA[ | ||||
| module ietf-segment-routing-common { | ||||
| yang-version 1.1; | ||||
| namespace | ||||
| "urn:ietf:params:xml:ns:yang:ietf-segment-routing-common"; | ||||
| prefix sr-cmn; | ||||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| reference | ||||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | ||||
| organization | ||||
| "IETF SPRING - SPRING Working Group"; | ||||
| contact | ||||
| "WG Web: <https://datatracker.ietf.org/wg/spring/> | ||||
| WG List: <mailto:spring@ietf.org> | ||||
| Author: Stephane Litkowski | ||||
| <mailto:slitkows.ietf@gmail.com> | ||||
| Author: Yingzhen Qu | ||||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | ||||
| <mailto:acee@cisco.com> | ||||
| Author: Pushpasis Sarkar | ||||
| <mailto:pushpasis.ietf@gmail.com> | ||||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| "; | ||||
| description | ||||
| "This YANG module defines a collection of generic types and | ||||
| groupings for Segment Routing (SR), as described in RFC 8402. | ||||
| This YANG module conforms to the Network Management | ||||
| Datastore Architecture (NMDA), as described in RFC 8242. | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | ||||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | ||||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | ||||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | ||||
| they appear in all capitals, as shown here. | ||||
| Copyright (c) 2021 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC 9020; | ||||
| see the RFC itself for full legal notices."; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| revision 2021-04-01 { | ||||
| description | ||||
| "Initial version"; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| } | ||||
| feature sid-last-hop-behavior { | ||||
| description | ||||
| "Configurable last-hop behavior."; | ||||
| reference | ||||
| "RFC 8660: Segment Routing with the MPLS Data Plane"; | ||||
| } | ||||
| identity prefix-sid-algorithm { | ||||
| description | ||||
| "Base identity for prefix-sid algorithm."; | ||||
| reference | ||||
| "RFC 8402: Segment Routing Architecture"; | ||||
| } | ||||
| identity prefix-sid-algorithm-shortest-path { | ||||
| base prefix-sid-algorithm; | ||||
| description | ||||
| "Shortest Path First (SPF) Prefix-SID algorithm. This | ||||
| is the default algorithm."; | ||||
| } | ||||
| identity prefix-sid-algorithm-strict-spf { | ||||
| base prefix-sid-algorithm; | ||||
| description | ||||
| "This algorithm mandates that the packet is forwarded | ||||
| according to the ECMP-aware SPF algorithm."; | ||||
| } | ||||
| grouping srlr { | ||||
| description | ||||
| "Grouping for SR Label Range configuration."; | ||||
| leaf lower-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Lower value in the label range."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| must '../lower-bound < ../upper-bound' { | ||||
| error-message | ||||
| "The upper-bound must be greater than the lower-bound."; | ||||
| description | ||||
| "The value must be greater than lower-bound."; | ||||
| } | ||||
| description | ||||
| "Upper value in the label range."; | ||||
| } | ||||
| } | ||||
| grouping srgb { | ||||
| description | ||||
| "Grouping for SR Global Label Range."; | ||||
| list srgb { | ||||
| key "lower-bound upper-bound"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of global blocks to be advertised."; | ||||
| uses srlr; | ||||
| } | ||||
| } | ||||
| grouping srlb { | ||||
| description | ||||
| "Grouping for SR Local Block Range."; | ||||
| list srlb { | ||||
| key "lower-bound upper-bound"; | ||||
| ordered-by user; | ||||
| description | ||||
| "List of SRLBs."; | ||||
| uses srlr; | ||||
| } | ||||
| } | ||||
| grouping sid-value-type { | ||||
| description | ||||
| "Defines how the SID value is expressed."; | ||||
| leaf value-type { | ||||
| type enumeration { | ||||
| enum index { | ||||
| description | ||||
| "The value will be interpreted as an index."; | ||||
| } | ||||
| enum absolute { | ||||
| description | ||||
| "The value will become interpreted as an absolute | ||||
| value."; | ||||
| } | ||||
| } | ||||
| default "index"; | ||||
| description | ||||
| "This leaf defines how the value must be interpreted."; | ||||
| } | ||||
| } | ||||
| grouping prefix-sid { | ||||
| description | ||||
| "This grouping defines configuration of a Prefix-SID."; | ||||
| leaf prefix { | ||||
| type inet:ip-prefix; | ||||
| description | ||||
| "Connected Prefix-SID."; | ||||
| } | ||||
| uses prefix-sid-attributes; | ||||
| } | ||||
| grouping ipv4-sid { | ||||
| description | ||||
| "Grouping for an IPv4 Prefix-SID."; | ||||
| leaf prefix { | ||||
| type inet:ipv4-prefix; | ||||
| description | ||||
| "Connected IPv4 Prefix-SID."; | ||||
| } | ||||
| uses prefix-sid-attributes; | ||||
| } | ||||
| grouping ipv6-sid { | ||||
| description | ||||
| "Grouping for an IPv6 Prefix-SID."; | ||||
| leaf prefix { | ||||
| type inet:ipv6-prefix; | ||||
| description | ||||
| "Connected IPv6 Prefix-SID."; | ||||
| } | ||||
| uses prefix-sid-attributes; | ||||
| } | ||||
| grouping last-hop-behavior { | ||||
| description | ||||
| "Defines last-hop behavior."; | ||||
| leaf last-hop-behavior { | ||||
| if-feature "sid-last-hop-behavior"; | ||||
| type enumeration { | ||||
| enum explicit-null { | ||||
| description | ||||
| "Use explicit-null for the SID."; | ||||
| } | ||||
| enum no-php { | ||||
| description | ||||
| "Do not use MPLS Penultimate Hop Popping (PHP) | ||||
| for the SID."; | ||||
| } | ||||
| enum php { | ||||
| description | ||||
| "Use MPLS PHP for the SID."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Configure last-hop behavior."; | ||||
| } | ||||
| } | ||||
| grouping prefix-sid-attributes { | ||||
| description | ||||
| "Grouping for Segment Routing (SR) prefix attributes."; | ||||
| uses sid-value-type; | ||||
| leaf start-sid { | ||||
| type uint32; | ||||
| mandatory true; | ||||
| description | ||||
| "Value associated with prefix. The value must be | ||||
| interpreted in the context of sid-value-type."; | ||||
| } | ||||
| leaf range { | ||||
| type uint32; | ||||
| description | ||||
| "Indicates how many SIDs can be allocated."; | ||||
| } | ||||
| leaf algorithm { | ||||
| type identityref { | ||||
| base prefix-sid-algorithm; | ||||
| } | ||||
| description | ||||
| "Prefix-SID algorithm."; | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="sr-mpls-yang" toc="default" numbered="true"> | ||||
| <name>YANG Module for Segment Routing MPLS</name> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>ietf-segment-routing-mpls.yang:</dt> | ||||
| <dd>This module defines the configuration | ||||
| and operational states for the Segment Routing MPLS data plane.</dd> | ||||
| </dl> | ||||
| <sourcecode name="ietf-segment-routing-mpls@2021-04-01.yang" type="yang" markers | ||||
| ="true"><![CDATA[ | ||||
| module ietf-segment-routing-mpls { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"; | ||||
| prefix sr-mpls; | ||||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| reference | ||||
| "RFC 6991: Common YANG Data Types"; | ||||
| } | ||||
| import ietf-routing { | ||||
| prefix rt; | ||||
| reference | ||||
| "RFC 8349: A YANG Data Model for Routing | ||||
| Management (NMDA Version)"; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| reference | ||||
| "RFC 8294: Common YANG Data Types for the | ||||
| Routing Area"; | ||||
| } | ||||
| import ietf-segment-routing { | ||||
| prefix sr; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| } | ||||
| import ietf-segment-routing-common { | ||||
| prefix sr-cmn; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| } | ||||
| organization | ||||
| "IETF SPRING - SPRING Working Group"; | ||||
| contact | ||||
| "WG Web: <https://datatracker.ietf.org/wg/spring/> | ||||
| WG List: <mailto:spring@ietf.org> | ||||
| Author: Stephane Litkowski | ||||
| <mailto:slitkows.ietf@gmail.com> | ||||
| Author: Yingzhen Qu | ||||
| <mailto:yingzhen.qu@futurewei.com> | ||||
| Author: Acee Lindem | ||||
| <mailto:acee@cisco.com> | ||||
| Author: Pushpasis Sarkar | ||||
| <mailto:pushpasis.ietf@gmail.com> | ||||
| Author: Jeff Tantsura | ||||
| <jefftant.ietf@gmail.com> | ||||
| "; | ||||
| description | ||||
| "This YANG module defines a generic configuration model for | ||||
| the Segment Routing MPLS data plane. | ||||
| This YANG module conforms to the Network Management | ||||
| Datastore Architecture (NMDA), as described in RFC 8242. | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | ||||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | ||||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | ||||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | ||||
| they appear in all capitals, as shown here. | ||||
| Copyright (c) 2021 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC 9020; | ||||
| see the RFC itself for full legal notices."; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| revision 2021-04-01 { | ||||
| description | ||||
| "Initial version"; | ||||
| reference | ||||
| "RFC 9020: YANG Data Model for Segment Routing"; | ||||
| } | ||||
| feature mapping-server { | ||||
| description | ||||
| "Support for Segment Routing Mapping Server (SRMS)."; | ||||
| reference | ||||
| "RFC 8661: Segment Routing MPLS Interworking | ||||
| with LDP"; | ||||
| } | ||||
| feature protocol-srgb { | ||||
| description | ||||
| "Support for per-protocol Segment Routing Global Block | ||||
| (SRGB) configuration."; | ||||
| reference | ||||
| "RFC 8660: Segment Routing with the MPLS | ||||
| Data Plane"; | ||||
| } | ||||
| typedef system-id { | ||||
| type string { | ||||
| pattern '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; | ||||
| } | ||||
| description | ||||
| "This type defines an IS-IS system-id using a pattern. | ||||
| An example system-id is 0143.0438.AEF0."; | ||||
| } | ||||
| typedef router-or-system-id { | ||||
| type union { | ||||
| type rt-types:router-id; | ||||
| type system-id; | ||||
| } | ||||
| description | ||||
| "OSPF/BGP router-id or IS-IS system ID."; | ||||
| } | ||||
| grouping sr-control-plane { | ||||
| description | ||||
| "Defines protocol configuration."; | ||||
| container segment-routing { | ||||
| description | ||||
| "Segment Routing global configuration."; | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "Enables Segment Routing control-plane protocol | ||||
| extensions."; | ||||
| } | ||||
| container bindings { | ||||
| if-feature "mapping-server"; | ||||
| description | ||||
| "Control of binding advertisement and reception."; | ||||
| container advertise { | ||||
| description | ||||
| "Control advertisement of local mappings | ||||
| in binding TLVs."; | ||||
| leaf-list policies { | ||||
| type leafref { | ||||
| path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls" | ||||
| + "/sr-mpls:bindings/sr-mpls:mapping-server" | ||||
| + "/sr-mpls:policy/sr-mpls:name"; | ||||
| } | ||||
| description | ||||
| "List of binding advertisement policies."; | ||||
| } | ||||
| } | ||||
| leaf receive { | ||||
| type boolean; | ||||
| default "true"; | ||||
| description | ||||
| "Allow the reception and usage of binding TLVs."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping igp-interface { | ||||
| description | ||||
| "Grouping for IGP interface configuration."; | ||||
| container segment-routing { | ||||
| description | ||||
| "Container for SR interface configuration."; | ||||
| container adjacency-sid { | ||||
| description | ||||
| "Adjacency SID (Adj-SID) configuration."; | ||||
| reference | ||||
| "RFC 8660: Segment Routing with the MPLS | ||||
| Data Plane"; | ||||
| list adj-sids { | ||||
| key "value"; | ||||
| uses sr-cmn:sid-value-type; | ||||
| leaf value { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the Adj-SID."; | ||||
| } | ||||
| leaf protected { | ||||
| type boolean; | ||||
| default "false"; | ||||
| description | ||||
| "It is used to protect the Adj-SID, e.g., using | ||||
| IP Fast Reroute (IPFRR) or MPLS-FRR."; | ||||
| } | ||||
| leaf weight { | ||||
| type uint8; | ||||
| description | ||||
| "The load-balancing factor over parallel adjacencies."; | ||||
| reference | ||||
| "RFC 8402: Segment Routing Architecture | ||||
| RFC 8665: OSPF Extensions for Segment Routing | ||||
| RFC 8667: IS-IS Extensions for Segment | ||||
| Routing"; | ||||
| } | ||||
| description | ||||
| "List of Adj-SIDs and their configuration."; | ||||
| } | ||||
| list advertise-adj-group-sid { | ||||
| key "group-id"; | ||||
| description | ||||
| "Control advertisement of S-flag or G-flag. Enable | ||||
| advertisement of a common Adj-SID for parallel | ||||
| links."; | ||||
| reference | ||||
| "RFC 8665: OSPF Extensions for Segment Routing, | ||||
| Section 6.1 | ||||
| RFC 8667: IS-IS Extensions for Segment | ||||
| Routing, Section 2.2.1"; | ||||
| leaf group-id { | ||||
| type uint32; | ||||
| description | ||||
| "The value is an internal value to identify a | ||||
| group-ID. Interfaces with the same group-ID | ||||
| will be bundled together."; | ||||
| } | ||||
| } | ||||
| leaf advertise-protection { | ||||
| type enumeration { | ||||
| enum single { | ||||
| description | ||||
| "A single Adj-SID is associated with the | ||||
| adjacency and reflects the protection | ||||
| configuration."; | ||||
| } | ||||
| enum dual { | ||||
| description | ||||
| "Two Adj-SIDs will be associated with the adjacency | ||||
| if the interface is protected. In this case, one | ||||
| Adj-SID will be advertised with the backup-flag | ||||
| set and the other with the backup-flag clear. In | ||||
| the case where protection is not configured, a | ||||
| single Adj-SID will be advertised with the | ||||
| backup-flag clear."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "If set, the Adj-SID refers to a protected adjacency."; | ||||
| reference | ||||
| "RFC 8665: OSPF Extensions for Segment Routing, | ||||
| Section 6.1 | ||||
| RFC 8667: IS-IS Extensions for Segment | ||||
| Routing, Section 2.2.1"; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| augment "/rt:routing/sr:segment-routing" { | ||||
| description | ||||
| "This augments the routing data model (RFC 8349) | ||||
| with Segment Routing (SR) using the MPLS data plane."; | ||||
| container sr-mpls { | ||||
| description | ||||
| "Segment Routing global configuration and | ||||
| operational state."; | ||||
| container bindings { | ||||
| description | ||||
| "List of bindings."; | ||||
| container mapping-server { | ||||
| if-feature "mapping-server"; | ||||
| description | ||||
| "Configuration of mapping-server local entries."; | ||||
| list policy { | ||||
| key "name"; | ||||
| description | ||||
| "List mapping-server policies."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Name of the mapping policy."; | ||||
| } | ||||
| container entries { | ||||
| description | ||||
| "IPv4/IPv6 mapping entries."; | ||||
| list mapping-entry { | ||||
| key "prefix algorithm"; | ||||
| description | ||||
| "Mapping entries."; | ||||
| uses sr-cmn:prefix-sid; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container connected-prefix-sid-map { | ||||
| description | ||||
| "Prefix-SID configuration."; | ||||
| list connected-prefix-sid { | ||||
| key "prefix algorithm"; | ||||
| description | ||||
| "List of mappings of Prefix-SIDs to IPv4/IPv6 | ||||
| local prefixes."; | ||||
| uses sr-cmn:prefix-sid; | ||||
| uses sr-cmn:last-hop-behavior; | ||||
| } | ||||
| } | ||||
| container local-prefix-sid { | ||||
| description | ||||
| "Local SID configuration."; | ||||
| list local-prefix-sid { | ||||
| key "prefix algorithm"; | ||||
| description | ||||
| "List of local IPv4/IPv6 Prefix-SIDs."; | ||||
| uses sr-cmn:prefix-sid; | ||||
| } | ||||
| } | ||||
| } | ||||
| container srgb { | ||||
| description | ||||
| "Global SRGB configuration."; | ||||
| uses sr-cmn:srgb; | ||||
| } | ||||
| container srlb { | ||||
| description | ||||
| "Segment Routing Local Block (SRLB) configuration."; | ||||
| uses sr-cmn:srlb; | ||||
| } | ||||
| list label-blocks { | ||||
| config false; | ||||
| description | ||||
| "List of label blocks currently in use."; | ||||
| leaf lower-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Lower bound of the label block."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Upper bound of the label block."; | ||||
| } | ||||
| leaf size { | ||||
| type uint32; | ||||
| description | ||||
| "Number of indexes in the block."; | ||||
| } | ||||
| leaf free { | ||||
| type uint32; | ||||
| description | ||||
| "Number of free indexes in the block."; | ||||
| } | ||||
| leaf used { | ||||
| type uint32; | ||||
| description | ||||
| "Number of indexes in use in the block."; | ||||
| } | ||||
| leaf scope { | ||||
| type enumeration { | ||||
| enum global { | ||||
| description | ||||
| "Global SID."; | ||||
| } | ||||
| enum local { | ||||
| description | ||||
| "Local SID."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Scope of this label block."; | ||||
| } | ||||
| } | ||||
| container sid-db { | ||||
| config false; | ||||
| description | ||||
| "List of prefix and SID associations."; | ||||
| list sid { | ||||
| key "target sid source source-protocol binding-type"; | ||||
| ordered-by system; | ||||
| description | ||||
| "SID binding."; | ||||
| leaf target { | ||||
| type string; | ||||
| description | ||||
| "Defines the target of the binding. It can be a | ||||
| prefix or something else."; | ||||
| } | ||||
| leaf sid { | ||||
| type uint32; | ||||
| description | ||||
| "Index associated with the prefix."; | ||||
| } | ||||
| leaf algorithm { | ||||
| type uint8; | ||||
| description | ||||
| "Algorithm to be used for the Prefix-SID."; | ||||
| reference | ||||
| "RFC 8665: OSPF Extensions for Segment Routing | ||||
| RFC 8667: IS-IS Extensions for Segment | ||||
| Routing | ||||
| RFC 8669: Segment Routing Prefix Segment | ||||
| Identifier Extensions to BGP"; | ||||
| } | ||||
| leaf source { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "IP address of the router that owns the binding."; | ||||
| } | ||||
| leaf used { | ||||
| type boolean; | ||||
| description | ||||
| "Indicates if the binding is installed in the | ||||
| forwarding plane."; | ||||
| } | ||||
| leaf source-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing/rt:control-plane-protocols/" | ||||
| + "rt:control-plane-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol that owns the binding."; | ||||
| } | ||||
| leaf binding-type { | ||||
| type enumeration { | ||||
| enum prefix-sid { | ||||
| description | ||||
| "Binding is learned from a Prefix-SID."; | ||||
| } | ||||
| enum binding-tlv { | ||||
| description | ||||
| "Binding is learned from a binding TLV."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Type of binding."; | ||||
| } | ||||
| leaf scope { | ||||
| type enumeration { | ||||
| enum global { | ||||
| description | ||||
| "Global SID."; | ||||
| } | ||||
| enum local { | ||||
| description | ||||
| "Local SID."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "SID scoping."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| notification segment-routing-srgb-collision { | ||||
| description | ||||
| "This notification is sent when SRGB blocks received from | ||||
| different routers collide."; | ||||
| list srgb-collisions { | ||||
| description | ||||
| "List of SRGB blocks that collide."; | ||||
| leaf lower-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Lower value in the block."; | ||||
| } | ||||
| leaf upper-bound { | ||||
| type uint32; | ||||
| description | ||||
| "Upper value in the block."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing/rt:control-plane-protocols/" | ||||
| + "rt:control-plane-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference for SRGB collision."; | ||||
| } | ||||
| leaf originating-rtr-id { | ||||
| type router-or-system-id; | ||||
| description | ||||
| "Originating router ID of this SRGB block."; | ||||
| } | ||||
| } | ||||
| } | ||||
| notification segment-routing-global-sid-collision { | ||||
| description | ||||
| "This notification is sent when a new mapping is learned | ||||
| containing a mapping where the SID is already used. | ||||
| The notification generation must be throttled with at least | ||||
| a 5-second gap between notifications."; | ||||
| leaf received-target { | ||||
| type string; | ||||
| description | ||||
| "Target received in the router advertisement that caused | ||||
| the SID collision."; | ||||
| } | ||||
| leaf new-sid-rtr-id { | ||||
| type router-or-system-id; | ||||
| description | ||||
| "Router ID that advertised the colliding SID."; | ||||
| } | ||||
| leaf original-target { | ||||
| type string; | ||||
| description | ||||
| "Target already available in the database with the same SID | ||||
| as the received target."; | ||||
| } | ||||
| leaf original-sid-rtr-id { | ||||
| type router-or-system-id; | ||||
| description | ||||
| "Router ID for the router that originally advertised the | ||||
| colliding SID, i.e., the instance in the database."; | ||||
| } | ||||
| leaf index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index used by two different prefixes."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing/rt:control-plane-protocols/" | ||||
| + "rt:control-plane-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference for colliding SID."; | ||||
| } | ||||
| } | ||||
| notification segment-routing-index-out-of-range { | ||||
| description | ||||
| "This notification is sent when a binding is received | ||||
| containing a segment index that is out of the local | ||||
| configured ranges. The notification generation must be | ||||
| throttled with at least a 5-second gap between | ||||
| notifications."; | ||||
| leaf received-target { | ||||
| type string; | ||||
| description | ||||
| "A human-readable string representing the target | ||||
| received in the protocol-specific advertisement | ||||
| corresponding to the out-of-range index."; | ||||
| } | ||||
| leaf received-index { | ||||
| type uint32; | ||||
| description | ||||
| "Value of the index received."; | ||||
| } | ||||
| leaf routing-protocol { | ||||
| type leafref { | ||||
| path "/rt:routing/rt:control-plane-protocols/" | ||||
| + "rt:control-plane-protocol/rt:name"; | ||||
| } | ||||
| description | ||||
| "Routing protocol reference for out-of-range indexed."; | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="Security" toc="default" numbered="true"> | ||||
| <name>Security Considerations</name> | ||||
| <t>The YANG modules specified in this document define a schema for | ||||
| data that is designed to be accessed via network | ||||
| management protocols, such as NETCONF <xref target="RFC6241" format="defa | ||||
| ult"/> or | ||||
| RESTCONF <xref target="RFC8040" format="default"/>. The lowest NETCONF la | ||||
| yer is the secure transport | ||||
| layer, and the mandatory-to-implement secure transport is Secure Shell (S | ||||
| SH) | ||||
| <xref target="RFC6242" format="default"/>. The lowest RESTCONF layer is H | ||||
| TTPS, and the | ||||
| mandatory-to-implement secure transport is TLS <xref target="RFC8446" for | ||||
| mat="default"/>.</t> | ||||
| <t>The Network Configuration Access Control Model (NACM) <xref target="RFC | ||||
| 8341" format="default"/> | ||||
| provides the | ||||
| means to restrict access for particular NETCONF or RESTCONF users to a | ||||
| preconfigured subset of all available NETCONF or RESTCONF protocol | ||||
| operations and content.</t> | ||||
| <t>There are a number of data nodes defined in the modules | ||||
| that are writable/creatable/deletable (i.e., config true, which is the def | ||||
| ault). | ||||
| These data nodes may be considered sensitive or vulnerable in some network | ||||
| environments. Write operations (e.g., edit-config) to these data nodes wit | ||||
| hout | ||||
| proper protection can have a negative effect on network operations. | ||||
| These are the subtrees and data nodes and their sensitivity/vulnerability: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>/segment-routing</li> | ||||
| <li>/segment-routing/mpls</li> | ||||
| <li>/segment-routing/mpls/bindings -- Modification to the local bindings | ||||
| could result | ||||
| in a Denial-of-Service (DoS) attack. An attacker may also try to create s | ||||
| egment conflicts | ||||
| (using the same segment identifier for different purposes) to redirect tr | ||||
| affic within the | ||||
| trusted domain. However, the traffic will remain within the trusted domai | ||||
| n. | ||||
| Redirection could be used to route the traffic to compromised nodes withi | ||||
| n | ||||
| the trusted domain or to avoid certain security functions (e.g., firewall | ||||
| ). | ||||
| Refer to <xref target="RFC8402" sectionFormat="of" section="8.1"/> for a | ||||
| discussion of the SR-MPLS | ||||
| trusted domain. | ||||
| </li> | ||||
| <li>/segment-routing/mpls/srgb -- Modification of the Segment Routing Gl | ||||
| obal | ||||
| Block (SRGB) could be used to mount a DoS attack. For example, if the SRG | ||||
| B | ||||
| size is reduced to a very small value, a lot of existing segments could n | ||||
| o longer | ||||
| be installed leading to a traffic disruption. | ||||
| </li> | ||||
| <li>/segment-routing/mpls/srlb -- Modification of the Segment Routing Lo | ||||
| cal Block (SRLB) | ||||
| could be used to mount a DoS attack similar to those applicable to the SR | ||||
| GB.</li> | ||||
| </ul> | ||||
| <t>Some of the readable data nodes in these YANG modules | ||||
| may be considered sensitive or vulnerable in some network environments. It | ||||
| is thus | ||||
| important to control read access (e.g., via get, get-config, or notificati | ||||
| on) | ||||
| to these data nodes. These are the subtrees and data nodes and their sensi | ||||
| tivity/vulnerability: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>/segment-routing/mpls/bindings -- Knowledge of these data nodes can | ||||
| be used to | ||||
| attack the local router with a Denial-of-Service (DoS) attack.</li> | ||||
| <li>/segment-routing/mpls/sid-db -- Knowledge of these data nodes can be | ||||
| used to | ||||
| attack the other routers in the SR domain with either a Denial-of-Service | ||||
| (DoS) attack or redirection traffic destined for those routers.</li> | ||||
| </ul> | ||||
| </section> | ||||
| <section anchor="IANA" toc="default" numbered="true"> | ||||
| <name>IANA Considerations</name> | ||||
| <t>This document registers a URI in the "IETF XML Registry" | ||||
| <xref target="RFC3688" format="default"/>. Following the format in <xref tar | ||||
| get="RFC3688" format="default"/>, | ||||
| the following registration is requested to be made: | ||||
| </t> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>ID:</dt><dd>yang:ietf-segment-routing-common</dd> | ||||
| <dt>URI:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing-common</dd | ||||
| > | ||||
| <dt>Registrant Contact:</dt> <dd>The IESG.</dd> | ||||
| <dt>XML:</dt> <dd>N/A, the requested URI is an XML namespace.</dd> | ||||
| </dl> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>ID:</dt><dd>yang:ietf-segment-routing</dd> | ||||
| <dt>URI:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing</dd> | ||||
| <dt>Registrant Contact:</dt> <dd>The IESG.</dd> | ||||
| <dt>XML:</dt> <dd>N/A, the requested URI is an XML namespace.</dd> | ||||
| </dl> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>ID:</dt><dd>yang:ietf-segment-routing-mpls</dd> | ||||
| <dt>URI:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls</dd> | ||||
| <dt>Registrant Contact:</dt> <dd>The IESG.</dd> | ||||
| <dt>XML:</dt> <dd>N/A, the requested URI is an XML namespace.</dd> | ||||
| </dl> | ||||
| <t>This document registers YANG modules in the "YANG Module Names" | ||||
| registry <xref target="RFC6020" format="default"/>. | ||||
| </t> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>Name:</dt> <dd>ietf-segment-routing-common</dd> | ||||
| <dt>Maintained by IANA:</dt> <dd>N</dd> | ||||
| <dt>Namespace:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing-comm | ||||
| on</dd> | ||||
| <dt>Prefix:</dt> <dd>sr-cmn</dd> | ||||
| <dt>Reference:</dt> <dd>RFC 9020</dd> | ||||
| </dl> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>Name:</dt> <dd>ietf-segment-routing</dd> | ||||
| <dt>Maintained by IANA:</dt> <dd>N</dd> | ||||
| <dt>Namespace:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing</dd> | ||||
| <dt>Prefix:</dt> <dd>sr</dd> | ||||
| <dt>Reference:</dt> <dd>RFC 9020</dd> | ||||
| </dl> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>Name:</dt> <dd>ietf-segment-routing-mpls</dd> | ||||
| <dt>Maintained by IANA:</dt> <dd>N</dd> | ||||
| <dt>Namespace:</dt> <dd>urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls | ||||
| </dd> | ||||
| <dt>Prefix:</dt> <dd>sr-mpls</dd> | ||||
| <dt>Reference:</dt> <dd>RFC 9020</dd> | ||||
| </dl> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
| .2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3688.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6020.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6241.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6242.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6991.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7950.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8040.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8294.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8341.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8342.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8343.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8349.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8402.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8446.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8660.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8661.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8665.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8667.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8669.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8814.xml"/> | ||||
| <reference anchor='W3C.REC-xml11-20060816' | ||||
| target='https://www.w3.org/TR/2006/REC-xml11-20060816'> | ||||
| <front> | ||||
| <title>Extensible Markup Language (XML) 1.1 (Second Edition)</title> | ||||
| <author initials='T.' surname='Bray' fullname='Tim Bray'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='J.' surname='Paoli' fullname='Jean Paoli'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='M.' surname='Sperberg-McQueen' fullname='Michael Sperberg-McQu | ||||
| een'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='E.' surname='Maler' fullname='Eve Maler'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='F.' surname='Yergeau' fullname='François Yergeau'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='J.' surname='Cowan' fullname='John Cowan'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='August' day='16' year='2006' /> | ||||
| </front> | ||||
| <seriesInfo name='World Wide Web Consortium Recommendation' value='REC-xml11-200 | ||||
| 60816' /> | ||||
| <format type='HTML' target='https://www.w3.org/TR/2006/REC-xml11-20060816' /> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8340.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8792.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="examples" numbered="true" toc="default"> | ||||
| <name>Configuration Examples</name> | ||||
| <t>Note: '\' line wrapping per <xref target="RFC8792" format="default"/>.< | ||||
| /t> | ||||
| <section anchor="ipv4" numbered="true" toc="default"> | ||||
| <name>SR-MPLS with IPv4</name> | ||||
| <t>The following is an XML <xref target='W3C.REC-xml11-20060816' format= | ||||
| "default"/> example using the SR-MPLS YANG modules with IPv4 addresses.</t> | ||||
| <sourcecode type="xml"><![CDATA[ | ||||
| <routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"> | ||||
| <segment-routing | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing"> | ||||
| <sr-mpls | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"> | ||||
| <bindings> | ||||
| <mapping-server> | ||||
| <policy> | ||||
| <name>mapping 1</name> | ||||
| <entries> | ||||
| <mapping-entry> | ||||
| <prefix>198.51.100.0/24</prefix> | ||||
| <algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang\ | ||||
| :ietf-segment-routing-common">\ | ||||
| sr-cmn:prefix-sid-algorithm-shortest-path\ | ||||
| </algorithm> | ||||
| <start-sid>200</start-sid> | ||||
| <range>100</range> | ||||
| </mapping-entry> | ||||
| </entries> | ||||
| </policy> | ||||
| </mapping-server> | ||||
| <connected-prefix-sid-map> | ||||
| <connected-prefix-sid> | ||||
| <prefix>192.0.2.0/24</prefix> | ||||
| <algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang:\ | ||||
| ietf-segment-routing-common">\ | ||||
| sr-cmn:prefix-sid-algorithm-strict-spf</algorithm> | ||||
| <start-sid>100</start-sid> | ||||
| <range>1</range> | ||||
| <last-hop-behavior>php</last-hop-behavior> | ||||
| </connected-prefix-sid> | ||||
| </connected-prefix-sid-map> | ||||
| </bindings> | ||||
| <srgb> | ||||
| <srgb> | ||||
| <lower-bound>45000</lower-bound> | ||||
| <upper-bound>55000</upper-bound> | ||||
| </srgb> | ||||
| </srgb> | ||||
| </sr-mpls> | ||||
| </segment-routing> | ||||
| </routing> | ||||
| ]]></sourcecode> | ||||
| <t>The following is the same example using JSON format.</t> | ||||
| <sourcecode type="json"><![CDATA[ | ||||
| { | ||||
| "ietf-routing:routing": { | ||||
| "ietf-segment-routing:segment-routing": { | ||||
| "ietf-segment-routing-mpls:sr-mpls": { | ||||
| "bindings": { | ||||
| "mapping-server": { | ||||
| "policy": [ | ||||
| { | ||||
| "name": "mapping 1", | ||||
| "entries": { | ||||
| "mapping-entry": [ | ||||
| { | ||||
| "prefix": "198.51.100.0/24", | ||||
| "algorithm": "ietf-segment-routing-common:\ | ||||
| prefix-sid-algorithm-shortest-path", | ||||
| "start-sid": 200, | ||||
| "range": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "connected-prefix-sid-map": { | ||||
| "connected-prefix-sid": [ | ||||
| { | ||||
| "prefix": "192.0.2.0/24", | ||||
| "algorithm": "ietf-segment-routing-common:\ | ||||
| prefix-sid-algorithm-strict-spf", | ||||
| "start-sid": 100, | ||||
| "range": 1, | ||||
| "last-hop-behavior": "php" | ||||
| } | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "srgb": { | ||||
| "srgb": [ | ||||
| { | ||||
| "lower-bound": 45000, | ||||
| "upper-bound": 55000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| <section anchor="ipv6" numbered="true" toc="default"> | ||||
| <name>SR-MPLS with IPv6</name> | ||||
| <t>The following is an XML <xref target='W3C.REC-xml11-20060816' format | ||||
| ="default"/> example using the SR-MPLS YANG modules with IPv6 addresses.</t> | ||||
| <sourcecode type="xml"><![CDATA[ | ||||
| <routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing"> | ||||
| <segment-routing | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing"> | ||||
| <sr-mpls | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls"> | ||||
| <bindings> | ||||
| <mapping-server> | ||||
| <policy> | ||||
| <name>mapping 1</name> | ||||
| <entries> | ||||
| <mapping-entry> | ||||
| <prefix>2001:db8:aaaa:bbbb::/64</prefix> | ||||
| <algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang\ | ||||
| :ietf-segment-routing-common">\ | ||||
| sr-cmn:prefix-sid-algorithm-shortest-path\ | ||||
| </algorithm> | ||||
| <start-sid>200</start-sid> | ||||
| <range>100</range> | ||||
| </mapping-entry> | ||||
| </entries> | ||||
| </policy> | ||||
| </mapping-server> | ||||
| <connected-prefix-sid-map> | ||||
| <connected-prefix-sid> | ||||
| <prefix>2001:db8:aaaa:cccc::/64</prefix> | ||||
| <algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang:\ | ||||
| ietf-segment-routing-common">\ | ||||
| sr-cmn:prefix-sid-algorithm-strict-spf</algorithm> | ||||
| <start-sid>100</start-sid> | ||||
| <range>1</range> | ||||
| <last-hop-behavior>php</last-hop-behavior> | ||||
| </connected-prefix-sid> | ||||
| </connected-prefix-sid-map> | ||||
| </bindings> | ||||
| <srgb> | ||||
| <srgb> | ||||
| <lower-bound>45000</lower-bound> | ||||
| <upper-bound>55000</upper-bound> | ||||
| </srgb> | ||||
| </srgb> | ||||
| </sr-mpls> | ||||
| </segment-routing> | ||||
| </routing> | ||||
| ]]></sourcecode> | ||||
| <t>The following is the same example using JSON format.</t> | ||||
| <sourcecode type="json"><![CDATA[ | ||||
| { | ||||
| "ietf-routing:routing": { | ||||
| "ietf-segment-routing:segment-routing": { | ||||
| "ietf-segment-routing-mpls:sr-mpls": { | ||||
| "bindings": { | ||||
| "mapping-server": { | ||||
| "policy": [ | ||||
| { | ||||
| "name": "mapping 1", | ||||
| "entries": { | ||||
| "mapping-entry": [ | ||||
| { | ||||
| "prefix": "2001:db8:aaaa:bbbb::/64", | ||||
| "algorithm": "ietf-segment-routing-common:\ | ||||
| prefix-sid-algorithm-shortest-path", | ||||
| "start-sid": 200, | ||||
| "range": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "connected-prefix-sid-map": { | ||||
| "connected-prefix-sid": [ | ||||
| { | ||||
| "prefix": "2001:db8:aaaa:cccc::/64", | ||||
| "algorithm": "ietf-segment-routing-common:\ | ||||
| prefix-sid-algorithm-strict-spf", | ||||
| "start-sid": 100, | ||||
| "range": 1, | ||||
| "last-hop-behavior": "php" | ||||
| } | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "srgb": { | ||||
| "srgb": [ | ||||
| { | ||||
| "lower-bound": 45000, | ||||
| "upper-bound": 55000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ]]></sourcecode> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="Acknowledgements" toc="default" numbered="false"> | ||||
| <name>Acknowledgements</name> | ||||
| <t>The authors would like to thank <contact fullname="Derek Yeung"/>, <con | ||||
| tact | ||||
| fullname="Greg Hankins"/>, <contact fullname="Hannes Gredler"/>, <contact | ||||
| fullname="Uma Chunduri"/>, | ||||
| <contact fullname="Jeffrey Zhang"/>, <contact fullname="Shradda Hedge"/>, | ||||
| and <contact | ||||
| fullname="Les Ginsberg"/> for their contributions.</t> | ||||
| <t>Thanks to <contact fullname="Ladislav Lhotka"/> and <contact fullname=" | ||||
| Tom Petch"/> for | ||||
| their thorough reviews and helpful comments.</t> | ||||
| <t>The authors would like to thank <contact fullname="Benjamin Kaduk"/>, < | ||||
| contact | ||||
| fullname="Alvaro Retana"/>, and <contact fullname="Roman Danyliw"/> for IE | ||||
| SG | ||||
| review and comments.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 1 change blocks. | ||||
| lines changed or deleted | 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/ | ||||