[rename, /rfc[1]/middle[1], rfc] [move-first, /rfc[1]/rfc[1], /] [move-first, /rfc[2]/@category, /rfc[1]] [append, /rfc[1], <@consensus> yes ] [move-first, /rfc[2]/@ipr, /rfc[1]] [append, /rfc[1], <@number> 8476 ] [append, /rfc[1], <@submissionType> IETF ] [move-first, /rfc[2]/front[1], /rfc[1]] [insert-after, /rfc[1]/front[1], ] [insert-after, /rfc[1]/middle[1], PCEP Extensions for Segment Routing Signaling Entropy Label Capability and Entropy Readable Label-stack Depth Using OSPF
The authors would like to thank Acee Lindem, Ketan Talaulikar,Tal Mizrahi, Stephane Litkowski, and Bruno Decraene for their reviewsand valuable comments.
The following person contributed to this document:
] [move-first, /rfc[1]/section[1], /rfc[1]/middle[1]] [move-after, /rfc[1]/section[1], /rfc[1]/middle[1]/section[1]] [move-after, /rfc[1]/section[1], /rfc[1]/middle[1]/section[2]] [move-after, /rfc[1]/section[1], /rfc[1]/middle[1]/section[3]] [move-after, /rfc[1]/section[1], /rfc[1]/middle[1]/section[4]] [move-after, /rfc[1]/section[1], /rfc[1]/middle[1]/section[5]] [update, /rfc[1]/front[1]/title[1]/text()[1], Signaling Maximum SID Depth (MSD) Using OSPF] [insert-after, /rfc[1]/middle[1]/section[3]/t[2], ] [append-first, /rfc[1]/middle[1]/section[4], ] [append-first, /rfc[1]/middle[1]/section[5], This specification updates several existing OSPF registries. ] [move-first, /rfc[2]/back[1]/references[1]/@title, /rfc[1]/back[1]/references[1]] [move-first, /rfc[2]/back[1]/references[2]/@title, /rfc[1]/back[1]/references[2]] [update, /comment()[15], draft-ietf-pce-segment-routing (Waiting for Writeup)] [move-first, /comment()[15], /rfc[1]/back[1]/references[2]] [move-after, /rfc[1]/section[1]/t[2], /rfc[1]/back[1]/section[2]/t[1]] [move-after, /rfc[1]/section[1]/t[2], /rfc[1]/back[1]/section[2]/t[2]] [update, /rfc[1]/front[1]/title[1]/@abbrev, Signaling MSD Using OSPF] [update, /rfc[1]/front[1]/author[3]/organization[1]/text()[1], Google, Inc.] [update, /rfc[1]/front[1]/date[1]/@month, December] [update, /rfc[1]/front[1]/abstract[1]/t[1]/text()[1], This document defines a way for an Open Shortest Path First (OSPF)router to advertise multipletypes of supported Maximum SID Depths (MSDs) at node and/or linkgranularity. Such advertisements allow entities (e.g., centralizedcontrollers) to determine whether a particular SegmentIdentifier (SID) stack can be supportedin a given network. This document only refers to the Signaling MSD asdefined in RFC 8491, but it defines an encoding that can supportother MSD types. Here, the term "OSPF" means both OSPFv2 and OSPFv3.] [update, /rfc[1]/middle[1]/section[1]/t[1]/text()[1], When Segment Routing (SR) paths are computed by a centralizedcontroller, it is critical that the controller learn the Maximum SIDDepth (MSD) that can be imposed at each node/link on a given SR path.This ensures that the Segment Identifier (SID) stack depth of a computedpath doesn't exceed the number of SIDs the node is capable ofimposing.] [append-first, /rfc[1]/middle[1]/section[1]/t[2], ] [update, /rfc[1]/middle[1]/section[1]/t[2]/text()[1], defines how to signal MSD in thePath Computation Element Communication Protocol (PCEP). However, if PCEPis not supported/configured on the head-end of an SR tunnel or aBinding-SID anchor node, and the controller does not participate in IGProuting, it has no way of learning the MSD of nodes andlinks. BGPLS (Distribution of Link-State and TE Information UsingBGP)] [update, /rfc[1]/middle[1]/section[1]/t[2]/text()[1], defines a way toexpose topology and associated attributes and capabilities of the nodesin that topology to a centralized controller. MSD signaling by BGP-LShas been defined in] [insert-after, /rfc[1]/middle[1]/section[1]/t[2]/text()[2], ] [update, /rfc[1]/middle[1]/section[1]/t[2]/text()[1], . Typically, BGP-LS isconfigured on a small number of nodes that do not necessarily act ashead-ends. In order for BGP-LS to signal MSD for all the nodes and linksin the network for which MSD is relevant, MSD capabilities SHOULD beadvertised by every OSPF router in the network.] [update, /rfc[1]/middle[1]/section[1]/t[3]/text()[1], Other types of MSDs are known to be useful. For example,] [insert-after, /rfc[1]/middle[1]/section[1]/t[3]/text()[1], ] [update, /rfc[1]/middle[1]/section[1]/t[3]/text()[1], defines Entropy Readable Label Depth (ERLD),which is used by a headend to insert an Entropy Label (EL) at adepth where it can be read by transit nodes.] [update, /rfc[1]/middle[1]/section[1]/t[4]/text()[1], This document defines an extension to OSPF used to advertise one ormore types of MSDs at node and/or link granularity.In the future, it is expected that new MSD-Types will be defined tosignal additional capabilities, e.g., ELs, SIDs that can beimposed through recirculation, or SIDs associated with another dataplane such as IPv6.] [update, /rfc[1]/middle[1]/section[1]/t[5]/text()[1], MSD advertisements MAY be useful even if SR itself isnot enabled. For example, in a non-SR MPLS network, MSD defines themaximum label depth.] [insert-after, /rfc[1]/middle[1]/section[1]/section[1]/t[1], ] [insert-after, /rfc[1]/middle[1]/section[1]/section[1]/t[9], ] [update, /rfc[1]/middle[1]/section[2]/t[1]/text()[1], The Node MSD TLV within the body of the OSPF RI Opaque LSA] [update, /rfc[1]/middle[1]/section[2]/t[1]/text()[1], is defined to carry the provisioned SID depth of therouter originating the RI LSA. Node MSD is the smallest MSD supportedby the node on the set of interfaces configured for use by theadvertising IGP instance. MSD values may be learned via a hardware APIor may be provisioned.] [update, /rfc[1]/middle[1]/section[2]/t[3]/text()[1], Length: variable (multiple of 2 octets); represents the totallength of the value field in octets.] [update, /rfc[1]/middle[1]/section[2]/t[4]/text()[1], Value: consists of one or more pairs of a 1octet MSD-Type and1octet MSD-Value.] [update, /rfc[1]/middle[1]/section[2]/t[5]/text()[1], MSD-Type: one of the values defined in the "IGP MSD-Types" registrydefined in] [insert-after, /rfc[1]/middle[1]/section[2]/t[5]/text()[1], ] [update, /rfc[1]/middle[1]/section[2]/t[6]/text()[1], MSD-Value: a number in the range of 0-255. For all MSD-Types, 0represents the lack of ability to impose an MSD stack of any depth; anyother value represents that of the node. This value MUST represent thelowest value supported by any link configured for use by the advertisingOSPF instance.] [update, /rfc[1]/middle[1]/section[2]/t[7]/text()[1], This TLV is optional and is applicable to both OSPFv2 and OSPFv3.The scope of the advertisement is specific to the deployment.] [update, /rfc[1]/middle[1]/section[2]/t[8]/text()[1], When multiple Node MSD TLVs are received from a given router, thereceiver MUST use the first occurrence of the TLV in the RouterInformation (RI) LSA. If the Node MSD TLV appears in multiple RILSAs that have different flooding scopes, the NodeMSD TLV in the RI LSA with the area-scopedflooding scope MUST be used. If the Node MSD TLV appears inmultiple RI LSAs that have the same flooding scope,the Node MSD TLV in the RI LSA with thenumerically smallest Instance ID MUST be used and otherinstances of the Node MSD TLV MUST be ignored.The RI LSA can be advertised at any of the defined opaque floodingscopes (link, area, or Autonomous System (AS)). For the purpose ofNode MSD TLV advertisement, area-scoped flooding is RECOMMENDED.] [update, /rfc[1]/middle[1]/section[3]/@title, Link MSD Sub-TLV] [update, /rfc[1]/middle[1]/section[3]/t[1]/text()[1], The Link MSD sub-TLV is defined to carry the MSD of the interfaceassociated with the link. MSD values may be learned via a hardware APIor may be provisioned.] [update, /rfc[1]/middle[1]/section[3]/t[6]/text()[1], Length: variable; same as defined in] [update, /rfc[1]/middle[1]/section[3]/t[7]/text()[1], Value: consists of one or more pairs of a 1octet MSD-Type and1octet MSD-Value.] [update, /rfc[1]/middle[1]/section[3]/t[8]/text()[1], MSD-Type: one of the values defined in the "IGP MSD-Types" registrydefined in] [insert-after, /rfc[1]/middle[1]/section[3]/t[8]/text()[1], ] [update, /rfc[1]/middle[1]/section[3]/t[9]/text()[1], The MSD-Value field contains the Link MSD of the router originatingthe corresponding LSA as specified for OSPFv2 and OSPFv3. The Link MSDis a number in the range of 0-255. For all MSD-Types, 0 represents thelack of ability to impose an MSD stack of any depth; any other valuerepresents that of the particular link when used as an outgoinginterface.] [update, /rfc[1]/middle[1]/section[3]/t[10]/text()[1], If this sub-TLV is advertised multiple times for the same link indifferent OSPF Extended Link Opaque LSAs / E-Router-LSAs originatedby the same OSPF router, the sub-TLV in the OSPFv2 Extended LinkOpaque LSA with the smallest Opaque ID or in the OSPFv3E-Router-LSA with the smallest Link State ID MUST be used byreceiving OSPF routers. This situation SHOULD be logged as an error.] [update, /rfc[1]/middle[1]/section[3]/t[11]/text()[1], When Link MSD is present for a given MSD-Type, the value of the LinkMSD MUST take precedence over the Node MSD. When a Link MSDTypeis not signaled but the Node MSD-Type is, then the Node MSDTypevalue MUST be considered as the MSD value for that link.] [update, /rfc[1]/middle[1]/section[4]/t[2]/text()[1], In order to increase flooding efficiency, it is RECOMMENDED thatrouters with homogenous Link MSD values advertise just the Node MSDvalue.] [update, /rfc[1]/middle[1]/section[4]/t[4]/text()[1], The meaning of the absence of both Node and Link MSD advertisementsfor a given MSD-Type is specific to the MSD-Type. Generally, it can onlybe inferred that the advertising node does not support advertisement ofthat MSD-Type. However, in some cases the lack of advertisement mightimply that the functionality associated with the MSD-Type is notsupported. Per] [insert-after, /rfc[1]/middle[1]/section[4]/t[4]/text()[1], ] [update, /rfc[1]/middle[1]/section[5]/t[2]/text()[1], , the correct interpretation MUSTbe specified when an MSD-Type is defined.] [update, /rfc[1]/middle[1]/section[5]/t[3]/text()[1], IANA has allocated TLV type 12 from the "OSPF RouterInformation (RI) TLVs" registry as defined by] [update, /rfc[1]/middle[1]/section[5]/t[3]/text()[2], IANA has allocated sub-TLV type 6 fromthe "OSPFv2 Extended Link TLV Sub-TLVs" registry.] [update, /rfc[1]/middle[1]/section[5]/t[3]/text()[2], IANA has allocated sub-TLV type 9 from the "OSPFv3 Extended-LSASubTLVs" registry.] [update, /rfc[1]/middle[1]/section[6]/t[1]/text()[3], , and] [update, /rfc[1]/middle[1]/section[6]/t[1]/text()[3], .Further security analysis for the OSPF protocol is done in] [update, /rfc[1]/middle[1]/section[6]/t[1]/text()[3], . Security considerations as specified by] [update, /rfc[1]/middle[1]/section[6]/t[1]/text()[4], , and] [update, /rfc[1]/middle[1]/section[6]/t[2]/text()[1], Implementations MUST ensure that malformed TLVs and sub-TLVs defined inthis document are detected and do not provide a vulnerability forattackers to crash the OSPF router or routing process. Receptionof malformed TLVs or sub-TLVs SHOULD be counted and/or logged forfurther analysis. Logging of malformed TLVs and sub-TLVs SHOULD beratelimited to prevent a Denial-of-Service (DoS) attack (distributedor otherwise) from overloading the OSPF control plane.] [update, /rfc[1]/middle[1]/section[6]/t[4]/text()[1], The presence of this information may also inform an attacker of howto induce any of the aforementioned conditions.] [update, /rfc[1]/middle[1]/section[6]/t[5]/text()[1], There's no DoS risk specific to this extension, and it isnot vulnerable to replay attacks.] [insert-after, /rfc[1]/middle[1]/section[1]/section[1]/t[1]/xref[1], . ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[9]/text()[1], The number of labels imposed is then the sum of the number oflabels that are replaced and the number of labels that arepushed. See] [update, /rfc[1]/middle[1]/section[1]/section[2]/t[1]/text()[1], The key words "MUST", "MUST NOT", "REQUIRED", "SHALL","SHALLNOT", "SHOULD", "SHOULDNOT", "RECOMMENDED","NOTRECOMMENDED", "MAY", and "OPTIONAL" in this documentare to be interpreted as described in BCP14] [update, /rfc[1]/middle[1]/section[1]/section[2]/t[1]/text()[1], when,and only when, they appear in all capitals, as shown here.] [move-first, /rfc[1]/middle[1]/section[3]/t[4], /rfc[1]/middle[1]/section[3]/t[3]/list[1]] [move-after, /rfc[1]/middle[1]/section[3]/t[4], /rfc[1]/middle[1]/section[3]/t[3]/list[1]/t[1]] [rename, /rfc[1]/section[1]/t[1], title] [move-first, /rfc[1]/section[1]/title[1], /rfc[1]/back[1]/references[2]/reference[2]/front[1]] [move-first, /rfc[1]/middle[1]/section[1]/section[1]/t[3], /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[3], /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[1]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[3], /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[2]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[3], /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[3]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[4], /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[4]] [move-first, /rfc[1]/middle[1]/section[1]/section[1]/t[6], /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[8], /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[1]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[8], /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[2]] [move-after, /rfc[1]/middle[1]/section[1]/section[1]/t[9], /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[3]] [update, /rfc[1]/middle[1]/section[3]/t[3]/list[1]/t[1]/text()[1], For OSPFv2, the link-level MSD-Value is advertised as anoptional sub-TLV of the OSPFv2 Extended Link TLV as defined in] [update, /rfc[1]/middle[1]/section[3]/t[3]/list[1]/t[1]/text()[1], and has a type of 6.] [update, /rfc[1]/middle[1]/section[3]/t[3]/list[1]/t[2]/text()[1], For OSPFv3, the link-level MSD-Value is advertised as anoptional sub-TLV of the E-Router-LSA TLV as defined in] [update, /rfc[1]/middle[1]/section[3]/t[3]/list[1]/t[2]/text()[1], and has a type of 9.] [update, /rfc[1]/back[1]/references[2]/reference[2]/front[1]/title[1]/text()[1], Signaling MSD (Maximum SID Depth) using Border Gateway Protocol Link-State] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[1], <@hangText> BGP-LS: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[1]/text()[1], Distribution of Link-State and TE Information UsingBGP] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[2], <@hangText> OSPF: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[2]/text()[1], Open Shortest Path First] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[3], <@hangText> MSD: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[3]/text()[1], Maximum SID Depth - the number of SIDs supported by anode or a link on a node] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[4], <@hangText> SID: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[4]/text()[1], Segment Identifier as defined in] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[2]/list[1]/t[5], <@hangText> Label Imposition: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[3]/text()[1], Imposition is the act of modifying and/oradding labels to the outgoing label stack associated with a packet. Thisincludes:] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[1], <@hangText> PCEP: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[1]/text()[1], Path Computation Element Communication Protocol] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[2], <@hangText> SR: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[2]/text()[1], Segment Routing] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[3], <@hangText> LSA: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[3]/text()[1], Link State Advertisement] [append, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[4], <@hangText> RI: ] [update, /rfc[1]/middle[1]/section[1]/section[1]/t[5]/list[1]/t[4]/text()[1], Router Information] [remove, /rfc[1]/front[1]/date[1]/@day] [remove, /rfc[1]/front[1]/area[1]] [remove, /rfc[1]/front[1]/workgroup[1]] [remove, /rfc[1]/front[1]/keyword[1]] [remove, /rfc[1]/middle[1]/section[1]/t[2]/xref[2]] [remove, /rfc[1]/middle[1]/section[1]/t[2]/xref[4]] [remove, /rfc[1]/middle[1]/section[1]/t[3]/xref[2]] [remove, /rfc[1]/middle[1]/section[1]/section[1]/t[3]] [remove, /rfc[1]/middle[1]/section[1]/section[1]/t[5]] [remove, /rfc[1]/middle[1]/section[1]/section[1]/t[5]] [remove, /rfc[1]/middle[1]/section[1]/section[1]/t[5]] [remove, /rfc[1]/middle[1]/section[2]/figure[1]/preamble[1]] [remove, /rfc[1]/middle[1]/section[2]/figure[1]/postamble[1]] [remove, /rfc[1]/middle[1]/section[2]/t[5]/xref[2]] [remove, /rfc[1]/middle[1]/section[3]/figure[1]/preamble[1]] [remove, /rfc[1]/middle[1]/section[3]/figure[1]/postamble[1]] [remove, /rfc[1]/middle[1]/section[3]/t[6]/xref[2]] [remove, /rfc[1]/middle[1]/section[3]/t[9]] [remove, /rfc[1]/middle[1]/section[4]/t[3]] [remove, /rfc[1]/middle[1]/section[4]/t[3]/text()[3]] [remove, /rfc[1]/middle[1]/section[4]/t[3]/xref[2]] [remove, /rfc[1]/middle[1]/section[5]/t[2]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[1]/preamble[1]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[1]/postamble[1]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[2]/preamble[1]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[2]/postamble[1]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[3]/preamble[1]] [remove, /rfc[1]/middle[1]/section[5]/t[2]/figure[3]/postamble[1]] [remove, /rfc[1]/section[1]] [remove, /rfc[1]/section[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /comment()[1]] [remove, /rfc[2]]