| rfc8662xml2.original.xml | rfc8662.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"[ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
| <!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | nsus="true" docName="draft-ietf-mpls-spring-entropy-label-12" indexInclude="true | |||
| ce.RFC.2119.xml"> | " ipr="trust200902" number="8662" prepTime="2019-12-04T22:14:22" scripts="Common | |||
| <!ENTITY RFC6790 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ,Latin" sortRefs="false" submissionType="IETF" symRefs="true" tocDepth="3" tocIn | |||
| ce.RFC.6790.xml"> | clude="true" xml:lang="en"> | |||
| <!ENTITY RFC4206 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | <link href="https://datatracker.ietf.org/doc/draft-ietf-mpls-spring-entropy-la | |||
| ce.RFC.4206.xml"> | bel-12" rel="prev"/> | |||
| <!ENTITY RFC7325 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | <link href="https://dx.doi.org/10.17487/rfc8662" rel="alternate"/> | |||
| ce.RFC.7325.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
| <!ENTITY RFC7855 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7855.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8174.xml"> | ||||
| <!ENTITY SR SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I | ||||
| -D.ietf-spring-segment-routing.xml"> | ||||
| <!ENTITY SR-MPLS SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refere | ||||
| nce.I-D.ietf-spring-segment-routing-mpls.xml"> | ||||
| <!ENTITY ISIS-ELC SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refer | ||||
| ence.I-D.ietf-isis-mpls-elc.xml"> | ||||
| <!ENTITY OSPF-ELC SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refer | ||||
| ence.I-D.ietf-ospf-mpls-elc.xml"> | ||||
| <!ENTITY OSPF-MSD SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refer | ||||
| ence.I-D.ietf-ospf-segment-routing-msd.xml"> | ||||
| <!ENTITY ISIS-MSD SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refer | ||||
| ence.I-D.ietf-isis-segment-routing-msd.xml"> | ||||
| <!ENTITY BGP-MSD SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refere | ||||
| nce.I-D.ietf-idr-bgp-ls-segment-routing-msd.xml"> | ||||
| <!ENTITY SR-L2-BUNDLES SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml3/ | ||||
| reference.I-D.ietf-isis-l2bundles.xml"> | ||||
| ]> | ||||
| <?rfc toc="yes" ?> | ||||
| <?rfc tocompact="yes"?> | ||||
| <?rfc tocdepth="4"?> | ||||
| <?rfc tocindent="yes"?> | ||||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="no"?> | ||||
| <?rfc rfcedstyle="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc iprnotified="Yes" ?> | ||||
| <?rfc strict="no" ?> | ||||
| <rfc ipr="trust200902" category="std" docName="draft-ietf-mpls-spring-entropy-la | ||||
| bel-12" obsoletes="" updates="" submissionType="IETF" xml:lang="en"> | ||||
| <front> | <front> | |||
| <title abbrev="Entropy Labels for SPRING tunnels">Entropy label for SPRING t | <title abbrev="Entropy Labels for SPRING Tunnels">Entropy Label for Source P | |||
| unnels</title> | acket Routing in Networking (SPRING) Tunnels</title> | |||
| <seriesInfo name="RFC" value="8662" stream="IETF"/> | ||||
| <author initials="S" surname="Kini" fullname="Sriganesh Kini"> | <author initials="S" surname="Kini" fullname="Sriganesh Kini"> | |||
| <organization></organization> | <organization showOnFrontPage="true"/> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>sriganeshkini@gmail.com</email> | <email>sriganeshkini@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="K" surname="Kompella" fullname="Kireeti Kompella"> | <author initials="K" surname="Kompella" fullname="Kireeti Kompella"> | |||
| <organization>Juniper</organization> | <organization showOnFrontPage="true">Juniper</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>kireeti@juniper.net</email> | <email>kireeti@juniper.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="S" surname="Sivabalan" fullname="Siva Sivabala | <author initials="S" surname="Sivabalan" fullname="Siva Sivabalan"> | |||
| n"> | <organization showOnFrontPage="true">Cisco</organization> | |||
| <organization>Cisco</organization> | ||||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>msiva@cisco.com</email> | <email>msiva@cisco.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="S" surname="Litkowski" fullname="Stephane Litk | <author initials="S" surname="Litkowski" fullname="Stephane Litkowski"> | |||
| owski"> | <organization showOnFrontPage="true">Orange</organization> | |||
| <organization>Orange</organization> | ||||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>stephane.litkowski@orange.com</email> | <email>slitkows.ietf@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="R" surname="Shakir" fullname="Rob Shakir"> | <author initials="R" surname="Shakir" fullname="Rob Shakir"> | |||
| <organization>Google</organization> | <organization showOnFrontPage="true">Google</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>rjs@rob.sh</email> | <email>robjs@google.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="J" surname="Tantsura" fullname="Jeff Tantsura" | <author initials="J" surname="Tantsura" fullname="Jeff Tantsura"> | |||
| > | <organization showOnFrontPage="true">Apstra, Inc.</organization> | |||
| <organization></organization> | ||||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street></street> | <street/> | |||
| <city></city> | <city/> | |||
| <region></region> | <region/> | |||
| <code></code> | <code/> | |||
| <country></country> | <country/> | |||
| </postal> | </postal> | |||
| <email>jefftant@gmail.com</email> | <email>jefftant.ietf@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="12" year="2019"/> | ||||
| <date year="2018" /> | ||||
| <area>Routing</area> | <area>Routing</area> | |||
| <workgroup>Network Working Group</workgroup> | <keyword>Flow-aware load balancing</keyword> | |||
| <abstract> | <keyword>ECMP</keyword> | |||
| <keyword>equal-cost multipath</keyword> | ||||
| <t> | <abstract pn="section-abstract"> | |||
| Segment Routing (SR) leverages the source routing paradigm. A node | <t pn="section-abstract-1"> | |||
| steers a packet through an ordered list of instructions, called | Segment Routing (SR) leverages the source-routing paradigm. A node steers a | |||
| segments. Segment Routing can be applied to the Multi Protocol Label | packet through an ordered list of instructions, called segments. Segment | |||
| Switching (MPLS) data plane. Entropy label (EL) is a technique used | Routing can be applied to the Multiprotocol Label Switching (MPLS) data | |||
| in MPLS to improve load-balancing. This document examines and | plane. Entropy labels (ELs) are used in MPLS to improve load-balancing. | |||
| describes how ELs are to be applied to Segment Routing MPLS. | This document examines and describes how ELs are to be applied to Segment | |||
| Routing MPLS. | ||||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| <boilerplate> | ||||
| <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | ||||
| "exclude" pn="section-boilerplate.1"> | ||||
| <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | ||||
| > | ||||
| <t pn="section-boilerplate.1-1"> | ||||
| This is an Internet Standards Track document. | ||||
| </t> | ||||
| <t pn="section-boilerplate.1-2"> | ||||
| This document is a product of the Internet Engineering Task Force | ||||
| (IETF). It represents the consensus of the IETF community. It has | ||||
| received public review and has been approved for publication by | ||||
| the Internet Engineering Steering Group (IESG). Further | ||||
| information on Internet Standards is available in Section 2 of | ||||
| RFC 7841. | ||||
| </t> | ||||
| <t pn="section-boilerplate.1-3"> | ||||
| Information about the current status of this document, any | ||||
| errata, and how to provide feedback on it may be obtained at | ||||
| <eref target="https://www.rfc-editor.org/info/rfc8662" brackets="non | ||||
| e"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
| ude" pn="section-boilerplate.2"> | ||||
| <name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
| <t pn="section-boilerplate.2-1"> | ||||
| Copyright (c) 2019 IETF Trust and the persons identified as the | ||||
| document authors. All rights reserved. | ||||
| </t> | ||||
| <t pn="section-boilerplate.2-2"> | ||||
| This document is subject to BCP 78 and the IETF Trust's Legal | ||||
| Provisions Relating to IETF Documents | ||||
| (<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
| "/>) in effect on the date of | ||||
| publication of this document. Please review these documents | ||||
| carefully, as they describe your rights and restrictions with | ||||
| respect to this document. Code Components extracted from this | ||||
| document must include Simplified BSD License text as described in | ||||
| Section 4.e of the Trust Legal Provisions and are provided without | ||||
| warranty as described in the Simplified BSD License. | ||||
| </t> | ||||
| </section> | ||||
| </boilerplate> | ||||
| <toc> | ||||
| <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
| n="section-toc.1"> | ||||
| <name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
| c.1-1"> | ||||
| <li pn="section-toc.1-1.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent | ||||
| ="1" format="counter" sectionFormat="of" target="section-1"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-introduction">Introductio | ||||
| n</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.1.2"> | ||||
| <li pn="section-toc.1-1.1.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derive | ||||
| dContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>. <xre | ||||
| f derivedContent="" format="title" sectionFormat="of" target="name-requirements- | ||||
| language">Requirements Language</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent | ||||
| ="2" format="counter" sectionFormat="of" target="section-2"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-abbreviations-and-termino | ||||
| lo">Abbreviations and Terminology</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.3"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent | ||||
| ="3" format="counter" sectionFormat="of" target="section-3"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-use-case-requiring-multip | ||||
| at">Use Case Requiring Multipath Load-Balancing</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.4"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent | ||||
| ="4" format="counter" sectionFormat="of" target="section-4"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-entropy-readable-label-de | ||||
| pt">Entropy Readable Label Depth</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent | ||||
| ="5" format="counter" sectionFormat="of" target="section-5"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-maximum-sid-depth">Maximu | ||||
| m SID Depth</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent | ||||
| ="6" format="counter" sectionFormat="of" target="section-6"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-lsp-stitching-using-the-b | ||||
| in">LSP Stitching Using the Binding SID</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent | ||||
| ="7" format="counter" sectionFormat="of" target="section-7"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-insertion-of-entropy-labe | ||||
| ls">Insertion of Entropy Labels for SPRING Path</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.7.2"> | ||||
| <li pn="section-toc.1-1.7.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.1.1"><xref derive | ||||
| dContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>. <xre | ||||
| f derivedContent="" format="title" sectionFormat="of" target="name-overview">Ove | ||||
| rview</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
| ction-toc.1-1.7.2.1.2"> | ||||
| <li pn="section-toc.1-1.7.2.1.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.1.2.1.1"><xre | ||||
| f derivedContent="7.1.1" format="counter" sectionFormat="of" target="section-7.1 | ||||
| .1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
| xample-1-the-ingress-node-">Example 1: The Ingress Node Has a Sufficient MSD</xr | ||||
| ef></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.1.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.1.2.2.1"><xre | ||||
| f derivedContent="7.1.2" format="counter" sectionFormat="of" target="section-7.1 | ||||
| .2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
| xample-2-the-ingress-node-">Example 2: The Ingress Node Does Not Have a Sufficie | ||||
| nt MSD</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.1"><xref derive | ||||
| dContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>. <xre | ||||
| f derivedContent="" format="title" sectionFormat="of" target="name-consideration | ||||
| s-for-the-plac">Considerations for the Placement of Entropy Labels</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
| ction-toc.1-1.7.2.2.2"> | ||||
| <li pn="section-toc.1-1.7.2.2.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.1.1"><xre | ||||
| f derivedContent="7.2.1" format="counter" sectionFormat="of" target="section-7.2 | ||||
| .1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
| rld-value">ERLD Value</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.2.1"><xre | ||||
| f derivedContent="7.2.2" format="counter" sectionFormat="of" target="section-7.2 | ||||
| .2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-s | ||||
| egment-type">Segment Type</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2.2.3"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.3.1"><xre | ||||
| f derivedContent="7.2.3" format="counter" sectionFormat="of" target="section-7.2 | ||||
| .3"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-m | ||||
| aximizing-number-of-lsrs-t">Maximizing Number of LSRs That Will Load-Balance</xr | ||||
| ef></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2.2.4"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.4.1"><xre | ||||
| f derivedContent="7.2.4" format="counter" sectionFormat="of" target="section-7.2 | ||||
| .4"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-p | ||||
| reference-for-a-part-of-th">Preference for a Part of the Path</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2.2.5"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.5.1"><xre | ||||
| f derivedContent="7.2.5" format="counter" sectionFormat="of" target="section-7.2 | ||||
| .5"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-c | ||||
| ombining-criteria">Combining Criteria</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.8"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent | ||||
| ="8" format="counter" sectionFormat="of" target="section-8"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-a-simple-example-algorith | ||||
| m">A Simple Example Algorithm</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.9"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent | ||||
| ="9" format="counter" sectionFormat="of" target="section-9"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-deployment-considerations | ||||
| ">Deployment Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedConten | ||||
| t="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-options-considered">Opt | ||||
| ions Considered</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.10.2"> | ||||
| <li pn="section-toc.1-1.10.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.2.1.1"><xref deriv | ||||
| edContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-single-el- | ||||
| at-the-bottom-of-">Single EL at the Bottom of the Stack</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.2.2.1"><xref deriv | ||||
| edContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-an-el-per- | ||||
| segment-in-the-st">An EL per Segment in the Stack</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10.2.3"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.2.3.1"><xref deriv | ||||
| edContent="10.3" format="counter" sectionFormat="of" target="section-10.3"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-a-reusable | ||||
| -el-for-a-stack-o">A Reusable EL for a Stack of Tunnels</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10.2.4"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.2.4.1"><xref deriv | ||||
| edContent="10.4" format="counter" sectionFormat="of" target="section-10.4"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-el-at-top- | ||||
| of-stack">EL at Top of Stack</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10.2.5"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.2.5.1"><xref deriv | ||||
| edContent="10.5" format="counter" sectionFormat="of" target="section-10.5"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-els-at-rea | ||||
| dable-label-stack">ELs at Readable Label Stack Depths</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.11"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.11.1"><xref derivedConten | ||||
| t="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-iana-considerations">IA | ||||
| NA Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.12"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.12.1"><xref derivedConten | ||||
| t="12" format="counter" sectionFormat="of" target="section-12"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-security-considerations | ||||
| ">Security Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.13"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.13.1"><xref derivedConten | ||||
| t="13" format="counter" sectionFormat="of" target="section-13"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-references">References< | ||||
| /xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.13.2"> | ||||
| <li pn="section-toc.1-1.13.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.13.2.1.1"><xref deriv | ||||
| edContent="13.1" format="counter" sectionFormat="of" target="section-13.1"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-normative- | ||||
| references">Normative References</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.13.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.13.2.2.1"><xref deriv | ||||
| edContent="13.2" format="counter" sectionFormat="of" target="section-13.2"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-informativ | ||||
| e-references">Informative References</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.14"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.14.1"><xref derivedConten | ||||
| t="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derived | ||||
| Content="" format="title" sectionFormat="of" target="name-acknowledgements">Ackn | ||||
| owledgements</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.15"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.15.1"><xref derivedConten | ||||
| t="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derived | ||||
| Content="" format="title" sectionFormat="of" target="name-contributors">Contribu | ||||
| tors</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.16"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.16.1"><xref derivedConten | ||||
| t="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derived | ||||
| Content="" format="title" sectionFormat="of" target="name-authors-addresses">Aut | ||||
| hors' Addresses</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </toc> | ||||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction" toc="default"> | <section toc="include" numbered="true" removeInRFC="false" pn="section-1"> | |||
| <t> | <name slugifiedName="name-introduction">Introduction</name> | |||
| Segment Routing <xref target="I-D.ietf-spring-segment-routing"/> is based on | <t pn="section-1-1"> | |||
| source routed tunnels | Segment Routing <xref target="RFC8402" format="default" sectionFormat="of" de | |||
| to steer a packet along a particular path. This path is encoded as an ordere | rivedContent="RFC8402"/> is based on | |||
| d list of segments. | source-routed tunnels to steer a packet along a particular path. This path | |||
| When applied to the MPLS dataplane <xref target="I-D.ietf-spring-segment- | is encoded as an ordered list of segments. When applied to the MPLS data | |||
| routing-mpls"/>, each segment is an LSP (Label Switched Path) with an associated | plane <xref target="RFC8660" format="default" sectionFormat="of" derivedConte | |||
| MPLS label value. | nt="RFC8660"/>, each segment is an LSP | |||
| Hence, label stacking is used to represent the ordered list of segments a | (Label Switched Path) with an associated MPLS label value. Hence, label | |||
| nd the label stack associated with an SR tunnel can be seen as nested LSPs (LSP | stacking is used to represent the ordered list of segments, and the label | |||
| hierarchy) in the MPLS architecture. | stack associated with an SR tunnel can be seen as nested LSPs (LSP | |||
| </t> | hierarchy) in the MPLS architecture. | |||
| <t> | </t> | |||
| <t pn="section-1-2"> | ||||
| Using label stacking to encode the list of segments has implications on t he label stack depth. | Using label stacking to encode the list of segments has implications on t he label stack depth. | |||
| </t> | </t> | |||
| <t pn="section-1-3"> | ||||
| <t> | Traffic load-balancing over ECMP (Equal-Cost Multipath) or LAGs (Link | |||
| Traffic load-balancing over ECMP (Equal Cost Multi Path) or LAGs (Link Aggreg | Aggregation Groups) is usually based on a hashing function. The local node | |||
| ation Groups) is usually based on a | that performs the load-balancing is required to read some header fields in | |||
| hashing function. The local node which performs the load-balancing is require | the incoming packets and then compute a hash based on those fields. The | |||
| d to read some header fields in the incoming packets | result of the hash is finally mapped to a list of outgoing next hops. The | |||
| and then computes a hash based on those fields. The result of the hash is fin | hashing technique is required to perform a per-flow load-balancing and | |||
| ally mapped to a list of outgoing nexthops. | thus, prevents packet misordering. For IP traffic, the usual fields that | |||
| The hashing technique is required to perform a per-flow load-balancing and th | are hashed are the source address, the destination address, the protocol | |||
| us prevents packet misordering. For IP traffic, the usual fields that are hashed | type, and, if provided by the upper layer, the source port and destination | |||
| are | port. | |||
| the source address, the destination address, the protocol type, and, if provi | ||||
| ded by the upper layer, the source port and destination port. | ||||
| </t> | </t> | |||
| <t> | <t pn="section-1-4"> | |||
| The MPLS architecture brings some challenges when an LSR tries to look up at | The MPLS architecture brings some challenges when an LSR (Label Switching | |||
| header fields. An LSR (Label Switching Router) needs be able to look up at heade | Router) tries to look up at header fields. An LSR needs be able to look up | |||
| r fields that are beyond the MPLS label stack while the MPLS header does not pro | at header fields that are beyond the MPLS label stack while the MPLS header | |||
| vide any information about the upper layer protocol. | does not provide any information about the upper-layer protocol. An LSR | |||
| An LSR must perform a deeper inspection compared to an ingress router which c | must perform a deeper inspection compared to an ingress router, which could | |||
| ould be challenging for some hardware. | be challenging for some hardware. Entropy labels (ELs) <xref target="RFC6790 | |||
| Entropy label (EL) <xref target="RFC6790"/> is a technique used in the MPLS d | " format="default" sectionFormat="of" derivedContent="RFC6790"/> are used in the | |||
| ata | MPLS data | |||
| plane to provide entropy for load-balancing. | plane to provide entropy for load-balancing. The idea behind the entropy | |||
| The idea behind the entropy label is that the ingress router computes a hash | label is that the ingress router computes a hash based on several fields | |||
| based on several fields from a given packet and places the result in an addition | from a given packet and places the result in an additional label named | |||
| al label, named "entropy label". | "entropy label". Then, this entropy label can be used as part of the hash | |||
| Then, this entropy label can be used as part of the hash keys used by an LSR. | keys used by an LSR. Using the entropy label as part of the hash keys | |||
| Using the entropy label as part of the hash keys reduces the need for deep pack | reduces the need for deep packet inspection in the LSR while keeping a good | |||
| et inspection in the LSR while keeping a good level of entropy in the load-balan | level of entropy in the load-balancing. When the entropy label is used, | |||
| cing. | the keys used in the hashing functions are still a local configuration | |||
| When the entropy label is used, the keys used in the hashing functions are st | matter, and an LSR may use solely the entropy label or a combination of | |||
| ill a local configuration matter and an LSR may use solely the entropy label or | multiple fields from the incoming packet. | |||
| a combination of multiple fields from the incoming packet. | </t> | |||
| </t> | <t pn="section-1-5"> | |||
| <t> | ||||
| When using LSP | When using LSP | |||
| hierarchies, there are implications on how <xref target="RFC6790"/> should be | hierarchies, there are implications on how <xref target="RFC6790" format="def ault" sectionFormat="of" derivedContent="RFC6790"/> should be | |||
| applied. The current document addresses the case where a hierarchy | applied. The current document addresses the case where a hierarchy | |||
| is created at a single LSR as required by Segment Routing. | is created at a single LSR as required by Segment Routing. | |||
| </t> | </t> | |||
| <t> | <t pn="section-1-6"> | |||
| A use-case requiring load-balancing with SR is given in <xref target="usecase | A use case requiring load-balancing with SR is given in <xref target="usecase | |||
| "/>. A recommended solution is | " format="default" sectionFormat="of" derivedContent="Section 3"/>. A recommend | |||
| described in <xref target="solution"/> keeping in consideration the limitatio | ed solution is | |||
| ns of | described in <xref target="solution" format="default" sectionFormat="of" deri | |||
| implementations when applying <xref target="RFC6790"/> to deeper label stacks | vedContent="Section 7"/> keeping in consideration the limitations of | |||
| . | implementations when applying <xref target="RFC6790" format="default" section | |||
| Format="of" derivedContent="RFC6790"/> to deeper label stacks. | ||||
| Options that were considered to arrive at the recommended solution | Options that were considered to arrive at the recommended solution | |||
| are documented for historical purposes in <xref target="other-options"/>. | are documented for historical purposes in <xref target="other-options" format | |||
| ="default" sectionFormat="of" derivedContent="Section 10"/>. | ||||
| </t> | ||||
| <section title="Requirements Language" toc="default"> | ||||
| <t> 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 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | ||||
| they appear in all | ||||
| capitals, as shown here. | ||||
| </t> | </t> | |||
| <section toc="include" numbered="true" removeInRFC="false" pn="section-1.1 | ||||
| "> | ||||
| <name slugifiedName="name-requirements-language">Requirements Language</ | ||||
| name> | ||||
| <t pn="section-1.1-1"> | ||||
| 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>", | ||||
| "<bcp14>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" s | ||||
| ectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="defa | ||||
| ult" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they app | ||||
| ear in all capitals, as | ||||
| shown here. | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section toc="include" numbered="true" removeInRFC="false" pn="section-2"> | ||||
| <section title="Abbreviations and Terminology" toc="default"> | <name slugifiedName="name-abbreviations-and-terminolo">Abbreviations and T | |||
| <t> | erminology</name> | |||
| <list style="hanging"> | <dl newline="false" spacing="normal" indent="10" pn="section-2-1"> | |||
| <t>Adj-SID - Adjacency Segment Identifier</t> | <dt pn="section-2-1.1">Adj-SID</dt> | |||
| <t>ECMP - Equal Cost Multi Path</t> | <dd pn="section-2-1.2">Adjacency Segment Identifier</dd> | |||
| <t>EL - Entropy Label</t> | <dt pn="section-2-1.3">ECMP</dt> | |||
| <t>ELI - Entropy Label Indicator</t> | <dd pn="section-2-1.4">Equal-Cost Multipath</dd> | |||
| <t>ELC - Entropy Label Capability</t> | <dt pn="section-2-1.5">EL</dt> | |||
| <t>ERLD - Entropy Readable Label Depth</t> | <dd pn="section-2-1.6">Entropy Label</dd> | |||
| <t>FEC - Forwarding Equivalent Class</t> | <dt pn="section-2-1.7">ELI</dt> | |||
| <t>LAG - Link Aggregation Group</t> | <dd pn="section-2-1.8">Entropy Label Indicator</dd> | |||
| <t>LSP - Label Switched Path</t> | <dt pn="section-2-1.9">ELC</dt> | |||
| <t>LSR - Label Switching Router</t> | <dd pn="section-2-1.10">Entropy Label Capability</dd> | |||
| <t>MPLS - Multiprotocol Label Switching</t> | <dt pn="section-2-1.11">ERLD</dt> | |||
| <t>MSD - Maximum SID Depth</t> | <dd pn="section-2-1.12">Entropy Readable Label Depth</dd> | |||
| <t>Node-SID - Node Segment Identifier</t> | <dt pn="section-2-1.13">FEC</dt> | |||
| <t>OAM - Operation, Administration and Maintenance</t> | <dd pn="section-2-1.14">Forwarding Equivalence Class</dd> | |||
| <t>RLD - Readable Label Depth</t> | <dt pn="section-2-1.15">LAG</dt> | |||
| <t>SID - Segment Identifier</t> | <dd pn="section-2-1.16">Link Aggregation Group</dd> | |||
| <t>SPT - Shortest Path Tree</t> | <dt pn="section-2-1.17">LSP</dt> | |||
| <t>SR - Segment Routing</t> | <dd pn="section-2-1.18">Label Switched Path</dd> | |||
| <t>SRGB - Segment Routing Global Block</t> | <dt pn="section-2-1.19">LSR</dt> | |||
| <t>VPN - Virtual Private Network</t> | <dd pn="section-2-1.20">Label Switching Router</dd> | |||
| </list> | <dt pn="section-2-1.21">MPLS</dt> | |||
| </t> | <dd pn="section-2-1.22">Multiprotocol Label Switching</dd> | |||
| <dt pn="section-2-1.23">MSD</dt> | ||||
| <dd pn="section-2-1.24">Maximum SID Depth</dd> | ||||
| <dt pn="section-2-1.25">Node SID</dt> | ||||
| <dd pn="section-2-1.26">Node Segment Identifier</dd> | ||||
| <dt pn="section-2-1.27">OAM</dt> | ||||
| <dd pn="section-2-1.28">Operations, Administration, and Maintenance</dd> | ||||
| <dt pn="section-2-1.29">RLD</dt> | ||||
| <dd pn="section-2-1.30">Readable Label Depth</dd> | ||||
| <dt pn="section-2-1.31">SID</dt> | ||||
| <dd pn="section-2-1.32">Segment Identifier</dd> | ||||
| <dt pn="section-2-1.33">SPT</dt> | ||||
| <dd pn="section-2-1.34">Shortest Path Tree</dd> | ||||
| <dt pn="section-2-1.35">SR</dt> | ||||
| <dd pn="section-2-1.36">Segment Routing</dd> | ||||
| <dt pn="section-2-1.37">SRGB</dt> | ||||
| <dd pn="section-2-1.38">Segment Routing Global Block</dd> | ||||
| <dt pn="section-2-1.39">VPN</dt> | ||||
| <dd pn="section-2-1.40">Virtual Private Network</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section anchor="usecase" title="Use-case requiring multipath load-balancing" | <section anchor="usecase" toc="include" numbered="true" removeInRFC="false" | |||
| toc="default"> | pn="section-3"> | |||
| <figure title="Figure 1: Traffic engineering use-case"> | <name slugifiedName="name-use-case-requiring-multipat">Use Case Requiring | |||
| <artwork> | Multipath Load-Balancing</name> | |||
| +------+ | <t pn="section-3-1"> | |||
| | | | Traffic engineering is one of the applications of MPLS and is also a | |||
| +-------| P3 |-----+ | requirement for Segment Routing <xref target="RFC7855" format="default" sectionF | |||
| | +-----| |---+ | | ormat="of" derivedContent="RFC7855"/>. Consider the | |||
| L3| |L4 +------+ L1| |L2 +----+ | topology shown in <xref target="fig_TE_use_case" format="default" sectionFormat= | |||
| | | | | +--| P4 |--+ | "of" derivedContent="Figure 1"/>. The LSR S requires data to be sent to LSR D a | |||
| +-----+ +-----+ +-----+ | +----+ | +-----+ | long | |||
| | S |-----| P1 |------------| P2 |--+ +--| D | | a traffic-engineered path that goes over the link L1. Good load-balancing is | |||
| | | | | | |--+ +--| | | also required across equal-cost paths (including parallel links). To steer | |||
| +-----+ +-----+ +-----+ | +----+ | +-----+ | traffic along a path that crosses link L1, the label stack that LSR S creates | |||
| +--| P5 |--+ | consists of a label to the Node SID of LSR P3 stacked over the label for the | |||
| +----+ | Adj-SID (Adjacency Segment Identifier) of link L1 and that in turn is stacked | |||
| S=Source LSR, D=Destination LSR, P1,P2,P3,P4,P5=Transit LSRs, | over the label to the Node SID of LSR D. For simplicity, lets assume that all | |||
| L1,L2,L3,L4=Links | LSRs use the same label space for Segment Routing (as a reminder, it is called | |||
| the SRGB, Segment Routing Global Block). Let L_N-Px denote the label to be | ||||
| </artwork> | used to reach the Node SID of LSR Px. Let L_A-Ln denote the label used for | |||
| </figure> | the Adj-SID for link Ln. In our example, the LSR S must use the label stack | |||
| <t> | <L_N-P3, L_A-L1, L_N-D>. However, to achieve good load-balancing over | |||
| Traffic-engineering is one of the applications of MPLS and is | the equal-cost paths P2-P4-D, P2-P5-D, and the parallel links L3 and L4, a | |||
| also a requirement for Segment Routing <xref target="RFC7855"/>. | mechanism such as entropy labels <xref target="RFC6790" format="default" section | |||
| Consider the topology shown in Figure 1. | Format="of" derivedContent="RFC6790"/> should be adapted | |||
| The LSR S requires data to be sent to LSR D along a traffic-engineered path t | for Segment Routing. Indeed, the Source Packet Routing in Networking (SPRING) | |||
| hat goes over the link L1. | architecture with the MPLS data plane <xref target="RFC8660" format="default" se | |||
| Good load-balancing is | ctionFormat="of" derivedContent="RFC8660"/> uses nested | |||
| also required across equal cost paths (including parallel links). To | MPLS LSPs composing the source-routed label stack. | |||
| steer traffic along a path that crosses link L1, the label stack | </t> | |||
| that LSR S creates consists of a label to the Node-SID of LSR P3, | <figure anchor="fig_TE_use_case" align="left" suppress-title="false" pn="f | |||
| stacked over the label for the Adj-SID (Adjacency Segment Identifier) of link | igure-1"> | |||
| L1 and that in | <name slugifiedName="name-traffic-engineering-use-cas">Traffic-Engineeri | |||
| turn is stacked over the label to the Node-SID of LSR D. For | ng Use Case</name> | |||
| simplicity lets assume that all LSRs use the same label space for | <artwork name="" type="" align="left" alt="" pn="section-3-2.1"> | |||
| Segment Routing (as a reminder, it is called the SRGB, Segment Routing Global | +------+ | |||
| Block). Let L_N-Px denote the label to be used | | | | |||
| to reach the Node-SID of LSR Px. Let L_A-Ln denote the label used | +-------| P3 |-----+ | |||
| for the Adj-SID for link Ln. In our example, the LSR S must use the label | | +-----| |---+ | | |||
| stack <L_N-P3, L_A-L1, L_N-D>. However, to | L3| |L4 +------+ L1| |L2 +----+ | |||
| achieve a good load-balancing over the equal cost paths P2-P4-D, | | | | | +--| P4 |--+ | |||
| P2-P5-D and the parallel links L3 and L4, a mechanism such as entropy | +-----+ +-----+ +-----+ | +----+ | +-----+ | |||
| labels <xref target="RFC6790"/> should be adapted for Segment Routing. | | S |-----| P1 |------------| P2 |--+ +--| D | | |||
| Indeed, the SPRING architecture with the MPLS dataplane (<xref target="I-D.ie | | | | | | |--+ +--| | | |||
| tf-spring-segment-routing-mpls"/>) uses nested MPLS LSPs composing the source ro | +-----+ +-----+ +-----+ | +----+ | +-----+ | |||
| uted label stack. | +--| P5 |--+ | |||
| </t> | +----+ | |||
| <t> | Key: | |||
| S = Source LSR | ||||
| D = Destination LSR | ||||
| P1, P2, P3, P4, P5 = Transit LSRs | ||||
| L1, L2, L3, L4 = Links | ||||
| </artwork> | ||||
| </figure> | ||||
| <t pn="section-3-3"> | ||||
| An MPLS node may have limitations in the number of labels it can push. It may also have a limitation in the number of labels it can inspect when looking for hash keys during load-balancing. | An MPLS node may have limitations in the number of labels it can push. It may also have a limitation in the number of labels it can inspect when looking for hash keys during load-balancing. | |||
| While the entropy label is normally inserted at the bottom of the transport t unnel, this may prevent an LSR from taking into account the EL in its load-balan cing function if the EL is too deep in the stack. | While the entropy label is normally inserted at the bottom of the transport t unnel, this may prevent an LSR from taking into account the EL in its load-balan cing function if the EL is too deep in the stack. | |||
| In a Segment Routing environment, it is important to define the consideration s that needs to be taken into account when inserting an EL. | In a Segment Routing environment, it is important to define the consideration s that need to be taken into account when inserting an EL. | |||
| Multiple ways to apply entropy labels were considered and are | Multiple ways to apply entropy labels were considered and are | |||
| documented in <xref target="other-options"/> along with their trade-offs. A | documented in <xref target="other-options" format="default" sectionFormat="of | |||
| recommended | " derivedContent="Section 10"/> along with their trade-offs. A recommended | |||
| solution is described in <xref target="solution"/>. | solution is described in <xref target="solution" format="default" sectionForm | |||
| </t> | at="of" derivedContent="Section 7"/>. | |||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="erld_definition" title="Entropy Readable Label Depth"> | <section anchor="erld_definition" numbered="true" toc="include" removeInRFC= | |||
| <t> | "false" pn="section-4"> | |||
| <name slugifiedName="name-entropy-readable-label-dept">Entropy Readable La | ||||
| bel Depth</name> | ||||
| <t pn="section-4-1"> | ||||
| The Entropy Readable Label Depth (ERLD) is defined as the number of labels a router can both: | The Entropy Readable Label Depth (ERLD) is defined as the number of labels a router can both: | |||
| <list style="letters"> | </t> | |||
| <t>Read in an MPLS packet received on its incoming interface(s) (starting fro | <ol spacing="normal" type="a" start="1" pn="section-4-2"> | |||
| m the top of the stack).</t> | <li pn="section-4-2.1" derivedCounter="a.">Read in an MPLS packet receiv | |||
| <t>Use in its load-balancing function.</t> | ed on its incoming interface(s) (starting from the top of the stack).</li> | |||
| </list> | <li pn="section-4-2.2" derivedCounter="b.">Use in its load-balancing fun | |||
| </t> | ction.</li> | |||
| <t>The ERLD means that the router will perform load-balancing using the EL la | </ol> | |||
| bel if the EL is placed within the first ERLD labels.</t> | <t pn="section-4-3">The ERLD means that the router will perform load-balan | |||
| <t>A router capable of reading N labels but not using an EL located within th | cing using the EL if the EL is placed within the first ERLD labels.</t> | |||
| ose N labels MUST consider its ERLD to be 0.</t> | <t pn="section-4-4">A router capable of reading N labels but not using an | |||
| <t> | EL located within those N labels <bcp14>MUST</bcp14> consider its ERLD to be 0.< | |||
| In a distributed switching architecture, each linecard may have a different c | /t> | |||
| apability in terms of ERLD. For simplicity, an implementation MAY use the minimu | <t pn="section-4-5"> | |||
| m ERLD of all linecards as the ERLD value for the system. | In a distributed switching architecture, each line card may have a | |||
| </t> | different capability in terms of ERLD. For simplicity, an implementation | |||
| <t>There may also be a case where a router has a fast switching path (handled | <bcp14>MAY</bcp14> use the minimum ERLD of all line cards as the ERLD value f | |||
| by an ASIC or network processor) and a slow switching path (handled by a CPU) w | or the system. | |||
| ith a different ERLD for each switching path. Again, for simplicity's sake, an i | </t> | |||
| mplementation MAY use the minimum ERLD as the ERLD value for the system.</t> | <t pn="section-4-6">There may also be a case where a router has a fast swi | |||
| <t>The drawback of using a single ERLD for a system lower than the capability | tching path | |||
| of one or more specific component is that it may increase the number of ELI/ELs | (handled by an Application-Specific Integrated Circuit, or ASIC, or network p | |||
| inserted. This leads to an increase of the label stack size and may have an imp | rocessor) and a slow switching path (handled by a CPU) with a different ERLD for | |||
| act on the capability of the ingress node to push this label stack.</t> | each switching path. Again, for simplicity's sake, an implementation <bcp14>MAY | |||
| <t>Examples:</t> | </bcp14> use the minimum ERLD as the ERLD value for the system.</t> | |||
| <figure title="Figure 2: Label stacks with ELI/EL"> | <t pn="section-4-7">The drawback of using a single ERLD for a system lower | |||
| <artwork> | than the capability of one or more specific components is that it may increase | |||
| | Payload | | the number of ELI/ELs inserted. This leads to an increase of the label stack siz | |||
| +----------+ | e and may have an impact on the capability of the ingress node to push this labe | |||
| | Payload | | EL | P7 | l stack.</t> | |||
| +----------+ +----------+ | <t pn="section-4-8">Examples:</t> | |||
| | Payload | | EL | | ELI | | <figure anchor="fig_label_stacks" align="left" suppress-title="false" pn=" | |||
| +----------+ +----------+ +----------+ | figure-2"> | |||
| | Payload | | EL | | ELI | | Label 50 | | <name slugifiedName="name-label-stacks-with-eli-el">Label Stacks with EL | |||
| +----------+ +----------+ +----------+ +----------+ | I/EL</name> | |||
| | Payload | | EL | | ELI | | Label 40 | | Label 40 | | <artwork name="" type="" align="left" alt="" pn="section-4-9.1"> | |||
| +----------+ +----------+ +----------+ +----------+ +----------+ | | Payload | | |||
| | EL | | ELI | | Label 30 | | Label 30 | | Label 30 | | +----------+ | |||
| +----------+ +----------+ +----------+ +----------+ +----------+ | | Payload | | EL | P7 | |||
| | ELI | | Label 20 | | Label 20 | | Label 20 | | Label 20 | | +----------+ +----------+ | |||
| +----------+ +----------+ +----------+ +----------+ +----------+ | | Payload | | EL | | ELI | | |||
| | Label 16 | | Label 16 | | Label 16 | | Label 16 | | Label 16 | P1 | +----------+ +----------+ +----------+ | |||
| +----------+ +----------+ +----------+ +----------+ +----------+ | | Payload | | EL | | ELI | | Label 50 | | |||
| Packet 1 Packet 2 Packet 3 Packet 4 Packet 5 | +----------+ +----------+ +----------+ +----------+ | |||
| </artwork> | | Payload | | EL | | ELI | | Label 40 | | Label 40 | | |||
| </figure> | +----------+ +----------+ +----------+ +----------+ +----------+ | |||
| <t> | | EL | | ELI | | Label 30 | | Label 30 | | Label 30 | | |||
| In Figure 2, we consider the displayed packets received on a router interface | +----------+ +----------+ +----------+ +----------+ +----------+ | |||
| . We consider also a single ERLD value for the router. | | ELI | | Label 20 | | Label 20 | | Label 20 | | Label 20 | | |||
| <list style="symbols"> | +----------+ +----------+ +----------+ +----------+ +----------+ | |||
| <t>If the router has an ERLD of 3, it will be able to load-balance Packet 1 d | | Label 16 | | Label 16 | | Label 16 | | Label 16 | | Label 16 | P1 | |||
| isplayed in Figure 2 using the EL as part of the load-balancing keys. The ERLD v | +----------+ +----------+ +----------+ +----------+ +----------+ | |||
| alue of 3 means that the router can read and take into account the entropy label | Packet 1 Packet 2 Packet 3 Packet 4 Packet 5 | |||
| for load-balancing if it is placed between position 1 (top of the MPLS label st | </artwork> | |||
| ack) and position 3.</t> | </figure> | |||
| <t>If the router has an ERLD of 5, it will be able to load-balance Packets 1 | <t pn="section-4-10"> | |||
| to 3 in Figure 2 using the EL as part of the load-balancing keys. Packets 4 and | In <xref target="fig_label_stacks" format="default" sectionFormat="of" derive | |||
| 5 have the EL placed at a position greater than 5, so the router is not able to | dContent="Figure 2"/>, we consider the displayed packets received on a router in | |||
| read it and use as part of the load-balancing keys.</t> | terface. We consider also a single ERLD value for the router. | |||
| <t>If the router has an ERLD of 10, it will be able to load-balance all the p | </t> | |||
| ackets displayed in Figure 2 using the EL as part of the load-balancing keys.</t | <ul spacing="normal" bare="false" empty="false" pn="section-4-11"> | |||
| > | <li pn="section-4-11.1">If the router has an ERLD of 3, it will be able | |||
| </list> | to load-balance Packet 1 displayed in <xref target="fig_label_stacks" format="de | |||
| </t> | fault" sectionFormat="of" derivedContent="Figure 2"/> using the EL as part of th | |||
| e load-balancing keys. The ERLD value of 3 means that the router can read and ta | ||||
| <t>To allow an efficient load-balancing based on entropy labels, a router run | ke into account the entropy label for load-balancing if it is placed between pos | |||
| ning SPRING SHOULD advertise its ERLD (or ERLDs), so all the other SPRING router | ition 1 (top of the MPLS label stack) and position 3.</li> | |||
| s in the network are aware of its capability. How this advertisement is done is | <li pn="section-4-11.2">If the router has an ERLD of 5, it will be able | |||
| outside the scope of this document (see <xref target="erld"/> for potential appr | to load-balance Packets | |||
| oaches). | 1 to 3 in <xref target="fig_label_stacks" format="default" sectionFormat="of" | |||
| </t> | derivedContent="Figure 2"/> using the EL as part of the load-balancing keys. Pa | |||
| <t> | ckets | |||
| 4 and 5 have the EL placed at a position greater than 5, so the router is | ||||
| not able to read it and use it as part of the load-balancing keys.</li> | ||||
| <li pn="section-4-11.3">If the router has an ERLD of 10, it will be able | ||||
| to load-balance all the packets displayed in <xref target="fig_label_stacks" fo | ||||
| rmat="default" sectionFormat="of" derivedContent="Figure 2"/> using the EL as pa | ||||
| rt of the load-balancing keys.</li> | ||||
| </ul> | ||||
| <t pn="section-4-12">To allow an efficient load-balancing based on entropy | ||||
| labels, a router running SPRING <bcp14>SHOULD</bcp14> advertise its ERLD (or ER | ||||
| LDs), so all the other SPRING routers in the network are aware of its capability | ||||
| . How this advertisement is done is outside the scope of this document (see <xre | ||||
| f target="erld" format="default" sectionFormat="of" derivedContent="Section 7.2. | ||||
| 1"/> for potential approaches). | ||||
| </t> | ||||
| <t pn="section-4-13"> | ||||
| To advertise an ERLD value, a SPRING router: | To advertise an ERLD value, a SPRING router: | |||
| <list style="symbols"> | </t> | |||
| <t>MUST be entropy label capable and, as a consequence, MUST apply the datapl | <ul spacing="normal" bare="false" empty="false" pn="section-4-14"> | |||
| ane procedures defined in <xref target="RFC6790"/>.</t> | <li pn="section-4-14.1"> | |||
| <t>MUST be able to read an ELI/EL which is located within its ERLD value.</t> | <bcp14>MUST</bcp14> be entropy label capable and, as a consequence, <b | |||
| <t>MUST take into account an EL within the first ERLD labels in its load-bala | cp14>MUST</bcp14> apply the data-plane procedures defined in <xref target="RFC67 | |||
| ncing function.</t> | 90" format="default" sectionFormat="of" derivedContent="RFC6790"/>.</li> | |||
| </list> | <li pn="section-4-14.2"> | |||
| </t> | <bcp14>MUST</bcp14> be able to read an ELI/EL, which is located within | |||
| </section> | its ERLD value.</li> | |||
| <section anchor="msd" title="Maximum SID Depth"> | <li pn="section-4-14.3"> | |||
| <t> | <bcp14>MUST</bcp14> take into account an EL within the first ERLD labe | |||
| The Maximum SID Depth defines the maximum number of labels that a particular | ls in its load-balancing function.</li> | |||
| node can impose on a packet. This can include any kind of labels (service, entro | </ul> | |||
| py, transport...). | </section> | |||
| In an MPLS network, the MSD is a limit of the head-end of an SR tunnel or a B | <section anchor="msd" numbered="true" toc="include" removeInRFC="false" pn=" | |||
| inding-SID | section-5"> | |||
| anchor node that performs imposition of additional labels on an existing labe | <name slugifiedName="name-maximum-sid-depth">Maximum SID Depth</name> | |||
| l stack. | <t pn="section-5-1"> | |||
| </t> | The Maximum SID Depth defines the maximum number of labels that a | |||
| <t> | particular node can impose on a packet. This can include any kind of labels | |||
| Depending on the number of MPLS operations (POP, SWAP...) to be performed bef | (service, entropy, transport, etc.). In an MPLS network, the MSD is a | |||
| ore the PUSH, the MSD can vary due to hardware or software limitations. | limit of the head-end of an SR tunnel or a Binding SID anchor node that | |||
| As for the ERLD, different MSD limits can exist within a single node based on | performs imposition of additional labels on an existing label stack. | |||
| the linecard types used in a distributed switching system. Thus, the MSD is a p | </t> | |||
| er link and/or per node property. | <t pn="section-5-2"> | |||
| </t> | Depending on the number of MPLS operations (POP, SWAP, etc.) to be performed | |||
| <t> | before the PUSH, the MSD can vary due to hardware or software limitations. | |||
| An external controller can be used to program a label stack on a | As for the ERLD, different MSD limits can exist within a single node based | |||
| particular node. This node SHOULD advertise its MSD to the controller in orde | on the line-card types used in a distributed switching system. Thus, the MSD | |||
| r to let the controller know the maximum label stack depth of the path computed | is a per link and/or per-node property. | |||
| that is supported on the head-end. | </t> | |||
| How this advertisement is done is | <t pn="section-5-3"> | |||
| outside the scope of this document (<xref target="I-D.ietf-isis-segment-routi | An external controller can be used to program a label stack on a particular | |||
| ng-msd"/>, <xref target="I-D.ietf-isis-segment-routing-msd"/> and <xref target=" | node. This node <bcp14>SHOULD</bcp14> advertise its MSD to the controller | |||
| I-D.ietf-idr-bgp-ls-segment-routing-msd"/> provide examples of advertisement of | in order to let the controller know the maximum label stack depth of the | |||
| MSD). | path computed that is supported on the head-end. | |||
| As the controller does not have | ||||
| the knowledge of the entire label stack to be pushed by the node, in addition | How this advertisement is done is outside the scope of this | |||
| to the MSD value, the | document. (<xref target="RFC8476" format="default" sectionFormat="of" derived | |||
| node SHOULD advertise the type of the MSD. | Content="RFC8476"/>, <xref target="RFC8491" format="default" sectionFormat="of" | |||
| For instance, the MSD value can represent the limit for pushing transport lab | derivedContent="RFC8491"/>, and <xref target="I-D.ietf-idr-bgp-ls-segment-routin | |||
| els only while in reality the node can push an additional service label. As anot | g-msd" format="default" sectionFormat="of" derivedContent="MSD-BGP"/> provide | |||
| her example, the MSD value can represent the full limit of the node including al | examples of advertisement of the MSD.) As the controller does not have the | |||
| l label types (transport, service, entropy...). | knowledge of the entire label stack to be pushed by the node, in addition | |||
| This gives the ability for the controller to program a label stack while leav | to the MSD value, the node <bcp14>SHOULD</bcp14> advertise the type of the | |||
| ing room for the local node to add more labels (e.g., service, entropy,...) with | MSD. For instance, the MSD value can represent the limit for pushing | |||
| out reaching the hardware/software limit. | transport labels only while in reality the node can push an additional | |||
| If the node does not provide the meaning of the MSD value, the controller cou | service label. As another example, the MSD value can represent the full | |||
| ld program an LSP using a number of labels equal to the full limit of the node. | limit of the node including all label types (transport, service, entropy, | |||
| When receiving this label stack from the controller, the ingress node may not be | etc.). This gives the ability for the controller to program a label stack | |||
| able to add any service (L2VPN, L3VPN, EVPN...) label on top of this label stac | while leaving room for the local node to add more labels (e.g., service, | |||
| k. | entropy, etc.) without reaching the hardware/software limit. If the node | |||
| The consequence could be for the ingress node to drop service packets that sh | does not provide the meaning of the MSD value, the controller could program | |||
| ould have been forwarded over the LSP. | an LSP using a number of labels equal to the full limit of the node. When | |||
| </t> | receiving this label stack from the controller, the ingress node may not be | |||
| <figure title="Figure 3"> | able to add any service (L2VPN, L3VPN, EVPN, etc.) label on top of this | |||
| <artwork> | label stack. The consequence could be for the ingress node to drop service | |||
| packets that should have been forwarded over the LSP. | ||||
| </t> | ||||
| <figure anchor="fig_packet" align="left" suppress-title="false" pn="figure | ||||
| -3"> | ||||
| <name slugifiedName="name-topology-illustrating-label">Topology Illustra | ||||
| ting Label Stack Reduction</name> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5-4.1"> | ||||
| P7 ---- P8 ---- P9 | P7 ---- P8 ---- P9 | |||
| / \ | / \ | |||
| PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- PE2 | PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- PE2 | |||
| | \ | | | \ | | |||
| ----> P10 \ | | ||||
| IP Pkt | \ | | IP Pkt | \ | | |||
| P11 --- P12 --- P13 | P11 --- P12 --- P13 | |||
| 100 10000 | 100 10000 | |||
| </artwork> | </artwork> | |||
| </figure> | </figure> | |||
| <t> | <t pn="section-5-5"> | |||
| In Figure 3, an IP packet comes into the MPLS network at PE1. All metrics are | In <xref target="fig_packet" format="default" sectionFormat="of" derivedConte | |||
| considered equal to 1 except P12-P13 which is 10000 and P11-P12 which is 100. | nt="Figure 3"/>, an IP packet comes into the MPLS network at PE1. All metrics | |||
| PE1 wants to steer the traffic using a SPRING path to PE2 along PE1->P1->P7-> | are considered equal to 1 except P12-P13, which is 10000, and P11-P12, | |||
| P8->P9->P4->P5->P10->P11->P12->P13->PE2. | which is 100. PE1 wants to steer the traffic using a SPRING path to PE2 | |||
| By using Adj-SIDs only, PE1 (acting as an I-LSR) will be required to push 10 | along PE1 -> P1 -> P7 -> P8 -> P9 -> P4 -> P5 -> P10 -&g | |||
| labels on the IP packet received and thus requires an MSD of 10. | t; P11 -> P12 -> P13 | |||
| If the IP packet should be carried over an MPLS service like a regular layer | -> PE2. By using Adj-SIDs only, PE1 (acting as an ingress LSR, also known | |||
| 3 VPN, an additional service label should be imposed, requiring an MSD of 11 for | as an I-LSR) will be required to push 10 labels on the IP packet received | |||
| PE1. | and thus, requires an MSD of 10. If the IP packet should be carried over | |||
| In addition, if PE1 wants to insert an ELI/EL for load-balancing purpose, PE1 | an MPLS service like a regular layer 3 VPN, an additional service label | |||
| will need to push 13 labels on the IP packet requiring an MSD of 13. | should be imposed requiring an MSD of 11 for PE1. In addition, if PE1 | |||
| </t> | wants to insert an ELI/EL for load-balancing purposes, PE1 will need to | |||
| <t> | push 13 labels on the IP packet requiring an MSD of 13. | |||
| In the SPRING architecture, Node-SIDs or Binding-SIDs can be used to reduce t | </t> | |||
| he label stack size. As an example, to steer the traffic on the same path as bef | <t pn="section-5-6"> | |||
| ore, PE1 could use the following label stack: <Node_P9, Node_P5, Binding_P5, | In the SPRING architecture, Node SIDs or Binding SIDs can be used to reduce t | |||
| Node_PE2>. | he label stack size. As an example, to steer the traffic on the same path as bef | |||
| In this example we consider a combination of Node-SIDs and a Binding-SID adve | ore, PE1 could use the following label stack: <Node_P9, Node_P5, Binding_P5, | |||
| rtised by P5 that will stitch the traffic along the path P10->P11->P12->P13. The | Node_PE2>. | |||
| instruction associated with the Binding-SID at P5 is thus to swap Binding_P5 to | In this example, we consider a combination of Node SIDs and a Binding SID | |||
| Adj_P12-P13 and then push <Adj_P11-P12, Node_P11>. | advertised by P5 that will stitch the traffic along the path P10 -> P11 | |||
| P5 acts as a stitching node that pushes additional labels on an existing labe | -> P12 -> P13. The instruction associated with the Binding SID at P5 is | |||
| l stack, P5's MSD needs also to be taken into account and may limit the number o | thus to swap Binding_P5 to Adj_P12-P13 and then push <Adj_P11-P12, Node_P11& | |||
| f labels that can be imposed. | gt;. | |||
| </t> | P5 acts as a stitching node that pushes additional labels on an existing labe | |||
| </section> | l stack; P5's MSD needs also to be taken into account and may limit the number o | |||
| <section anchor="stitching" title="LSP stitching using the Binding-SID"> | f labels that can be imposed. | |||
| <t> | </t> | |||
| The Binding-SID allows binding a segment identifier to an existing LSP. As ex | </section> | |||
| amples, the Binding-SID can represent an RSVP-TE tunnel, an LDP path (through th | <section anchor="stitching" numbered="true" toc="include" removeInRFC="false | |||
| e mapping server advertisement), or a SPRING path. | " pn="section-6"> | |||
| Each tail-end router of an MPLS LSP associated with a Binding-SID has its own | <name slugifiedName="name-lsp-stitching-using-the-bin">LSP Stitching Using | |||
| entropy label capability. The entropy label capability of the associated LSP is | the Binding SID</name> | |||
| advertised in the control plane protocol used to signal the LSP. | <t pn="section-6-1"> | |||
| </t> | The Binding SID allows binding a segment identifier to an existing LSP. As | |||
| <t> | examples, the Binding SID can represent an RSVP-TE tunnel, an LDP path | |||
| In Figure 4, we consider that: | (through the Mapping Server Advertisement), or a SPRING path. Each | |||
| <list style="symbols"> | tail-end router of an MPLS LSP associated with a Binding SID has its own | |||
| <t>P6, PE2, P10, P11, P12, P13 are pure LDP routers.</t> | entropy label capability. The entropy label capability of the associated | |||
| <t>PE1, P1, P2, P3, P4, P7, P8, P9 are pure SPRING routers.</t> | LSP is advertised in the control-plane protocol used to signal the LSP. | |||
| <t>P5 is running SPRING and LDP.</t> | </t> | |||
| <t>P5 acts as a mapping server and advertises Prefix SIDs for the LDP FEC | <t pn="section-6-2"> | |||
| s: an index value of 20 is used for PE2.</t> | In <xref target="fig_stitching_example" format="default" sectionFormat="of" deri | |||
| <t>All SPRING routers use an SRGB of [1000, 1999].</t> | vedContent="Figure 4"/>, we consider that: | |||
| <t>P6 advertises label 20 for the PE2 FEC.</t> | </t> | |||
| <t>Traffic from PE1 to PE2 uses the shortest path.</t> | <ul spacing="normal" bare="false" empty="false" pn="section-6-3"> | |||
| </list> | <li pn="section-6-3.1">P6, PE2, P10, P11, P12, and P13 are pure LDP rout | |||
| </t> | ers.</li> | |||
| <figure> | <li pn="section-6-3.2">PE1, P1, P2, P3, P4, P7, P8, and P9 are pure SPRI | |||
| <artwork> | NG routers.</li> | |||
| <li pn="section-6-3.3">P5 is running SPRING and LDP.</li> | ||||
| <li pn="section-6-3.4">P5 acts as a Mapping Server and advertises Prefix | ||||
| -SIDs for the LDP FECs: an index value of 20 is used for PE2.</li> | ||||
| <li pn="section-6-3.5">All SPRING routers use an SRGB of [1000, 1999].</ | ||||
| li> | ||||
| <li pn="section-6-3.6">P6 advertises label 20 for the PE2 FEC.</li> | ||||
| <li pn="section-6-3.7">Traffic from PE1 to PE2 uses the shortest path.</ | ||||
| li> | ||||
| </ul> | ||||
| <figure anchor="fig_stitching_example" align="left" suppress-title="false" | ||||
| pn="figure-4"> | ||||
| <name slugifiedName="name-example-illustrating-need-f">Example Illustrat | ||||
| ing Need for ELC Propagation</name> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-6-4.1"> | ||||
| PE1 ----- P1 -- P2 -- P3 -- P4 ---- P5 --- P6 --- PE2 | PE1 ----- P1 -- P2 -- P3 -- P4 ---- P5 --- P6 --- PE2 | |||
| --> +----+ +----+ +----+ +----+ | ||||
| --> +----+ +----+ +----+ +----+ | ||||
| IP Pkt | IP | | IP | | IP | | IP | | IP Pkt | IP | | IP | | IP | | IP | | |||
| +----+ +----+ +----+ +----+ | +----+ +----+ +----+ +----+ | |||
| |1020| |1020| | 20 | | |1020| |1020| | 20 | | |||
| +----+ +----+ +----+ | +----+ +----+ +----+ | |||
| SPRING LDP | SPRING LDP | |||
| </artwork> | </artwork> | |||
| </figure> | </figure> | |||
| <t>In terms of packet forwarding, by learning the mapping-server advertis | <t pn="section-6-5">In terms of packet forwarding, by learning the Mapping | |||
| ement from P5, PE1 imposes a label 1020 to an IP packet destined to PE2. | Server Advertisement from P5, PE1 imposes a label 1020 to an IP packet destined | |||
| SPRING routers along the shortest path to PE2 will switch the traffic unt | to PE2. | |||
| il it reaches P5. P5 will perform the LSP stitching by swapping the SPRING label | SPRING routers along the shortest path to PE2 will switch the traffic | |||
| 1020 to the LDP label 20 advertised by the nexthop P6. | until it reaches P5. P5 will perform the LSP stitching by swapping the | |||
| SPRING label 1020 to the LDP label 20 advertised by the next hop P6. | ||||
| P6 will finally forward the packet using the LDP label towards PE2.</t> | P6 will finally forward the packet using the LDP label towards PE2.</t> | |||
| <t> | <t pn="section-6-6"> | |||
| PE1 cannot push an ELI/EL for the Binding-SID without knowing that the ta | PE1 cannot push an ELI/EL for the Binding SID without knowing that the | |||
| il-end of the LSP associated with the binding (PE2) is entropy label capable. | tail end of the LSP associated with the binding (PE2) is entropy label ca | |||
| </t> | pable. | |||
| <t> | </t> | |||
| To accommodate the mix of signaling protocols involved during the stitchi | <t pn="section-6-7"> | |||
| ng, the entropy label capability SHOULD be propagated between the signaling doma | To accommodate the mix of signaling protocols involved during the stitchi | |||
| ins. | ng, the entropy label capability <bcp14>SHOULD</bcp14> be propagated between the | |||
| Each Binding-SID SHOULD have its own entropy label capability that MUST b | signaling domains. | |||
| e inherited from the entropy label capability of the associated LSP. | Each Binding SID <bcp14>SHOULD</bcp14> have its own entropy label capabil | |||
| If the router advertising the Binding-SID does not know the ELC state of | ity that <bcp14>MUST</bcp14> be inherited from the entropy label capability of t | |||
| the target FEC, it MUST NOT set the ELC for the Binding-SID. | he associated LSP. | |||
| An ingress node MUST NOT push an ELI/EL associated with a Binding-SID unl | If the router advertising the Binding SID does not know the ELC state | |||
| ess this Binding-SID has the entropy label capability. | of the target FEC, it <bcp14>MUST NOT</bcp14> set the ELC for the | |||
| How the entropy label capability is advertised for a Binding-SID is outsi | Binding SID. | |||
| de the scope of this document (see <xref target="erld"/> for potential approache | An ingress node <bcp14>MUST NOT</bcp14> push an ELI/EL associated with | |||
| s). | a Binding SID unless this Binding SID has the entropy label capability. | |||
| </t> | How the entropy label capability is advertised for a Binding SID is outsi | |||
| <t> | de the scope of this document (see <xref target="erld" format="default" sectionF | |||
| In our example, if PE2 is LDP entropy label capable, it will add the entr | ormat="of" derivedContent="Section 7.2.1"/> for potential approaches). | |||
| opy label capability in its LDP advertisement. When P5 receives the FEC/label bi | </t> | |||
| nding for PE2, it learns about the ELC and can set the ELC in the mapping server | <t pn="section-6-8"> | |||
| advertisement. Thus PE1 learns about the ELC of PE2 and may push an ELI/EL asso | In our example, if PE2 is LDP entropy label capable, it will add the | |||
| ciated with the Binding-SID. | entropy label capability in its LDP advertisement. When P5 receives | |||
| </t> | the FEC/label binding for PE2, it learns about the ELC and can set the | |||
| <t> | ELC in the Mapping Server Advertisement. Thus, PE1 learns about the | |||
| The proposed solution only works if the SPRING router advertising the Bin | ELC of PE2 and may push an ELI/EL associated with the Binding SID. | |||
| ding-SID is also performing the dataplane LSP stitching. | </t> | |||
| In our example, if the mapping server function is hosted on P8 instead of | <t pn="section-6-9"> | |||
| P5, P8 does not know about the ELC state of PE2's LDP FEC. As a consequence, it | The proposed solution only works if the SPRING router advertising the | |||
| does not set the ELC for the associated Binding-SID. | Binding SID is also performing the data-plane LSP stitching. | |||
| </t> | In our example, if the Mapping Server function is hosted on P8 instead | |||
| </section> | of P5, P8 does not know about the ELC state of PE2's LDP FEC. As a | |||
| consequence, it does not set the ELC for the associated Binding SID. | ||||
| <section anchor="solution" title="Insertion of entropy labels for SPRING path" | </t> | |||
| toc="default"> | </section> | |||
| <section anchor="overview" title="Overview"> | <section anchor="solution" toc="include" numbered="true" removeInRFC="false" | |||
| <t> | pn="section-7"> | |||
| The solution described in this section follows the dataplane processing d | <name slugifiedName="name-insertion-of-entropy-labels">Insertion of Entrop | |||
| efined in <xref target="RFC6790"/>. Within a SPRING path, a node may be ingress, | y Labels for SPRING Path</name> | |||
| egress, transit (regarding the entropy label processing described in <xref targ | <section anchor="overview" numbered="true" toc="include" removeInRFC="fals | |||
| et="RFC6790"/>), or it can be any combination of those. | e" pn="section-7.1"> | |||
| <name slugifiedName="name-overview">Overview</name> | ||||
| <t pn="section-7.1-1"> | ||||
| The solution described in this section follows the data-plane processing | ||||
| defined in <xref target="RFC6790" format="default" sectionFormat="of" derivedCon | ||||
| tent="RFC6790"/>. Within a SPRING path, a node may be ingress, egress, transit ( | ||||
| regarding the entropy label processing described in <xref target="RFC6790" forma | ||||
| t="default" sectionFormat="of" derivedContent="RFC6790"/>), or it can be any com | ||||
| bination of those. | ||||
| For example: | For example: | |||
| <list style="symbols"> | </t> | |||
| <t>The ingress node of a SPRING domain can be an ingress node fro | <ul spacing="normal" bare="false" empty="false" pn="section-7.1-2"> | |||
| m an entropy label perspective.</t> | <li pn="section-7.1-2.1">The ingress node of a SPRING domain can be an | |||
| <t>Any LSR terminating a segment of the SPRING path is an egress | ingress node from an entropy label perspective.</li> | |||
| node (because it terminates the segment) but can also be a transit node if the S | <li pn="section-7.1-2.2">Any LSR terminating a segment of the SPRING p | |||
| PRING path is not terminated because there is a subsequent SPRING MPLS label in | ath is an egress node (because it terminates the segment) but can also be a tran | |||
| the stack.</t> | sit node if the SPRING path is not terminated because there is a subsequent SPRI | |||
| <t>Any LSR processing a Binding-SID may be a transit node and an | NG MPLS label in the stack.</li> | |||
| ingress node (because it may push additional labels when processing the Binding- | <li pn="section-7.1-2.3">Any LSR processing a Binding SID may be a tra | |||
| SID).</t> | nsit node and an | |||
| </list> | ingress node (because it may push additional labels when processing | |||
| </t> | the Binding SID).</li> | |||
| <t> | </ul> | |||
| <t pn="section-7.1-3"> | ||||
| As described earlier, an LSR may have a limitation (the ERLD) on the dept h of the label stack that it | As described earlier, an LSR may have a limitation (the ERLD) on the dept h of the label stack that it | |||
| can read and process in order to do multipath load-balancing based on entropy labels.</t> | can read and process in order to do multipath load-balancing based on entropy labels.</t> | |||
| <t>If an EL does not occur within the ERLD of an | <t pn="section-7.1-4">If an EL does not occur within the ERLD of an | |||
| LSR in the label stack of an MPLS packet that it receives, then it | LSR in the label stack of an MPLS packet that it receives, then it | |||
| would lead to poor load-balancing at that LSR. Hence an ELI/EL pair | would lead to poor load-balancing at that LSR. Hence, an ELI/EL pair | |||
| must be within the ERLD of the LSR in order for the LSR to use the EL | must be within the ERLD of the LSR in order for the LSR to use the EL | |||
| during load-balancing. | during load-balancing. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1-5"> | |||
| Adding a single ELI/EL pair for the entire SPRING path can also lead | Adding a single ELI/EL pair for the entire SPRING path can also lead | |||
| to poor load-balancing as well because the ELI/EL may not occur within | to poor load-balancing as well because the ELI/EL may not occur within | |||
| the ERLD of some LSR on the path (if too deep) or may not be present | the ERLD of some LSR on the path (if too deep) or may not be present | |||
| in the stack when it reaches some LSRs (if it is too shallow). | in the stack when it reaches some LSRs (if it is too shallow). | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1-6"> | |||
| In order for the EL to occur within the ERLD of LSRs along the path | In order for the EL to occur within the ERLD of LSRs along the path | |||
| corresponding to a SPRING label stack, multiple <ELI, EL> pairs MAY be | corresponding to a SPRING label stack, multiple <ELI, EL> pairs <bcp14> MAY</bcp14> be | |||
| inserted in this label stack. | inserted in this label stack. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1-7"> | |||
| The insertion of an ELI/EL MUST occur only with a SPRING label advertised by | The insertion of an ELI/EL <bcp14>MUST</bcp14> occur only with a SPRING | |||
| an LSR that advertised an ERLD (the LSR is entropy label capable) or with a SPRI | label advertised by an LSR that advertised an ERLD (the LSR is entropy | |||
| NG label associated with a Binding-SID that has the ELC set. | label capable) or with a SPRING label associated with a Binding SID that has | |||
| </t> | the ELC set. | |||
| <t> | </t> | |||
| <t pn="section-7.1-8"> | ||||
| The ELs among multiple <ELI, EL> pairs inserted in the | The ELs among multiple <ELI, EL> pairs inserted in the | |||
| stack MAY be the same or different. The LSR that inserts <ELI, EL> pair s | stack <bcp14>MAY</bcp14> be the same or different. The LSR that inserts <E LI, EL> pairs | |||
| can have limitations on the number of such pairs that it can insert | can have limitations on the number of such pairs that it can insert | |||
| and also the depth at which it can insert them. If, due to | and also the depth at which it can insert them. If, due to | |||
| limitations, the inserted ELs are at positions such that an LSR along | limitations, the inserted ELs are at positions such that an LSR along | |||
| the path receives an MPLS packet without an EL in the label stack | the path receives an MPLS packet without an EL in the label stack | |||
| within that LSR's ERLD, then the load-balancing performed by that LSR | within that LSR's ERLD, then the load-balancing performed by that LSR | |||
| would be poor. An implementation MAY consider multiple criteria when insertin | would be poor. An implementation <bcp14>MAY</bcp14> consider multiple criteri | |||
| g <ELI, EL> pairs. | a when inserting <ELI, EL> pairs. | |||
| </t> | </t> | |||
| <section anchor="ex1" title="Example 1 where the ingress node has a suffi | <section anchor="ex1" numbered="true" toc="include" removeInRFC="false" | |||
| cient MSD"> | pn="section-7.1.1"> | |||
| <figure title="Figure 5"> | <name slugifiedName="name-example-1-the-ingress-node-">Example 1: The | |||
| <artwork> | Ingress Node Has a Sufficient MSD</name> | |||
| <figure anchor="fig_ex1" align="left" suppress-title="false" pn="figur | ||||
| e-5"> | ||||
| <name slugifiedName="name-accommodating-msd-limitatio">Accommodating | ||||
| MSD Limitations</name> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-7.1.1-1.1"> | ||||
| ECMP LAG LAG | ECMP LAG LAG | |||
| PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- PE2 | PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- PE2 | |||
| </artwork> | ||||
| </artwork> | </figure> | |||
| </figure> | <t pn="section-7.1.1-2"> | |||
| <t> | In <xref target="fig_ex1" format="default" sectionFormat="of" derivedCont | |||
| In Figure 5, PE1 wants to forward some MPLS VPN traffic over an explicit | ent="Figure 5"/>, PE1 wants to forward some MPLS VPN traffic over an explicit pa | |||
| path to PE2 resulting in the following label stack to be pushed onto the receive | th to PE2 resulting in the following label stack to be pushed onto the received | |||
| d IP header: <Adj_P1P2, Adj_set_P2P3, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_P6PE2 | IP header: <Adj_P1P2, Adj_set_P2P3, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_P6PE2, | |||
| , VPN_label>. | VPN_label>. | |||
| PE1 is limited to push a maximum of 11 labels (MSD=11). P2, P3 and P6 have an ER | PE1 is limited to push a maximum of 11 labels (MSD=11). P2, P3, and P6 have an E | |||
| LD of 3 while others have an ERLD of 10. | RLD of 3 while others have an ERLD of 10. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1.1-3"> | |||
| PE1 can only add two ELI/EL pairs in the label stack due to its MSD limit ation. It should insert them strategically to benefit load-balancing along the l ongest part of the path. | PE1 can only add two ELI/EL pairs in the label stack due to its MSD limit ation. It should insert them strategically to benefit load-balancing along the l ongest part of the path. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1.1-4"> | |||
| PE1 can take into account multiple parameters when inserting ELs, as exam | PE1 can take into account multiple parameters when inserting ELs; as exam | |||
| ples: | ples: | |||
| <list style="symbols"> | </t> | |||
| <t>The ERLD value advertised by transit nodes.</t> | <ul spacing="normal" bare="false" empty="false" pn="section-7.1.1-5"> | |||
| <t>The requirement of load-balancing for a particular label value.</t> | <li pn="section-7.1.1-5.1">The ERLD value advertised by transit node | |||
| <t>Any service provider preference: favor beginning of the path or end of | s.</li> | |||
| the path.</t> | <li pn="section-7.1.1-5.2">The requirement of load-balancing for a p | |||
| </list> | articular label value.</li> | |||
| </t> | <li pn="section-7.1.1-5.3">Any service provider preference: favor be | |||
| <t> | ginning of the path or end of the path.</li> | |||
| In Figure 5, a good strategy may be to use the following stack <Adj_P1 | </ul> | |||
| P2, Adj_set_P2P3, ELI1, EL1, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_P6PE2, ELI2, EL2, | <t pn="section-7.1.1-6"> | |||
| VPN_label>. | In <xref target="fig_ex1" format="default" sectionFormat="of" derivedCont | |||
| The original stack requests P2 to forward based on a L3 adjacency set that will | ent="Figure 5"/>, a good strategy may be to use the following stack <Adj_P1P2 | |||
| require load-balancing. Therefore it is important to ensure that P2 can load-bal | , Adj_set_P2P3, ELI1, EL1, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_P6PE2, ELI2, EL2, V | |||
| ance correctly. | PN_label>. | |||
| The original stack requests P2 to forward based on an L3 adjacency-set that will | ||||
| require load-balancing. Therefore, it is important to ensure that P2 can load-b | ||||
| alance correctly. | ||||
| As P2 has a limited ERLD of 3, an ELI/EL must be inserted just after the label t hat P2 will use to forward. | As P2 has a limited ERLD of 3, an ELI/EL must be inserted just after the label t hat P2 will use to forward. | |||
| On the path to PE2, P3 has also a limited ERLD, but P3 will forward based on a r egular adjacency segment that may not require load-balancing. | On the path to PE2, P3 has also a limited ERLD, but P3 will forward based on a r egular adjacency segment that may not require load-balancing. | |||
| Therefore it does not seem important to ensure that P3 can do load-balancing des | Therefore, it does not seem important to ensure that P3 can do load-balancing de | |||
| pite its limited ERLD. | spite its limited ERLD. | |||
| The next nodes along the forwarding path have a high ERLD that does not cause an | The next nodes along the forwarding path have a high ERLD that does not cause | |||
| y issue, except P6. Moreover, P6 is using some LAGs to PE2 and so is expected to | any issue, except P6. Moreover, P6 is using some LAGs to PE2 and so is | |||
| load-balance. | expected to load-balance. | |||
| It becomes important to insert a new ELI/EL just after the P6 forwarding label. | It becomes important to insert a new ELI/EL just after the P6 forwarding label. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1.1-7"> | |||
| In the case above, the ingress node had a sufficient MSD to ensure end-to | In the case above, the ingress node was able to support a sufficient MSD | |||
| -end load-balancing taking into the path attributes. | to ensure | |||
| end-to-end load-balancing while taking into account the path attributes. | ||||
| However, there might be cases where the ingress node may not have the necessary label imposition capacity. | However, there might be cases where the ingress node may not have the necessary label imposition capacity. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="ex2" title="Example 2 where the ingress node does not ha | <section anchor="ex2" numbered="true" toc="include" removeInRFC="false" | |||
| ve a sufficient MSD"> | pn="section-7.1.2"> | |||
| <name slugifiedName="name-example-2-the-ingress-node-">Example 2: The | ||||
| <figure title="Figure 6"> | Ingress Node Does Not Have a Sufficient MSD</name> | |||
| <artwork> | <figure anchor="fig_ex2" align="left" suppress-title="false" pn="figur | |||
| e-6"> | ||||
| <name slugifiedName="name-msd-considerations">MSD Considerations</na | ||||
| me> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-7.1.2-1.1"> | ||||
| ECMP LAG ECMP ECMP | ECMP LAG ECMP ECMP | |||
| PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- P7 --- P8 --- PE2 | PE1 --- P1 --- P2 --- P3 --- P4 --- P5 --- P6 --- P7 --- P8 --- PE2 | |||
| </artwork> | ||||
| </artwork> | </figure> | |||
| </figure> | <t pn="section-7.1.2-2"> | |||
| <t> | In <xref target="fig_ex2" format="default" sectionFormat="of" derivedCont | |||
| In Figure 6, PE1 wants to forward MPLS VPN traffic over an explicit path | ent="Figure 6"/>, PE1 wants to forward MPLS VPN traffic over an explicit path to | |||
| to PE2 resulting in the following label stack to be pushed onto the IP header: & | PE2 resulting in the following label stack to be pushed onto the IP header: < | |||
| lt;Adj_P1P2, Adj_set_P2P3, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_set_P6P7, Adj_P7P8; | ;Adj_P1P2, Adj_set_P2P3, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_set_P6P7, Adj_P7P8; A | |||
| Adj_set_P8PE2, VPN_label>. | dj_set_P8PE2, VPN_label>. | |||
| PE1 is limited to push a maximum of 11 labels. P2, P3 and P6 have an ERLD of 3 w | PE1 is limited to push a maximum of 11 labels. P2, P3, and P6 have an ERLD of 3 | |||
| hile others have an ERLD of 15. | while others have an ERLD of 15. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1.2-3"> | |||
| Using a similar strategy as the previous case may lead to a dilemma, as P E1 can only push a single ELI/EL while we may need a minimum of three to load-ba lance the end-to-end path. | Using a similar strategy as the previous case may lead to a dilemma, as P E1 can only push a single ELI/EL while we may need a minimum of three to load-ba lance the end-to-end path. | |||
| An optimized stack that would enable end-to-end load-balancing may be: <Adj_P 1P2, Adj_set_P2P3, ELI1, EL1, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_set_P6P7, ELI2, EL2, Adj_P7P8, Adj_set_P8PE2, ELI3, EL3, VPN_label>. | An optimized stack that would enable end-to-end load-balancing may be: <Adj_P 1P2, Adj_set_P2P3, ELI1, EL1, Adj_P3P4, Adj_P4P5, Adj_P5P6, Adj_set_P6P7, ELI2, EL2, Adj_P7P8, Adj_set_P8PE2, ELI3, EL3, VPN_label>. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.1.2-4"> | |||
| A decision needs to be taken to favor some part of the path for load-bala ncing considering that load-balancing may not work on the other parts. | A decision needs to be taken to favor some part of the path for load-bala ncing considering that load-balancing may not work on the other parts. | |||
| A service provider may decide to place the ELI/EL after the P6 forwarding label | A service provider may decide to place the ELI/EL after the P6 forwarding | |||
| as it will allow P4 and P6 to load-balance. Placing the ELI/EL at bottom of the | label as it will allow P4 and P6 to load-balance. Placing the ELI/EL at the bott | |||
| stack is also a possibility enabling load-balancing for P4 and P8. | om of the stack is also a possibility enabling load-balancing for P4 and P8. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="el_placement" title="Considerations for the placement of | <section anchor="el_placement" numbered="true" toc="include" removeInRFC=" | |||
| entropy labels"> | false" pn="section-7.2"> | |||
| <t> | <name slugifiedName="name-considerations-for-the-plac">Considerations fo | |||
| The sample cases described in the previous section showed that ELI/EL pla | r the Placement of Entropy Labels</name> | |||
| cement when the maximum number of labels to be pushed is limited is not an easy | <t pn="section-7.2-1"> | |||
| decision and multiple criteria may be taken into account. | The sample cases described in the previous section showed that ELI/EL pla | |||
| </t> | cement when the maximum number of labels to be pushed is limited is not an easy | |||
| <t> | decision, and multiple criteria may be taken into account. | |||
| This section describes some considerations that an implementation MAY tak | </t> | |||
| e into account when placing ELI/ELs. This list of criteria is not considered exh | <t pn="section-7.2-2"> | |||
| austive and an implementation MAY take into account additional criteria or tie-b | This section describes some considerations that an implementation <bcp14> | |||
| reakers that are not documented here. | MAY</bcp14> take into account when placing ELI/ELs. This list of criteria is not | |||
| considered exhaustive and an implementation <bcp14>MAY</bcp14> take into accoun | ||||
| t additional criteria or tiebreakers that are not documented here. | ||||
| As the insertion of ELI/ELs is performed by the ingress node, having ingr ess nodes that do not use the same criteria does not cause an interoperability i ssue. However, from a network design and operation perspective, it is better to have all ingress routers using the same criteria. | As the insertion of ELI/ELs is performed by the ingress node, having ingr ess nodes that do not use the same criteria does not cause an interoperability i ssue. However, from a network design and operation perspective, it is better to have all ingress routers using the same criteria. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2-3"> | |||
| An implementation SHOULD try to maximize the possibility of load-balancin | An implementation <bcp14>SHOULD</bcp14> try to maximize the possibility o | |||
| g along the path by inserting an ELI/EL where multiple equal cost paths are avai | f load-balancing along the path by inserting an ELI/EL where multiple equal-cost | |||
| lable and minimize the number of ELI/ELs that need to be inserted. | paths are available and minimize the number of ELI/ELs that need to be inserted | |||
| In case of a trade-off, an implementation SHOULD provide flexibility to the | . | |||
| operator to select the criteria to be considered when placing ELI/ELs or specify | In case of a trade-off, an implementation <bcp14>SHOULD</bcp14> provide flex | |||
| a sub-objective for optimization. | ibility to the operator to select the criteria to be considered when placing ELI | |||
| </t> | /ELs or specify a subobjective for optimization. | |||
| </t> | ||||
| <figure title="Figure 7"> | <figure anchor="fig_consid_sample" align="left" suppress-title="false" p | |||
| <artwork> | n="figure-7"> | |||
| <name slugifiedName="name-msd-trade-offs">MSD Trade-Offs</name> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-7.2-4.1"> | ||||
| 2 2 | 2 2 | |||
| PE1 -- P1 -- P2 --P3 --- P4 --- P5 -- ... -- P8 -- P9 -- PE2 | PE1 -- P1 -- P2 --P3 --- P4 --- P5 -- ... -- P8 -- P9 -- PE2 | |||
| | | | | | | |||
| P3'--- P4'--- P5' | P3'--- P4'--- P5' | |||
| </artwork> | </artwork> | |||
| </figure> | </figure> | |||
| <t> | <t pn="section-7.2-5"><xref target="fig_consid_sample" format="default" | |||
| Figure 7 will be used as reference in the following subsections. All metr | sectionFormat="of" derivedContent="Figure 7"/> will be used as reference in the | |||
| ics are equal to 1, except P3-P4 and P4-P5 which have a metric 2. | following subsections. All | |||
| We consider the MSD of nodes to be the full limit of label imposition (in | metrics are equal to 1 except P3-P4 and P4-P5, which have a metric 2. | |||
| cluding service labels, entropy labels and transport labels). | We consider the MSD of nodes to be the full limit of label imposition | |||
| </t> | (including service labels, entropy labels, and transport labels). | |||
| <section anchor="erld" title="ERLD value"> | </t> | |||
| <t> | <section anchor="erld" numbered="true" toc="include" removeInRFC="false" | |||
| As mentioned in <xref target="overview"/>, the ERLD value is an i | pn="section-7.2.1"> | |||
| mportant parameter to consider when inserting an ELI/EL. If an ELI/EL does not f | <name slugifiedName="name-erld-value">ERLD Value</name> | |||
| all within the ERLD of a node on the path, the node will not be able to load-bal | <t pn="section-7.2.1-1"> | |||
| ance the traffic efficiently. | As mentioned in <xref target="overview" format="default" sectionF | |||
| </t> | ormat="of" derivedContent="Section 7.1"/>, the ERLD value is an important parame | |||
| <t> | ter to consider when inserting an ELI/EL. If an ELI/EL does not fall within the | |||
| The ERLD value can be advertised via protocols and those extensio | ERLD of a node on the path, the node will not be able to load-balance the traffi | |||
| ns are described in separate documents (for instance, <xref target="I-D.ietf-isi | c efficiently. | |||
| s-mpls-elc"/> and <xref target="I-D.ietf-ospf-mpls-elc"/>). | </t> | |||
| </t> | <t pn="section-7.2.1-2"> | |||
| <t> | The ERLD value can be advertised via protocols, and those extensi | |||
| ons are described in separate documents (for instance, <xref target="I-D.ietf-is | ||||
| is-mpls-elc" format="default" sectionFormat="of" derivedContent="ISIS-ELC"/> and | ||||
| <xref target="I-D.ietf-ospf-mpls-elc" format="default" sectionFormat="of" deriv | ||||
| edContent="OSPF-ELC"/>). | ||||
| </t> | ||||
| <t pn="section-7.2.1-3"> | ||||
| Let's consider a path from PE1 to PE2 using the following stack p ushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, Service_label>. | Let's consider a path from PE1 to PE2 using the following stack p ushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, Service_label>. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.1-4"> | |||
| Using the ERLD as an input parameter can help to minimize the num ber of required ELI/EL pairs to be inserted. | Using the ERLD as an input parameter can help to minimize the num ber of required ELI/EL pairs to be inserted. | |||
| An ERLD value must be retrieved for each SPRING label in the label stack . | An ERLD value must be retrieved for each SPRING label in the label stack . | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.1-5"> | |||
| For a label bound to an adjacency segment, the ERLD is the ERLD o | For a label bound to an adjacency segment, the ERLD is the ERLD o | |||
| f the node that has advertised the adjacency segment. In the example above, the | f the node that has advertised the adjacency segment. In the example above, the | |||
| ERLD associated with Adj_P1P2 would be the ERLD of router P1 as P1 will perform | ERLD associated with Adj_P1P2 would be the ERLD of router P1, as P1 will perform | |||
| the forwarding based on the Adj_P1P2 label. | the forwarding based on the Adj_P1P2 label. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.1-6"> | |||
| For a label bound to a node segment, multiple strategies MAY be i | For a label bound to a node segment, multiple strategies <bcp14>M | |||
| mplemented. An implementation MAY try to evaluate the minimum ERLD value along t | AY</bcp14> be implemented. An implementation <bcp14>MAY</bcp14> try to evaluate | |||
| he node segment path. | the minimum ERLD value along the node segment path. | |||
| If an implementation cannot find the minimum ERLD along the path of the segment | If an implementation cannot find the minimum ERLD along the path of the | |||
| or does not support the computation of the minimum ERLD, it SHOULD instead use t | segment or does not support the computation of the minimum ERLD, it <bcp14>SHOUL | |||
| he ERLD of the tail-end node. Using the ERLD of the tail-end of the node segment | D</bcp14> | |||
| mimics the behavior of <xref target="RFC6790"/> where the ingress takes only ca | instead use the ERLD of the tail-end node. Using the ERLD of the tail end of the | |||
| re of the egress of the LSP. | node segment mimics the behavior of <xref target="RFC6790" format="default" sec | |||
| tionFormat="of" derivedContent="RFC6790"/> where the ingress takes only care of | ||||
| the egress of the LSP. | ||||
| In the example above, if the implementation supports computation of minimum ERLD along the path, the ERLD associated with label Node_P9 would be the minimum ERL D between nodes {P2,P3,P4 ..., P8}. | In the example above, if the implementation supports computation of minimum ERLD along the path, the ERLD associated with label Node_P9 would be the minimum ERL D between nodes {P2,P3,P4 ..., P8}. | |||
| If the implementation does not support the computation of minimum ERLD, it will | If the implementation does not support the computation of minimum ERLD, it | |||
| consider the ERLD of P9 (tail-end node of Node_P9 SID). While providing the more | will consider the ERLD of P9 (tail-end node of Node_P9 SID). While providing | |||
| optimal ELI/EL placement, evaluating the minimum ERLD increases the complexity | the more optimal ELI/EL placement, evaluating the minimum ERLD increases the | |||
| of ELI/EL insertion. As the path to the Node-SID may change over time, a recompu | complexity of ELI/EL insertion. As the path to the Node SID may change over time | |||
| tation of the minimum ERLD is required for each topology change. This recomputat | , a recomputation of the minimum ERLD is required for each topology change. This | |||
| ion may require the positions of the ELI/ELs to change. | recomputation may require the positions of the ELI/ELs to change. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.1-7"> | |||
| For a label bound to a binding segment, if the binding segment describes a path, | For a label bound to a Binding Segment, if the Binding Segment describes a | |||
| an implementation MAY also try to evaluate the minimum ERLD along this path. If | path, an implementation <bcp14>MAY</bcp14> also try to evaluate the minimum ERLD | |||
| the implementation cannot find the minimum ERLD along the path of the segment o | along this | |||
| r does not support this evaluation, it SHOULD instead use the ERLD of the node a | path. If the implementation cannot find the minimum ERLD along the path of the | |||
| dvertising the Binding-SID. | segment or does not support this evaluation, it <bcp14>SHOULD</bcp14> instead us | |||
| As for the node segment, evaluating the minimum ERLD adds complexity in the ELI/ | e the ERLD of | |||
| EL insertion process. | the node advertising the Binding SID. As for the node segment, evaluating the | |||
| </t> | minimum ERLD adds complexity in the ELI/EL insertion process. | |||
| </section> | </t> | |||
| <section anchor="sid-type" title="Segment type"> | </section> | |||
| <t> | <section anchor="sid-type" numbered="true" toc="include" removeInRFC="fa | |||
| Depending on the type of segment a particular label is bound to, | lse" pn="section-7.2.2"> | |||
| an implementation can deduce that this particular label will be subject to load- | <name slugifiedName="name-segment-type">Segment Type</name> | |||
| balancing on the path. | <t pn="section-7.2.2-1"> | |||
| </t> | Depending on the type of segment a particular label is bound | |||
| <section anchor="node-sid" title="Node-SID"> | to, an implementation can deduce that this particular label | |||
| <t> | will be subject to load-balancing on the path. | |||
| An MPLS label bound to a Node-SID represents a path that | </t> | |||
| may cross multiple hops. | <section anchor="node-sid" numbered="true" toc="exclude" removeInRFC=" | |||
| Load-balancing may be needed on the node starting this path but also on any node | false" pn="section-7.2.2.1"> | |||
| along the path. | <name slugifiedName="name-node-sid">Node SID</name> | |||
| </t> | <t pn="section-7.2.2.1-1"> | |||
| <t> | An MPLS label bound to a Node SID represents a path | |||
| In Figure 7, let's consider a path from PE1 to PE2 using | that may cross multiple hops. Load-balancing may be | |||
| the following stack pushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, Service_lab | needed on the node starting this path but also on any | |||
| el>. | node along the path. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.2.1-2"> | |||
| If, for example, PE1 is limited to push 6 labels, it can | In <xref target="fig_consid_sample" format="default" sect | |||
| add a single ELI/EL within the label stack. | ionFormat="of" derivedContent="Figure 7"/>, let's consider a path from PE1 to PE | |||
| An operator may want to favor a placement that would allow load-balancing along | 2 using the following stack pushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, Ser | |||
| the Node-SID path. | vice_label>. | |||
| In Figure 7, P3 which is along the Node-SID path requires load-balancing between | </t> | |||
| two equal-cost paths. | <t pn="section-7.2.2.1-3"> | |||
| </t> | If, for example, PE1 is limited to push 6 labels, it | |||
| <t> | can add a single ELI/EL within the label stack. An | |||
| An implementation MAY try to evaluate if load-balancing is really | operator may want to favor a placement that would | |||
| allow load-balancing along the Node SID path. In | ||||
| <xref target="fig_consid_sample" format="default" section | ||||
| Format="of" derivedContent="Figure 7"/>, | ||||
| P3, which is along the Node SID path, | ||||
| requires load-balancing between two equal-cost paths. | ||||
| </t> | ||||
| <t pn="section-7.2.2.1-4"> | ||||
| An implementation <bcp14>MAY</bcp14> try to evaluate if load-balancing is really | ||||
| required within a node segment path. This could be done by running | required within a node segment path. This could be done by running | |||
| an additional SPT (Shortest Path Tree) computation and analysing of the node segment path to | an additional SPT (Shortest Path Tree) computation and analyzing of the node segment path to | |||
| prevent a node segment that does not really require load-balancing from | prevent a node segment that does not really require load-balancing from | |||
| being preferred when placing ELI/ELs. Such inspection may be time | being preferred when placing ELI/ELs. Such inspection may be time | |||
| consuming for implementations and without a 100% guarantee, as a node | consuming for implementations and without a 100% guarantee, as a node | |||
| segment path may use LAGs that are invisible to the IP | segment path may use LAGs that are invisible to the IP | |||
| topology. As a simpler approach, an implementation MAY consider that a label | topology. As a simpler approach, an implementation <bcp14>MAY</bcp14> consid | |||
| bound | er that a label bound | |||
| to a Node-SID will be subject to load-balancing and requires an | to a Node SID will be subject to load-balancing and require an | |||
| ELI/EL. | ELI/EL. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="adj-sid1" title="Adjacency-set SID"> | <section anchor="adj-sid1" numbered="true" toc="exclude" removeInRFC=" | |||
| <t> | false" pn="section-7.2.2.2"> | |||
| An adjacency-set is an Adj-SID that refers to a set of ad | <name slugifiedName="name-adjacency-set-sid">Adjacency-Set SID</name | |||
| jacencies. When an adjacency-set segment is used within a label stack, an implem | > | |||
| entation can deduce that load-balancing is expected at the node that advertised | <t pn="section-7.2.2.2-1"> | |||
| this adjacency segment. | An adjacency-set is an Adj-SID that refers to a set of | |||
| An implementation MAY favor the insertion of an ELI/EL af | adjacencies. When an adjacency-set segment is used | |||
| ter the Adj-SID representing an adjacency-set. | within a label stack, an implementation can deduce | |||
| </t> | that load-balancing is expected at the node that | |||
| </section> | advertised this adjacency segment. An implementation | |||
| <section anchor="adj-sid2" title="Adjacency-SID represent | <bcp14>MAY</bcp14> favor the insertion of an ELI/EL | |||
| ing a single IP link"> | after the Adj-SID representing an adjacency-set. | |||
| <t> | </t> | |||
| </section> | ||||
| <section anchor="adj-sid2" numbered="true" toc="exclude" removeInRFC=" | ||||
| false" pn="section-7.2.2.3"> | ||||
| <name slugifiedName="name-adjacency-sid-representing-">Adjacency SID | ||||
| Representing a Single IP Link</name> | ||||
| <t pn="section-7.2.2.3-1"> | ||||
| When an adjacency segment representing a single IP link i s used within a label stack, an implementation can deduce that load-balancing ma y not be expected at the node that advertised this adjacency segment. | When an adjacency segment representing a single IP link i s used within a label stack, an implementation can deduce that load-balancing ma y not be expected at the node that advertised this adjacency segment. | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.2.3-2"> | |||
| An implementation MAY NOT place an ELI/EL after a regular | An implementation <bcp14>MAY</bcp14> NOT place an ELI/EL | |||
| Adj-SID in order to favor the insertion of ELI/ELs following other segments. | after a regular Adj-SID in order to favor the insertion of ELI/ELs following oth | |||
| </t> | er segments. | |||
| <t> | </t> | |||
| Readers should note that an adjacency segment representin | <t pn="section-7.2.2.3-3"> | |||
| g a single IP link may require load-balancing. This is the case when a LAG (L2 b | Readers should note that an adjacency segment representin | |||
| undle) is implemented between two IP nodes and the L2 bundle SR extensions <xref | g a single IP link may require load-balancing. This is the case when a LAG (L2 b | |||
| target="I-D.ietf-isis-l2bundles"/> are not implemented. | undle) is implemented between two IP nodes and the L2 bundle SR extensions <xref | |||
| target="RFC8668" format="default" sectionFormat="of" derivedContent="RFC8668"/> | ||||
| are not implemented. | ||||
| In such a case, it could be useful to insert an ELI/EL in a readable position for the LSR advertising the label associated with the adjac ency segment. | In such a case, it could be useful to insert an ELI/EL in a readable position for the LSR advertising the label associated with the adjac ency segment. | |||
| To communicate the requirement for load-balancing for a p | To communicate the requirement for load-balancing for | |||
| articular Adjacency-SID to ingress nodes, a user can enforce the use of the L2 b | a particular Adjacency SID to ingress nodes, a user can e | |||
| undle SR extensions defined in <xref target="I-D.ietf-isis-l2bundles"/> or can d | nforce the use of the L2 bundle SR extensions defined in <xref target="RFC8668" | |||
| eclare the single adjacency as an adjacency-set. | format="default" sectionFormat="of" derivedContent="RFC8668"/> or can declare th | |||
| </t> | e single adjacency as an adjacency-set. | |||
| </section> | </t> | |||
| <section anchor="adj-sid3" title="Adjacency-SID represent | </section> | |||
| ing a single link within an L2 bundle"> | <section anchor="adj-sid3" numbered="true" toc="exclude" removeInRFC=" | |||
| <t> | false" pn="section-7.2.2.4"> | |||
| When the L2 bundle SR extensions <xref target="I-D.ietf-i | <name slugifiedName="name-adjacency-sid-representing-a">Adjacency SI | |||
| sis-l2bundles"/> are used, adjacency segments may be advertised for each member | D Representing a Single Link within an L2 Bundle</name> | |||
| of the bundle. | <t pn="section-7.2.2.4-1"> | |||
| In this case, an implementation can deduce that load-bala | When the L2 bundle SR extensions <xref target="RFC8668" f | |||
| ncing is not expected on the LSR advertising this segment and MAY NOT insert an | ormat="default" sectionFormat="of" derivedContent="RFC8668"/> are used, adjacenc | |||
| ELI/EL after the corresponding label. | y segments may be advertised for each member of the bundle. | |||
| </t> | In this case, an implementation can deduce that load-bala | |||
| </section> | ncing is not expected on the LSR advertising this segment and <bcp14>MAY</bcp14> | |||
| <section anchor="adj-sid4" title="Adjacency-SID represent | NOT insert an ELI/EL after the corresponding label. | |||
| ing an L2 bundle"> | </t> | |||
| <t> | </section> | |||
| When the L2 bundle SR extensions <xref target="I-D.ietf-i | <section anchor="adj-sid4" numbered="true" toc="exclude" removeInRFC=" | |||
| sis-l2bundles"/> are used, an adjacency segment may be advertised to represent t | false" pn="section-7.2.2.5"> | |||
| he bundle. | <name slugifiedName="name-adjacency-sid-representing-an">Adjacency S | |||
| In this case, an implementation can deduce that load-balancing is expected on th | ID Representing an L2 Bundle</name> | |||
| e LSR advertising this segment and MAY insert an ELI/EL after the corresponding | <t pn="section-7.2.2.5-1"> | |||
| label. | When the L2 bundle SR extensions <xref target="RFC8668" f | |||
| </t> | ormat="default" sectionFormat="of" derivedContent="RFC8668"/> are used, an adjac | |||
| </section> | ency segment may be advertised to represent the bundle. | |||
| In this case, an implementation can deduce that load-balancing is expected on th | ||||
| </section> | e LSR advertising this segment and <bcp14>MAY</bcp14> insert an ELI/EL after the | |||
| <section title="Maximizing number of LSRs that will load-balance" | corresponding label. | |||
| > | </t> | |||
| <t> | </section> | |||
| When placing ELI/ELs, an implementation MAY optimize the | </section> | |||
| number of LSRs that both need to load-balance (i.e., have | <section numbered="true" toc="include" removeInRFC="false" pn="section-7 | |||
| ECMP paths) and that will be able to perform load-balancing (i.e., | .2.3"> | |||
| the EL label is within their ERLD). | <name slugifiedName="name-maximizing-number-of-lsrs-t">Maximizing Numb | |||
| </t> | er of LSRs That Will Load-Balance</name> | |||
| <t> | <t pn="section-7.2.3-1"> | |||
| Let's consider a path from PE1 to PE2 using the following stack p | When placing ELI/ELs, an implementation <bcp14>MAY</bcp14> | |||
| ushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, Service_label>. | optimize the number of LSRs that both need to load-balance | |||
| All routers have an ERLD of 10, except P1 and P2 which have an ERLD of 4. PE1 is | (i.e., have ECMPs) and that will be able to perform | |||
| able to push 6 labels, so only a single ELI/EL can be added. | load-balancing (i.e., the EL is within their ERLD). | |||
| </t> | </t> | |||
| <t> | <t pn="section-7.2.3-2"> | |||
| In the example above, adding an ELI/EL after Adj_P1P2 will only a | Let's consider a path from PE1 to PE2 using the following | |||
| llow load-balancing at P1 while inserting it after Adj_PE2P9, will allow load-ba | stack pushed by PE1: <Adj_P1P2, Node_P9, Adj_P9PE2, | |||
| lancing at P2,P3 ... P9 and maximizing the number of LSRs that can perform load- | Service_label>. All routers have an ERLD of 10 except P1 | |||
| balancing. | and P2, which have an ERLD of 4. PE1 is able to push 6 labels, | |||
| </t> | so only a single ELI/EL can be added. | |||
| </section> | </t> | |||
| <section title="Preference for a part of the path"> | <t pn="section-7.2.3-3"> | |||
| <t> | In the example above, adding an ELI/EL after Adj_P1P2 will | |||
| An implementation MAY allow the user to favor a part of the end-t | only allow load-balancing at P1, while inserting it after | |||
| o-end path when the number of ELI/ELs that can be pushed is not enough to cover | Adj_PE2P9 will allow load-balancing at P2, P3 ... P9 and | |||
| the entire path. | maximize the number of LSRs that can perform load-balancing. | |||
| As an example, a service provider may want to favor load-balancing at the beginn | </t> | |||
| ing of the path or at the end of path, so the implementation favors putting the | </section> | |||
| ELI/ELs near the top or near of the bottom of the stack. | <section numbered="true" toc="include" removeInRFC="false" pn="section-7 | |||
| </t> | .2.4"> | |||
| </section> | <name slugifiedName="name-preference-for-a-part-of-th">Preference for | |||
| <section title="Combining criteria"> | a Part of the Path</name> | |||
| <t> | <t pn="section-7.2.4-1"> | |||
| An implementation MAY combine multiple criteria to determine the | An implementation <bcp14>MAY</bcp14> allow the user to favor a pa | |||
| best ELI/ELs placement. However, combining too many criteria could lead to imple | rt of the end-to-end path when the number of ELI/ELs that can be pushed is not e | |||
| mentation complexity and high resource consumption. | nough to cover the entire path. | |||
| Each time the network topology changes, a new | As an example, a service provider may want to favor load-balancing at the | |||
| evaluation of the ELI/EL placement will be necessary for each | beginning of the path or at the end of the path, so the implementation favors | |||
| impacted LSPs. | putting the ELI/ELs near the top or the bottom of the stack. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | <section numbered="true" toc="include" removeInRFC="false" pn="section-7 | |||
| </section> | .2.5"> | |||
| <section anchor="algo-example" title="A simple example algorithm" toc="default" | <name slugifiedName="name-combining-criteria">Combining Criteria</name | |||
| > | > | |||
| <t> | <t pn="section-7.2.5-1"> | |||
| A simple implementation might take into account the ERLD when placing ELI/EL wh | An implementation <bcp14>MAY</bcp14> combine multiple criteria to | |||
| ile trying to minimize the number of ELI/ELs inserted and trying to maximize the | determine | |||
| number of LSRs that can load-balance. | the best ELI/ELs placement. However, combining too many | |||
| </t> | criteria could lead to implementation complexity and high | |||
| <t> | resource consumption. Each time the network topology changes, | |||
| a new evaluation of the ELI/EL placement will be necessary for | ||||
| each impacted LSP. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="algo-example" toc="include" numbered="true" removeInRFC="fa | ||||
| lse" pn="section-8"> | ||||
| <name slugifiedName="name-a-simple-example-algorithm">A Simple Example Alg | ||||
| orithm</name> | ||||
| <t pn="section-8-1"> | ||||
| A simple implementation might take into account the ERLD when placing ELI/EL | ||||
| while trying to minimize the number of ELI/ELs inserted and trying to | ||||
| maximize the number of LSRs that can load-balance. | ||||
| </t> | ||||
| <t pn="section-8-2"> | ||||
| The example algorithm is based on the following considerations: | The example algorithm is based on the following considerations: | |||
| <list style="symbols"> | </t> | |||
| <t>An LSR that can insert a limited number of <ELI, EL> pairs should inse | <ul spacing="normal" bare="false" empty="false" pn="section-8-3"> | |||
| rt such pairs deeper in the stack.</t> | <li pn="section-8-3.1">An LSR that can insert a limited number of <EL | |||
| <t>An LSR should try to insert <ELI, EL> pairs at positions to maximize t | I, EL> pairs should insert such pairs deeper in the stack.</li> | |||
| he number of transit LSRs for which the EL occurs within the ERLD of those LSRs. | <li pn="section-8-3.2">An LSR should try to insert <ELI, EL> pairs | |||
| </t> | at positions to maximize the number of transit LSRs for which the EL occurs wit | |||
| <t>An LSR should try to insert the minimum number of such pairs while trying to | hin the ERLD of those LSRs.</li> | |||
| satisfy the above criteria.</t> | <li pn="section-8-3.3">An LSR should try to insert the minimum number of | |||
| </list> | such pairs while trying to satisfy the above criteria.</li> | |||
| </t> | </ul> | |||
| <t> | <t pn="section-8-4"> | |||
| The pseudocode of the example algorithm is shown below. | The pseudocode of the example algorithm is shown below. | |||
| </t> | </t> | |||
| <figure title="Figure 8: Example algorithm to insert <ELI, EL> pairs in a | <figure align="left" suppress-title="false" pn="figure-8"> | |||
| label stack"> | <name slugifiedName="name-example-algorithm-to-insert">Example Algorithm | |||
| <artwork> | to Insert <ELI, EL> Pairs in a Label Stack</name> | |||
| Initialize the current EL insertion point to the | <sourcecode type="pseudocode" markers="false" pn="section-8-5.1"> | |||
| bottom-most label in the stack that is EL-capable | Initialize the current EL insertion point to the | |||
| while (local-node can push more <ELI,EL> pairs OR | bottom-most label in the stack that is EL-capable | |||
| insertion point is not above label stack) { | while (local-node can push more <ELI,EL> pairs OR | |||
| insert an <ELI,EL> pair below current insertion point | insertion point is not above label stack) { | |||
| move new insertion point up from current insertion point until | insert an <ELI,EL> pair below current insertion point | |||
| ((last inserted EL is below the ERLD) AND (ERLD > 2) | move new insertion point up from current insertion point until | |||
| AND | ((last inserted EL is below the ERLD) AND (ERLD > 2) | |||
| (new insertion point is EL-capable)) | AND | |||
| set current insertion point to new insertion point | (new insertion point is EL-capable)) | |||
| } | set current insertion point to new insertion point | |||
| </artwork> | } | |||
| </figure> | </sourcecode> | |||
| <t> | </figure> | |||
| When this algorithm is applied to the example described in <xref target="usecas | <t pn="section-8-6"> | |||
| e"/>, | When this algorithm is applied to the example described in <xref target="usecas | |||
| it will result in ELs being inserted in two positions, one after the | e" format="default" sectionFormat="of" derivedContent="Section 3"/>, | |||
| it will result in ELs being inserted in two positions; one after the | ||||
| label L_N-D and another after L_N-P3. Thus, the resulting label stack | label L_N-D and another after L_N-P3. Thus, the resulting label stack | |||
| would be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, EL> | would be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, EL>. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="deployment" numbered="true" toc="include" removeInRFC="fals | |||
| e" pn="section-9"> | ||||
| <section anchor="deployment" title="Deployment Considerations"> | <name slugifiedName="name-deployment-considerations">Deployment Considerat | |||
| <t> | ions</name> | |||
| As long as LSR node dataplane capabilities are limited (number of labels that c | <t pn="section-9-1"> | |||
| an be pushed, or number of labels that can be inspected), hop-by-hop load-balanc | As long as LSR node data-plane capabilities are limited (number of labels that | |||
| ing of SPRING encapsulated flows will require trade-offs. | can be pushed or number of labels that can be inspected), hop-by-hop load-balanc | |||
| </t> | ing of SPRING-encapsulated flows will require trade-offs. | |||
| <t> | </t> | |||
| The entropy label is still a good and usable solution as it allows load-balanci | <t pn="section-9-2"> | |||
| ng without having to perform deep packet inspection on each LSR: it does not see | The entropy label is still a good and usable solution as it allows load-balanci | |||
| m reasonable to have an LSR inspecting UDP ports within a GRE tunnel carried ove | ng without having to perform deep packet inspection on each LSR: It does not see | |||
| r a 15 label SPRING tunnel. | m reasonable to have an LSR inspecting UDP ports within a GRE tunnel carried ove | |||
| </t> | r a 15-label SPRING tunnel. | |||
| <t> | </t> | |||
| Due to the limited capacity of reading a deep stack of MPLS labels, multiple EL | <t pn="section-9-3"> | |||
| I/ELs may be required within the stack which directly impacts the capacity of th | Due to the limited capacity of reading a deep stack of MPLS labels, multiple EL | |||
| e head-end to push a deep stack: each ELI/EL inserted requires two additional la | I/ELs may be required within the stack, which directly impacts the capacity of t | |||
| bels to be pushed. | he head-end to push a deep stack: each ELI/EL inserted requires two additional l | |||
| </t> | abels to be pushed. | |||
| <t> | </t> | |||
| Placement strategies of ELI/ELs are required to find the best trade-off. Multip | <t pn="section-9-4"> | |||
| le criteria could be taken into account and some level of customization (by the | Placement strategies of ELI/ELs are required to find the best trade-off. Multip | |||
| user) is required to accommodate different deployments. | le criteria could be taken into account, and some level of customization (by the | |||
| user) is required to accommodate different deployments. | ||||
| Since analyzing the path of each destination to determine the best ELI/EL place ment may be time consuming for the control plane, we encourage implementations t o find the best trade-off between simplicity, resource consumption, and load-bal ancing efficiency. | Since analyzing the path of each destination to determine the best ELI/EL place ment may be time consuming for the control plane, we encourage implementations t o find the best trade-off between simplicity, resource consumption, and load-bal ancing efficiency. | |||
| </t> | </t> | |||
| <t> | <t pn="section-9-5"> | |||
| In the future, hardware and software capacity may increase dataplane capabiliti | In the future, hardware and software capacity may increase data-plane capabilit | |||
| es and may remove some of these limitations, increasing load-balancing capabilit | ies and may remove some of these limitations, increasing load-balancing capabili | |||
| y using entropy labels. | ty using entropy labels. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="other-options" title="Options considered"> | <section anchor="other-options" numbered="true" toc="include" removeInRFC="f | |||
| <t>Different options that were considered to arrive at the recommended | alse" pn="section-10"> | |||
| <name slugifiedName="name-options-considered">Options Considered</name> | ||||
| <t pn="section-10-1">Different options that were considered to arrive at t | ||||
| he recommended | ||||
| solution are documented in this section. | solution are documented in this section. | |||
| </t> | </t> | |||
| <t> | <t pn="section-10-2"> | |||
| These options are detailed here only for historical purposes. | These options are detailed here only for historical purposes. | |||
| </t> | </t> | |||
| <section title="Single EL at the bottom of the stack"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-10. | |||
| <t> | 1"> | |||
| <name slugifiedName="name-single-el-at-the-bottom-of-">Single EL at the | ||||
| Bottom of the Stack</name> | ||||
| <t pn="section-10.1-1"> | ||||
| In this option, a single EL is used for the entire label stack. The | In this option, a single EL is used for the entire label stack. The | |||
| source LSR S encodes the entropy label at the bottom of the | source LSR S encodes the entropy label at the bottom of the | |||
| label stack. In the example described in <xref target="usecase"/>, it will r esult | label stack. In the example described in <xref target="usecase" format="defa ult" sectionFormat="of" derivedContent="Section 3"/>, it will result | |||
| in the label stack at LSR S to look like <L_N-P3, L_A-L1, L_N-D, ELI, | in the label stack at LSR S to look like <L_N-P3, L_A-L1, L_N-D, ELI, | |||
| EL> <remaining packet header>. Note that the notation in <xref targ et="RFC6790"/> | EL> <remaining packet header>. Note that the notation in <xref targ et="RFC6790" format="default" sectionFormat="of" derivedContent="RFC6790"/> | |||
| is used to describe the label stack. An issue with this approach is | is used to describe the label stack. An issue with this approach is | |||
| that as the label stack grows due an increase in the number of SIDs, | that as the label stack grows due an increase in the number of SIDs, | |||
| the EL goes correspondingly deeper in the label stack. Hence, transit | the EL goes correspondingly deeper in the label stack. Hence, transit | |||
| LSRs have to access a larger number of bytes in the packet header | LSRs have to access a larger number of bytes in the packet header | |||
| when making forwarding decisions. In the example described in | when making forwarding decisions. In the example described in | |||
| <xref target="usecase"/>, if we consider that the LSR P1 has an ERLD of 3, P1 would | <xref target="usecase" format="default" sectionFormat="of" derivedContent="Se ction 3"/>, if we consider that the LSR P1 has an ERLD of 3, P1 would | |||
| load-balance traffic poorly on the | load-balance traffic poorly on the | |||
| parallel links L3 and L4 since the EL is below the ERLD of P1. | parallel links L3 and L4 since the EL is below the ERLD of P1. | |||
| A load-balanced network design using this approach | A load-balanced network design using this approach | |||
| must ensure that all intermediate LSRs have the capability to | must ensure that all intermediate LSRs have the capability to | |||
| read the maximum label stack depth as required for the | read the maximum label stack depth as required for the | |||
| application that uses source routed stacking. | application that uses source-routed stacking. | |||
| </t> | </t> | |||
| <t> | <t pn="section-10.1-2"> | |||
| This option was rejected since there exist a number of hardware | This option was rejected since there exist a number of hardware | |||
| implementations which have a low maximum readable label depth. | implementations that have a low maximum readable label depth. | |||
| Choosing this option can lead to a loss of load-balancing using EL in | Choosing this option can lead to a loss of load-balancing using EL in | |||
| a significant part of the network when that is a critical requirement | a significant part of the network when that is a critical requirement | |||
| in a service-provider network. | in a service-provider network. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="An EL per segment in the stack"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-10. | |||
| <t> | 2"> | |||
| In this option, each segment/label in the stack can be given its own EL. | <name slugifiedName="name-an-el-per-segment-in-the-st">An EL per Segment | |||
| When | in the Stack</name> | |||
| load-balancing is required to direct traffic on a segment, the | <t pn="section-10.2-1"> | |||
| source LSR pushes an <ELI, EL> before pushing the label associated to t | In this option, each segment/label in the stack can be given its own | |||
| his segment . In the | EL. When load-balancing is required to direct traffic on a segment, | |||
| example described in <xref target="usecase"/>, the source LSR S encoded label | the source LSR pushes an <ELI, EL> before pushing the label | |||
| stack | associated to this segment. In the example described in <xref target="us | |||
| would be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, EL> where all the ELs | ecase" format="default" sectionFormat="of" derivedContent="Section 3"/>, the sou | |||
| can be the same. Accessing the EL at an intermediate LSR is | rce label stack that is LSR S encoded would | |||
| independent of the depth of the label stack and hence independent of | be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, EL>, where all the ELs | |||
| the specific application that uses source routed tunnels with label | can be the same. Accessing the EL at an intermediate LSR is | |||
| stacking. A drawback is that the depth of the label | independent of the depth of the label stack and hence, independent of | |||
| stack grows significantly, almost 3 times as the number of labels in | the specific application that uses source-routed tunnels with label | |||
| the label stack. The network design should ensure that source LSRs | stacking. A drawback is that the depth of the label stack grows | |||
| have the capability to push such a deep label stack. Also, | significantly, almost 3 times as the number of labels in the label | |||
| the bandwidth overhead and potential MTU issues of deep label stacks | stack. The network design should ensure that source LSRs have the | |||
| should be considered in the network design. | capability to push such a deep label stack. Also, the bandwidth | |||
| </t> | overhead and potential MTU issues of deep label stacks should be | |||
| <t> | considered in the network design. | |||
| </t> | ||||
| <t pn="section-10.2-2"> | ||||
| This option was rejected due to the existence of hardware | This option was rejected due to the existence of hardware | |||
| implementations that can push a limited number of labels on the label | implementations that can push a limited number of labels on the label | |||
| stack. Choosing this option would result in a hardware requirement | stack. Choosing this option would result in a hardware requirement | |||
| to push two additional labels per tunnel label. Hence it would | to push two additional labels per tunnel label. Hence, it would | |||
| restrict the number of tunnels that can be stacked in a LSP and hence | restrict the number of tunnels that can be stacked in an LSP and hence, | |||
| constrain the types of LSPs that can be created. This was considered | constrain the types of LSPs that can be created. This was considered | |||
| unacceptable. | unacceptable. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="A re-usable EL for a stack of tunnels"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-10. | |||
| <t> | 3"> | |||
| In this option an LSR that terminates a tunnel re-uses the EL of the | <name slugifiedName="name-a-reusable-el-for-a-stack-o">A Reusable EL for | |||
| terminated tunnel for the next inner tunnel. It does this by storing | a Stack of Tunnels</name> | |||
| the EL from the outer tunnel when that tunnel is terminated and re- | <t pn="section-10.3-1"> | |||
| inserting it below the next inner tunnel label during the label swap | In this option, an LSR that terminates a tunnel reuses the EL of the | |||
| operation. The LSR that stacks tunnels should insert an EL below the | terminated tunnel for the next inner tunnel. It does this by storing | |||
| outermost tunnel. It should not insert ELs for any inner tunnels. | the EL from the outer tunnel when that tunnel is terminated and | |||
| Also, the penultimate hop LSR of a segment must not pop the ELI and | reinserting it below the next inner tunnel label during the label-swap | |||
| EL even though they are exposed as the top labels since the | operation. The LSR that stacks tunnels should insert an EL below the | |||
| terminating LSR of that segment would re-use the EL for the next | outermost tunnel. It should not insert ELs for any inner tunnels. | |||
| segment. | Also, the penultimate hop LSR of a segment must not pop the ELI and EL | |||
| </t> | even though they are exposed as the top labels since the terminating | |||
| <t> | LSR of that segment would reuse the EL for the next segment. | |||
| In <xref target="usecase"/> above, the source LSR S encoded label stack w | </t> | |||
| ould be | <t pn="section-10.3-2"> | |||
| <L_N-P3, ELI, EL, L_A-L1, L_N-D>. At P1, the outgoing label stack | In <xref target="usecase" format="default" sectionFormat="of" derivedCont | |||
| would be <L_N-P3, ELI, EL, L_A-L1, L_N-D> after it has load-balanced | ent="Section 3"/>, the source label stack that is LSR S | |||
| to one of the links L3 or L4. At P3 the outgoing label stack would | encoded would be <L_N-P3, ELI, EL, L_A-L1, L_N-D>. At P1, the | |||
| be <L_N-D, ELI, EL>. At P2, the outgoing label stack would be <L_N- | outgoing label stack would be <L_N-P3, ELI, EL, L_A-L1, L_N-D> | |||
| D, | after it has load-balanced to one of the links L3 or L4. At P3, the | |||
| ELI, EL> and it would load-balance to one of the nexthop LSRs P4 or | outgoing label stack would be <L_N-D, ELI, EL>. At P2, the | |||
| P5. Accessing the EL at an intermediate LSR (e.g., P1) is | outgoing label stack would be <L_N-D, ELI, EL> and it would | |||
| independent of the depth of the label stack and hence independent of | load-balance to one of the next-hop LSRs P4 or P5. Accessing the EL at | |||
| the specific use-case to which the label stack is applied. | an intermediate LSR (e.g., P1) is independent of the depth of the | |||
| </t> | label stack and hence, independent of the specific use case to which | |||
| <t> | the label stack is applied. | |||
| This option was rejected due to the significant change in label swap | </t> | |||
| <t pn="section-10.3-3"> | ||||
| This option was rejected due to the significant change in label-swap | ||||
| operations that would be required for existing hardware. | operations that would be required for existing hardware. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="EL at top of stack"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-10. | |||
| <t> | 4"> | |||
| A slight variant of the re-usable EL option is to keep the EL at the | <name slugifiedName="name-el-at-top-of-stack">EL at Top of Stack</name> | |||
| <t pn="section-10.4-1"> | ||||
| A slight variant of the reusable EL option is to keep the EL at the | ||||
| top of the stack rather than below the tunnel label. In this case, | top of the stack rather than below the tunnel label. In this case, | |||
| each LSR that is not terminating a segment should continue to keep | each LSR that is not terminating a segment should continue to keep | |||
| the received EL at the top of the stack when forwarding the packet | the received EL at the top of the stack when forwarding the packet | |||
| along the segment. An LSR that terminates a segment should use the | along the segment. An LSR that terminates a segment should use the | |||
| EL from the terminated segment at the top of the stack when | EL from the terminated segment at the top of the stack when | |||
| forwarding onto the next segment. | forwarding onto the next segment. | |||
| </t> | </t> | |||
| <t> | <t pn="section-10.4-2"> | |||
| This option was rejected due to the significant change in label swap | This option was rejected due to the significant change in label swap | |||
| operations that would be required for existing hardware. | operations that would be required for existing hardware. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="ELs at readable label stack depths"> | <section numbered="true" toc="include" removeInRFC="false" pn="section-10. | |||
| <t> | 5"> | |||
| In this option the source LSR inserts ELs for tunnels in the label | <name slugifiedName="name-els-at-readable-label-stack">ELs at Readable L | |||
| stack at depths such that each LSR along the path that must load | abel Stack Depths</name> | |||
| balance is able to access at least one EL. Note that the source LSR | <t pn="section-10.5-1"> | |||
| may have to insert multiple ELs in the label stack at different | In this option, the source LSR inserts ELs for tunnels in the label | |||
| depths for this to work since intermediate LSRs may have differing | stack at depths such that each LSR along the path that must load-balance | |||
| capabilities in accessing the depth of a label stack. The label | is able to access at least one EL. Note that the source LSR | |||
| stack depth access value of intermediate LSRs must be known to create | may have to insert multiple ELs in the label stack at different depths | |||
| such a label stack. How this value is determined is outside the | for this to work since intermediate LSRs may have differing | |||
| scope of this document. This value can be advertised using a | capabilities in accessing the depth of a label stack. The label stack | |||
| protocol such as an IGP. | depth access value of intermediate LSRs must be known to create such a | |||
| </t> | label stack. How this value is determined is outside the scope of | |||
| <t> | this document. This value can be advertised using a protocol such as | |||
| Applying this method to the example in <xref target="usecase"/> above, | an IGP. | |||
| if LSR P1 | </t> | |||
| needs to have the EL within a depth of 4, then the source LSR S | <t pn="section-10.5-2"> | |||
| encoded label stack would be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, | Applying this method to the example in <xref target="usecase" format=" | |||
| EL> where all the ELs would typically have the same value. | default" sectionFormat="of" derivedContent="Section 3"/>, if LSR P1 | |||
| </t> | needs to have the EL within a depth of 4, then the source label stack that | |||
| <t> | is LSR S encoded would be <L_N-P3, ELI, EL, L_A-L1, L_N-D, ELI, | |||
| EL>, where all the ELs would typically have the same value. | ||||
| </t> | ||||
| <t pn="section-10.5-3"> | ||||
| In the case where the ERLD has different values along the path and the | In the case where the ERLD has different values along the path and the | |||
| LSR that is inserting <ELI, EL> pairs has no limit on how many pairs | LSR that is inserting <ELI, EL> pairs has no limit on how many pairs | |||
| it can insert, and it knows the appropriate positions in the stack | it can insert, and it knows the appropriate positions in the stack | |||
| where they should be inserted, this option is the same as the | where they should be inserted, this option is the same as the | |||
| recommended solution in <xref target="solution"/>. | recommended solution in <xref target="solution" format="default" sectionF | |||
| </t> | ormat="of" derivedContent="Section 7"/>. | |||
| <t> | </t> | |||
| Note that a refinement of this solution which balances the number of | <t pn="section-10.5-4"> | |||
| pushed labels against the desired entropy is the solution described | Note that a refinement of this solution, which balances the number of | |||
| in <xref target="solution"/>. | pushed labels against the desired entropy, is the solution described | |||
| </t> | in <xref target="solution" format="default" sectionFormat="of" derivedContent | |||
| </section> | ="Section 7"/>. | |||
| </section> | </t> | |||
| </section> | ||||
| <section title="Acknowledgements"> | </section> | |||
| <t>The authors would like to thank John Drake, Loa Andersson, Curtis | <section toc="include" numbered="true" removeInRFC="false" pn="section-11"> | |||
| Villamizar, Greg Mirsky, Markus Jork, Kamran Raza, Carlos Pignataro, Bruno De | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
| craene, Chris Bowers, Nobo Akiya, Daniele Ceccarelli and Joe Clarke for | <t pn="section-11-1"> This document has no IANA actions. | |||
| their review comments and suggestions. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Contributors"> | ||||
| <figure> | ||||
| <artwork> | ||||
| Xiaohu Xu | ||||
| Huawei | ||||
| Email: xuxiaohu@huawei.com | ||||
| Wim Hendrickx | ||||
| Nokia | ||||
| Email: wim.henderickx@nokia.com | ||||
| Gunter Van De Velde | ||||
| Nokia | ||||
| Email: gunter.van_de_velde@nokia.com | ||||
| Acee Lindem | ||||
| Cisco | ||||
| Email: acee@cisco.com | ||||
| </artwork> | ||||
| </figure> | ||||
| </section> | ||||
| <section title="IANA Considerations" toc="default"> | ||||
| <t> This memo includes no request to IANA. Note to RFC Editor: Remove | ||||
| this section before publication. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Security Considerations" toc="default"> | <section toc="include" numbered="true" removeInRFC="false" pn="section-12"> | |||
| <t>Compared to <xref target="RFC6790"/>, this document introduces the notion of | <name slugifiedName="name-security-considerations">Security Considerations | |||
| ERLD, MSD and may require an ingress node to push multiple ELI/EL. | </name> | |||
| These changes does not introduce any new security considerations | <t pn="section-12-1">Compared to <xref target="RFC6790" format="default" s | |||
| beyond those already listed in <xref target="RFC6790"/>. | ectionFormat="of" derivedContent="RFC6790"/>, this document introduces the notio | |||
| n | ||||
| of ERLD and MSD, and may require an ingress node to push multiple ELIs/ELs. | ||||
| These changes do not introduce any new security considerations beyond those | ||||
| already listed in <xref target="RFC6790" format="default" sectionFormat="of" der | ||||
| ivedContent="RFC6790"/>. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <displayreference target="I-D.ietf-idr-bgp-ls-segment-routing-msd" to="MSD-B | |||
| &RFC2119; | GP"/> | |||
| &RFC6790; | <displayreference target="I-D.ietf-isis-mpls-elc" to="ISIS-ELC"/> | |||
| &RFC8174; | <displayreference target="I-D.ietf-ospf-mpls-elc" to="OSPF-ELC"/> | |||
| &SR; | <references pn="section-13"> | |||
| &SR-MPLS; | <name slugifiedName="name-references">References</name> | |||
| </references> | <references pn="section-13.1"> | |||
| <references title="Informative References"> | <name slugifiedName="name-normative-references">Normative References</na | |||
| &ISIS-ELC; | me> | |||
| &OSPF-ELC; | <reference anchor="RFC6790" target="https://www.rfc-editor.org/info/rfc6 | |||
| &SR-L2-BUNDLES; | 790" quoteTitle="true" derivedAnchor="RFC6790"> | |||
| &RFC7855; | <front> | |||
| &ISIS-MSD; | <title>The Use of Entropy Labels in MPLS Forwarding</title> | |||
| &OSPF-MSD; | <author initials="K." surname="Kompella" fullname="K. Kompella"> | |||
| &BGP-MSD; | <organization showOnFrontPage="true"/> | |||
| </author> | ||||
| <author initials="J." surname="Drake" fullname="J. Drake"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Amante" fullname="S. Amante"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="W." surname="Henderickx" fullname="W. Henderickx"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Yong" fullname="L. Yong"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2012" month="November"/> | ||||
| <abstract> | ||||
| <t>Load balancing is a powerful tool for engineering traffic acros | ||||
| s a network. This memo suggests ways of improving load balancing across MPLS ne | ||||
| tworks using the concept of "entropy labels". It defines the concept, describes | ||||
| why entropy labels are useful, enumerates properties of entropy labels that all | ||||
| ow maximal benefit, and shows how they can be signaled and used for various appl | ||||
| ications. This document updates RFCs 3031, 3107, 3209, and 5036. [STANDARDS-TR | ||||
| ACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6790"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6790"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 119" quoteTitle="true" derivedAnchor="RFC2119"> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
| le> | ||||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="March"/> | ||||
| <abstract> | ||||
| <t>In many standards track documents several words are used to sig | ||||
| nify the requirements in the specification. These words are often capitalized. | ||||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. This document specifies an Internet Best Current Practices for the Internet | ||||
| Community, and requests discussion and suggestions for improvements.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="2119"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2017" month="May"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8402" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 402" quoteTitle="true" derivedAnchor="RFC8402"> | ||||
| <front> | ||||
| <title>Segment Routing Architecture</title> | ||||
| <author initials="C." surname="Filsfils" fullname="C. Filsfils" role | ||||
| ="editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Previdi" fullname="S. Previdi" role=" | ||||
| editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Ginsberg" fullname="L. Ginsberg"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="B." surname="Decraene" fullname="B. Decraene"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Litkowski" fullname="S. Litkowski"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Shakir" fullname="R. Shakir"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="July"/> | ||||
| <abstract> | ||||
| <t>Segment Routing (SR) leverages the source routing paradigm. A | ||||
| node steers a packet through an ordered list of instructions, called "segments". | ||||
| A segment can represent any instruction, topological or service based. A segm | ||||
| ent can have a semantic local to an SR node or global within an SR domain. SR p | ||||
| rovides a mechanism that allows a flow to be restricted to a specific topologica | ||||
| l path, while maintaining per-flow state only at the ingress node(s) to the SR d | ||||
| omain.</t> | ||||
| <t>SR can be directly applied to the MPLS architecture with no cha | ||||
| nge to the forwarding plane. A segment is encoded as an MPLS label. An ordered | ||||
| list of segments is encoded as a stack of labels. The segment to process is on | ||||
| the top of the stack. Upon completion of a segment, the related label is poppe | ||||
| d from the stack.</t> | ||||
| <t>SR can be applied to the IPv6 architecture, with a new type of | ||||
| routing header. A segment is encoded as an IPv6 address. An ordered list of se | ||||
| gments is encoded as an ordered list of IPv6 addresses in the routing header. T | ||||
| he active segment is indicated by the Destination Address (DA) of the packet. T | ||||
| he next active segment is indicated by a pointer in the new routing header.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8402"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8402"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8660" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 660" quoteTitle="true" derivedAnchor="RFC8660"> | ||||
| <front> | ||||
| <title>Segment Routing with the MPLS Data Plane</title> | ||||
| <author initials="A" surname="Bashandy" fullname="Ahmed Bashandy" ro | ||||
| le="editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C" surname="Filsfils" fullname="Clarence" role="ed | ||||
| itor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Previdi" fullname="Stefano Previdi"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Litkowski" fullname="Stephane Litkowsk | ||||
| i"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R" surname="Shakir" fullname="Rob Shakir"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="December" year="2019"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8660"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8660"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references pn="section-13.2"> | ||||
| <name slugifiedName="name-informative-references">Informative References | ||||
| </name> | ||||
| <reference anchor="I-D.ietf-isis-mpls-elc" quoteTitle="true" target="htt | ||||
| ps://tools.ietf.org/html/draft-ietf-isis-mpls-elc-10" derivedAnchor="ISIS-ELC"> | ||||
| <front> | ||||
| <title>Signaling Entropy Label Capability and Entropy Readable Label | ||||
| Depth Using IS-IS</title> | ||||
| <author initials="X" surname="Xu" fullname="Xiaohu Xu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Kini" fullname="Sriganesh Kini"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P" surname="Psenak" fullname="Peter Psenak"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
| > | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Litkowski" fullname="Stephane Litkowsk | ||||
| i"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M" surname="Bocci" fullname="Matthew Bocci"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="October" day="21" year="2019"/> | ||||
| <abstract> | ||||
| <t>Multiprotocol Label Switching (MPLS) has defined a mechanism to | ||||
| load- balance traffic flows using Entropy Labels (EL). An ingress Label Switch | ||||
| ing Router (LSR) cannot insert ELs for packets going into a given Label Switched | ||||
| Path (LSP) unless an egress LSR has indicated via signaling that it has the cap | ||||
| ability to process ELs, referred to as Entropy Label Capability (ELC), on that t | ||||
| unnel. In addition, it would be useful for ingress LSRs to know each LSR's capa | ||||
| bility for reading the maximum label stack depth and performing EL-based load- b | ||||
| alancing, referred to as Entropy Readable Label Depth (ERLD). This document def | ||||
| ines a mechanism to signal these two capabilities using IS-IS. These mechanisms | ||||
| are particularly useful, where label advertisements are done via protocols like | ||||
| IS-IS.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-isis-mpls-elc-10"/ | ||||
| > | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-i | ||||
| etf-isis-mpls-elc-10.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="I-D.ietf-ospf-mpls-elc" quoteTitle="true" target="htt | ||||
| ps://tools.ietf.org/html/draft-ietf-ospf-mpls-elc-12" derivedAnchor="OSPF-ELC"> | ||||
| <front> | ||||
| <title>Signaling Entropy Label Capability and Entropy Readable Label | ||||
| -stack Depth Using OSPF</title> | ||||
| <author initials="X" surname="Xu" fullname="Xiaohu Xu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Kini" fullname="Sriganesh Kini"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P" surname="Psenak" fullname="Peter Psenak"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
| > | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Litkowski" fullname="Stephane Litkowsk | ||||
| i"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M" surname="Bocci" fullname="Matthew Bocci"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="October" day="25" year="2019"/> | ||||
| <abstract> | ||||
| <t>Multiprotocol Label Switching (MPLS) has defined a mechanism to | ||||
| load- balance traffic flows using Entropy Labels (EL). An ingress Label Switch | ||||
| ing Router (LSR) cannot insert ELs for packets going into a given tunnel unless | ||||
| an egress LSR has indicated via signaling that it has the capability to process | ||||
| ELs, referred to as Entropy Label Capability (ELC), on that tunnel. In addition | ||||
| , it would be useful for ingress LSRs to know each LSR's capability of reading t | ||||
| he maximum label stack depth and performing EL-based load-balancing, referred to | ||||
| as Entropy Readable Label Depth (ERLD). This document defines a mechanism to s | ||||
| ignal these two capabilities using OSPF and OSPFv3. These mechanism is particula | ||||
| rly useful in the environment where Segment Routing (SR) is used, where label ad | ||||
| vertisements are done via protocols like OSPF and OSPFv3.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-ospf-mpls-elc-12"/ | ||||
| > | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-i | ||||
| etf-ospf-mpls-elc-12.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="RFC8668" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 668" quoteTitle="true" derivedAnchor="RFC8668"> | ||||
| <front> | ||||
| <title>Advertising Layer 2 Bundle Member Link Attributes in IS-IS</t | ||||
| itle> | ||||
| <author initials="L" surname="Ginsberg" fullname="Les Ginsberg"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A" surname="Bashandy" fullname="Ahmed Bashandy"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
| > | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M" surname="Nanduri" fullname="Mohan Nanduri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="E" surname="Aries" fullname="Ebben Aries"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="December" year="2019"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8668"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8668"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7855" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 855" quoteTitle="true" derivedAnchor="RFC7855"> | ||||
| <front> | ||||
| <title>Source Packet Routing in Networking (SPRING) Problem Statemen | ||||
| t and Requirements</title> | ||||
| <author initials="S." surname="Previdi" fullname="S. Previdi" role=" | ||||
| editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C." surname="Filsfils" fullname="C. Filsfils" role | ||||
| ="editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="B." surname="Decraene" fullname="B. Decraene"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Litkowski" fullname="S. Litkowski"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Horneffer" fullname="M. Horneffer"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Shakir" fullname="R. Shakir"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2016" month="May"/> | ||||
| <abstract> | ||||
| <t>The ability for a node to specify a forwarding path, other than | ||||
| the normal shortest path, that a particular packet will traverse, benefits a nu | ||||
| mber of network functions. Source-based routing mechanisms have previously been | ||||
| specified for network protocols but have not seen widespread adoption. In this | ||||
| context, the term "source" means "the point at which the explicit route is impo | ||||
| sed"; therefore, it is not limited to the originator of the packet (i.e., the no | ||||
| de imposing the explicit route may be the ingress node of an operator's network) | ||||
| .</t> | ||||
| <t>This document outlines various use cases, with their requiremen | ||||
| ts, that need to be taken into account by the Source Packet Routing in Networkin | ||||
| g (SPRING) architecture for unicast traffic. Multicast use cases and requiremen | ||||
| ts are out of scope for this document.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7855"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7855"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8476" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 476" quoteTitle="true" derivedAnchor="RFC8476"> | ||||
| <front> | ||||
| <title>Signaling Maximum SID Depth (MSD) Using OSPF</title> | ||||
| <author initials="J." surname="Tantsura" fullname="J. Tantsura"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="U." surname="Chunduri" fullname="U. Chunduri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Aldrin" fullname="S. Aldrin"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Psenak" fullname="P. Psenak"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="December"/> | ||||
| <abstract> | ||||
| <t>This document defines a way for an Open Shortest Path First (OS | ||||
| PF) router to advertise multiple types of supported Maximum SID Depths (MSDs) at | ||||
| node and/or link granularity. Such advertisements allow entities (e.g., centra | ||||
| lized controllers) to determine whether a particular Segment Identifier (SID) st | ||||
| ack can be supported in a given network. This document only refers to the Signa | ||||
| ling MSD as defined in RFC 8491, but it defines an encoding that can support oth | ||||
| er MSD types. Here, the term "OSPF" means both OSPFv2 and OSPFv3.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8476"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8476"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8491" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 491" quoteTitle="true" derivedAnchor="RFC8491"> | ||||
| <front> | ||||
| <title>Signaling Maximum SID Depth (MSD) Using IS-IS</title> | ||||
| <author initials="J." surname="Tantsura" fullname="J. Tantsura"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="U." surname="Chunduri" fullname="U. Chunduri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Aldrin" fullname="S. Aldrin"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Ginsberg" fullname="L. Ginsberg"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="November"/> | ||||
| <abstract> | ||||
| <t>This document defines a way for an Intermediate System to Inter | ||||
| mediate System (IS-IS) router to advertise multiple types of supported Maximum S | ||||
| ID Depths (MSDs) at node and/or link granularity. Such advertisements allow enti | ||||
| ties (e.g., centralized controllers) to determine whether a particular Segment I | ||||
| D (SID) stack can be supported in a given network. This document only defines o | ||||
| ne type of MSD: Base MPLS Imposition. However, it defines an encoding that can | ||||
| support other MSD types. This document focuses on MSD use in a network that is | ||||
| Segment Routing (SR) enabled, but MSD may also be useful when SR is not enabled. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8491"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8491"/> | ||||
| </reference> | ||||
| <reference anchor="I-D.ietf-idr-bgp-ls-segment-routing-msd" quoteTitle=" | ||||
| true" target="https://tools.ietf.org/html/draft-ietf-idr-bgp-ls-segment-routing- | ||||
| msd-09" derivedAnchor="MSD-BGP"> | ||||
| <front> | ||||
| <title>Signaling MSD (Maximum SID Depth) using Border Gateway Protoc | ||||
| ol Link-State</title> | ||||
| <author initials="J" surname="Tantsura" fullname="Jeff Tantsura"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="U" surname="Chunduri" fullname="Uma Chunduri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="K" surname="Talaulikar" fullname="Ketan Talaulikar | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="G" surname="Mirsky" fullname="Gregory Mirsky"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="N" surname="Triantafillis" fullname="Nikos Trianta | ||||
| fillis"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="October" day="15" year="2019"/> | ||||
| <abstract> | ||||
| <t>This document defines a way for a Border Gateway Protocol Link- | ||||
| State (BGP-LS) speaker to advertise multiple types of supported Maximum SID Dept | ||||
| hs (MSDs) at node and/or link granularity. Such advertisements allow entities ( | ||||
| e.g., centralized controllers) to determine whether a particular Segment Identif | ||||
| ier (SID) stack can be supported in a given network.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-idr-bgp-ls-segment | ||||
| -routing-msd-09"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-i | ||||
| etf-idr-bgp-ls-segment-routing-msd-09.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
| ndix.a"> | ||||
| <name slugifiedName="name-acknowledgements">Acknowledgements</name> | ||||
| <t pn="section-appendix.a-1">The authors would like to thank John Drake, L | ||||
| oa Andersson, Curtis | ||||
| Villamizar, Greg Mirsky, Markus Jork, Kamran Raza, Carlos Pignataro, Bruno De | ||||
| craene, Chris Bowers, Nobo Akiya, Daniele Ceccarelli, and Joe Clarke for | ||||
| their review, comments, and suggestions. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
| ndix.b"> | ||||
| <name slugifiedName="name-contributors">Contributors</name> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-appendix.b-1"> | ||||
| Xiaohu Xu | ||||
| Huawei | ||||
| Email: xuxiaohu@huawei.com | ||||
| </artwork> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-appendix.b-2"> | ||||
| Wim Hendrickx | ||||
| Nokia | ||||
| Email: wim.henderickx@nokia.com | ||||
| </artwork> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-appendix.b-3"> | ||||
| Gunter Van de Velde | ||||
| Nokia | ||||
| Email: gunter.van_de_velde@nokia.com | ||||
| </artwork> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-appendix.b-4"> | ||||
| Acee Lindem | ||||
| Cisco | ||||
| Email: acee@cisco.com | ||||
| </artwork> | ||||
| </section> | ||||
| <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
| ="include" pn="section-appendix.c"> | ||||
| <name slugifiedName="name-authors-addresses">Authors' Addresses</name> | ||||
| <author initials="S" surname="Kini" fullname="Sriganesh Kini"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>sriganeshkini@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="K" surname="Kompella" fullname="Kireeti Kompella"> | ||||
| <organization showOnFrontPage="true">Juniper</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>kireeti@juniper.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="S" surname="Sivabalan" fullname="Siva Sivabalan"> | ||||
| <organization showOnFrontPage="true">Cisco</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>msiva@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="S" surname="Litkowski" fullname="Stephane Litkowski"> | ||||
| <organization showOnFrontPage="true">Orange</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>slitkows.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="R" surname="Shakir" fullname="Rob Shakir"> | ||||
| <organization showOnFrontPage="true">Google</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>robjs@google.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="J" surname="Tantsura" fullname="Jeff Tantsura"> | ||||
| <organization showOnFrontPage="true">Apstra, Inc.</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| <city/> | ||||
| <region/> | ||||
| <code/> | ||||
| <country/> | ||||
| </postal> | ||||
| <email>jefftant.ietf@gmail.com</email> | ||||
| </address> | ||||
| </author> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 89 change blocks. | ||||
| 1046 lines changed or deleted | 1930 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||