rfc8660xml2.original.xml | rfc8660.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?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 RFC8402 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | nsus="true" docName="draft-ietf-spring-segment-routing-mpls-22" indexInclude="tr | |||
C.8402.xml"> | ue" ipr="trust200902" number="8660" prepTime="2019-12-04T22:57:35" scripts="Comm | |||
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | on,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocI | |||
C.2119.xml"> | nclude="true" xml:lang="en"> | |||
<!ENTITY RFC3031 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <link href="https://datatracker.ietf.org/doc/draft-ietf-spring-segment-routing | |||
C.3031.xml"> | -mpls-22" rel="prev"/> | |||
<!ENTITY RFC3032 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <link href="https://dx.doi.org/10.17487/rfc8660" rel="alternate"/> | |||
C.3032.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
<!ENTITY RFC3443 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <front> | |||
C.3443.xml"> | <title>Segment Routing with the MPLS Data Plane</title> | |||
<!ENTITY RFC5462 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <seriesInfo name="RFC" value="8660" stream="IETF"/> | |||
C.5462.xml"> | <author fullname="Ahmed Bashandy" initials="A." role="editor" surname="Basha | |||
<!ENTITY RFC7274 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ndy"> | |||
C.7274.xml"> | <organization showOnFrontPage="true">Arrcus</organization> | |||
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <address> | |||
C.8174.xml"> | <email>abashandy.ietf@gmail.com</email> | |||
<!ENTITY I-D.ietf-isis-segment-routing-extensions SYSTEM "https://xml2rfc.ietf.o | </address> | |||
rg/public/rfc/bibxml3/reference.I-D.draft-ietf-isis-segment-routing-extensions-1 | </author> | |||
3.xml"> | <author fullname="Clarence Filsfils" initials="C." role="editor" surname="Fi | |||
<!ENTITY I-D.ietf-ospf-ospfv3-segment-routing-extensions SYSTEM "https://xml2rfc | lsfils"> | |||
.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-ospf-ospfv3-segment-routin | <organization showOnFrontPage="true">Cisco Systems, Inc.</organization> | |||
g-extensions-09.xml"> | <address> | |||
<!ENTITY I-D.ietf-ospf-segment-routing-extensions SYSTEM "https://xml2rfc.ietf.o | <postal> | |||
rg/public/rfc/bibxml3/reference.I-D.draft-ietf-ospf-segment-routing-extensions-1 | <street>Brussels</street> | |||
6.xml"> | <street>Belgium</street> | |||
<!ENTITY I-D.ietf-spring-segment-routing-ldp-interop SYSTEM "https://xml2rfc.iet | </postal> | |||
f.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-segment-routing-ldp-int | <email>cfilsfil@cisco.com</email> | |||
erop-08.xml"> | </address> | |||
<!ENTITY I-D.bashandy-rtgwg-segment-routing-ti-lfa SYSTEM "https://xml2rfc.ietf. | </author> | |||
org/public/rfc/bibxml3/reference.I-D.bashandy-rtgwg-segment-routing-ti-lfa.xml"> | <author fullname="Stefano Previdi" initials="S." surname="Previdi"> | |||
<!ENTITY RFC7855 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <organization showOnFrontPage="true">Cisco Systems, Inc.</organization> | |||
C.7855.xml"> | <address> | |||
<!ENTITY RFC5036 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <postal> | |||
C.5036.xml"> | <street>Italy</street> | |||
<!ENTITY RFC5331 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | </postal> | |||
C.5331.xml"> | <email>stefano@previdi.net</email> | |||
<!ENTITY RFC7510 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | </address> | |||
C.7510.xml"> | </author> | |||
<!ENTITY RFC4817 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <author fullname="Bruno Decraene" initials="B." surname="Decraene"> | |||
C.4817.xml"> | <organization showOnFrontPage="true">Orange</organization> | |||
<!ENTITY RFC8287 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <address> | |||
C.8287.xml"> | <postal> | |||
<!ENTITY RFC8403 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | <street>France</street> | |||
C.8403.xml"> | </postal> | |||
<!ENTITY I-D.ietf-spring-segment-routing-policy SYSTEM "https://xml2rfc.ietf.org | <email>bruno.decraene@orange.com</email> | |||
/public/rfc/bibxml3/reference.I-D.ietf-spring-segment-routing-policy.xml"> | </address> | |||
]> | </author> | |||
<rfc submissionType="IETF" docName="draft-ietf-spring-segment-routing-mpls-22" c | <author fullname="Stephane Litkowski" initials="S." surname="Litkowski"> | |||
ategory="std"> | <organization showOnFrontPage="true">Orange</organization> | |||
<!-- Generated by id2xml 1.4.4 on 2019-06-12T17:23:43Z --> | <address> | |||
<?rfc compact="yes"?> | <postal> | |||
<?rfc text-list-symbols="o-*+-"?> | <street>France</street> | |||
<?rfc subcompact="no"?> | </postal> | |||
<?rfc sortrefs="no"?> | <email>slitkows.ietf@gmail.com</email> | |||
<?rfc symrefs="yes"?> | </address> | |||
<?rfc strict="yes"?> | </author> | |||
<?rfc toc="yes"?> | <author fullname="Rob Shakir" initials="R." surname="Shakir"> | |||
<front> | <organization showOnFrontPage="true">Google</organization> | |||
<title>Segment Routing with MPLS data plane</title> | <address> | |||
<author fullname="Ahmed Bashandy" initials="A." role="editor" surname="Ba | <postal> | |||
shandy"> | <street>United States of America</street> | |||
<organization>Arrcus</organization> | </postal> | |||
<address><email>abashandy.ietf@gmail.com</email> | <email>robjs@google.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="12" year="2019"/> | ||||
<author fullname="Clarence Filsfils" initials="C." role="editor" surname= | <abstract pn="section-abstract"> | |||
"Filsfils"> | <t pn="section-abstract-1"> | |||
<organization>Cisco Systems, Inc.</organization> | Segment Routing (SR) leverages the source-routing paradigm. A node | |||
<address><postal><street>Brussels</street> | ||||
<street>BE</street> | ||||
</postal> | ||||
<email>cfilsfil@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Stefano Previdi" initials="S." surname="Previdi"> | ||||
<organization>Cisco Systems, Inc.</organization> | ||||
<address><postal><street>Italy</street> | ||||
</postal> | ||||
<email>stefano@previdi.net</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Bruno Decraene" initials="B." surname="Decraene"> | ||||
<organization>Orange</organization> | ||||
<address><postal><street>FR</street> | ||||
</postal> | ||||
<email>bruno.decraene@orange.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Stephane Litkowski" initials="S." surname="Litkowski"> | ||||
<organization>Orange</organization> | ||||
<address><postal><street>FR</street> | ||||
</postal> | ||||
<email>stephane.litkowski@orange.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Rob Shakir" initials="R." surname="Shakir"> | ||||
<organization>Google</organization> | ||||
<address><postal><street>US</street> | ||||
</postal> | ||||
<email>robjs@google.com</email> | ||||
</address> | ||||
</author> | ||||
<date day="1" month="May" year="2019"/> | ||||
<abstract><t> | ||||
Segment Routing (SR) leverages the source routing paradigm. A node | ||||
steers a packet through a controlled set of instructions, called | steers a packet through a controlled set of instructions, called | |||
segments, by prepending the packet with an SR header. In the MPLS | segments, by prepending the packet with an SR header. In the MPLS | |||
dataplane, the SR header is instantiated through a label stack. This | data plane, the SR header is instantiated through a label stack. This | |||
document specifies the forwarding behavior to allow instantiating SR | document specifies the forwarding behavior to allow instantiating SR | |||
over the MPLS dataplane.</t> | over the MPLS data plane (SR-MPLS).</t> | |||
</abstract> | ||||
</abstract> | <boilerplate> | |||
</front> | <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | |||
"exclude" pn="section-boilerplate.1"> | ||||
<middle> | <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | |||
<section title="Introduction" anchor="section-1"><t> | > | |||
The Segment Routing architecture RFC8402 can be directly applied to | <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/rfc8660" 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-mpls-instantiation-of-seg | ||||
me">MPLS Instantiation of Segment Routing</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.2.2"> | ||||
<li pn="section-toc.1-1.2.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derive | ||||
dContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-multiple-forw | ||||
arding-behavio">Multiple Forwarding Behaviors for the Same Prefix</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.2.1"><xref derive | ||||
dContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-sid-represent | ||||
ation-in-the-m">SID Representation in the MPLS Forwarding Plane</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.3.1"><xref derive | ||||
dContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-segment-routi | ||||
ng-global-bloc">Segment Routing Global Block and Local Block</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.4"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.4.1"><xref derive | ||||
dContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-mapping-a-sid | ||||
-index-to-an-m">Mapping a SID Index to an MPLS Label</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.5"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.5.1"><xref derive | ||||
dContent="2.5" format="counter" sectionFormat="of" target="section-2.5"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-incoming-labe | ||||
l-collision">Incoming Label Collision</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.2.2.5.2"> | ||||
<li pn="section-toc.1-1.2.2.5.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.5.2.1.1"><xre | ||||
f derivedContent="2.5.1" format="counter" sectionFormat="of" target="section-2.5 | ||||
.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-t | ||||
iebreaking-rules">Tiebreaking Rules</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.5.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.5.2.2.1"><xre | ||||
f derivedContent="2.5.2" format="counter" sectionFormat="of" target="section-2.5 | ||||
.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-r | ||||
edistribution-between-rout">Redistribution between Routing Protocol Instances</x | ||||
ref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.6"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.6.1"><xref derive | ||||
dContent="2.6" format="counter" sectionFormat="of" target="section-2.6"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-effect-of-inc | ||||
oming-label-co">Effect of Incoming Label Collision on Outgoing Label Programming | ||||
</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.7"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.7.1"><xref derive | ||||
dContent="2.7" format="counter" sectionFormat="of" target="section-2.7"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-push-continue | ||||
-and-next">PUSH, CONTINUE, and NEXT</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.2.2.7.2"> | ||||
<li pn="section-toc.1-1.2.2.7.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.7.2.1.1"><xre | ||||
f derivedContent="2.7.1" format="counter" sectionFormat="of" target="section-2.7 | ||||
.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-p | ||||
ush">PUSH</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.7.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.7.2.2.1"><xre | ||||
f derivedContent="2.7.2" format="counter" sectionFormat="of" target="section-2.7 | ||||
.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-c | ||||
ontinue">CONTINUE</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.7.2.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.7.2.3.1"><xre | ||||
f derivedContent="2.7.3" format="counter" sectionFormat="of" target="section-2.7 | ||||
.3"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-n | ||||
ext">NEXT</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.8"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.8.1"><xref derive | ||||
dContent="2.8" format="counter" sectionFormat="of" target="section-2.8"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-mpls-label-do | ||||
wnloaded-to-th">MPLS Label Downloaded to the FIB for Global and Local SIDs</xref | ||||
></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.9"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.9.1"><xref derive | ||||
dContent="2.9" format="counter" sectionFormat="of" target="section-2.9"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-active-segmen | ||||
t">Active Segment</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.10"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.10.1"><xref deriv | ||||
edContent="2.10" format="counter" sectionFormat="of" target="section-2.10"/>. <x | ||||
ref derivedContent="" format="title" sectionFormat="of" target="name-forwarding- | ||||
behavior-for-glo">Forwarding Behavior for Global SIDs</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.2.2.10.2"> | ||||
<li pn="section-toc.1-1.2.2.10.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.10.2.1.1"><xr | ||||
ef derivedContent="2.10.1" format="counter" sectionFormat="of" target="section-2 | ||||
.10.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-forwarding-for-push-and-con">Forwarding for PUSH and CONTINUE of Global SIDs</ | ||||
xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.10.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.10.2.2.1"><xr | ||||
ef derivedContent="2.10.2" format="counter" sectionFormat="of" target="section-2 | ||||
.10.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-forwarding-for-the-next-ope">Forwarding for the NEXT Operation for Global SIDs | ||||
</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.11"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.11.1"><xref deriv | ||||
edContent="2.11" format="counter" sectionFormat="of" target="section-2.11"/>. <x | ||||
ref derivedContent="" format="title" sectionFormat="of" target="name-forwarding- | ||||
behavior-for-loc">Forwarding Behavior for Local SIDs</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.2.2.11.2"> | ||||
<li pn="section-toc.1-1.2.2.11.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.11.2.1.1"><xr | ||||
ef derivedContent="2.11.1" format="counter" sectionFormat="of" target="section-2 | ||||
.11.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-forwarding-for-the-push-ope">Forwarding for the PUSH Operation on Local SIDs</ | ||||
xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.11.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.11.2.2.1"><xr | ||||
ef derivedContent="2.11.2" format="counter" sectionFormat="of" target="section-2 | ||||
.11.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-forwarding-for-the-continue">Forwarding for the CONTINUE Operation for Local S | ||||
IDs</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2.2.11.2.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.2.2.11.2.3.1"><xr | ||||
ef derivedContent="2.11.3" format="counter" sectionFormat="of" target="section-2 | ||||
.11.3"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-outgoing-label-for-the-next">Outgoing Label for the NEXT Operation for Local S | ||||
IDs</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</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-iana-considerations">IANA | ||||
Considerations</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-manageability-considerati | ||||
on">Manageability Considerations</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-security-considerations"> | ||||
Security Considerations</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-references">References</x | ||||
ref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.6.2"> | ||||
<li pn="section-toc.1-1.6.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.6.2.1.1"><xref derive | ||||
dContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-normative-ref | ||||
erences">Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.6.2.2.1"><xref derive | ||||
dContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-informative-r | ||||
eferences">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent | ||||
="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>. | ||||
<xref derivedContent="" format="title" sectionFormat="of" target="name-example | ||||
s">Examples</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="A.1" format="counter" sectionFormat="of" target="section-a.1"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-igp-segment-e | ||||
xamples">IGP Segment Examples</xref></t> | ||||
</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="A.2" format="counter" sectionFormat="of" target="section-a.2"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-incoming-labe | ||||
l-collision-ex">Incoming Label Collision Examples</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="A.2.1" format="counter" sectionFormat="of" target="section-a.2 | ||||
.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-1">Example 1</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="A.2.2" format="counter" sectionFormat="of" target="section-a.2 | ||||
.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-2">Example 2</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="A.2.3" format="counter" sectionFormat="of" target="section-a.2 | ||||
.3"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-3">Example 3</xref></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="A.2.4" format="counter" sectionFormat="of" target="section-a.2 | ||||
.4"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-4">Example 4</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="A.2.5" format="counter" sectionFormat="of" target="section-a.2 | ||||
.5"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-5">Example 5</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.6"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.6.1"><xre | ||||
f derivedContent="A.2.6" format="counter" sectionFormat="of" target="section-a.2 | ||||
.6"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-6">Example 6</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.7"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.7.1"><xre | ||||
f derivedContent="A.2.7" format="counter" sectionFormat="of" target="section-a.2 | ||||
.7"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-7">Example 7</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.8"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.8.1"><xre | ||||
f derivedContent="A.2.8" format="counter" sectionFormat="of" target="section-a.2 | ||||
.8"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-8">Example 8</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.9"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.9.1"><xre | ||||
f derivedContent="A.2.9" format="counter" sectionFormat="of" target="section-a.2 | ||||
.9"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-9">Example 9</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.10"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.10.1"><xr | ||||
ef derivedContent="A.2.10" format="counter" sectionFormat="of" target="section-a | ||||
.2.10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name | ||||
-example-10">Example 10</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.11"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.11.1"><xr | ||||
ef derivedContent="A.2.11" format="counter" sectionFormat="of" target="section-a | ||||
.2.11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name | ||||
-example-11">Example 11</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.12"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.12.1"><xr | ||||
ef derivedContent="A.2.12" format="counter" sectionFormat="of" target="section-a | ||||
.2.12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name | ||||
-example-12">Example 12</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.13"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.13.1"><xr | ||||
ef derivedContent="A.2.13" format="counter" sectionFormat="of" target="section-a | ||||
.2.13"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name | ||||
-example-13">Example 13</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2.2.14"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.2.2.14.1"><xr | ||||
ef derivedContent="A.2.14" format="counter" sectionFormat="of" target="section-a | ||||
.2.14"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name | ||||
-example-14">Example 14</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.3"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.3.1"><xref derive | ||||
dContent="A.3" format="counter" sectionFormat="of" target="section-a.3"/>. <xre | ||||
f derivedContent="" format="title" sectionFormat="of" target="name-examples-for- | ||||
the-effect-of-">Examples for the Effect of Incoming Label Collision on an Outgoi | ||||
ng Label</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.7.2.3.2"> | ||||
<li pn="section-toc.1-1.7.2.3.2.1"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.3.2.1.1"><xre | ||||
f derivedContent="A.3.1" format="counter" sectionFormat="of" target="section-a.3 | ||||
.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-1-2">Example 1</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.3.2.2"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.7.2.3.2.2.1"><xre | ||||
f derivedContent="A.3.2" format="counter" sectionFormat="of" target="section-a.3 | ||||
.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-e | ||||
xample-2-2">Example 2</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 | ||||
="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedC | ||||
ontent="" format="title" sectionFormat="of" target="name-acknowledgements">Ackno | ||||
wledgements</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent | ||||
="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedC | ||||
ontent="" format="title" sectionFormat="of" target="name-contributors">Contribut | ||||
ors</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.10"> | ||||
<t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedConten | ||||
t="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-authors-addresses">Aut | ||||
hors' Addresses</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | ||||
<middle> | ||||
<section anchor="convert-section-1" numbered="true" toc="include" removeInRF | ||||
C="false" pn="section-1"> | ||||
<name slugifiedName="name-introduction">Introduction</name> | ||||
<t pn="section-1-1"> | ||||
The Segment Routing architecture <xref target="RFC8402" format="default" sect | ||||
ionFormat="of" derivedContent="RFC8402"/> can be directly applied to | ||||
the MPLS architecture with no change in the MPLS forwarding plane. | the MPLS architecture with no change in the MPLS forwarding plane. | |||
This document specifies the forwarding plane behavior to allow | This document specifies forwarding-plane behavior to allow | |||
Segment Routing to operate on top of the MPLS data plane. This | Segment Routing to operate on top of the MPLS data plane (SR-MPLS). This | |||
document does not address the control plane behavior. Control plane | document does not address control-plane behavior. Control-plane | |||
behavior is specified in other documents such as <xref target="I-D.ietf-isis- | behavior is specified in other documents such as <xref target="RFC8665" forma | |||
segment-routing-extensions"/>, <xref target="I-D.ietf-ospf-segment-routing-exten | t="default" sectionFormat="of" derivedContent="RFC8665"/>, <xref target="RFC8666 | |||
sions"/>, and <xref target="I-D.ietf-ospf-ospfv3-segment-routing-extensions"/>.< | " format="default" sectionFormat="of" derivedContent="RFC8666"/>, and <xref targ | |||
/t> | et="RFC8667" format="default" sectionFormat="of" derivedContent="RFC8667"/>.</t> | |||
<t pn="section-1-2"> | ||||
<t> | The Segment Routing problem statement is described in <xref target="RFC7855" | |||
The Segment Routing problem statement is described in <xref target="RFC7855"/ | format="default" sectionFormat="of" derivedContent="RFC7855"/>.</t> | |||
>.</t> | <t pn="section-1-3"> | |||
Coexistence of SR over the MPLS forwarding plane with LDP <xref target="RFC50 | ||||
<t> | 36" format="default" sectionFormat="of" derivedContent="RFC5036"/> is | |||
Co-existence of SR over MPLS forwarding plane with LDP <xref target="RFC5036" | specified in <xref target="RFC8661" format="default" sectionFormat="of" deriv | |||
/> is | edContent="RFC8661"/>.</t> | |||
specified in <xref target="I-D.ietf-spring-segment-routing-ldp-interop"/>.</t | <t pn="section-1-4"> | |||
> | Policy routing and traffic engineering using Segment Routing can be | |||
found in <xref target="ROUTING-POLICY" format="default" sectionFormat="of" de | ||||
<t> | rivedContent="ROUTING-POLICY"/>.</t> | |||
Policy routing and traffic engineering using segment routing can be | <section anchor="convert-section-1.1" numbered="true" toc="include" remove | |||
found in <xref target="I-D.ietf-spring-segment-routing-policy"/></t> | InRFC="false" pn="section-1.1"> | |||
<name slugifiedName="name-requirements-language">Requirements Language</ | ||||
<section title="Requirements Language" anchor="section-1.1"><t> | name> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t pn="section-1.1-1"> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>R | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | EQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SH | |||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, the | OULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp1 | |||
y appear in all | 4>NOT RECOMMENDED</bcp14>", | |||
capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
</section> | described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="o | |||
f" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFor | ||||
</section> | mat="of" derivedContent="RFC8174"/> | |||
when, and only when, they appear in all capitals, as shown here.</t> | ||||
<section title="MPLS Instantiation of Segment Routing" anchor="section-2" | </section> | |||
><t> | </section> | |||
<section anchor="convert-section-2" numbered="true" toc="include" removeInRF | ||||
C="false" pn="section-2"> | ||||
<name slugifiedName="name-mpls-instantiation-of-segme">MPLS Instantiation | ||||
of Segment Routing</name> | ||||
<t pn="section-2-1"> | ||||
MPLS instantiation of Segment Routing fits in the MPLS architecture | MPLS instantiation of Segment Routing fits in the MPLS architecture | |||
as defined in <xref target="RFC3031"/> both from a control plane and forwardi | as defined in <xref target="RFC3031" format="default" sectionFormat="of" deri | |||
ng | vedContent="RFC3031"/> from both a control-plane and forwarding-plane | |||
plane perspective:</t> | perspective:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2-2"> | ||||
<t><list style="symbols"><t>From a control plane perspective, <xref targe | <li pn="section-2-2.1">From a control-plane perspective, <xref target="R | |||
t="RFC3031"/> does not mandate a | FC3031" format="default" sectionFormat="of" derivedContent="RFC3031"/> does not | |||
mandate a | ||||
single signaling protocol. Segment Routing makes use of various | single signaling protocol. Segment Routing makes use of various | |||
control plane protocols such as link state IGPs <xref target="I-D.ietf-isi | control-plane protocols such as link-state IGPs <xref target="RFC8665" for | |||
s-segment-routing-extensions"/>, <xref target="I-D.ietf-ospf-segment-routing-ext | mat="default" sectionFormat="of" derivedContent="RFC8665"/> <xref target="RFC866 | |||
ensions"/> and <xref target="I-D.ietf-ospf-ospfv3-segment-routing-extensions"/>. | 6" format="default" sectionFormat="of" derivedContent="RFC8666"/> <xref target=" | |||
The flooding mechanisms of link state IGPs fit very well with | RFC8667" format="default" sectionFormat="of" derivedContent="RFC8667"/>. | |||
label stacking on ingress. Future control layer protocol and/or | The flooding mechanisms of link-state IGPs fit very well with | |||
policy/configuration can be used to specify the label stack.</t> | label stacking on the ingress. A future control-layer protocol and/or | |||
policy/configuration can be used to specify the label stack.</li> | ||||
<t>From a forwarding plane perspective, Segment Routing does not | <li pn="section-2-2.2">From a forwarding-plane perspective, Segment Rout | |||
ing does not | ||||
require any change to the forwarding plane because Segment IDs | require any change to the forwarding plane because Segment IDs | |||
(SIDs) are instantiated as MPLS labels and the Segment routing | (SIDs) are instantiated as MPLS labels, and the Segment Routing | |||
header instantiated as a stack of MPLS labels.</t> | header is instantiated as a stack of MPLS labels.</li> | |||
</ul> | ||||
</list> | <t pn="section-2-3"> | |||
</t> | We call the "MPLS Control Plane Client (MCC)" any control-plane entity | |||
<t> | ||||
We call "MPLS Control Plane Client (MCC)" any control plane entity | ||||
installing forwarding entries in the MPLS data plane. Local | installing forwarding entries in the MPLS data plane. Local | |||
configuration and policies applied on a router are examples of MCCs.</t> | configuration and policies applied on a router are examples of MCCs.</t> | |||
<t pn="section-2-4"> | ||||
<t> | ||||
In order to have a node segment reach the node, a network operator | In order to have a node segment reach the node, a network operator | |||
SHOULD configure at least one node segment per routing instance, | <bcp14>SHOULD</bcp14> configure at least one node segment per routing instanc e, | |||
topology, or algorithm. Otherwise, the node is not reachable within | topology, or algorithm. Otherwise, the node is not reachable within | |||
the routing instance, topology or along the routing algorithm, which | the routing instance, within the topology, | |||
restrict its ability to be used by a SR policy, including for TI-LFA.</t> | or along the routing algorithm, which restricts | |||
its ability to be used by an SR Policy and as a | ||||
<section title="Multiple Forwarding Behaviors for the Same Prefix" anchor | Topology Independent Loop-Free Alternate (TI-LFA).</t> | |||
="section-2.1"><t> | <section anchor="convert-section-2.1" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-2.1"> | ||||
<name slugifiedName="name-multiple-forwarding-behavio">Multiple Forwardi | ||||
ng Behaviors for the Same Prefix</name> | ||||
<t pn="section-2.1-1"> | ||||
The SR architecture does not prohibit having more than one SID for | The SR architecture does not prohibit having more than one SID for | |||
the same prefix. In fact, by allowing multiple SIDs for the same | the same prefix. In fact, by allowing multiple SIDs for the same | |||
prefix, it is possible to have different forwarding behaviors (such | prefix, it is possible to have different forwarding behaviors (such | |||
as different paths, different ECMP/UCMP behaviors,...,etc) for the | as different paths, different ECMP and Unequal-Cost Multipath (UCMP) behavior s, etc.) for the | |||
same destination.</t> | same destination.</t> | |||
<t pn="section-2.1-2"> | ||||
<t> | Instantiating Segment Routing over the MPLS forwarding plane fits | |||
Instantiating Segment routing over the MPLS forwarding plane fits | ||||
seamlessly with this principle. An operator may assign multiple MPLS | seamlessly with this principle. An operator may assign multiple MPLS | |||
labels or indices to the same prefix and assign different forwarding | labels or indices to the same prefix and assign different forwarding | |||
behaviors to each label/SID. The MCC in the network downloads | behaviors to each label/SID. The MCC in the network downloads | |||
different MPLS labels/SIDs to the FIB for different forwarding | different MPLS labels/SIDs to the FIB for different forwarding | |||
behaviors. The MCC at the entry of an SR domain or at any point in | behaviors. The MCC at the entry of an SR domain or at any point in | |||
the domain can choose to apply a particular forwarding behavior to a | the domain can choose to apply a particular forwarding behavior to a | |||
particular packet by applying the PUSH action to that packet using | particular packet by applying the PUSH action to that packet using | |||
the corresponding SID.</t> | the corresponding SID.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-2.2" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-2.2"> | ||||
<section title="SID Representation in the MPLS Forwarding Plane" anchor=" | <name slugifiedName="name-sid-representation-in-the-m">SID Representatio | |||
section-2.2"><t> | n in the MPLS Forwarding Plane</name> | |||
<t pn="section-2.2-1"> | ||||
When instantiating SR over the MPLS forwarding plane, a SID is | When instantiating SR over the MPLS forwarding plane, a SID is | |||
represented by an MPLS label or an index <xref target="RFC8402"/>.</t> | represented by an MPLS label or an index <xref target="RFC8402" format="defau | |||
lt" sectionFormat="of" derivedContent="RFC8402"/>.</t> | ||||
<t> | <t pn="section-2.2-2"> | |||
A global segment is a label, or an index which may be mapped to an | A global SID is a label, or an index that may be mapped to an | |||
MPLS label within the Segment Routing Global Block (SRGB) of the node | MPLS label within the Segment Routing Global Block (SRGB), of the node | |||
installing the global segment in its FIB/receiving the labeled | that installs a global SID in its FIB and receives the labeled | |||
packet. <xref target="section-2.4"/> specifies the procedure to map a global | packet. <xref target="convert-section-2.4" format="default" sectionFormat="of | |||
segment | " derivedContent="Section 2.4"/> specifies the procedure to map a global segment | |||
represented by an index to an MPLS label within the SRGB.</t> | represented by an index to an MPLS label within the SRGB.</t> | |||
<t pn="section-2.2-3"> | ||||
<t> | The MCC <bcp14>MUST</bcp14> ensure that any label value corresponding to any | |||
The MCC MUST ensure that any label value corresponding to any SID it | SID it | |||
installs in the forwarding plane follows the following rules:</t> | installs in the forwarding plane follows the rules below:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.2-4"> | ||||
<t><list style="symbols"><t>The label value MUST be unique within the rou | <li pn="section-2.2-4.1">The label value <bcp14>MUST</bcp14> be unique | |||
ter on which the MCC | within the router on which the MCC | |||
is running. i.e. the label MUST only be used to represent the SID | is running, i.e., the label <bcp14>MUST</bcp14> only be used to represent | |||
and MUST NOT be used to represent more than one SID or for any | the SID | |||
other forwarding purpose on the router.</t> | and <bcp14>MUST NOT</bcp14> be used to represent more than one SID or for | |||
any | ||||
<t>The label value MUST NOT come from the range of special purpose | other forwarding purpose on the router.</li> | |||
labels <xref target="RFC7274"/>.</t> | <li pn="section-2.2-4.2">The label value <bcp14>MUST NOT</bcp14> come | |||
from the range of special-purpose | ||||
</list> | labels <xref target="RFC7274" format="default" sectionFormat="of" derivedC | |||
</t> | ontent="RFC7274"/>.</li> | |||
</ul> | ||||
<t> | <t pn="section-2.2-5"> | |||
Labels allocated in this document are considered per platform down- | Labels allocated in this document are considered per-platform downstream | |||
stream allocated labels <xref target="RFC3031"/>.</t> | allocated labels <xref target="RFC3031" format="default" sectionFormat="of" d | |||
erivedContent="RFC3031"/>.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.3" numbered="true" toc="include" remove | ||||
<section title="Segment Routing Global Block and Local Block" anchor="sec | InRFC="false" pn="section-2.3"> | |||
tion-2.3"><t> | <name slugifiedName="name-segment-routing-global-bloc">Segment Routing G | |||
The concepts of Segment Routing Global Block (SRGB) and global SID | lobal Block and Local Block</name> | |||
are explained in <xref target="RFC8402"/>. In general, the SRGB need not be a | <t pn="section-2.3-1"> | |||
The concepts of SRGB and global SID | ||||
are explained in <xref target="RFC8402" format="default" sectionFormat="of" d | ||||
erivedContent="RFC8402"/>. In general, the SRGB need not be a | ||||
contiguous range of labels.</t> | contiguous range of labels.</t> | |||
<t pn="section-2.3-2"> | ||||
<figure><artwork><![CDATA[ | ||||
For the rest of this document, the SRGB is specified by the list of | For the rest of this document, the SRGB is specified by the list of | |||
MPLS Label ranges [Ll(1),Lh(1)], [Ll(2),Lh(2)],..., [Ll(k),Lh(k)] | MPLS label ranges [Ll(1),Lh(1)], [Ll(2),Lh(2)],..., [Ll(k),Lh(k)] | |||
where Ll(i) =< Lh(i). | where Ll(i) =< Lh(i). | |||
]]></artwork> | </t> | |||
</figure> | <t pn="section-2.3-3"> | |||
<t> | ||||
The following rules apply to the list of MPLS ranges representing the | The following rules apply to the list of MPLS ranges representing the | |||
SRGB</t> | SRGB:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.3-4"> | ||||
<t><list style="symbols"><t>The list of ranges comprising the SRGB MUST N | <li pn="section-2.3-4.1">The list of ranges comprising the SRGB <bcp14 | |||
OT overlap.</t> | >MUST NOT</bcp14> overlap.</li> | |||
<li pn="section-2.3-4.2">Every range in the list of ranges specifying | ||||
<t>Every range in the list of ranges specifying the SRGB MUST NOT | the SRGB <bcp14>MUST NOT</bcp14> | |||
cover or overlap with a reserved label value or range <xref target="RFC727 | cover or overlap with a reserved label value or range <xref target="RFC727 | |||
4"/>, | 4" format="default" sectionFormat="of" derivedContent="RFC7274"/>, | |||
respectively.</t> | respectively.</li> | |||
<li pn="section-2.3-4.3">If the SRGB of a node does not conform to the | ||||
<t>If the SRGB of a node does not conform to the structure specified | structure specified | |||
in this section or to the previous two rules, then this SRGB MUST | in this section or to the previous two rules, the SRGB <bcp14>MUST</bcp14> | |||
be completely ignored by all routers in the routing domain and the | be completely ignored by all routers in the routing domain, and the | |||
node MUST be treated as if it does not have an SRGB.</t> | node <bcp14>MUST</bcp14> be treated as if it does not have an SRGB.</li> | |||
<li pn="section-2.3-4.4">The list of label ranges <bcp14>MUST</bcp14> | ||||
<t>The list of label ranges MUST only be used to instantiate global | only be used to instantiate global | |||
SIDs into the MPLS forwarding plane</t> | SIDs into the MPLS forwarding plane.</li> | |||
</ul> | ||||
</list> | <t pn="section-2.3-5"> | |||
</t> | A local segment <bcp14>MAY</bcp14> be allocated from the Segment Routing Loca | |||
l Block | ||||
<t> | (SRLB) <xref target="RFC8402" format="default" sectionFormat="of" derivedCont | |||
A Local segment MAY be allocated from the Segment Routing Local Block | ent="RFC8402"/> or from any unused label as long as it does not use | |||
(SRLB) <xref target="RFC8402"/> or from any unused label as long as it does n | a special-purpose label. The SRLB consists of the range of local | |||
ot use | ||||
a special purpose label. The SRLB consists of the range of local | ||||
labels reserved by the node for certain local segments. In a | labels reserved by the node for certain local segments. In a | |||
controller-driven network, some controllers or applications MAY use | controller-driven network, some controllers or applications <bcp14>MAY</bcp14 | |||
the control plane to discover the available set of local SIDs on a | > use | |||
particular router <xref target="I-D.ietf-spring-segment-routing-policy"/>. Th | the control plane to discover the available set of Local SIDs on a | |||
e rules | particular router <xref target="ROUTING-POLICY" format="default" sectionForma | |||
t="of" derivedContent="ROUTING-POLICY"/>. The rules | ||||
applicable to the SRGB are also applicable to the SRLB, except the | applicable to the SRGB are also applicable to the SRLB, except the | |||
rule that says that the SRGB MUST only be used to instantiate global | SRGB <bcp14>MUST</bcp14> only be used to instantiate global | |||
SIDs into the MPLS forwarding plane. The recommended, minimum, or | SIDs into the MPLS forwarding plane. The recommended, minimum, or | |||
maximum size of the SRGB and/or SRLB is a matter of future study</t> | maximum size of the SRGB and/or SRLB is a matter of future study.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-2.4" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-2.4"> | ||||
<section title="Mapping a SID Index to an MPLS label" anchor="section-2.4 | <name slugifiedName="name-mapping-a-sid-index-to-an-m">Mapping a SID Ind | |||
"><t> | ex to an MPLS Label</name> | |||
This sub-section specifies how the MPLS label value is calculated | <t pn="section-2.4-1"> | |||
This subsection specifies how the MPLS label value is calculated | ||||
given the index of a SID. The value of the index is determined by an | given the index of a SID. The value of the index is determined by an | |||
MCC such as IS-IS <xref target="I-D.ietf-isis-segment-routing-extensions"/> o | MCC such as IS-IS <xref target="RFC8667" format="default" sectionFormat="of" | |||
r OSPF | derivedContent="RFC8667"/> or OSPF | |||
<xref target="I-D.ietf-ospf-segment-routing-extensions"/>. This section only | <xref target="RFC8665" format="default" sectionFormat="of" derivedContent="RF | |||
C8665"/>. This section only | ||||
specifies how to map the index to an MPLS label. The calculated MPLS | specifies how to map the index to an MPLS label. The calculated MPLS | |||
label is downloaded to the FIB, sent out with a forwarded packet, or | label is downloaded to the FIB, sent out with a forwarded packet, or | |||
both.</t> | both.</t> | |||
<t pn="section-2.4-2"> | ||||
<t> | ||||
Consider a SID represented by the index "I". Consider an SRGB as | Consider a SID represented by the index "I". Consider an SRGB as | |||
specified in <xref target="section-2.3"/>. The total size of the SRGB, repres ented by | specified in <xref target="convert-section-2.3" format="default" sectionForma t="of" derivedContent="Section 2.3"/>. The total size of the SRGB, represented b y | |||
the variable "Size", is calculated according to the formula:</t> | the variable "Size", is calculated according to the formula:</t> | |||
<artwork name="" type="" align="left" alt="" pn="section-2.4-3"> | ||||
size = Lh(1)- Ll(1) + 1 + Lh(2)- Ll(2) + 1 + ... + Lh(k)- Ll(k) + 1</artwork> | ||||
<t pn="section-2.4-4"> The following rules <bcp14>MUST</bcp14> be applie | ||||
d by the MCC when calculating the | ||||
MPLS label value corresponding to the SID index value "I".</t> | ||||
<ul spacing="normal" empty="true" bare="false" pn="section-2.4-5"> | ||||
<li pn="section-2.4-5.1">0 =< I < size. If index "I" does not sa | ||||
tisfy the previous inequality, then the label cannot be calculated.</li> | ||||
<li pn="section-2.4-5.2"> | ||||
<t pn="section-2.4-5.2.1">The label value corresponding to the SID i | ||||
ndex "I" is calculated | ||||
as follows: | ||||
<figure><artwork><![CDATA[ | </t> | |||
size = Lh(1)- Ll(1) + 1 + Lh(2)- Ll(2) + 1 + ... + Lh(k)- Ll(k) + 1 | <ul spacing="normal" empty="true" bare="false" pn="section-2.4-5.2.2 | |||
]]></artwork> | "> | |||
</figure> | <li pn="section-2.4-5.2.2.1">j = 1 , temp = 0</li> | |||
<t> | <li pn="section-2.4-5.2.2.2"> | |||
The following rules MUST be applied by the MCC when calculating the | <t pn="section-2.4-5.2.2.2.1">While temp + Lh(j)- Ll(j) < I | |||
MPLS label value corresponding the SID index value "I".</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>0 =< I < size. If the index "I" does not satisfy the previous ineq | ||||
uality, then the label cannot be calculated.</t> | ||||
<t>The label value corresponding to the SID index "I" is calculated | ||||
as follows | ||||
<list style="symbols"> | ||||
<t>j = 1 , temp = 0</t> | ||||
<t>While temp + Lh(j)- Ll(j) < I | ||||
<list style="symbols"> | ||||
<t>temp = temp + Lh(j)- Ll(j) + 1</t> | ||||
<t>j = j+1</t> | ||||
</list></t> | ||||
<t>label = I - temp + Ll(j)</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | </t> | |||
<ul spacing="normal" empty="true" bare="false" pn="section-2.4-5 | ||||
.2.2.2.2"> | ||||
<li pn="section-2.4-5.2.2.2.2.1">temp = temp + Lh(j)- Ll(j) + | ||||
1</li> | ||||
<li pn="section-2.4-5.2.2.2.2.2">j = j+1</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-2.4-5.2.2.3">label = I - temp + Ll(j)</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t pn="section-2.4-6"> | ||||
An example for how a router calculates labels and forwards traffic | An example for how a router calculates labels and forwards traffic | |||
based on the procedure described in this section can be found in | based on the procedure described in this section can be found in | |||
Appendix A.1.</t> | <xref target="convert-section-a.1" format="default" sectionFormat="of" derive | |||
dContent="Appendix A.1"/>.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.5" numbered="true" toc="include" remove | ||||
<section title="Incoming Label Collision" anchor="section-2.5"><t> | InRFC="false" pn="section-2.5"> | |||
The MPLS Architecture <xref target="RFC3031"/> defines the term Forwarding | <name slugifiedName="name-incoming-label-collision">Incoming Label Colli | |||
Equivalence Class (FEC) as the set of packets with similar and / or | sion</name> | |||
identical characteristics which are forwarded the same way and are | <t pn="section-2.5-1"> | |||
bound to the same MPLS incoming (local) label. In Segment-Routing | The MPLS Architecture <xref target="RFC3031" format="default" sectionFormat=" | |||
MPLS, a local label serves as the SID for given FEC.</t> | of" derivedContent="RFC3031"/> defines the term Forwarding | |||
Equivalence Class (FEC) as the set of packets with similar and/or | ||||
<t> | identical characteristics that are forwarded the same way and are | |||
We define Segment Routing (SR) FEC as one of the following <xref target="RFC8 | bound to the same MPLS incoming (local) label. In Segment Routing | |||
402"/>:</t> | MPLS, a local label serves as the SID for a given FEC.</t> | |||
<t pn="section-2.5-2"> | ||||
<t><list style="symbols"><t>(Prefix, Routing Instance, Topology, Algorith | We define SR FEC <xref target="RFC8402" format="default" sectionFormat="of" d | |||
m <xref target="RFC8402"/>), where a | erivedContent="RFC8402"/> as one of the following:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5-3"> | ||||
<li pn="section-2.5-3.1">(Prefix, Routing Instance, Topology, Algorith | ||||
m) <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RF | ||||
C8402"/>, where a | ||||
topology identifies a set of links with metrics. For the purpose | topology identifies a set of links with metrics. For the purpose | |||
of incoming label collision resolution, the same Topology | of incoming label collision resolution, the same Topology | |||
numerical value SHOULD be used on all routers to identify the same | numerical value <bcp14>SHOULD</bcp14> be used on all routers to identify t he same | |||
set of links with metrics. For MCCs where the "Topology" and/or | set of links with metrics. For MCCs where the "Topology" and/or | |||
"Algorithm" fields are not defined, the numerical value of zero | "Algorithm" fields are not defined, the numerical value of zero | |||
MUST be used for these two fields. For the purpose of incoming | <bcp14>MUST</bcp14> be used for these two fields. For the purpose of incom ing | |||
label collision resolution, a routing instance is identified by a | label collision resolution, a routing instance is identified by a | |||
single incoming label downloader to FIB. Two MCCs running on the | single incoming label downloader to the FIB. Two MCCs running on the | |||
same router are considered different routing instances if the only | same router are considered different routing instances if the only | |||
way the two instances can know about the other's incoming labels | way the two instances know about each other's incoming labels | |||
is through redistribution. The numerical value used to identify a | is through redistribution. The numerical value used to identify a | |||
routing instance MAY be derived from other configuration or MAY be | routing instance <bcp14>MAY</bcp14> be derived from other configuration or <bcp14>MAY</bcp14> be | |||
explicitly configured. If it is derived from other configuration, | explicitly configured. If it is derived from other configuration, | |||
then the same numerical value SHOULD be derived from the same | then the same numerical value <bcp14>SHOULD</bcp14> be derived from the sa me | |||
configuration as long as the configuration survives router reload. | configuration as long as the configuration survives router reload. | |||
If the derived numerical value varies for the same configuration, | If the derived numerical value varies for the same configuration, | |||
then an implementation SHOULD make numerical value used to | then an implementation <bcp14>SHOULD</bcp14> make the numerical value used | |||
identify a routing instance configurable.</t> | to | |||
identify a routing instance configurable.</li> | ||||
<t>(next-hop, outgoing interface), where the outgoing interface is | <li pn="section-2.5-3.2">(next hop, outgoing interface), where the out | |||
physical or virtual.</t> | going interface is | |||
physical or virtual.</li> | ||||
<t>(number of adjacencies, list of next-hops, list of outgoing | <li pn="section-2.5-3.3">(number of adjacencies, list of next hops, li | |||
st of outgoing | ||||
interfaces IDs in ascending numerical order). This FEC represents | interfaces IDs in ascending numerical order). This FEC represents | |||
parallel adjacencies <xref target="RFC8402"/></t> | parallel adjacencies <xref target="RFC8402" format="default" sectionFormat | |||
="of" derivedContent="RFC8402"/>.</li> | ||||
<t>(Endpoint, Color) representing an SR policy <xref target="RFC8402"/></ | <li pn="section-2.5-3.4">(Endpoint, Color). This FEC represents an SR | |||
t> | Policy <xref target="RFC8402" format="default" sectionFormat="of" derivedContent | |||
="RFC8402"/>.</li> | ||||
<t>(Mirrored SID) The Mirrored SID [RFC8402, Section 5.1] is the IP | <li pn="section-2.5-3.5">(Mirror SID). The Mirror SID (see <xref targe | |||
address advertised by the advertising node to identify the mirror- | t="RFC8402" sectionFormat="comma" section="5.1" format="default" derivedLink="ht | |||
SID. The IP address is encoded as specified in <xref target="section-2.5.1 | tps://rfc-editor.org/rfc/rfc8402#section-5.1" derivedContent="RFC8402"/>) is the | |||
"/>.</t> | IP | |||
address advertised by the advertising node to identify the Mirror SID. | ||||
</list> | The IP address is encoded as specified in <xref target="convert-section-2. | |||
</t> | 5.1" format="default" sectionFormat="of" derivedContent="Section 2.5.1"/>.</li> | |||
</ul> | ||||
<t> | <t pn="section-2.5-4"> | |||
This section covers the RECOMMENDED procedure to handle the scenario | This section covers the <bcp14>RECOMMENDED</bcp14> procedure for handling the | |||
scenario | ||||
where, because of an error/misconfiguration, more than one SR FEC as | where, because of an error/misconfiguration, more than one SR FEC as | |||
defined in this section, map to the same incoming MPLS label. | defined in this section maps to the same incoming MPLS label. | |||
Examples illustrating the behavior specified in this section can be | Examples illustrating the behavior specified in this section can be | |||
found in Appendix A.2.</t> | found in <xref target="convert-section-a.2" format="default" sectionFormat="o | |||
f" derivedContent="Appendix A.2"/>.</t> | ||||
<t pn="section-2.5-5"> | ||||
<t> | ||||
An incoming label collision occurs if the SIDs of the set of FECs | An incoming label collision occurs if the SIDs of the set of FECs | |||
{FEC1, FEC2,..., FECk} map to the same incoming SR MPLS label "L1".</t> | {FEC1, FEC2, ..., FECk} map to the same incoming SR MPLS label "L1".</t> | |||
<t pn="section-2.5-6"> | ||||
<t> | Suppose an anycast prefix is advertised with a Prefix-SID by some, | |||
Suppose an anycast prefix is advertised with a prefix-SID by some, | but not all, of the nodes that advertise that prefix. If the Prefix-SID | |||
but not all, of the nodes that advertise that prefix. If the prefix- | sub-TLVs result in mapping that anycast prefix to the same | |||
SID sub-TLVs result in mapping that anycast prefix to the same | incoming label, then the advertisement of the Prefix-SID by some, but | |||
incoming label, then the advertisement of the prefix-SID by some, but | not all, of the advertising nodes <bcp14>MUST NOT</bcp14> be treated as a lab | |||
not all, of advertising nodes MUST NOT be treated as a label | el | |||
collision.</t> | collision.</t> | |||
<t pn="section-2.5-7"> | ||||
<t> | An implementation <bcp14>MUST NOT</bcp14> allow the MCCs belonging to the sam | |||
An implementation MUST NOT allow the MCCs belonging to the same | e | |||
router to assign the same incoming label to more than one SR FEC.</t> | router to assign the same incoming label to more than one SR FEC.</t> | |||
<t pn="section-2.5-8"> | ||||
<t> | ||||
The objective of the following steps is to deterministically install | The objective of the following steps is to deterministically install | |||
in the MPLS Incoming Label Map, also known as label FIB, a single FEC | in the MPLS Incoming Label Map, also known as label FIB, a single FEC | |||
with the incoming label "L1". By "deterministically install" we mean | with the incoming label "L1". By "deterministically install", we mean | |||
if the set of FECs {FEC1, FEC2,..., FECk} map to the same incoming SR | if the set of FECs {FEC1, FEC2,..., FECk} map to the same incoming SR | |||
MPLS label "L1", then the steps below assign the same FEC to the | MPLS label "L1", then the steps below assign the same FEC to the | |||
label "L1" irrespective of the order by which the mappings of this | label "L1" irrespective of the order by which the mappings of this | |||
set of FECs to the label "L1" are received. For example, a first- | set of FECs to the label "L1" are received. For example, first- | |||
come-first-serve tie-breaking is not allowed. The remaining FECs may | come, first-served tiebreaking is not allowed. The remaining FECs may | |||
be installed in the IP FIB without incoming label.</t> | be installed in the IP FIB without an incoming label.</t> | |||
<t pn="section-2.5-9"> | ||||
<t> | ||||
The procedure in this section relies completely on the local FEC and | The procedure in this section relies completely on the local FEC and | |||
label database within a given router.</t> | label database within a given router.</t> | |||
<t pn="section-2.5-10"> | ||||
<t> | The collision resolution procedure is as follows:</t> | |||
The collision resolution procedure is as follows</t> | <ol spacing="normal" type="1" start="1" pn="section-2.5-11"> | |||
<li pn="section-2.5-11.1" derivedCounter="1.">Given the SIDs of the se | ||||
<t><list style="numbers"><t>Given the SIDs of the set of FECs, {FEC1, FEC | t of FECs, {FEC1, FEC2,..., FECk} map to | |||
2,..., FECk} map to | the same MPLS label "L1".</li> | |||
the same MPLS label "L1".</t> | <li pn="section-2.5-11.2" derivedCounter="2."> | |||
<t pn="section-2.5-11.2.1">Within an MCC, apply tiebreaking rules to | ||||
<t>Within an MCC, apply tie-breaking rules to select one FEC only and | select one FEC only, and | |||
assign the label to it. The losing FECs are handled as if no | assign the label to it. The losing FECs are handled as if no | |||
labels are attached to them. The losing FECs with algorithms other | labels are attached to them. The losing FECs with algorithms other | |||
than the shortest path first <xref target="RFC8402"/> are not installed in | than the shortest path first <xref target="RFC8402" format="default" secti | |||
the | onFormat="of" derivedContent="RFC8402"/> are not installed in the | |||
FIB.<list style="letters"><t>If the same set of FECs are attached to the s | FIB. | |||
ame label "L1", | </t> | |||
then the tie-breaking rules MUST always select the same FEC | <ol spacing="normal" type="a" start="1" pn="section-2.5-11.2.2"> | |||
<li pn="section-2.5-11.2.2.1" derivedCounter="a."> If the same set | ||||
of FECs are attached to the same label "L1", | ||||
then the tiebreaking rules <bcp14>MUST</bcp14> always select the same | ||||
FEC | ||||
irrespective of the order in which the FECs and the label "L1" | irrespective of the order in which the FECs and the label "L1" | |||
are received. In other words, the tie-breaking rule MUST be | are received. In other words, the tiebreaking rule <bcp14>MUST</bcp14> | |||
deterministic.</t> | be | |||
deterministic.</li> | ||||
</list> | </ol> | |||
</t> | </li> | |||
<li pn="section-2.5-11.3" derivedCounter="3.">If there is still collis | ||||
<t>If there is still collision between the FECs belonging to | ion between the FECs belonging to | |||
different MCCs, then re-apply the tie-breaking rules to the | different MCCs, then reapply the tiebreaking rules to the | |||
remaining FECs to select one FEC only and assign the label to that | remaining FECs to select one FEC only, and assign the label to that | |||
FEC</t> | FEC.</li> | |||
<li pn="section-2.5-11.4" derivedCounter="4.">Install the selected FEC | ||||
<t>Install into the IP FIB the selected FEC and its incoming label in | into the IP FIB and its incoming label into | |||
the label FIB.</t> | the label FIB.</li> | |||
<li pn="section-2.5-11.5" derivedCounter="5.">The remaining FECs with | ||||
<t>The remaining FECs with the default algorithm (see the | the default algorithm (see the | |||
specification of prefix-SID algorithm <xref target="RFC8402"/>) may be ins | Prefix-SID algorithm specification <xref target="RFC8402" format="default" | |||
talled | sectionFormat="of" derivedContent="RFC8402"/>) may be installed | |||
in the FIB natively, such as pure IP entries in case of Prefix | in the FIB natively, such as pure IP entries in case of Prefix | |||
FEC, without any incoming labels corresponding to their SIDs. The | FEC, without any incoming labels corresponding to their SIDs. The | |||
remaining FECs with algorithms other than the shortest path first | remaining FECs with algorithms other than the shortest path first | |||
<xref target="RFC8402"/> are not installed in the FIB.</t> | <xref target="RFC8402" format="default" sectionFormat="of" derivedContent= | |||
"RFC8402"/> are not installed in the FIB.</li> | ||||
</list> | </ol> | |||
</t> | <section anchor="convert-section-2.5.1" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-2.5.1"> | ||||
<section title="Tie-breaking Rules" anchor="section-2.5.1"> | <name slugifiedName="name-tiebreaking-rules">Tiebreaking Rules</name> | |||
<t> | <t pn="section-2.5.1-1"> | |||
The default tie-breaking rules are specified as follows:</t> | The default tiebreaking rules are specified as follows:</t> | |||
<ol spacing="normal" type="1" start="1" pn="section-2.5.1-2"> | ||||
<t><list style="numbers"><t>if FECi has the lowest FEC administrative dis | <li pn="section-2.5.1-2.1" derivedCounter="1.">Determine the lowest | |||
tance among the | administrative distance among the competing FECs as defined in the section below | |||
competing FECs as defined in this section below, filter away all | . Then filter away all the competing FECs with a higher administrative distance. | |||
the competing FECs with higher administrative distance.</t> | </li> | |||
<li pn="section-2.5.1-2.2" derivedCounter="2.">If more than one comp | ||||
<t>if more than one competing FEC remains after step 1, select the | eting FEC remains after step 1, select the | |||
smallest numerical FEC value. The numerical value of the FEC is | smallest numerical FEC value. The numerical value of the FEC is | |||
determined according to the FEC encoding described later in this | determined according to the FEC encoding described later in this | |||
section.</t> | section.</li> | |||
</ol> | ||||
</list> | <t pn="section-2.5.1-3"> | |||
</t> | These rules deterministically select which FEC to install in the MPLS | |||
<t> | ||||
These rules deterministically select the FEC to install in the MPLS | ||||
forwarding plane for the given incoming label.</t> | forwarding plane for the given incoming label.</t> | |||
<t pn="section-2.5.1-4"> | ||||
<t> | This document defines the default tiebreaking rules that <bcp14>SHOULD</bcp14 | |||
This document defines the default tie breaking rules that SHOULD be | > be | |||
implemented. An implementation MAY choose to support different tie- | implemented. An implementation <bcp14>MAY</bcp14> choose to support different | |||
breaking rules and MAY use one of the these instead of the default | tiebreaking | |||
tie-breaking rules. To maximize MPLS forwarding consistency in case | rules and <bcp14>MAY</bcp14> use one of these instead of the default | |||
of SID configuration error, the network operator MUST deploy, within | tiebreaking rules. To maximize MPLS forwarding consistency in case | |||
an IGP flooding area, routers implementing the same tie-breaking | of a SID configuration error, the network operator <bcp14>MUST</bcp14> deploy | |||
, within | ||||
an IGP flooding area, routers implementing the same tiebreaking | ||||
rules.</t> | rules.</t> | |||
<t pn="section-2.5.1-5"> | ||||
<t> | ||||
Each FEC is assigned an administrative distance. The FEC | Each FEC is assigned an administrative distance. The FEC | |||
administrative distance is encoded as an 8-bit value. The lower the | administrative distance is encoded as an 8-bit value. The lower the | |||
value, the better the administrative distance.</t> | value, the better the administrative distance.</t> | |||
<t pn="section-2.5.1-6"> | ||||
<t> | ||||
The default FEC administrative distance order starting from the | The default FEC administrative distance order starting from the | |||
lowest value SHOULD be:</t> | lowest value <bcp14>SHOULD</bcp14> be:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5.1-7"> | ||||
<t><list style="symbols"><t>Explicit SID assignment to a FEC that maps to | <li pn="section-2.5.1-7.1"> | |||
a label outside the | <t pn="section-2.5.1-7.1.1">Explicit SID assignment to a FEC that | |||
maps to a label outside the | ||||
SRGB irrespective of the owner MCC. An explicit SID assignment is | SRGB irrespective of the owner MCC. An explicit SID assignment is | |||
a static assignment of a label to a FEC such that the assignment | a static assignment of a label to a FEC such that the assignment | |||
survives router reboot.<list style="symbols"><t>An example of explicit SID | survives a router reboot.</t> | |||
allocation is static assignment of | <ul spacing="normal" bare="false" empty="false" pn="section-2.5.1- | |||
a specific label to an adj-SID.</t> | 7.1.2"> | |||
<li pn="section-2.5.1-7.1.2.1">An example of explicit SID alloca | ||||
<t>An implementation of explicit SID assignment MUST guarantee | tion is static assignment of | |||
collision freeness on the same router</t> | a specific label to an Adj-SID.</li> | |||
<li pn="section-2.5.1-7.1.2.2">An implementation of explicit SID | ||||
</list> | assignment <bcp14>MUST</bcp14> guarantee | |||
</t> | collision freeness on the same router.</li> | |||
</ul> | ||||
<t>Dynamic SID assignment:<list style="symbols"><t>For all FEC types exce | </li> | |||
pt for SR policy, the FEC types are | <li pn="section-2.5.1-7.2"> | |||
ordered using the default administrative distance ordering | <t pn="section-2.5.1-7.2.1">Dynamic SID assignment:</t> | |||
defined by the implementation.</t> | <ul spacing="normal" bare="false" empty="false" pn="section-2.5.1- | |||
7.2.2"> | ||||
<t>Binding SID <xref target="RFC8402"/> assigned to SR Policy always has | <li pn="section-2.5.1-7.2.2.1">All FEC types, except for the SR | |||
a | Policy, are | |||
ordered using the default administrative distance | ||||
defined by the implementation.</li> | ||||
<li pn="section-2.5.1-7.2.2.2">The Binding SID <xref target="RFC | ||||
8402" format="default" sectionFormat="of" derivedContent="RFC8402"/> assigned to | ||||
the SR Policy always has a | ||||
higher default administrative distance than the default | higher default administrative distance than the default | |||
administrative distance of any other FEC type</t> | administrative distance of any other FEC type.</li> | |||
</ul> | ||||
</list> | </li> | |||
</t> | </ul> | |||
<t pn="section-2.5.1-8"> | ||||
</list> | To maximize MPLS forwarding consistency, if the same FEC is advertised | |||
</t> | in more than one protocol, a user <bcp14>MUST</bcp14> ensure that the adminis | |||
trative | ||||
<t> | ||||
To maximize MPLS forwarding consistency, If a same FEC is advertised | ||||
in more than one protocol, a user MUST ensure that the administrative | ||||
distance preference between protocols is the same on all routers of | distance preference between protocols is the same on all routers of | |||
the IGP flooding domain. Note that this is not really new as this | the IGP flooding domain. Note that this is not really new as this | |||
already applies to IP forwarding.</t> | already applies to IP forwarding.</t> | |||
<t pn="section-2.5.1-9"> | ||||
The numerical sort across FECs <bcp14>SHOULD</bcp14> be performed as follows: | ||||
<t> | </t> | |||
The numerical sort across FECs SHOULD be performed as follows: | <ul spacing="normal" bare="false" empty="false" pn="section-2.5.1-10"> | |||
<li pn="section-2.5.1-10.1"> | ||||
<list style="symbols"> | <t pn="section-2.5.1-10.1.1">Each FEC is assigned a FEC type encod | |||
ed in 8 bits. The type codepoints | ||||
<t>Each FEC is assigned a FEC type encoded in 8 bits. The following | for each SR FEC defined at the beginning | |||
are the type code point for each SR FEC defined at the beginning | of this section are as follows: | |||
of this Section: | </t> | |||
<list style="empty"> | <ul empty="true" bare="false" spacing="normal" pn="section-2.5.1-1 | |||
0.1.2"> | ||||
<t>120: (Prefix, Routing Instance, Topology, Algorithm)</t> | <li pn="section-2.5.1-10.1.2.1"> | |||
<dl newline="false" spacing="normal" pn="section-2.5.1-10.1.2. | ||||
<t>130: (next-hop, outgoing interface)</t> | 1.1"> | |||
<dt pn="section-2.5.1-10.1.2.1.1.1">120:</dt> | ||||
<t>140: Parallel Adjacency <xref target="RFC8402"/></t> | <dd pn="section-2.5.1-10.1.2.1.1.2">(Prefix, Routing Instanc | |||
e, Topology, Algorithm)</dd> | ||||
<t>150: an SR policy <xref target="RFC8402"/>.</t> | <dt pn="section-2.5.1-10.1.2.1.1.3">130:</dt> | |||
<dd pn="section-2.5.1-10.1.2.1.1.4"> (next hop, outgoing int | ||||
<t>160: Mirror SID <xref target="RFC8402"/></t> | erface)</dd> | |||
<dt pn="section-2.5.1-10.1.2.1.1.5">140:</dt> | ||||
<t>The numerical values above are mentioned to guide | <dd pn="section-2.5.1-10.1.2.1.1.6"> Parallel Adjacency <xre | |||
f target="RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/ | ||||
></dd> | ||||
<dt pn="section-2.5.1-10.1.2.1.1.7">150:</dt> | ||||
<dd pn="section-2.5.1-10.1.2.1.1.8">SR Policy <xref target=" | ||||
RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/></dd> | ||||
<dt pn="section-2.5.1-10.1.2.1.1.9">160:</dt> | ||||
<dd pn="section-2.5.1-10.1.2.1.1.10"> Mirror SID <xref targe | ||||
t="RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/></dd> | ||||
</dl> | ||||
</li> | ||||
</ul> | ||||
<t pn="section-2.5.1-10.1.3">The numerical values above are mentio | ||||
ned to guide | ||||
implementation. If other numerical values are used, then the | implementation. If other numerical values are used, then the | |||
numerical values must maintain the same greater-than ordering | numerical values must maintain the same greater-than ordering | |||
of the numbers mentioned here.</t> | of the numbers mentioned here.</t> | |||
</li> | ||||
</list></t> | <li pn="section-2.5.1-10.2"> | |||
<t pn="section-2.5.1-10.2.1">The fields of each FEC are encoded as | ||||
<t>The fields of each FEC are encoded as follows | follows: | |||
<list style="symbols"> | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5.1- | ||||
<t>All fields in all FECs are encoded in big endian</t> | 10.2.2"> | |||
<li pn="section-2.5.1-10.2.2.1">All fields in all FECs are encod | ||||
<t>Routing Instance ID represented by 16 bits. For routing | ed in big endian order.</li> | |||
<li pn="section-2.5.1-10.2.2.2">The Routing Instance ID is repre | ||||
sented by 16 bits. For routing | ||||
instances that are identified by less than 16 bits, encode the | instances that are identified by less than 16 bits, encode the | |||
Instance ID in the least significant bits while the most | Instance ID in the least significant bits while the most | |||
significant bits are set to zero</t> | significant bits are set to zero.</li> | |||
<li pn="section-2.5.1-10.2.2.3">The address family is represente | ||||
<t>Address Family represented by 8 bits, where IPv4 encoded as | d by 8 bits, where IPv4 is encoded as | |||
100 and IPv6 is encoded as 110. These numerical values are | 100, and IPv6 is encoded as 110. These numerical values are | |||
mentioned to guide implementations. If other numerical values | mentioned to guide implementations. If other numerical values | |||
are used, then the numerical value of IPv4 MUST be less than | are used, then the numerical value of IPv4 <bcp14>MUST</bcp14> be less | |||
the numerical value for IPv6</t> | than | |||
the numerical value for IPv6.</li> | ||||
<t>All addresses are represented in 128 bits as follows | <li pn="section-2.5.1-10.2.2.4"> | |||
<t pn="section-2.5.1-10.2.2.4.1">All addresses are represented | ||||
<list style="symbols"> | in 128 bits as follows: | |||
<t>IPv6 address is encoded natively</t> | ||||
<t>IPv4 address is encoded in the most significant bits and | ||||
the remaining bits are set to zero</t></list> | ||||
</t> | ||||
<t>All prefixes are represented by (8 + 128) bits. | ||||
<list style="symbols"> | ||||
<t>A prefix is encoded in the most significant bits and the | ||||
remaining bits are set to zero.</t> | ||||
<t>The prefix length is encoded before the prefix in a field | </t> | |||
of size 8 bits.</t></list> | <ul spacing="normal" bare="false" empty="false" pn="section-2. | |||
</t> | 5.1-10.2.2.4.2"> | |||
<li pn="section-2.5.1-10.2.2.4.2.1">The IPv6 address is enco | ||||
ded natively.</li> | ||||
<li pn="section-2.5.1-10.2.2.4.2.2">The IPv4 address is enco | ||||
ded in the most significant bits, and | ||||
the remaining bits are set to zero.</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-2.5.1-10.2.2.5"> | ||||
<t pn="section-2.5.1-10.2.2.5.1">All prefixes are represented | ||||
by (8 + 128) bits. | ||||
<t>Topology ID is represented by 16 bits. For routing instances | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2. | ||||
5.1-10.2.2.5.2"> | ||||
<li pn="section-2.5.1-10.2.2.5.2.1">A prefix is encoded in t | ||||
he most significant bits, and the | ||||
remaining bits are set to zero.</li> | ||||
<li pn="section-2.5.1-10.2.2.5.2.2">The prefix length is enc | ||||
oded before the prefix in an 8-bit field.</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-2.5.1-10.2.2.6">The Topology ID is represented b | ||||
y 16 bits. For routing instances | ||||
that identify topologies using less than 16 bits, encode the | that identify topologies using less than 16 bits, encode the | |||
topology ID in the least significant bits while the most | topology ID in the least significant bits while the most | |||
significant bits are set to zero</t> | significant bits are set to zero.</li> | |||
<li pn="section-2.5.1-10.2.2.7">The Algorithm is encoded in a 16 | ||||
<t>Algorithm is encoded in a 16 bits field.</t> | -bit field.</li> | |||
<li pn="section-2.5.1-10.2.2.8">The Color ID is encoded using 32 | ||||
<t>The Color ID is encoded using 32 bits</t> | bits.</li> | |||
</ul> | ||||
</list> | </li> | |||
</t> | <li pn="section-2.5.1-10.3">Choose the set of FECs of the smallest F | |||
EC type codepoint.</li> | ||||
<t>Choose the set of FECs of the smallest FEC type code point</t> | <li pn="section-2.5.1-10.4">Out of these FECs, choose the FECs with | |||
the smallest address | ||||
<t>Out of these FECs, choose the FECs with the smallest address | family codepoint.</li> | |||
family code point</t> | <li pn="section-2.5.1-10.5"> | |||
<t pn="section-2.5.1-10.5.1">Encode the remaining set of FECs as f | ||||
<t>Encode the remaining set of FECs as follows | ollows: | |||
<list style="symbols"> | </t> | |||
<t>(Prefix, Routing Instance, Topology, Algorithm) is encoded as | <ul spacing="normal" bare="false" empty="false" pn="section-2.5.1- | |||
10.5.2"> | ||||
<li pn="section-2.5.1-10.5.2.1">(Prefix, Routing Instance, Topol | ||||
ogy, Algorithm) is encoded as | ||||
(Prefix Length, Prefix, routing_instance_id, Topology, SR | (Prefix Length, Prefix, routing_instance_id, Topology, SR | |||
Algorithm)</t> | Algorithm).</li> | |||
<li pn="section-2.5.1-10.5.2.2">(next hop, outgoing interface) i | ||||
<t>(next-hop, outgoing interface) is encoded as (next-hop, | s encoded as (next hop, | |||
outgoing_interface_id)</t> | outgoing_interface_id).</li> | |||
<li pn="section-2.5.1-10.5.2.3">(number of adjacencies, list of | ||||
<t>(number of adjacencies, list of next-hops in ascending | next hops in ascending | |||
numerical order, list of outgoing interface IDs in ascending | numerical order, list of outgoing interface IDs in ascending | |||
numerical order). This encoding is used to encode a parallel | numerical order) is used to encode a parallel | |||
adjacency <xref target="RFC8402"/></t> | adjacency <xref target="RFC8402" format="default" sectionFormat="of" de | |||
rivedContent="RFC8402"/>.</li> | ||||
<t>(Endpoint, Color) is encoded as (Endpoint_address, Color_id)</t> | <li pn="section-2.5.1-10.5.2.4">(Endpoint, Color) is encoded as | |||
(Endpoint_address, Color_id).</li> | ||||
<t>(IP address): This is the encoding for a mirror SID FEC. The IP | <li pn="section-2.5.1-10.5.2.5">(IP address) is the encoding for | |||
address is encoded as described above in this section</t> | a Mirror SID FEC. The IP | |||
address is encoded as described above in this section.</li> | ||||
</list> | </ul> | |||
</t> | </li> | |||
<li pn="section-2.5.1-10.6">Select the FEC with the smallest numeric | ||||
<t>Select the FEC with the smallest numerical value</t> | al value.</li> | |||
</ul> | ||||
</list></t> | <t pn="section-2.5.1-11"> | |||
<t> | ||||
The numerical values mentioned in this section are for guidance only. | The numerical values mentioned in this section are for guidance only. | |||
If other numerical values are used then the other numerical values | If other numerical values are used, then the other numerical values | |||
MUST maintain the same numerical ordering among different SR FECs.</t> | <bcp14>MUST</bcp14> maintain the same numerical ordering among different SR F | |||
ECs.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.5.2" numbered="true" toc="include" re | ||||
<section title="Redistribution between Routing Protocol Instances" anchor | moveInRFC="false" pn="section-2.5.2"> | |||
="section-2.5.2"><t> | <name slugifiedName="name-redistribution-between-rout">Redistribution | |||
The following rule SHOULD be applied when redistributing SIDs with | between Routing Protocol Instances</name> | |||
<t pn="section-2.5.2-1"> | ||||
The following rule <bcp14>SHOULD</bcp14> be applied when redistributing SIDs | ||||
with | ||||
prefixes between routing protocol instances:</t> | prefixes between routing protocol instances:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5.2-2"> | ||||
<li pn="section-2.5.2-2.1"> | ||||
<t pn="section-2.5.2-2.1.1">If the SRGB of the receiving instance | ||||
is the same as the SRGB of the origin | ||||
instance, then: | ||||
<t> | </t> | |||
<list style="symbols"> | <ul spacing="normal" bare="false" empty="false" pn="section-2.5.2- | |||
<t>If the receiving instance's SRGB is the same as the SRGB of origin | 2.1.2"> | |||
instance, then | <li pn="section-2.5.2-2.1.2.1">the index is redistributed with t | |||
he route.</li> | ||||
<list style="symbols"> | </ul> | |||
</li> | ||||
<t>the index is redistributed with the route</t> | <li pn="section-2.5.2-2.2"> | |||
<t pn="section-2.5.2-2.2.1">Else, | ||||
</list> | ||||
</t> | ||||
<t>Else | ||||
<list style="symbols"> | ||||
<t>the index is not redistributed and if the receiving instance | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5.2- | ||||
2.2.2"> | ||||
<li pn="section-2.5.2-2.2.2.1">the index is not redistributed an | ||||
d if the receiving instance | ||||
decides to advertise an index with the redistributed route, it | decides to advertise an index with the redistributed route, it | |||
is the duty of the receiving instance to allocate a fresh | is the duty of the receiving instance to allocate a fresh | |||
index relative to its own SRGB. Note that in this case the | index relative to its own SRGB. Note that in this case, the | |||
receiving instance MUST compute the local label it assignes to | receiving instance <bcp14>MUST</bcp14> compute the local label it assig | |||
the route according to section 2.4 and install it in FIB.</t> | ns to | |||
the route according to <xref target="convert-section-2.4" format="defau | ||||
</list> | lt" sectionFormat="of" derivedContent="Section 2.4"/> and install it in FIB.</li | |||
</t> | > | |||
</ul> | ||||
</list> | </li> | |||
</t> | </ul> | |||
<t pn="section-2.5.2-3"> | ||||
<t> | ||||
It is outside the scope of this document to define local node | It is outside the scope of this document to define local node | |||
behaviors that would allow to map the original index into a new index | behaviors that would allow the mapping of the original index into a new index | |||
in the receiving instance via the addition of an offset or other | in the receiving instance via the addition of an offset or other | |||
policy means.</t> | policy means.</t> | |||
<section anchor="convert-section-2.5.2.1" numbered="true" toc="exclude | ||||
<section title="Illustration" anchor="section-2.5.2.1"> | " removeInRFC="false" pn="section-2.5.2.1"> | |||
<name slugifiedName="name-illustration">Illustration</name> | ||||
<figure><artwork><![CDATA[ | <artwork name="" type="" align="left" alt="" pn="section-2.5.2.1-1"> | |||
A----IS-IS----B---OSPF----C-192.0.2.1/32 (20001) | A----IS-IS----B---OSPF----C-192.0.2.1/32 (20001)</artwork> | |||
<t pn="section-2.5.2.1-2">Consider the simple topology above, where: | ||||
]]></artwork> | </t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.5.2.1- | ||||
</figure> | 3"> | |||
<li pn="section-2.5.2.1-3.1">A and B are in the IS-IS domain with | ||||
<t>Consider the simple topology above.</t> | SRGB = [16000-17000]</li> | |||
<li pn="section-2.5.2.1-3.2">B and C are in the OSPF domain with S | ||||
<t> | RGB = [20000-21000]</li> | |||
<list style="symbols"> | <li pn="section-2.5.2.1-3.3">B redistributes 192.0.2.1/32 into the | |||
<t>A and B are in the IS-IS domain with SRGB [16000-17000]</t> | IS-IS domain</li> | |||
</ul> | ||||
<t>B and C are in OSPF domain with SRGB [20000-21000]</t> | <t pn="section-2.5.2.1-4">In this case, A learns 192.0.2.1/32 as an | |||
IP leaf connected to B, which is | ||||
<t>B redistributes 192.0.2.1/32 into IS-IS domain</t> | ||||
<!--[rfced] Should the two points below actually be part of this list? S | ||||
eems kind of different from the first 3 points...--> | ||||
<t>In that case A learns 192.0.2.1/32 as an IP leaf connected to B as | ||||
usual for IP prefix redistribution</t> | usual for IP prefix redistribution</t> | |||
<t pn="section-2.5.2.1-5">However, according to the redistribution r | ||||
<t>However, according to the redistribution rule above rule, B | ule above, B | |||
decides not to advertise any index with 192.0.2.1/32 into IS-IS | decides not to advertise any index with 192.0.2.1/32 into IS-IS | |||
because the SRGB is not the same.</t> | because the SRGB is not the same.</t> | |||
</section> | ||||
</list> | <section anchor="convert-section-2.5.2.2" numbered="true" toc="exclude | |||
</t> | " removeInRFC="false" pn="section-2.5.2.2"> | |||
<name slugifiedName="name-illustration-2">Illustration 2</name> | ||||
</section> | <t pn="section-2.5.2.2-1"> | |||
Consider the example in the illustration described in <xref target="convert-s | ||||
<section title="Illustration 2" anchor="section-2.5.2.2"><t> | ection-2.5.2.1" format="default" sectionFormat="of" derivedContent="Section 2.5. | |||
Consider the example in the illustration described in <xref target="section-2 | 2.1"/>.</t> | |||
.5.2.1"/>.</t> | <t pn="section-2.5.2.2-2"> | |||
<t> | ||||
When router B redistributes the prefix 192.0.2.1/32, router B decides | When router B redistributes the prefix 192.0.2.1/32, router B decides | |||
to allocate and advertise the same index 1 with the prefix | to allocate and advertise the same index 1 with the prefix | |||
192.0.2.1/32</t> | 192.0.2.1/32.</t> | |||
<t pn="section-2.5.2.2-3"> | ||||
<t> | ||||
Within the SRGB of the IS-IS domain, index 1 corresponds to the local | Within the SRGB of the IS-IS domain, index 1 corresponds to the local | |||
label 16001</t> | label 16001. Hence, according to the redistribution rule above, router B | |||
<t><list style="symbols"><t>Hence according to the redistribution rule ab | ||||
ove, router B | ||||
programs the incoming label 16001 in its FIB to match traffic | programs the incoming label 16001 in its FIB to match traffic | |||
arriving from the IS-IS domain destined to the prefix | arriving from the IS-IS domain destined to the prefix | |||
192.0.2.1/32.</t> | 192.0.2.1/32.</t> | |||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="convert-section-2.6" numbered="true" toc="include" remove | ||||
InRFC="false" pn="section-2.6"> | ||||
<name slugifiedName="name-effect-of-incoming-label-co">Effect of Incomin | ||||
g Label Collision on Outgoing Label Programming</name> | ||||
<t pn="section-2.6-1"> | ||||
</list> | When determining what outgoing label to use, the ingress node | |||
</t> | that pushes new segments, and hence a stack of MPLS labels, <bcp14>MUST</bcp1 | |||
4> use, for | ||||
</section> | a given FEC, the label that has been selected by the node | |||
receiving the packet with that label exposed as the top label. So in case | ||||
</section> | ||||
</section> | ||||
<section title="Effect of Incoming Label Collision on Outgoing Label Prog | ||||
ramming" anchor="section-2.6"><t> | ||||
For the determination of the outgoing label to use, the ingress node | ||||
pushing new segments, and hence a stack of MPLS labels, MUST use, for | ||||
a given FEC, the same label that has been selected by the node | ||||
receiving the packet with that label exposed as top label. So in case | ||||
of incoming label collision on this receiving node, the ingress node | of incoming label collision on this receiving node, the ingress node | |||
MUST resolve this collision using this same "Incoming Label Collision resolut | <bcp14>MUST</bcp14> resolve this collision by using this same "Incoming Label | |||
ion procedure", using the data of the receiving node.</t> | Collision resolution procedure" and by using the data of the receiving node.</t | |||
> | ||||
<t> | <t pn="section-2.6-2"> | |||
In the general case, the ingress node may not have exactly the same | In the general case, the ingress node may not have the exact same | |||
data of the receiving node, so the result may be different. This is | data as the receiving node, so the result may be different. This is | |||
under the responsibility of the network operator. But in typical | under the responsibility of the network operator. But in a typical | |||
case, e.g. where a centralized node or a distributed link state IGP | case, e.g., where a centralized node or a distributed link-state IGP | |||
is used, all nodes would have the same database. However to minimize | is used, all nodes would have the same database. However, to minimize | |||
the chance of misforwarding, a FEC that loses its incoming label to | the chance of misforwarding, a FEC that loses its incoming label to | |||
the tie-breaking rules specified in <xref target="section-2.5"/> MUST NOT be | the tiebreaking rules specified in <xref target="convert-section-2.5" format= | |||
installed in FIB with an outgoing segment routing label based on the | "default" sectionFormat="of" derivedContent="Section 2.5"/> <bcp14>MUST NOT</bcp | |||
14> be | ||||
installed in FIB with an outgoing Segment Routing label based on the | ||||
SID corresponding to the lost incoming label.</t> | SID corresponding to the lost incoming label.</t> | |||
<t pn="section-2.6-3"> | ||||
<t> | ||||
Examples for the behavior specified in this section can be found in | Examples for the behavior specified in this section can be found in | |||
Appendix A.3.</t> | <xref target="convert-section-a.3" format="default" sectionFormat="of" derive | |||
dContent="Appendix A.3"/>.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.7" numbered="true" toc="include" remove | ||||
<section title="PUSH, CONTINUE, and NEXT" anchor="section-2.7"><t> | InRFC="false" pn="section-2.7"> | |||
<name slugifiedName="name-push-continue-and-next">PUSH, CONTINUE, and NE | ||||
XT</name> | ||||
<t pn="section-2.7-1"> | ||||
PUSH, NEXT, and CONTINUE are operations applied by the forwarding | PUSH, NEXT, and CONTINUE are operations applied by the forwarding | |||
plane. The specifications of these operations can be found in | plane. The specifications of these operations can be found in | |||
<xref target="RFC8402"/>. This sub-section specifies how to implement each of these | <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RF C8402"/>. This subsection specifies how to implement each of these | |||
operations in the MPLS forwarding plane.</t> | operations in the MPLS forwarding plane.</t> | |||
<section anchor="convert-section-2.7.1" numbered="true" toc="include" re | ||||
<section title="PUSH" anchor="section-2.7.1"><t> | moveInRFC="false" pn="section-2.7.1"> | |||
As described in <xref target="RFC8402"/>, PUSH corresponds to pushing one or | <name slugifiedName="name-push">PUSH</name> | |||
more | <t pn="section-2.7.1-1"> | |||
As described in <xref target="RFC8402" format="default" sectionFormat="of" de | ||||
rivedContent="RFC8402"/>, PUSH corresponds to pushing one or more | ||||
labels on top of an incoming packet then sending it out of a | labels on top of an incoming packet then sending it out of a | |||
particular physical interface or virtual interface, such as UDP | particular physical interface or virtual interface, such as a UDP | |||
tunnel <xref target="RFC7510"/> or L2TPv3 tunnel <xref target="RFC4817"/>, to | tunnel <xref target="RFC7510" format="default" sectionFormat="of" derivedCont | |||
wards a particular | ent="RFC7510"/> or the Layer 2 Tunneling Protocol version 3 (L2TPv3) <xref targe | |||
next-hop. When pushing labels onto a packet's label stack, the Time- | t="RFC4817" format="default" sectionFormat="of" derivedContent="RFC4817"/>, towa | |||
to-Live (TTL) field (<xref target="RFC3032"/>, <xref target="RFC3443"/>) and | rds a particular | |||
the Traffic Class (TC) | next hop. | |||
field (<xref target="RFC3032"/>, <xref target="RFC5462"/>) of each label stac | ||||
k entry must, of | When pushing labels onto a packet's label stack, the Time-to-Live | |||
(TTL) field <xref target="RFC3032" format="default" sectionFormat="of" derive | ||||
dContent="RFC3032"/> <xref target="RFC3443" format="default" sectionFormat="of" | ||||
derivedContent="RFC3443"/> and the Traffic Class (TC) | ||||
field <xref target="RFC3032" format="default" sectionFormat="of" derivedConte | ||||
nt="RFC3032"/> <xref target="RFC5462" format="default" sectionFormat="of" derive | ||||
dContent="RFC5462"/> of each label stack entry must, of | ||||
course, be set. This document does not specify any set of rules for | course, be set. This document does not specify any set of rules for | |||
setting these fields; that is a matter of local policy. Sections | setting these fields; that is a matter of local policy. Sections <xref target | |||
2.10 and 2.11 specify additional details about forwarding | ="convert-section-2.10" format="counter" sectionFormat="of" derivedContent="2.10 | |||
"/> and <xref target="convert-section-2.11" format="counter" sectionFormat="of" | ||||
derivedContent="2.11"/> specify additional details about forwarding | ||||
behavior.</t> | behavior.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-2.7.2" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-2.7.2"> | ||||
<section title="CONTINUE" anchor="section-2.7.2"><t> | <name slugifiedName="name-continue">CONTINUE</name> | |||
As described in <xref target="RFC8402"/>, the CONTINUE operation corresponds | <t pn="section-2.7.2-1"> | |||
to | As described in <xref target="RFC8402" format="default" sectionFormat="of" de | |||
rivedContent="RFC8402"/>, the CONTINUE operation corresponds to | ||||
swapping the incoming label with an outgoing label. The value of the | swapping the incoming label with an outgoing label. The value of the | |||
outgoing label is calculated as specified in Sections 2.10 and 2.11.</t> | outgoing label is calculated as specified in Sections <xref target="convert-s | |||
ection-2.10" format="counter" sectionFormat="of" derivedContent="2.10"/> and <xr | ||||
</section> | ef target="convert-section-2.11" format="counter" sectionFormat="of" derivedCont | |||
ent="2.11"/>.</t> | ||||
<section title="NEXT" anchor="section-2.7.3"><t> | </section> | |||
As described in <xref target="RFC8402"/>, NEXT corresponds to popping the top | <section anchor="convert-section-2.7.3" numbered="true" toc="include" re | |||
most | moveInRFC="false" pn="section-2.7.3"> | |||
<name slugifiedName="name-next">NEXT</name> | ||||
<t pn="section-2.7.3-1"> | ||||
As described in <xref target="RFC8402" format="default" sectionFormat="of" de | ||||
rivedContent="RFC8402"/>, NEXT corresponds to popping the topmost | ||||
label. The action before and/or after the popping depends on the | label. The action before and/or after the popping depends on the | |||
instruction associated with the active SID on the received packet | instruction associated with the active SID on the received packet | |||
prior to the popping. For example suppose the active SID in the | prior to the popping. For example, suppose the active SID in the | |||
received packet was an Adj-SID <xref target="RFC8402"/>, then on receiving th | received packet was an Adj-SID <xref target="RFC8402" format="default" sectio | |||
e | nFormat="of" derivedContent="RFC8402"/>; on receiving the | |||
packet, the node applies NEXT operation, which corresponds to popping | packet, the node applies the NEXT operation, which corresponds to popping | |||
the top most label, and then sends the packet out of the physical or | the topmost label, and then sends the packet out of the physical or | |||
virtual interface (e.g. UDP tunnel <xref target="RFC7510"/> or L2TPv3 tunnel | virtual interface (e.g., the UDP tunnel <xref target="RFC7510" format="defaul | |||
<xref target="RFC4817"/>) towards the next-hop corresponding to the adj-SID.< | t" sectionFormat="of" derivedContent="RFC7510"/> or L2TPv3 tunnel | |||
/t> | <xref target="RFC4817" format="default" sectionFormat="of" derivedContent="RF | |||
C4817"/>) towards the next hop corresponding to the Adj-SID.</t> | ||||
<section title="Mirror SID" anchor="section-2.7.3.1"><t> | <section anchor="convert-section-2.7.3.1" numbered="true" toc="exclude | |||
If the active SID in the received packet was a Mirror SID [RFC8402, Section 5 | " removeInRFC="false" pn="section-2.7.3.1"> | |||
.1] allocated by the receiving router, then the receiving | <name slugifiedName="name-mirror-sid">Mirror SID</name> | |||
router applies NEXT operation, which corresponds to popping the top | <t pn="section-2.7.3.1-1"> | |||
most label, then performs a lookup using the contents of the packet | If the active SID in the received packet was a Mirror SID (see <xref target=" | |||
after popping the outer most label in the mirrored forwarding table. | RFC8402" sectionFormat="comma" section="5.1" format="default" derivedLink="https | |||
://rfc-editor.org/rfc/rfc8402#section-5.1" derivedContent="RFC8402"/>) allocated | ||||
<!--[rfced] Should this all be one big paragraph? Occurs at a page break in | by the receiving router, the receiving | |||
original, so I can't tell. Diff file gives a hit here. --> | router applies the NEXT operation, which corresponds to popping the topmost | |||
label, and then performs a lookup using the contents of the packet | ||||
after popping the outermost label in the mirrored forwarding table. | ||||
The method by which the lookup is made, and/or the actions applied to | The method by which the lookup is made, and/or the actions applied to | |||
the packet after the lookup in the mirror table depends on the | the packet after the lookup in the mirror table, depends on the | |||
contents of the packet and the mirror table. Note that the packet | contents of the packet and the mirror table. Note that the packet | |||
exposed after popping the top most label may or may not be an MPLS | exposed after popping the topmost label may or may not be an MPLS | |||
packet. A mirror SID can be viewed as a generalization of the context | packet. A Mirror SID can be viewed as a generalization of the context | |||
label in <xref target="RFC5331"/> because a mirror SID does not make any | label in <xref target="RFC5331" format="default" sectionFormat="of" derivedCo | |||
ntent="RFC5331"/> because a Mirror SID does not make any | ||||
assumptions about the packet underneath the top label.</t> | assumptions about the packet underneath the top label.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="convert-section-2.8" numbered="true" toc="include" remove | |||
InRFC="false" pn="section-2.8"> | ||||
</section> | <name slugifiedName="name-mpls-label-downloaded-to-th">MPLS Label Downlo | |||
aded to the FIB for Global and Local SIDs</name> | ||||
<section title="MPLS Label Downloaded to FIB for Global and Local SIDs" a | <t pn="section-2.8-1"> | |||
nchor="section-2.8"><t> | The label corresponding to the global SID "Si", which is represented by the | |||
The label corresponding to the global SID "Si" represented by the | global index "I" and downloaded to the FIB, is used to match packets whose | |||
global index "I" downloaded to FIB is used to match packets whose | ||||
active segment (and hence topmost label) is "Si". The value of this | active segment (and hence topmost label) is "Si". The value of this | |||
label is calculated as specified in <xref target="section-2.4"/>.</t> | label is calculated as specified in <xref target="convert-section-2.4" format | |||
="default" sectionFormat="of" derivedContent="Section 2.4"/>.</t> | ||||
<t> | <t pn="section-2.8-2"> | |||
For Local SIDs, the MCC is responsible for downloading the correct | For Local SIDs, the MCC is responsible for downloading the correct | |||
label value to FIB. For example, an IGP with SR extensions [I-D.ietf-isis-seg | label value to the FIB. For example, an IGP with SR extensions <xref target=" | |||
ment-routing-extensions, I-D.ietf-ospf-segment-routing-extensions] downloads the | RFC8667" format="default" sectionFormat="of" derivedContent="RFC8667"/> <xref ta | |||
MPLS label corresponding to an Adj-SID | rget="RFC8665" format="default" sectionFormat="of" derivedContent="RFC8665"/> do | |||
<xref target="RFC8402"/>.</t> | wnloads the MPLS label corresponding to an Adj-SID <xref target="RFC8402" format | |||
="default" sectionFormat="of" derivedContent="RFC8402"/>.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.9" numbered="true" toc="include" remove | ||||
<section title="Active Segment" anchor="section-2.9"><t> | InRFC="false" pn="section-2.9"> | |||
<name slugifiedName="name-active-segment">Active Segment</name> | ||||
<t pn="section-2.9-1"> | ||||
When instantiated in the MPLS domain, the active segment on a packet | When instantiated in the MPLS domain, the active segment on a packet | |||
corresponds to the topmost label on the packet that is calculated | corresponds to the topmost label and is calculated | |||
according to the procedure specified in Sections 2.10 and 2.11. When | according to the procedure specified in Sections <xref target="convert-sectio | |||
n-2.10" format="counter" sectionFormat="of" derivedContent="2.10"/> and <xref ta | ||||
rget="convert-section-2.11" format="counter" sectionFormat="of" derivedContent=" | ||||
2.11"/>. When | ||||
arriving at a node, the topmost label corresponding to the active SID | arriving at a node, the topmost label corresponding to the active SID | |||
matches the MPLS label downloaded to FIB as specified in <xref target="sectio | matches the MPLS label downloaded to the FIB as specified in <xref target="co | |||
n-2.4"/>.</t> | nvert-section-2.4" format="default" sectionFormat="of" derivedContent="Section 2 | |||
.4"/>.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.10" numbered="true" toc="include" remov | ||||
<section title="Forwarding behavior for Global SIDs" anchor="section-2.10 | eInRFC="false" pn="section-2.10"> | |||
"><t> | <name slugifiedName="name-forwarding-behavior-for-glo">Forwarding Behavi | |||
This section specifies forwarding behavior, including the calculation | or for Global SIDs</name> | |||
<t pn="section-2.10-1"> | ||||
This section specifies the forwarding behavior, including the calculation | ||||
of outgoing labels, that corresponds to a global SID when applying | of outgoing labels, that corresponds to a global SID when applying | |||
PUSH, CONTINUE, and NEXT operations in the MPLS forwarding plane.</t> | the PUSH, CONTINUE, and NEXT operations in the MPLS forwarding plane.</t> | |||
<t pn="section-2.10-2"> | ||||
<t> | ||||
This document covers the calculation of the outgoing label for the | This document covers the calculation of the outgoing label for the | |||
top label only. The case where the outgoing label is not the top | top label only. The case where the outgoing label is not the top | |||
label and is part of a stack of labels that instantiates a routing | label and is part of a stack of labels that instantiates a routing | |||
policy or a traffic engineering tunnel is outside the scope of this | policy or a traffic-engineering tunnel is outside the scope of this | |||
document and may be covered in other documents such as <xref target="I-D.ietf | document and may be covered in other documents such as <xref target="ROUTING- | |||
-spring-segment-routing-policy"/>.</t> | POLICY" format="default" sectionFormat="of" derivedContent="ROUTING-POLICY"/>.</ | |||
t> | ||||
<section title="Forwarding for PUSH and CONTINUE of Global SIDs" anchor=" | <section anchor="convert-section-2.10.1" numbered="true" toc="include" r | |||
section-2.10.1"><t> | emoveInRFC="false" pn="section-2.10.1"> | |||
Suppose an MCC on a router "R0" determines that PUSH or CONTINUE | <name slugifiedName="name-forwarding-for-push-and-con">Forwarding for | |||
operation is to be applied to an incoming packet related to the | PUSH and CONTINUE of Global SIDs</name> | |||
global SID "Si" represented by the global index "I" and owned by the | <t pn="section-2.10.1-1"> | |||
router Ri before sending the packet towards a neighbor "N" directly | Suppose an MCC on router "R0" determines that, before sending the packet towar | |||
connected to "R0" through a physical or virtual interface such as UDP | ds a neighbor "N", the PUSH or CONTINUE | |||
tunnel <xref target="RFC7510"/> or L2TPv3 tunnel <xref target="RFC4817"/>.</t | operation is to be applied to an incoming packet related to the global SID "Si | |||
> | ". | |||
SID "Si" is represented by the global index "I" and owned by the router Ri. | ||||
<t> | Neighbor "N" may be directly | |||
The method by which the MCC on router "R0" determines that PUSH or | connected to "R0" through either a physical or a virtual interface (e.g., | |||
UDP tunnel <xref target="RFC7510" format="default" sectionFormat="of" derivedC | ||||
ontent="RFC7510"/> or L2TPv3 tunnel <xref target="RFC4817" format="default" sect | ||||
ionFormat="of" derivedContent="RFC4817"/>). | ||||
</t> | ||||
<t pn="section-2.10.1-2"> | ||||
The method by which the MCC on router "R0" determines that the PUSH or | ||||
CONTINUE operation must be applied using the SID "Si" is beyond the | CONTINUE operation must be applied using the SID "Si" is beyond the | |||
scope of this document. An example of a method to determine the SID | scope of this document. | |||
"Si" for PUSH operation is the case where IS-IS <xref target="I-D.ietf-isis-s | ||||
egment-routing-extensions"/> receives the prefix-SID "Si" sub-TLV | ||||
advertised with prefix "P/m" in TLV 135 and the destination address | ||||
of the incoming IPv4 packet is covered by the prefix "P/m".</t> | ||||
<t> | An example of a method to determine the SID | |||
For CONTINUE operation, an example of a method to determine the SID | "Si" for the PUSH operation is the case where IS-IS <xref target="RFC8667" fo | |||
"Si" is the case where IS-IS <xref target="I-D.ietf-isis-segment-routing-exte | rmat="default" sectionFormat="of" derivedContent="RFC8667"/> | |||
nsions"/> receives the prefix-SID "Si" sub-TLV advertised with | receives the Prefix-SID "Si" sub-TLV | |||
prefix "P" in TLV 135 and the top label of the incoming packet | advertised with the prefix "P/m" in TLV 135, and the prefix "P/m" is the long | |||
matches the MPLS label in FIB corresponding to the SID "Si" on the | est matching | |||
network prefix for the incoming IPv4 packet.</t> | ||||
<t pn="section-2.10.1-3"> | ||||
For the CONTINUE operation, an example of a method used to determine the SID | ||||
"Si" is the case where IS-IS <xref target="RFC8667" format="default" sectionF | ||||
ormat="of" derivedContent="RFC8667"/> receives the Prefix-SID "Si" sub-TLV adver | ||||
tised with | ||||
prefix "P" in TLV 135, and the top label of the incoming packet | ||||
matches the MPLS label in the FIB corresponding to the SID "Si" on | ||||
router "R0".</t> | router "R0".</t> | |||
<t pn="section-2.10.1-4"> | ||||
<t> | ||||
The forwarding behavior for PUSH and CONTINUE corresponding to the | The forwarding behavior for PUSH and CONTINUE corresponding to the | |||
SID "Si"</t> | SID "Si" is as follows:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.10.1-5"> | ||||
<t> | <li pn="section-2.10.1-5.1"> | |||
<list style="symbols"> | <t pn="section-2.10.1-5.1.1">If neighbor "N" does not support SR o | |||
<t>If the neighbor "N" does not support SR or advertises an invalid | r advertises an invalid | |||
SRGB or a SRGB that is too small for the SID "Si" | SRGB or a SRGB that is too small for the SID "Si", then: | |||
<list style="symbols"> | </t> | |||
<t>If it is possible to send the packet towards the neighbor "N" | <ul spacing="normal" bare="false" empty="false" pn="section-2.10.1 | |||
-5.1.2"> | ||||
<li pn="section-2.10.1-5.1.2.1">If it is possible to send the pa | ||||
cket towards neighbor "N" | ||||
using standard MPLS forwarding behavior as specified in | using standard MPLS forwarding behavior as specified in | |||
<xref target="RFC3031"/> and <xref target="RFC3032"/>, then forward the packet. The method | <xref target="RFC3031" format="default" sectionFormat="of" derivedConte nt="RFC3031"/> and <xref target="RFC3032" format="default" sectionFormat="of" de rivedContent="RFC3032"/>, forward the packet. The method | |||
by which a router decides whether it is possible to send the | by which a router decides whether it is possible to send the | |||
packet to "N" or not is beyond the scope of this document. For | packet to "N" or not is beyond the scope of this document. For | |||
example, the router "R0" can use the downstream label | example, the router "R0" can use the downstream label | |||
determined by another MCC, such as LDP <xref target="RFC5036"/>, to sen | determined by another MCC, such as LDP <xref target="RFC5036" format="d | |||
d the | efault" sectionFormat="of" derivedContent="RFC5036"/>, to send the | |||
packet.</t> | packet.</li> | |||
<li pn="section-2.10.1-5.1.2.2">Else, if there are other usable | ||||
<t>Else if there are other useable next-hops, then use other next- | next hops, use them to forward the incoming packet. | |||
hops to forward the incoming packet. The method by which the | The method by which the | |||
router "R0" decides on the possibility of using other next- | router "R0" decides on the possibility of using other next hops | |||
hops is beyond the scope of this document. For example, the | is beyond the scope of this document. For example, the | |||
MCC on "R0" may chose the send an IPv4 packet without pushing | MCC on "R0" may chose the send an IPv4 packet without pushing | |||
any label to another next-hop.</t> | any label to another next hop.</li> | |||
<li pn="section-2.10.1-5.1.2.3">Otherwise, drop the packet.</li> | ||||
<t>Otherwise drop the packet.</t> | </ul> | |||
</li> | ||||
</list> | <li pn="section-2.10.1-5.2"> | |||
</t> | <t pn="section-2.10.1-5.2.1">Else, | |||
</t> | ||||
<t>Else | <ul spacing="normal" bare="false" empty="false" pn="section-2.10.1 | |||
-5.2.2"> | ||||
<list style="symbols"> | <li pn="section-2.10.1-5.2.2.1"> | |||
Calculate the outgoing label as specified in <xref target="con | ||||
<t>Calculate the outgoing label as specified in <xref target="section-2 | vert-section-2.4" format="default" sectionFormat="of" derivedContent="Section 2. | |||
.4"/> using | 4"/> using | |||
the SRGB of the neighbor "N" | the SRGB of neighbor "N". | |||
</li> | ||||
<list style="symbols"> | <li pn="section-2.10.1-5.2.2.2"> | |||
<!--[rfced] id2xml is reading the following bullet as a subpoint of " | <t pn="section-2.10.1-5.2.2.2.1">Determine the outgoing label | |||
Calculate the outgoing label...". I don't know if this is correct. Please revi | stack</t> | |||
ew.--> | <ul spacing="normal" bare="false" empty="false" pn="section-2. | |||
10.1-5.2.2.2.2"> | ||||
<t>If the operation is PUSH | <li pn="section-2.10.1-5.2.2.2.2.1"> | |||
<list style="symbols"> | <t pn="section-2.10.1-5.2.2.2.2.1.1">If the operation is P | |||
<t>Push the calculated label according to the MPLS label | USH: | |||
pushing rules specified in <xref target="RFC3032"/> | </t> | |||
</t> | <ul spacing="normal" bare="false" empty="false" pn="sectio | |||
</list></t> | n-2.10.1-5.2.2.2.2.1.2"> | |||
<t>Else | <li pn="section-2.10.1-5.2.2.2.2.1.2.1">Push the calcula | |||
ted label according to the MPLS label | ||||
<list style="symbols"> | pushing rules specified in <xref target="RFC3032" format="default" | |||
sectionFormat="of" derivedContent="RFC3032"/>. | ||||
<t>swap the incoming label with the calculated label | </li> | |||
according to the label swapping rules in <xref target="RFC3032"/> | </ul> | |||
</t> | </li> | |||
</list> | <li pn="section-2.10.1-5.2.2.2.2.2"> | |||
</t> | <t pn="section-2.10.1-5.2.2.2.2.2.1">Else, | |||
</t> | ||||
<t>Send the packet towards the neighbor "N"</t> | <ul spacing="normal" bare="false" empty="false" pn="sectio | |||
n-2.10.1-5.2.2.2.2.2.2"> | ||||
</list> | <li pn="section-2.10.1-5.2.2.2.2.2.2.1">swap the incomin | |||
</t> | g label with the calculated label | |||
according to the label-swapping rules in <xref target="RFC3031" forma | ||||
</list> | t="default" sectionFormat="of" derivedContent="RFC3031"/>. | |||
</t> | </li> | |||
</ul> | ||||
</list> | </li> | |||
</t> | <li pn="section-2.10.1-5.2.2.2.2.3">Send the packet towards | |||
neighbor "N".</li> | ||||
</section> | </ul> | |||
</li> | ||||
<section title="Forwarding for NEXT Operation for Global SIDs" anchor="se | </ul> | |||
ction-2.10.2"><t> | </li> | |||
As specified in <xref target="section-2.7.3"/> NEXT operation corresponds to | </ul> | |||
popping | </section> | |||
the top most label. The forwarding behavior is as follows</t> | <section anchor="convert-section-2.10.2" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-2.10.2"> | ||||
<t><list style="symbols"><t>Pop the topmost label</t> | <name slugifiedName="name-forwarding-for-the-next-ope">Forwarding for | |||
the NEXT Operation for Global SIDs</name> | ||||
<t>Apply the instruction associated with the incoming label that has | <t pn="section-2.10.2-1"> | |||
been popped</t> | As specified in <xref target="convert-section-2.7.3" format="default" section | |||
Format="of" derivedContent="Section 2.7.3"/>, the NEXT operation corresponds to | ||||
</list> | popping | |||
</t> | the topmost label. The forwarding behavior is as follows:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-2.10.2-2"> | ||||
<t> | <li pn="section-2.10.2-2.1">Pop the topmost label</li> | |||
<li pn="section-2.10.2-2.2">Apply the instruction associated with th | ||||
e incoming label that has | ||||
been popped</li> | ||||
</ul> | ||||
<t pn="section-2.10.2-3"> | ||||
The action on the packet after popping the topmost label depends on | The action on the packet after popping the topmost label depends on | |||
the instruction associated with the incoming label as well as the | the instruction associated with the incoming label as well as the | |||
contents of the packet right underneath the top label that got | contents of the packet right underneath the top label that was | |||
popped. Examples of NEXT operation are described in Appendix A.1.</t> | popped. Examples of the NEXT operation are described in <xref target="convert | |||
-section-a.1" format="default" sectionFormat="of" derivedContent="Appendix A.1"/ | ||||
</section> | ></t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="convert-section-2.11" numbered="true" toc="include" remov | ||||
<section title="Forwarding Behavior for Local SIDs" anchor="section-2.11" | eInRFC="false" pn="section-2.11"> | |||
><t> | <name slugifiedName="name-forwarding-behavior-for-loc">Forwarding Behavi | |||
This section specifies the forwarding behavior for local SIDs when SR | or for Local SIDs</name> | |||
<t pn="section-2.11-1"> | ||||
This section specifies the forwarding behavior for Local SIDs when SR | ||||
is instantiated over the MPLS forwarding plane.</t> | is instantiated over the MPLS forwarding plane.</t> | |||
<section anchor="convert-section-2.11.1" numbered="true" toc="include" r | ||||
<section title="Forwarding for PUSH Operation on Local SIDs" anchor="sect | emoveInRFC="false" pn="section-2.11.1"> | |||
ion-2.11.1"><t> | <name slugifiedName="name-forwarding-for-the-push-ope">Forwarding for | |||
Suppose an MCC on a router "R0" determines that PUSH operation is to | the PUSH Operation on Local SIDs</name> | |||
be applied to an incoming packet using the local SID "Si" before | <t pn="section-2.11.1-1"> | |||
sending the packet towards a neighbor "N" directly connected to R0 | Suppose an MCC on router "R0" determines that the PUSH operation is to | |||
through a physical or virtual interface such as UDP tunnel <xref target="RFC7 | be applied to an incoming packet using the Local SID "Si" before | |||
510"/> | sending the packet towards neighbor "N", which is directly connected to R0 | |||
or L2TPv3 tunnel <xref target="RFC4817"/>.</t> | through a physical or virtual interface such as a UDP tunnel <xref target="RF | |||
C7510" format="default" sectionFormat="of" derivedContent="RFC7510"/> | ||||
<t> | or L2TPv3 tunnel <xref target="RFC4817" format="default" sectionFormat="of" d | |||
An example of such local SID is an Adj-SID allocated and advertised | erivedContent="RFC4817"/>.</t> | |||
by IS-IS <xref target="I-D.ietf-isis-segment-routing-extensions"/>. The metho | <t pn="section-2.11.1-2"> | |||
d by | An example of such a Local SID is an Adj-SID allocated and advertised | |||
which the MCC on "R0" determines that PUSH operation is to be applied | by IS-IS <xref target="RFC8667" format="default" sectionFormat="of" derivedCo | |||
ntent="RFC8667"/>. The method by | ||||
which the MCC on "R0" determines that the PUSH operation is to be applied | ||||
to the incoming packet is beyond the scope of this document. An | to the incoming packet is beyond the scope of this document. An | |||
example of such method is backup path used to protect against a | example of such a method is the backup path used to protect against a | |||
failure using TI-LFA <xref target="I-D.bashandy-rtgwg-segment-routing-ti-lfa" | failure using TI-LFA <xref target="FAST-REROUTE" format="default" sectionForm | |||
/>.</t> | at="of" derivedContent="FAST-REROUTE"/>.</t> | |||
<t pn="section-2.11.1-3"> | ||||
<t> | As mentioned in <xref target="RFC8402" format="default" sectionFormat="of" de | |||
As mentioned in <xref target="RFC8402"/>, a local SID is specified by an MPLS | rivedContent="RFC8402"/>, a Local SID is specified by an MPLS label. | |||
label. | Hence, the PUSH operation for a Local SID is identical to the label push | |||
Hence the PUSH operation for a local SID is identical to label push | operation using any MPLS label <xref target="RFC3031" format="default" sectio | |||
operation <xref target="RFC3032"/> using any MPLS label. The forwarding actio | nFormat="of" derivedContent="RFC3031"/>. The forwarding action after | |||
n after | pushing the MPLS label corresponding to the Local SID is also | |||
pushing the MPLS label corresponding to the local SID is also | ||||
determined by the MCC. For example, if the PUSH operation was done to | determined by the MCC. For example, if the PUSH operation was done to | |||
forward a packet over a backup path calculated using TI-LFA, then the | forward a packet over a backup path calculated using TI-LFA, then the | |||
forwarding action may be sending the packet to a certain neighbor | forwarding action may be sending the packet to a certain neighbor | |||
that will in turn continue to forward the packet along the backup | that will in turn continue to forward the packet along the backup | |||
path</t> | path.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-2.11.2" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-2.11.2"> | ||||
<section title="Forwarding for CONTINUE Operation for Local SIDs" anchor= | <name slugifiedName="name-forwarding-for-the-continue">Forwarding for | |||
"section-2.11.2"><t> | the CONTINUE Operation for Local SIDs</name> | |||
A local SID on a router "R0" corresponds to a local label. In such | <t pn="section-2.11.2-1"> | |||
scenario, the outgoing label towards a next-hop "N" is determined by | A Local SID on router "R0" corresponds to a local label. | |||
the MCC running on the router "R0"and the forwarding behavior for | In such a | |||
CONTINUE operation is identical to swap operation <xref target="RFC3032"/> on | scenario, the outgoing label towards next hop "N" is determined by | |||
an | the MCC running on the router "R0", and the forwarding behavior for the | |||
MPLS label.</t> | CONTINUE operation is identical to the swap operation on an | |||
MPLS label <xref target="RFC3031" format="default" sectionFormat="of" derived | ||||
</section> | Content="RFC3031"/>.</t> | |||
</section> | ||||
<section title="Outgoing label for NEXT Operation for Local SIDs" anchor= | <section anchor="convert-section-2.11.3" numbered="true" toc="include" r | |||
"section-2.11.3"><t> | emoveInRFC="false" pn="section-2.11.3"> | |||
NEXT operation for Local SIDs is identical to NEXT operation for | <name slugifiedName="name-outgoing-label-for-the-next">Outgoing Label | |||
global SIDs specified in <xref target="section-2.10.2"/>.</t> | for the NEXT Operation for Local SIDs</name> | |||
<t pn="section-2.11.3-1"> | ||||
</section> | The NEXT operation for Local SIDs is identical to the NEXT operation for | |||
global SIDs as specified in <xref target="convert-section-2.10.2" format="def | ||||
</section> | ault" sectionFormat="of" derivedContent="Section 2.10.2"/>.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
<section title="IANA Considerations" anchor="section-3"><t> | <section anchor="convert-section-3" numbered="true" toc="include" removeInRF | |||
This document does not make any request to IANA.</t> | C="false" pn="section-3"> | |||
<name slugifiedName="name-iana-considerations">IANA Considerations</name> | ||||
</section> | <t pn="section-3-1"> | |||
This document has no IANA actions.</t> | ||||
<section title="Manageability Considerations" anchor="section-4"><t> | </section> | |||
<section anchor="convert-section-4" numbered="true" toc="include" removeInRF | ||||
C="false" pn="section-4"> | ||||
<name slugifiedName="name-manageability-consideration">Manageability Consi | ||||
derations</name> | ||||
<t pn="section-4-1"> | ||||
This document describes the applicability of Segment Routing over the | This document describes the applicability of Segment Routing over the | |||
MPLS data plane. Segment Routing does not introduce any change in | MPLS data plane. Segment Routing does not introduce any change in | |||
the MPLS data plane. Manageability considerations described in | the MPLS data plane. Manageability considerations described in | |||
<xref target="RFC8402"/> applies to the MPLS data plane when used with Segmen | <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RF | |||
t | C8402"/> apply to the MPLS data plane when used with Segment | |||
Routing. SR OAM use cases for the MPLS data plane are defined in | Routing. SR Operations, Administration, and Maintenance (OAM) use cases for t | |||
<xref target="RFC8403"/>. SR OAM procedures for the MPLS data plane are defi | he MPLS data plane are defined in | |||
ned in | <xref target="RFC8403" format="default" sectionFormat="of" derivedContent="RF | |||
<xref target="RFC8287"/>.</t> | C8403"/>. SR OAM procedures for the MPLS data plane are defined in | |||
<xref target="RFC8287" format="default" sectionFormat="of" derivedContent="RF | ||||
</section> | C8287"/>.</t> | |||
</section> | ||||
<section title="Security Considerations" anchor="section-5"><t> | <section anchor="convert-section-5" numbered="true" toc="include" removeInRF | |||
C="false" pn="section-5"> | ||||
<name slugifiedName="name-security-considerations">Security Considerations | ||||
</name> | ||||
<t pn="section-5-1"> | ||||
This document does not introduce additional security requirements and | This document does not introduce additional security requirements and | |||
mechanisms other than the ones described in <xref target="RFC8402"/>.</t> | mechanisms other than the ones described in <xref target="RFC8402" format="de | |||
fault" sectionFormat="of" derivedContent="RFC8402"/>.</t> | ||||
</section> | </section> | |||
</middle> | ||||
<section title="Contributors" anchor="section-6"><t> | <back> | |||
The following contributors have substantially helped the definition | <references pn="section-6"> | |||
and editing of the content of this document:</t> | <name slugifiedName="name-references">References</name> | |||
<references pn="section-6.1"> | ||||
<figure><artwork><![CDATA[ | <name slugifiedName="name-normative-references">Normative References</na | |||
Martin Horneffer | me> | |||
Deutsche Telekom | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
Email: Martin.Horneffer@telekom.de | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
<front> | ||||
Wim Henderickx | <title>Key words for use in RFCs to Indicate Requirement Levels</tit | |||
Nokia | le> | |||
Email: wim.henderickx@nokia.com | <author initials="S." surname="Bradner" fullname="S. Bradner"> | |||
<organization showOnFrontPage="true"/> | ||||
Jeff Tantsura | </author> | |||
Email: jefftant@gmail.com | <date year="1997" month="March"/> | |||
Edward Crabbe | <abstract> | |||
Email: edward.crabbe@gmail.com | <t>In many standards track documents several words are used to sig | |||
nify the requirements in the specification. These words are often capitalized. | ||||
Igor Milojevic | This document defines these words as they should be interpreted in IETF document | |||
Email: milojevicigor@gmail.com | s. This document specifies an Internet Best Current Practices for the Internet | |||
Community, and requests discussion and suggestions for improvements.</t> | ||||
Saku Ytti | </abstract> | |||
Email: saku@ytti.fi | </front> | |||
]]></artwork> | <seriesInfo name="BCP" value="14"/> | |||
</figure> | <seriesInfo name="RFC" value="2119"/> | |||
</section> | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
</reference> | ||||
<section title="Acknowledgements" anchor="section-7"><t> | <reference anchor="RFC3031" target="https://www.rfc-editor.org/info/rfc3 | |||
The authors would like to thank Les Ginsberg, Chris Bowers, Himanshu | 031" quoteTitle="true" derivedAnchor="RFC3031"> | |||
Shah, Adrian Farrel, Alexander Vainshtein, Przemyslaw Krol, Darren | <front> | |||
Dukes, Zafar Ali, and Martin Vigoureux for their valuable comments on | <title>Multiprotocol Label Switching Architecture</title> | |||
this document.</t> | <author initials="E." surname="Rosen" fullname="E. Rosen"> | |||
<organization showOnFrontPage="true"/> | ||||
<t> | </author> | |||
This document was prepared using 2-Word-v2.0.template.dot.</t> | <author initials="A." surname="Viswanathan" fullname="A. Viswanathan | |||
"> | ||||
</section> | <organization showOnFrontPage="true"/> | |||
</author> | ||||
</middle> | <author initials="R." surname="Callon" fullname="R. Callon"> | |||
<organization showOnFrontPage="true"/> | ||||
<back> | </author> | |||
<references title="Normative References"> | <date year="2001" month="January"/> | |||
&RFC8402; | <abstract> | |||
&RFC2119; | <t>This document specifies the architecture for Multiprotocol Labe | |||
&RFC3031; | l Switching (MPLS). [STANDARDS-TRACK]</t> | |||
&RFC3032; | </abstract> | |||
&RFC3443; | </front> | |||
&RFC5462; | <seriesInfo name="RFC" value="3031"/> | |||
&RFC7274; | <seriesInfo name="DOI" value="10.17487/RFC3031"/> | |||
&RFC8174; | </reference> | |||
</references> | <reference anchor="RFC3032" target="https://www.rfc-editor.org/info/rfc3 | |||
<references title="Informative References"> | 032" quoteTitle="true" derivedAnchor="RFC3032"> | |||
&I-D.ietf-isis-segment-routing-extensions; | <front> | |||
&I-D.ietf-ospf-ospfv3-segment-routing-extensions; | <title>MPLS Label Stack Encoding</title> | |||
&I-D.ietf-ospf-segment-routing-extensions; | <author initials="E." surname="Rosen" fullname="E. Rosen"> | |||
&I-D.ietf-spring-segment-routing-ldp-interop; | <organization showOnFrontPage="true"/> | |||
&I-D.bashandy-rtgwg-segment-routing-ti-lfa; | </author> | |||
&RFC7855; | <author initials="D." surname="Tappan" fullname="D. Tappan"> | |||
&RFC5036; | <organization showOnFrontPage="true"/> | |||
&RFC5331; | </author> | |||
&RFC7510; | <author initials="G." surname="Fedorkow" fullname="G. Fedorkow"> | |||
&RFC4817; | <organization showOnFrontPage="true"/> | |||
&RFC8287; | </author> | |||
&RFC8403; | <author initials="Y." surname="Rekhter" fullname="Y. Rekhter"> | |||
&I-D.ietf-spring-segment-routing-policy; | <organization showOnFrontPage="true"/> | |||
</references> | </author> | |||
<section title="Examples" anchor="section-a"><section title="IGP Segments | <author initials="D." surname="Farinacci" fullname="D. Farinacci"> | |||
Example" anchor="section-a.1"><t> | <organization showOnFrontPage="true"/> | |||
Consider the network diagram of Figure 1 and the IP address and IGP | </author> | |||
Segment allocation of Figure 2. Assume that the network is running | <author initials="T." surname="Li" fullname="T. Li"> | |||
IS-IS with SR extensions <xref target="I-D.ietf-isis-segment-routing-extensio | <organization showOnFrontPage="true"/> | |||
ns"/> | </author> | |||
<author initials="A." surname="Conta" fullname="A. Conta"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2001" month="January"/> | ||||
<abstract> | ||||
<t>This document specifies the encoding to be used by an LSR in or | ||||
der to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on | ||||
LAN data links, and possibly on other data links as well. This document also sp | ||||
ecifies rules and procedures for processing the various fields of the label stac | ||||
k encoding. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3032"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3032"/> | ||||
</reference> | ||||
<reference anchor="RFC3443" target="https://www.rfc-editor.org/info/rfc3 | ||||
443" quoteTitle="true" derivedAnchor="RFC3443"> | ||||
<front> | ||||
<title>Time To Live (TTL) Processing in Multi-Protocol Label Switchi | ||||
ng (MPLS) Networks</title> | ||||
<author initials="P." surname="Agarwal" fullname="P. Agarwal"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Akyol" fullname="B. Akyol"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2003" month="January"/> | ||||
<abstract> | ||||
<t>This document describes Time To Live (TTL) processing in hierar | ||||
chical Multi-Protocol Label Switching (MPLS) networks and is motivated by the ne | ||||
ed to formalize a TTL-transparent mode of operation for an MPLS label-switched p | ||||
ath. It updates RFC 3032, "MPLS Label Stack Encoding". TTL processing in both P | ||||
ipe and Uniform Model hierarchical tunnels are specified with examples for both | ||||
"push" and "pop" cases. The document also complements RFC 3270, "MPLS Support o | ||||
f Differentiated Services" and ties together the terminology introduced in that | ||||
document with TTL processing in hierarchical MPLS networks. [STANDARDS-TRACK]</ | ||||
t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3443"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3443"/> | ||||
</reference> | ||||
<reference anchor="RFC5462" target="https://www.rfc-editor.org/info/rfc5 | ||||
462" quoteTitle="true" derivedAnchor="RFC5462"> | ||||
<front> | ||||
<title>Multiprotocol Label Switching (MPLS) Label Stack Entry: "EXP" | ||||
Field Renamed to "Traffic Class" Field</title> | ||||
<author initials="L." surname="Andersson" fullname="L. Andersson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Asati" fullname="R. Asati"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2009" month="February"/> | ||||
<abstract> | ||||
<t>The early Multiprotocol Label Switching (MPLS) documents define | ||||
d the form of the MPLS label stack entry. This includes a three-bit field calle | ||||
d the "EXP field". The exact use of this field was not defined by these documen | ||||
ts, except to state that it was to be "reserved for experimental use".</t> | ||||
<t>Although the intended use of the EXP field was as a "Class of S | ||||
ervice" (CoS) field, it was not named a CoS field by these early documents becau | ||||
se the use of such a CoS field was not considered to be sufficiently defined. T | ||||
oday a number of standards documents define its usage as a CoS field.</t> | ||||
<t>To avoid misunderstanding about how this field may be used, it | ||||
has become increasingly necessary to rename this field. This document changes t | ||||
he name of the field to the "Traffic Class field" ("TC field"). In doing so, it | ||||
also updates documents that define the current use of the EXP field. [STANDARD | ||||
S-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5462"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5462"/> | ||||
</reference> | ||||
<reference anchor="RFC7274" target="https://www.rfc-editor.org/info/rfc7 | ||||
274" quoteTitle="true" derivedAnchor="RFC7274"> | ||||
<front> | ||||
<title>Allocating and Retiring Special-Purpose MPLS Labels</title> | ||||
<author initials="K." surname="Kompella" fullname="K. Kompella"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="L." surname="Andersson" fullname="L. Andersson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Farrel" fullname="A. Farrel"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2014" month="June"/> | ||||
<abstract> | ||||
<t>Some MPLS labels have been allocated for specific purposes. A | ||||
block of labels (0-15) has been set aside to this end; these labels are commonly | ||||
called "reserved labels". They will be called "special-purpose | ||||
labels" in this document.</t> | ||||
<t>As there are only 16 of these special-purpose labels, caution i | ||||
s needed in the allocation of new special-purpose labels; yet, at the same time, | ||||
forward progress should be allowed when one is called for.</t> | ||||
<t>This memo defines new procedures for the allocation and retirem | ||||
ent of special-purpose labels, as well as a method to extend the special-purpose | ||||
label space and a description of how to handle extended special-purpose labels | ||||
in the data plane. Finally, this memo renames the IANA registry for special-purp | ||||
ose labels to "Special-Purpose MPLS Label Values" and creates a new registry cal | ||||
led the "Extended Special-Purpose MPLS Label Values" registry.</t | ||||
> | ||||
<t>This document updates a number of previous RFCs that use the te | ||||
rm "reserved label". Specifically, this document updates RFCs 3032, 3038, 3209, | ||||
3811, 4182, 4928, 5331, 5586, 5921, 5960, 6391, 6478, and 6790.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7274"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7274"/> | ||||
</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> | ||||
</references> | ||||
<references pn="section-6.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="FAST-REROUTE" quoteTitle="true" target="https://tools | ||||
.ietf.org/html/draft-ietf-rtgwg-segment-routing-ti-lfa-01" derivedAnchor="FAST-R | ||||
EROUTE"> | ||||
<front> | ||||
<title>Topology Independent Fast Reroute using Segment Routing</titl | ||||
e> | ||||
<author initials="S" surname="Litkowski" fullname="Stephane Litkowsk | ||||
i"> | ||||
<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="B" surname="Decraene" fullname="Bruno Decraene"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P" surname="Francois" fullname="Pierre Francois"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D" surname="Voyer" fullname="Daniel Voyer"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="F" surname="Clad" fullname="Francois Clad"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P" surname="Camarillo" fullname="Pablo Camarillo"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="March" day="5" year="2019"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-rtgwg-segment-rout | ||||
ing-ti-lfa-01"/> | ||||
<refcontent>Work in Progress</refcontent> | ||||
</reference> | ||||
<reference anchor="RFC4817" target="https://www.rfc-editor.org/info/rfc4 | ||||
817" quoteTitle="true" derivedAnchor="RFC4817"> | ||||
<front> | ||||
<title>Encapsulation of MPLS over Layer 2 Tunneling Protocol Version | ||||
3</title> | ||||
<author initials="M." surname="Townsley" fullname="M. Townsley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Pignataro" fullname="C. Pignataro"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Wainner" fullname="S. Wainner"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Seely" fullname="T. Seely"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Young" fullname="J. Young"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2007" month="March"/> | ||||
<abstract> | ||||
<t>The Layer 2 Tunneling Protocol, Version 3 (L2TPv3) defines a pr | ||||
otocol for tunneling a variety of payload types over IP networks. This document | ||||
defines how to carry an MPLS label stack and its payload over the L2TPv3 data en | ||||
capsulation. This enables an application that traditionally requires an MPLS-en | ||||
abled core network, to utilize an L2TPv3 encapsulation over an IP network instea | ||||
d. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4817"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4817"/> | ||||
</reference> | ||||
<reference anchor="RFC5036" target="https://www.rfc-editor.org/info/rfc5 | ||||
036" quoteTitle="true" derivedAnchor="RFC5036"> | ||||
<front> | ||||
<title>LDP Specification</title> | ||||
<author initials="L." surname="Andersson" fullname="L. Andersson" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="I." surname="Minei" fullname="I. Minei" role="edit | ||||
or"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Thomas" fullname="B. Thomas" role="ed | ||||
itor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2007" month="October"/> | ||||
<abstract> | ||||
<t>The architecture for Multiprotocol Label Switching (MPLS) is de | ||||
scribed in RFC 3031. A fundamental concept in MPLS is that two Label Switching | ||||
Routers (LSRs) must agree on the meaning of the labels used to forward traffic b | ||||
etween and through them. This common understanding is achieved by using a set o | ||||
f procedures, called a label distribution protocol, by which one LSR informs ano | ||||
ther of label bindings it has made. This document defines a set of such procedu | ||||
res called LDP (for Label Distribution Protocol) by which LSRs distribute labels | ||||
to support MPLS forwarding along normally routed paths. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5036"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5036"/> | ||||
</reference> | ||||
<reference anchor="RFC5331" target="https://www.rfc-editor.org/info/rfc5 | ||||
331" quoteTitle="true" derivedAnchor="RFC5331"> | ||||
<front> | ||||
<title>MPLS Upstream Label Assignment and Context-Specific Label Spa | ||||
ce</title> | ||||
<author initials="R." surname="Aggarwal" fullname="R. Aggarwal"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="Y." surname="Rekhter" fullname="Y. Rekhter"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rosen" fullname="E. Rosen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2008" month="August"/> | ||||
<abstract> | ||||
<t>RFC 3031 limits the MPLS architecture to downstream-assigned MP | ||||
LS labels. This document introduces the notion of upstream-assigned MPLS labels | ||||
. It describes the procedures for upstream MPLS label assignment and introduces | ||||
the concept of a "Context-Specific Label Space". [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5331"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5331"/> | ||||
</reference> | ||||
<reference anchor="RFC7510" target="https://www.rfc-editor.org/info/rfc7 | ||||
510" quoteTitle="true" derivedAnchor="RFC7510"> | ||||
<front> | ||||
<title>Encapsulating MPLS in UDP</title> | ||||
<author initials="X." surname="Xu" fullname="X. Xu"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Sheth" fullname="N. Sheth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="L." surname="Yong" fullname="L. Yong"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Callon" fullname="R. Callon"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Black" fullname="D. Black"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="April"/> | ||||
<abstract> | ||||
<t>This document specifies an IP-based encapsulation for MPLS, cal | ||||
led MPLS-in-UDP for situations where UDP (User Datagram Protocol) encapsulation | ||||
is preferred to direct use of MPLS, e.g., to enable UDP-based ECMP (Equal-Cost M | ||||
ultipath) or link aggregation. The MPLS- in-UDP encapsulation technology must o | ||||
nly be deployed within a single network (with a single network operator) or netw | ||||
orks of an adjacent set of cooperating network operators where traffic is manage | ||||
d to avoid congestion, rather than over the Internet where congestion control is | ||||
required. Usage restrictions apply to MPLS-in-UDP usage for traffic that is no | ||||
t congestion controlled and to UDP zero checksum usage with IPv6.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7510"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7510"/> | ||||
</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="RFC8287" target="https://www.rfc-editor.org/info/rfc8 | ||||
287" quoteTitle="true" derivedAnchor="RFC8287"> | ||||
<front> | ||||
<title>Label Switched Path (LSP) Ping/Traceroute for Segment Routing | ||||
(SR) IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data Pla | ||||
nes</title> | ||||
<author initials="N." surname="Kumar" fullname="N. Kumar" role="edit | ||||
or"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Pignataro" fullname="C. Pignataro" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Swallow" fullname="G. Swallow"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Akiya" fullname="N. Akiya"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Kini" fullname="S. Kini"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Chen" fullname="M. Chen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="December"/> | ||||
<abstract> | ||||
<t>A Segment Routing (SR) architecture leverages source routing an | ||||
d tunneling paradigms and can be directly applied to the use of a Multiprotocol | ||||
Label Switching (MPLS) data plane. A node steers a packet through a controlled | ||||
set of instructions called "segments" by prepending the packet with an SR header | ||||
.</t> | ||||
<t>The segment assignment and forwarding semantic nature of SR rai | ||||
ses additional considerations for connectivity verification and fault isolation | ||||
for a Label Switched Path (LSP) within an SR architecture. This document illustr | ||||
ates the problem and defines extensions to perform LSP Ping and Traceroute for S | ||||
egment Routing IGP-Prefix and IGP-Adjacency Segment Identifiers (SIDs) with an M | ||||
PLS data plane.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8287"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8287"/> | ||||
</reference> | ||||
<reference anchor="RFC8403" target="https://www.rfc-editor.org/info/rfc8 | ||||
403" quoteTitle="true" derivedAnchor="RFC8403"> | ||||
<front> | ||||
<title>A Scalable and Topology-Aware MPLS Data-Plane Monitoring Syst | ||||
em</title> | ||||
<author initials="R." surname="Geib" fullname="R. Geib" role="editor | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Filsfils" fullname="C. Filsfils"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Pignataro" fullname="C. Pignataro" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Kumar" fullname="N. Kumar"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="July"/> | ||||
<abstract> | ||||
<t>This document describes features of an MPLS path monitoring sys | ||||
tem and related use cases. Segment-based routing enables a scalable and simple | ||||
method to monitor data-plane liveliness of the complete set of paths belonging t | ||||
o a single domain. The MPLS monitoring system adds features to the traditional | ||||
MPLS ping and Label Switched Path (LSP) trace, in a very complementary way. MPL | ||||
S topology awareness reduces management and control-plane involvement of Operati | ||||
ons, Administration, and Maintenance (OAM) measurements while enabling new OAM f | ||||
eatures.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8403"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8403"/> | ||||
</reference> | ||||
<reference anchor="RFC8661" target="https://www.rfc-editor.org/info/rfC8 | ||||
661" quoteTitle="true" derivedAnchor="RFC8661"> | ||||
<front> | ||||
<title>Segment Routing MPLS Interworking with LDP</title> | ||||
<seriesInfo name="RFC" value="8661"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8661"/> | ||||
<author initials="A" surname="Bashandy" fullname="Ahmed Bashandy" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
role="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S" surname="Previdi" fullname="Stefano Previdi"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B" surname="Decraene" fullname="Bruno Decraene"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S" surname="Litkowski" fullname="Stephane Litkowsk | ||||
i"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC8665" target="https://www.rfc-editor.org/info/rfc8 | ||||
665" quoteTitle="true" derivedAnchor="RFC8665"> | ||||
<front> | ||||
<title>OSPF Extensions for Segment Routing</title> | ||||
<seriesInfo name="RFC" value="8665"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8665"/> | ||||
<author initials="P" surname="Psenak" fullname="Peter Psenak" role=" | ||||
editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S" surname="Previdi" fullname="Stefano Previdi" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H" surname="Gredler" fullname="Hannes Gredler"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R" surname="Shakir" fullname="Rob Shakir"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="W" surname="Henderickx" fullname="Wim Henderickx"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J" surname="Tantsura" fullname="Jeff Tantsura"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC8666" target="https://www.rfc-editor.org/info/rfc8 | ||||
666" quoteTitle="true" derivedAnchor="RFC8666"> | ||||
<front> | ||||
<title>OSPFv3 Extensions for Segment Routing</title> | ||||
<seriesInfo name="RFC" value="8666"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8666"/> | ||||
<author initials="P" surname="Psenak" fullname="Peter Psenak" role=" | ||||
editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S" surname="Previdi" fullname="Stefano Previdi" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="RFC8667" target="https://www.rfc-editor.org/info/rfc8 | ||||
667" quoteTitle="true" derivedAnchor="RFC8667"> | ||||
<front> | ||||
<title>IS-IS Extensions for Segment Routing</title> | ||||
<seriesInfo name="RFC" value="8667"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8667"/> | ||||
<author initials="S" surname="Previdi" fullname="Stefano Previdi" ro | ||||
le="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="L" surname="Ginsberg" fullname="Les Ginsberg" role | ||||
="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A" surname="Bashandy" fullname="Ahmed Bashandy"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H" surname="Gredler" fullname="Hannes Gredler"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B" surname="Decraene" fullname="Bruno Decraene"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="ROUTING-POLICY" quoteTitle="true" target="https://too | ||||
ls.ietf.org/html/draft-ietf-spring-segment-routing-policy-05" derivedAnchor="ROU | ||||
TING-POLICY"> | ||||
<front> | ||||
<title>Segment Routing Policy Architecture</title> | ||||
<author initials="C" surname="Filsfils" fullname="Clarence Filsfils" | ||||
> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S" surname="Sivabalan" fullname="Siva Sivabalan"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D" surname="Voyer" fullname="Daniel Voyer"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A" surname="Bogdanov" fullname="Alex Bogdanov"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="P" surname="Mattes" fullname="Paul Mattes"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="November" day="17" year="2019"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-spring-segment-rou | ||||
ting-policy-05"/> | ||||
<refcontent>Work in Progress</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="convert-section-a" numbered="true" toc="include" removeInRF | ||||
C="false" pn="section-appendix.a"> | ||||
<name slugifiedName="name-examples">Examples</name> | ||||
<section anchor="convert-section-a.1" numbered="true" toc="include" remove | ||||
InRFC="false" pn="section-a.1"> | ||||
<name slugifiedName="name-igp-segment-examples">IGP Segment Examples</na | ||||
me> | ||||
<t pn="section-a.1-1"> | ||||
Consider the network diagram of <xref target="fig1" format="default" sectionF | ||||
ormat="of" derivedContent="Figure 1"/> and the IP addresses and IGP | ||||
segment allocations of <xref target="fig2" format="default" sectionFormat="of | ||||
" derivedContent="Figure 2"/>. Assume that the network is running | ||||
IS-IS with SR extensions <xref target="RFC8667" format="default" sectionForma | ||||
t="of" derivedContent="RFC8667"/>, | ||||
and all links have the same metric. The following examples can be | and all links have the same metric. The following examples can be | |||
constructed.</t> | constructed.</t> | |||
<figure anchor="fig1" align="left" suppress-title="false" pn="figure-1"> | ||||
<figure title="IGP Segments - Illustration" anchor="fig1"> | <name slugifiedName="name-igp-segments-illustration">IGP Segments -- I | |||
<artwork><![CDATA[ | llustration</name> | |||
<artwork name="" type="" align="left" alt="" pn="section-a.1-2.1"> | ||||
+--------+ | +--------+ | |||
/ \ | / \ | |||
R0-----R1-----R2----------R3-----R8 | R0-----R1-----R2----------R3-----R8 | |||
| \ / | | | \ / | | |||
| +--R4--+ | | | +--R4--+ | | |||
| | | | | | |||
+-----R5-----+ | +-----R5-----+</artwork> | |||
]]> | </figure> | |||
</artwork> | <figure anchor="fig2" align="left" suppress-title="false" pn="figure-2"> | |||
</figure> | <name slugifiedName="name-igp-address-and-segment-all">IGP Address and | |||
Segment Allocation -- Illustration</name> | ||||
<figure title="IGP Address and Segment Allocation - Illustration" anchor=" | <artwork name="" type="" align="left" alt="" pn="section-a.1-3.1"> | |||
fig2"> | ||||
<artwork><![CDATA[ | ||||
+-----------------------------------------------------------+ | +-----------------------------------------------------------+ | |||
| IP address allocated by the operator: | | | IP addresses allocated by the operator: | | |||
| 192.0.2.1/32 as a loopback of R1 | | | 192.0.2.1/32 as a loopback of R1 | | |||
| 192.0.2.2/32 as a loopback of R2 | | | 192.0.2.2/32 as a loopback of R2 | | |||
| 192.0.2.3/32 as a loopback of R3 | | | 192.0.2.3/32 as a loopback of R3 | | |||
| 192.0.2.4/32 as a loopback of R4 | | | 192.0.2.4/32 as a loopback of R4 | | |||
| 192.0.2.5/32 as a loopback of R5 | | | 192.0.2.5/32 as a loopback of R5 | | |||
| 192.0.2.8/32 as a loopback of R8 | | | 192.0.2.8/32 as a loopback of R8 | | |||
| 198.51.100.9/32 as an anycast loopback of R4 | | | 198.51.100.9/32 as an anycast loopback of R4 | | |||
| 198.51.100.9/32 as an anycast loopback of R5 | | | 198.51.100.9/32 as an anycast loopback of R5 | | |||
| | | | | | |||
| SRGB defined by the operator as 1000-5000 | | | SRGB defined by the operator as [1000,5000] | | |||
| | | | | | |||
| Global IGP SID indices allocated by the operator: | | | Global IGP SID indices allocated by the operator: | | |||
| 1 allocated to 192.0.2.1/32 | | | 1 allocated to 192.0.2.1/32 | | |||
| 2 allocated to 192.0.2.2/32 | | | 2 allocated to 192.0.2.2/32 | | |||
| 3 allocated to 192.0.2.3/32 | | | 3 allocated to 192.0.2.3/32 | | |||
| 4 allocated to 192.0.2.4/32 | | | 4 allocated to 192.0.2.4/32 | | |||
| 8 allocated to 192.0.2.8/32 | | | 8 allocated to 192.0.2.8/32 | | |||
| 1009 allocated to 198.51.100.9/32 | | | 1009 allocated to 198.51.100.9/32 | | |||
| | | | | | |||
| Local IGP SID allocated dynamically by R2 | | | Local IGP SID allocated dynamically by R2 | | |||
| for its "north" adjacency to R3: 9001 | | | for its "north" adjacency to R3: 9001 | | |||
| for its "east" adjacency to R3 : 9002 | | | for its "east" adjacency to R3 : 9002 | | |||
| for its "south" adjacency to R3: 9003 | | | for its "south" adjacency to R3: 9003 | | |||
| for its only adjacency to R4 : 9004 | | | for its only adjacency to R4 : 9004 | | |||
| for its only adjacency to R1 : 9005 | | | for its only adjacency to R1 : 9005 | | |||
+-----------------------------------------------------------+ | +-----------------------------------------------------------+</artwork> | |||
]]> | </figure> | |||
</artwork> | <t pn="section-a.1-4"> | |||
</figure> | Suppose R1 wants to send IPv4 packet P1 to R8. In this case, R1 | |||
needs to apply the PUSH operation to the IPv4 packet.</t> | ||||
<t> | <t pn="section-a.1-5"> | |||
Suppose R1 wants to send an IPv4 packet P1 to R8. In this case, R1 | ||||
needs to apply PUSH operation to the IPv4 packet.</t> | ||||
<t> | ||||
Remember that the SID index "8" is a global IGP segment attached to | Remember that the SID index "8" is a global IGP segment attached to | |||
the IP prefix 192.0.2.8/32. Its semantic is global within the IGP | the IP prefix 192.0.2.8/32. Its semantic is global within the IGP | |||
domain: any router forwards a packet received with active segment 8 | domain: any router forwards a packet received with active segment 8 | |||
to the next-hop along the ECMP-aware shortest-path to the related | to the next hop along the ECMP-aware shortest path to the related | |||
prefix.</t> | prefix.</t> | |||
<t pn="section-a.1-6"> | ||||
<t> | R2 is the next hop along the shortest path towards R8. By applying | |||
R2 is the next-hop along the shortest path towards R8. By applying | the steps in <xref target="convert-section-2.8" format="default" sectionForma | |||
the steps in <xref target="section-2.8"/> the outgoing label downloaded to R1 | t="of" derivedContent="Section 2.8"/>, the outgoing label downloaded to R1's FIB | |||
's FIB | corresponding to the global SID index "8" is 1008 because the SRGB of | |||
corresponding to the global SID index 8 is 1008 because the SRGB of | R2 = [1000,5000] as shown in <xref target="fig2" format="default" sectionForm | |||
R2 is [1000,5000] as shown in Figure 2.</t> | at="of" derivedContent="Figure 2"/>.</t> | |||
<t pn="section-a.1-7"> | ||||
<t> | ||||
Because the packet is IPv4, R1 applies the PUSH operation using the | Because the packet is IPv4, R1 applies the PUSH operation using the | |||
label value 1008 as specified in <xref target="section-2.10.1"/>. The resulti | label value 1008 as specified in <xref target="convert-section-2.10.1" format | |||
ng MPLS | ="default" sectionFormat="of" derivedContent="Section 2.10.1"/>. The resulting M | |||
header will have the "S" bit <xref target="RFC3032"/> set because it is follo | PLS | |||
wed | header will have the "S" bit <xref target="RFC3032" format="default" sectionF | |||
ormat="of" derivedContent="RFC3032"/> set because it is followed | ||||
directly by an IPv4 packet.</t> | directly by an IPv4 packet.</t> | |||
<t pn="section-a.1-8"> | ||||
The packet arrives at router R2. | ||||
<t> | Because top label 1008 | |||
The packet arrives at router R2. Because the top label 1008 | corresponds to the IGP SID index "8", which is the Prefix-SID attached to | |||
corresponds to the IGP SID "8", which is the prefix-SID attached to | the prefix 192.0.2.8/32 owned by Node R8, the instruction | |||
the prefix 192.0.2.8/32 owned by the node R8, then the instruction | associated with the SID is "forward the packet using one of the ECMP interfac | |||
associated with the SID is "forward the packet using all ECMP/UCMP interfaces | es or next hops along the shortest path(s) towards R8". Because R2 is not the pe | |||
and all ECMP/UCMP next-hop(s) along the shortest/useable path(s) towards R8". B | nultimate hop, R2 | |||
ecause R2 is not the penultimate hop, R2 | ||||
applies the CONTINUE operation to the packet and sends it to R3 using | applies the CONTINUE operation to the packet and sends it to R3 using | |||
one of the two links connected to R3 with top label 1008 as specified | one of the two links connected to R3 with top label 1008 as specified | |||
in <xref target="section-2.10.1"/>.</t> | in <xref target="convert-section-2.10.1" format="default" sectionFormat="of" | |||
derivedContent="Section 2.10.1"/>.</t> | ||||
<t> | <t pn="section-a.1-9"> | |||
R3 receives the packet with top label 1008. Because the top label | R3 receives the packet with top label 1008. Because top label | |||
1008 corresponds to the IGP SID "8", which is the prefix-SID attached | 1008 corresponds to the IGP SID index "8", which is the Prefix-SID attached | |||
to the prefix 192.0.2.8/32 owned by the node R8, then the instruction | to the prefix 192.0.2.8/32 owned by Node R8, the instruction | |||
associated with the SID is "send the packet using all ECMP interfaces and all | associated with the SID is "send the packet using one of the ECMP interfaces | |||
next-hop(s) along the shortest path towards R8". Because R3 | and next hops along the shortest path towards R8". Because R3 | |||
is the penultimate hop, we assume that R3 performs penumtimate hop | is the penultimate hop, we assume that R3 performs penultimate hop | |||
popping, which corresponds to the NEXT operation, then sends the | popping, which corresponds to the NEXT operation; the packet is then sent to | |||
packet to R8. The NEXT operation results in popping the outer label | R8. The NEXT operation results in popping the outer label | |||
and sending the packet as a pure IPv4 packet to R8.</t> | and sending the packet as a pure IPv4 packet to R8.</t> | |||
<t pn="section-a.1-10"> | ||||
<t> | In conclusion, the path followed by P1 is R1-R2--R3-R8. The ECMP | |||
In conclusion, the path followed by P1 is R1-R2--R3-R8. The ECMP- | awareness ensures that the traffic is load-shared between any ECMP | |||
awareness ensures that the traffic be load-shared between any ECMP | path; in this case, it's the two links between R2 and R3.</t> | |||
path, in this case the two links between R2 and R3.</t> | </section> | |||
<section anchor="convert-section-a.2" numbered="true" toc="include" remove | ||||
</section> | InRFC="false" pn="section-a.2"> | |||
<name slugifiedName="name-incoming-label-collision-ex">Incoming Label Co | ||||
<section title="Incoming Label Collision Examples" anchor="section-a.2">< | llision Examples</name> | |||
t> | <t pn="section-a.2-1"> | |||
This section describes few examples to illustrate the handling of | This section outlines several examples to illustrate the handling of | |||
label collision described in <xref target="section-2.5"/>.</t> | label collision described in <xref target="convert-section-2.5" format="defau | |||
lt" sectionFormat="of" derivedContent="Section 2.5"/>.</t> | ||||
<t> | <t pn="section-a.2-2"> | |||
For the examples in this section, we assume that Node A has the | For the examples in this section, we assume that Node A has the | |||
following:</t> | following:</t> | |||
<ul spacing="normal" bare="false" empty="false" pn="section-a.2-3"> | ||||
<t><list style="symbols"><t>OSPF default admin distance for implementatio | <li pn="section-a.2-3.1">OSPF default admin distance for implementatio | |||
n=50</t> | n=50</li> | |||
<li pn="section-a.2-3.2">IS-IS default admin distance for implementati | ||||
<t>ISIS default admin distance for implementation=60</t> | on=60</li> | |||
</ul> | ||||
</list> | <section anchor="convert-section-a.2.1" numbered="true" toc="include" re | |||
</t> | moveInRFC="false" pn="section-a.2.1"> | |||
<name slugifiedName="name-example-1">Example 1</name> | ||||
<section title="Example 1" anchor="section-a.2.1"><t> | <t pn="section-a.2.1-1"> | |||
Illustration of incoming label collision resolution for the same FEC | The following example illustrates incoming label collision resolution for the | |||
same FEC | ||||
type using MCC administrative distance.</t> | type using MCC administrative distance.</t> | |||
<t pn="section-a.2.1-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.1-3"> | ||||
<figure><artwork><![CDATA[ | Node A receives an OSPF Prefix-SID Advertisement from Node B for 198 | |||
o OSPF prefix SID advertisement from node B for 198.51.100.5/32 with | .51.100.5/32 with index=5. | |||
index=5 | Assuming that OSPF SRGB on Node A = [1000,1999], the incoming label | |||
is 1005. | ||||
o OSPF SRGB on node A = [1000,1999] | </t> | |||
<t pn="section-a.2.1-4"> | ||||
o Incoming label=1005 | ||||
]]></artwork> | ||||
</figure> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.1-5"> | ||||
IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | ||||
203.0.113.105/32 | ||||
with index=5. Assuming that IS-IS SRGB on Node A = [1000,1999], the incomi | ||||
ng label is 1005. | ||||
</t> | ||||
<t pn="section-a.2.1-6"> | ||||
FEC1 and FEC2 both use dynamic SID assignment. | ||||
<t><list style="symbols"><t>ISIS prefix SID advertisement from node C for | Since neither of the | |||
203.0.113.105/32 | FECs are of type 'SR Policy', we use the default admin distances of 50 and | |||
with index=5</t> | ||||
<t>ISIS SRGB on node A = [1000,1999]</t> | ||||
<t>Incoming label=1005</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
FEC1 and FEC2 both use dynamic SID assignment. Since neither ofthe | ||||
FEC types is SR Policy, we use the default admin distances of 50 and | ||||
60 to break the tie. So FEC1 wins.</t> | 60 to break the tie. So FEC1 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.2" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.2"> | ||||
<section title="Example 2" anchor="section-a.2.2"><t> | <name slugifiedName="name-example-2">Example 2</name> | |||
Illustration of incoming label collision resolution for different FEC | <t pn="section-a.2.2-1"> | |||
The following example Illustrates incoming label collision resolution for dif | ||||
ferent FEC | ||||
types using the MCC administrative distance.</t> | types using the MCC administrative distance.</t> | |||
<t pn="section-a.2.2-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.2-3"> | ||||
<t><list style="symbols"><t>Node A receives an OSPF prefix sid advertisem | Node A receives an OSPF Prefix-SID Advertisement from Node B for | |||
ent from node B for | 198.51.100.6/32 with index=6. | |||
198.51.100.6/32 with index=6</t> | Assuming that OSPF SRGB on Node A = [1000,1999], | |||
the incoming label on Node A corresponding to | ||||
<t>OSPF SRGB on node A = [1000,1999]</t> | 198.51.100.6/32 is 1006. | |||
</t> | ||||
<t>Hence the incoming label on node A corresponding to | <t pn="section-a.2.2-4"> | |||
198.51.100.6/32 is 1006</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.2-5"> | ||||
<t> | IS-IS on Node A assigns label 1006 to the globally significant | |||
ISIS on node A assigns the label 1006 to the globally significant | Adj-SID (i.e., when advertised, the L-Flag is clear in the Adj-SID | |||
adj-SID (I.e. when advertised the "L" flag is clear in the adj-SID | sub-TLV as described in <xref target="RFC8667" format="default" sectionFormat | |||
sub-TLV as described in <xref target="I-D.ietf-isis-segment-routing-extension | ="of" derivedContent="RFC8667"/>). Hence, the incoming label corresponding | |||
s"/>) | to this Adj-SID is 1006. Assume Node A allocates this Adj-SID | |||
towards one of its neighbors. Hence the incoming label corresponding | ||||
to this adj-SID 1006. Assume Node A allocates this adj-SID | ||||
dynamically, and it may differ across router reboots.</t> | dynamically, and it may differ across router reboots.</t> | |||
<t pn="section-a.2.2-6"> | ||||
<t> | ||||
FEC1 and FEC2 both use dynamic SID assignment. Since neither of the | FEC1 and FEC2 both use dynamic SID assignment. Since neither of the | |||
FEC types is SR Policy, we use the default admin distances of 50 and | FECs are of type 'SR Policy', we use the default admin distances of 50 and | |||
60 to break the tie. So FEC1 wins.</t> | 60 to break the tie. So FEC1 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.3" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.3"> | ||||
<section title="Example 3" anchor="section-a.2.3"><t> | <name slugifiedName="name-example-3">Example 3</name> | |||
Illustration of incoming label collision resolution based on | <t pn="section-a.2.3-1"> | |||
preferring static over dynamic SID assignment</t> | The following example illustrates incoming label collision resolution based o | |||
n | ||||
<t> | preferring static over dynamic SID assignment.</t> | |||
<t pn="section-a.2.3-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.3-3"> | ||||
<t> | OSPF on Node A receives a Prefix-SID Advertisement from Node B for | |||
OSPF on node A receives a prefix SID advertisement from node B for | 198.51.100.7/32 with index=7. Assuming that the OSPF SRGB on Node A | |||
198.51.100.7/32 with index=7. Assuming that the OSPF SRGB on node A | = [1000,1999], the incoming label corresponding to 198.51.100.7/32 | |||
is [1000,1999], then incoming label corresponding to 198.51.100.7/32 | is 1007.</t> | |||
is 1007</t> | <t pn="section-a.2.3-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.3-5"> | ||||
<t> | The operator on Node A configures IS-IS on Node A to assign label | |||
The operator on node A configures ISIS on node A to assign the label | 1007 to the globally significant Adj-SID (i.e., when advertised, the | |||
1007 to the globally significant adj-SID (I.e. when advertised the | L-Flag is clear in the Adj-SID sub-TLV as described in <xref target="RFC8667" | |||
"L" flag is clear in the adj-SID sub-TLV as described in <xref target="I-D.ie | format="default" sectionFormat="of" derivedContent="RFC8667"/>).</t> | |||
tf-isis-segment-routing-extensions"/>) towards one of its neighbor | <t pn="section-a.2.3-6"> | |||
advertisement from node A with label=1007</t> | Node A assigns this Adj-SID explicitly via configuration, so the Adj-SID | |||
survives router reboots.</t> | ||||
<t> | <t pn="section-a.2.3-7"> | |||
Node A assigns this adj-SID explicitly via configuration, so the adj- | ||||
SID survives router reboots.</t> | ||||
<t> | ||||
FEC1 uses dynamic SID assignment, while FEC2 uses explicit SID | FEC1 uses dynamic SID assignment, while FEC2 uses explicit SID | |||
assignment. So FEC2 wins.</t> | assignment. So FEC2 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.4" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.4"> | ||||
<section title="Example 4" anchor="section-a.2.4"><t> | <name slugifiedName="name-example-4">Example 4</name> | |||
Illustration of incoming label collision resolution using FEC type | <t pn="section-a.2.4-1"> | |||
default administrative distance</t> | The following example illustrates incoming label collision resolution using F | |||
EC type | ||||
<t> | default administrative distance.</t> | |||
<t pn="section-a.2.4-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.4-3"> | ||||
<t> | OSPF on Node A receives a Prefix-SID Advertisement from Node B for | |||
OSPF on node A receives a prefix SID advertisement from node B for | 198.51.100.8/32 with index=8. Assuming that OSPF SRGB on Node A = | |||
198.51.100.8/32 with index=8. Assuming that OSPF SRGB on node A = | ||||
[1000,1999], the incoming label corresponding to 198.51.100.8/32 is | [1000,1999], the incoming label corresponding to 198.51.100.8/32 is | |||
1008.</t> | 1008.</t> | |||
<t pn="section-a.2.4-4"> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.4-5"> | ||||
<t> | Suppose the SR Policy Advertisement from the controller to Node A for the | |||
Suppose the SR Policy advertisement from controller to node A for the | policy identified by (Endpoint = 192.0.2.208, color = 100) that | |||
policy identified by (Endpoint = 192.0.2.208, color = 100) and | consists of SID-List=<S1, S2> assigns the globally significant | |||
consisting of SID-List = <S1, S2> assigns the globally significant | Binding-SID label 1008.</t> | |||
Binding-SID label 1008</t> | <t pn="section-a.2.4-6"> | |||
From the point of view of Node A, FEC1 and FEC2 both use dynamic SID | ||||
<t> | ||||
From the point of view of node A, FEC1 and FEC2 both use dynamic SID | ||||
assignment. Based on the default administrative distance outlined in | assignment. Based on the default administrative distance outlined in | |||
<xref target="section-2.5.1"/>, the binding SID has a higher administrative d | <xref target="convert-section-2.5.1" format="default" sectionFormat="of" deri | |||
istance | vedContent="Section 2.5.1"/>, the Binding SID has a higher administrative distan | |||
than the prefix-SID and hence FEC1 wins.</t> | ce | |||
than the Prefix-SID; hence, FEC1 wins.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-a.2.5" numbered="true" toc="include" re | ||||
<section title="Example 5" anchor="section-a.2.5"><t> | moveInRFC="false" pn="section-a.2.5"> | |||
Illustration of incoming label collision resolution based on FEC type | <name slugifiedName="name-example-5">Example 5</name> | |||
preference</t> | <t pn="section-a.2.5-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
<t> | n FEC type | |||
preference.</t> | ||||
<t pn="section-a.2.5-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.5-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.110/32 with index=10. Assuming that the IS-IS SRGB on Node A | |||
203.0.113.110/32 with index=10. Assuming that the ISIS SRGB on node A | = [1000,1999], the incoming label corresponding to 203.0.113.110/32 | |||
is [1000,1999], then incoming label corresponding to 203.0.113.110/32 | ||||
is 1010.</t> | is 1010.</t> | |||
<t pn="section-a.2.5-4"> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.5-5"> | ||||
<t> | IS-IS on Node A assigns label 1010 to the globally significant | |||
ISIS on node A assigns the label 1010 to the globally significant | Adj-SID (i.e., when advertised, the L-Flag is clear in the Adj-SID | |||
adj-SID (I.e. when advertised the "L" flag is clear in the adj-SID | sub-TLV as described in <xref target="RFC8667" format="default" sectionFormat | |||
sub-TLV as described in <xref target="I-D.ietf-isis-segment-routing-extension | ="of" derivedContent="RFC8667"/>).</t> | |||
s"/>) | <t pn="section-a.2.5-6"> | |||
towards one of its neighbors).</t> | Node A allocates this Adj-SID dynamically, and it may differ across | |||
router reboots. Hence, both FEC1 and FEC2 both use dynamic SID | ||||
<t> | ||||
Node A allocates this adj-SID dynamically, and it may differ across | ||||
router reboots. Hence both FEC1 and FEC2 both use dynamic SID | ||||
assignment.</t> | assignment.</t> | |||
<t pn="section-a.2.5-7"> | ||||
<t> | ||||
Since both FECs are from the same MCC, they have the same default | Since both FECs are from the same MCC, they have the same default | |||
admin distance. So we compare FEC type code-point. FEC1 has FEC type | admin distance. So we compare the FEC type codepoints. FEC1 has FEC type | |||
code-point=120, while FEC2 has FEC type code-point=130. Therefore, | codepoint=120, while FEC2 has FEC type codepoint=130. Therefore, | |||
FEC1 wins.</t> | FEC1 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.6" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.6"> | ||||
<section title="Example 6" anchor="section-a.2.6"><t> | <name slugifiedName="name-example-6">Example 6</name> | |||
Illustration of incoming label collision resolution based on address | <t pn="section-a.2.6-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
n address | ||||
family preference.</t> | family preference.</t> | |||
<t pn="section-a.2.6-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.6-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives prefix SID advertisement from node B for | 203.0.113.111/32 with index=11. Assuming that the IS-IS SRGB on Node A | |||
203.0.113.111/32 with index 11. Assuming that the ISIS SRGB on node A | = [1000,1999], the incoming label on Node A for 203.0.113.111/32 is | |||
is [1000,1999], the incoming label on node A for 203.0.113.111/32 is | ||||
1011.</t> | 1011.</t> | |||
<t pn="section-a.2.6-4"> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.6-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A prefix SID advertisement from node C for | 2001:DB8:1000::11/128 with index=11. Assuming that the IS-IS SRGB on | |||
2001:DB8:1000::11/128 with index=11. Assuming that the ISIS SRGB on | Node A = [1000,1999], the incoming label on Node A for | |||
node A is [1000,1999], the incoming label on node A for | 2001:DB8:1000::11/128 is 1011.</t> | |||
2001:DB8:1000::11/128 is 1011</t> | <t pn="section-a.2.6-6"> | |||
<t> | ||||
FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | |||
from the same MCC, they have the same default admin distance. So we | from the same MCC, they have the same default admin distance. So we | |||
compare FEC type code-point. Both FECs have FEC type code-point=120. | compare the FEC type codepoints. Both FECs have FEC type codepoint=120. | |||
So we compare address family. Since IPv4 is preferred over IPv6, FEC1 | So we compare the address family. Since IPv4 is preferred over IPv6, FEC1 | |||
wins.</t> | wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.7" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.7"> | ||||
<section title="Example 7" anchor="section-a.2.7"><t> | <name slugifiedName="name-example-7">Example 7</name> | |||
Illustration incoming label collision resolution based on prefix | <t pn="section-a.2.7-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
n prefix | ||||
length.</t> | length.</t> | |||
<t pn="section-a.2.7-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.7-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.112/32 with index=12. Assuming that IS-IS SRGB on Node A = | |||
203.0.113.112/32 with index 12. Assuming that ISIS SRGB on node A is | [1000,1999], the incoming label for 203.0.113.112/32 on Node A is | |||
[1000,1999], the incoming label for 203.0.113.112/32 on node A is | ||||
1012.</t> | 1012.</t> | |||
<t pn="section-a.2.7-4"> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.7-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A receives a prefix SID advertisement from node C for | 203.0.113.128/30 with index=12. Assuming that the IS-IS SRGB on Node A | |||
203.0.113.128/30 with index 12. Assuming that the ISIS SRGB on node A | = [1000,1999], the incoming label for 203.0.113.128/30 on Node A is | |||
is [1000,1999], then incoming label for 203.0.113.128/30 on node A is | 1012.</t> | |||
1012</t> | <t pn="section-a.2.7-6"> | |||
<t> | ||||
FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | |||
from the same MCC, they have the same default admin distance. So we | from the same MCC, they have the same default admin distance. So we | |||
compare FEC type code-point. Both FECs have FEC type code-point=120. | compare the FEC type codepoints. Both FECs have FEC type codepoint=120. | |||
So we compare address family. Both are IPv4 address family, so we | So we compare the address family. Both are a part of the IPv4 address family | |||
compare prefix length. FEC1 has prefix length=32, and FEC2 has | , so we | |||
compare the prefix length. FEC1 has prefix length=32, and FEC2 has | ||||
prefix length=30, so FEC2 wins.</t> | prefix length=30, so FEC2 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.8" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.2.8"> | ||||
<section title="Example 8" anchor="section-a.2.8"><t> | <name slugifiedName="name-example-8">Example 8</name> | |||
Illustration of incoming label collision resolution based on the | <t pn="section-a.2.8-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
n the | ||||
numerical value of the FECs.</t> | numerical value of the FECs.</t> | |||
<t pn="section-a.2.8-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.8-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.113/32 with index=13. Assuming that IS-IS SRGB on Node A = | |||
203.0.113.113/32 with index 13. Assuming that ISIS SRGB on node A is | [1000,1999], the incoming label for 203.0.113.113/32 on Node A | |||
[1000,1999], then the incoming label for 203.0.113.113/32 on node A | is 1013.</t> | |||
is 1013</t> | <t pn="section-a.2.8-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.8-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A receives a prefix SID advertisement from node C for | 203.0.113.213/32 with index=13. Assuming that IS-IS SRGB on Node A = | |||
203.0.113.213/32 with index 13. Assuming that ISIS SRGB on node A is | [1000,1999], the incoming label for 203.0.113.213/32 on Node A | |||
[1000,1999], then the incoming label for 203.0.113.213/32 on node A | is 1013.</t> | |||
is 1013</t> | <t pn="section-a.2.8-6"> | |||
<t> | ||||
FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | FEC1 and FEC2 both use dynamic SID assignment. Since both FECs are | |||
from the same MCC, they have the same default admin distance. So we | from the same MCC, they have the same default admin distance. So we | |||
compare FEC type code-point. Both FECs have FEC type code-point=120. | compare the FEC type codepoints. Both FECs have FEC type codepoint=120. | |||
So we compare address family. Both are IPv4 address family, so we | So we compare the address family. Both are a part of the IPv4 address family | |||
compare prefix length. Prefix lengths are the same, so we compare | , so we | |||
prefix. FEC1 has the lower prefix, so FEC1 wins.</t> | compare the prefix length. Prefix lengths are the same, so we compare | |||
the prefix. FEC1 has the lower prefix, so FEC1 wins.</t> | ||||
</section> | </section> | |||
<section anchor="convert-section-a.2.9" numbered="true" toc="include" re | ||||
<section title="Example 9" anchor="section-a.2.9"><t> | moveInRFC="false" pn="section-a.2.9"> | |||
Illustration of incoming label collision resolution based on routing | <name slugifiedName="name-example-9">Example 9</name> | |||
instance ID.</t> | <t pn="section-a.2.9-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
<t> | n the Routing | |||
Instance ID.</t> | ||||
<t pn="section-a.2.9-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.9-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.114/32 with index=14. Assume that this IS-IS instance on | |||
203.0.113.114/32 with index 14. Assume that this ISIS instance on | Node A has Routing Instance ID = 1000 and SRGB = [1000,1999]. Hence, | |||
node A has the Routing Instance ID 1000 and SRGB [1000,1999]. Hence | the incoming label for 203.0.113.114/32 on Node A is 1014.</t> | |||
the incoming label for 203.0.113.114/32 on node A is 1014</t> | <t pn="section-a.2.9-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.9-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A receives a prefix SID advertisement from node C for | ||||
203.0.113.114/32 with index=14. Assume that this is another instance | 203.0.113.114/32 with index=14. Assume that this is another instance | |||
of ISIS on node A with a different routing Instance ID 2000 but the | of IS-IS on Node A but Routing Instance ID = 2000 is different and | |||
same SRGB [1000,1999]. Hence incoming label for 203.0.113.114/32 on | SRGB = [1000,1999] is the same. Hence, the incoming label for 203.0.113.114/3 | |||
node A 1014</t> | 2 on | |||
Node A is 1014.</t> | ||||
<t> | <t pn="section-a.2.9-6"> | |||
These two FECs match all the way through the prefix length and | These two FECs match all the way through the prefix length and | |||
prefix. So Routing Instance ID breaks the tie, with FEC1 winning.</t> | prefix. So the Routing Instance ID breaks the tie, and FEC1 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.10" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-a.2.10"> | ||||
<section title="Example 10" anchor="section-a.2.10"><t> | <name slugifiedName="name-example-10">Example 10</name> | |||
Illustration of incoming label collision resolution based on topology | <t pn="section-a.2.10-1"> | |||
The following example illustrates incoming label collision resolution based o | ||||
n the topology | ||||
ID.</t> | ID.</t> | |||
<t pn="section-a.2.10-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.10-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.115/32 with index=15. Assume that this IS-IS instance on | |||
203.0.113.115/32 with index=15. Assume that this ISIS instance on | Node A has Routing Instance ID = 1000. Assume that the prefix | |||
node A has Routing Instance ID 1000. Assume that the prefix | advertisement of 203.0.113.115/32 was received in the IS-IS Multi-topology | |||
advertisement of 203.0.113.115/32 was received in ISIS Multi-topology | advertisement with ID = 50. If the IS-IS SRGB for this routing | |||
advertisement with ID = 50. If the ISIS SRGB for this routing | instance on Node A = [1000,1999], then the incoming label of | |||
instance on node A is [1000,1999], then incoming label of | 203.0.113.115/32 for topology 50 on Node A is 1015.</t> | |||
203.0.113.115/32 for topology 50 on node A is 1015</t> | <t pn="section-a.2.10-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.10-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A receives a prefix SID advertisement from node C for | 203.0.113.115/32 with index=15. Assume that it has the same Routing | |||
203.0.113.115/32 with index 15. Assume that it is the same routing | Instance ID = 1000, but 203.0.113.115/32 was advertised with | |||
Instance ID = 1000 but 203.0.113.115/32 was advertised with a | IS-IS Multi-topology ID = 40, which is different. If the IS-IS SRGB on Node A | |||
different ISIS Multi-topology ID = 40. If the ISIS SRGB on node A is | = | |||
[1000,1999], then incoming label of 203.0.113.115/32 for topology 40 | [1000,1999], then the incoming label of 203.0.113.115/32 for topology 40 | |||
on node A is also 1015</t> | on Node A is also 1015.</t> | |||
<t pn="section-a.2.10-6"> | ||||
<t> | Since these two FECs match all the way through the prefix length, prefix, | |||
These two FECs match all the way through the prefix length, prefix, | and Routing Instance ID, we compare the IS-IS Multi-topology ID, so FEC2 | |||
and Routing Instance ID. We compare ISIS Multi-topology ID, so FEC2 | ||||
wins.</t> | wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.11" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-a.2.11"> | ||||
<section title="Example 11" anchor="section-a.2.11"><t> | <name slugifiedName="name-example-11">Example 11</name> | |||
Illustration of incoming label collision for resolution based on | <t pn="section-a.2.11-1"> | |||
algorithm ID.</t> | The following example illustrates incoming label collision for resolution bas | |||
ed on | ||||
<t> | the algorithm ID.</t> | |||
<t pn="section-a.2.11-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.11-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.116/32 with index=16. Assume that IS-IS on Node A has Routing | |||
203.0.113.116/32 with index=16 Assume that ISIS on node A has Routing | Instance ID = 1000. Assume that Node B advertised 203.0.113.116/32 | |||
Instance ID = 1000. Assume that node B advertised 203.0.113.116/32 | with IS-IS Multi-topology ID = 50 and SR algorithm = 0. Assume that | |||
with ISIS Multi-topology ID = 50 and SR algorithm = 0. Assume that | the IS-IS SRGB on Node A = [1000,1999]. Hence, the incoming label | |||
the ISIS SRGB on node A = [1000,1999]. Hence the incoming label | ||||
corresponding to this advertisement of 203.0.113.116/32 is 1016.</t> | corresponding to this advertisement of 203.0.113.116/32 is 1016.</t> | |||
<t pn="section-a.2.11-4"> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.11-5"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | |||
ISIS on node A receives a prefix SID advertisement from node C for | 203.0.113.116/32 with index=16. Assume that it is the same IS-IS | |||
203.0.113.116/32 with index=16. Assume that it is the same ISIS | instance on Node A with Routing Instance ID = 1000. Also assume that | |||
instance on node A with Routing Instance ID = 1000. Also assume that | Node C advertised 203.0.113.116/32 with IS-IS Multi-topology ID = 50 | |||
node C advertised 203.0.113.116/32 with ISIS Multi-topology ID = 50 | ||||
but with SR algorithm = 22. Since it is the same routing instance, | but with SR algorithm = 22. Since it is the same routing instance, | |||
the SRGB on node A = [1000,1999]. Hence the incoming label | the SRGB on Node A = [1000,1999]. Hence, the incoming label | |||
corresponding to this advertisement of 203.0.113.116/32 by node C is | corresponding to this advertisement of 203.0.113.116/32 by Node C is | |||
also 1016.</t> | also 1016.</t> | |||
<t pn="section-a.2.11-6"> | ||||
<t> | Since these two FECs match all the way through in terms of the prefix length, | |||
These two FECs match all the way through the prefix length, prefix, | prefix, | |||
and Routing Instance ID, and Multi-topology ID. We compare SR | Routing Instance ID, and Multi-topology ID, we compare the SR | |||
algorithm ID, so FEC1 wins.</t> | algorithm IDs, so FEC1 wins.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.12" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-a.2.12"> | ||||
<section title="Example 12" anchor="section-a.2.12"><t> | <name slugifiedName="name-example-12">Example 12</name> | |||
Illustration of incoming label collision resolution based on FEC | <t pn="section-a.2.12-1"> | |||
numerical value and independent of how the SID assigned to the | The following example illustrates incoming label collision resolution based o | |||
n the FEC | ||||
numerical value, independent of how the SID is assigned to the | ||||
colliding FECs.</t> | colliding FECs.</t> | |||
<t pn="section-a.2.12-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.12-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.117/32 with index=17. Assume that the IS-IS SRGB on Node A | |||
203.0.113.117/32 with index 17. Assume that the ISIS SRGB on node A | = [1000,1999]; thus, the incoming label is 1017.</t> | |||
is [1000,1999], then the incoming label is 1017</t> | <t pn="section-a.2.12-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.12-5"> | ||||
<t> | Suppose there is an IS-IS Mapping Server Advertisement (SID / Label | |||
Suppose there is an ISIS mapping server advertisement (SID/Label | Binding TLV) from Node D that has range = 100 and prefix = 203.0.113.1/32. | |||
Binding TLV) from node D has Range 100 and Prefix = 203.0.113.1/32. | Suppose this Mapping Server Advertisement generates 100 mappings, one | |||
Suppose this mapping server advertisement generates 100 mappings, one | of which maps 203.0.113.17/32 to index=17. | |||
of which maps 203.0.113.17/32 to index 17. Assuming that it is the | Assuming that it is the | |||
same ISIS instance, then the SRGB is [1000,1999] and hence the | same IS-IS instance, the SRGB = [1000,1999] and hence the | |||
incoming label for 1017.</t> | incoming label for 1017.</t> | |||
<t pn="section-a.2.12-6"> | ||||
<t> | Even though FEC1 comes from a normal Prefix-SID Advertisement and | |||
The fact that FEC1 comes from a normal prefix SID advertisement and | FEC2 is generated from a Mapping Server Advertisement, it is not used as | |||
FEC2 is generated from a mapping server advertisement is not used as | a tiebreaking parameter. Both FECs use dynamic SID assignment, are | |||
a tie-breaking parameter. Both FECs use dynamic SID assignment, are | from the same MCC, and have the same FEC type codepoint=120. Their | |||
from the same MCC, have the same FEC type code-point=120. Their | prefix lengths are the same as well. FEC2 wins based on its lower | |||
prefix lengths are the same as well. FEC2 wins based on lower | ||||
numerical prefix value, since 203.0.113.17 is less than | numerical prefix value, since 203.0.113.17 is less than | |||
203.0.113.117.</t> | 203.0.113.117.</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.2.13" numbered="true" toc="include" r | |||
emoveInRFC="false" pn="section-a.2.13"> | ||||
<section title="Example 13" anchor="section-a.2.13"><t> | <name slugifiedName="name-example-13">Example 13</name> | |||
Illustration of incoming label collision resolution based on address | <t pn="section-a.2.13-1"> | |||
family preference</t> | The following example illustrates incoming label collision resolution based o | |||
n address | ||||
<t> | family preference.</t> | |||
<t pn="section-a.2.13-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.13-3"> | ||||
<t> | SR Policy Advertisement from the controller to Node A. Endpoint | |||
SR Policy advertisement from controller to node A. Endpoint | address=2001:DB8:3000::100, color=100, SID-List=<S1, S2>, and the | |||
address=2001:DB8:3000::100, color=100, SID-List=<S1, S2> and the | Binding-SID label=1020.</t> | |||
Binding-SID label=1020</t> | <t pn="section-a.2.13-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.13-5"> | ||||
<figure><artwork><![CDATA[ | SR Policy Advertisement from controller to Node A. Endpoint | |||
SR Policy advertisement from controller to node A. Endpoint | address=192.0.2.60, color=100, SID-List=<S3, S4>, and the Binding-SID | |||
address=192.0.2.60, color=100, SID-List=<S3, S4> and the Binding-SID | label=1020.</t> | |||
label=1020 | <t pn="section-a.2.13-6">The FEC tiebreakers match, and they have the | |||
The FECs match through the tie-breaks up to and including having the | same FEC type codepoint=140. Thus, FEC2 wins based on the IPv4 address family | |||
same FEC type code-point=140. FEC2 wins based on IPv4 address family | being preferred over IPv6.</t> | |||
being preferred over IPv6. | </section> | |||
]]></artwork> | <section anchor="convert-section-a.2.14" numbered="true" toc="include" r | |||
</figure> | emoveInRFC="false" pn="section-a.2.14"> | |||
</section> | <name slugifiedName="name-example-14">Example 14</name> | |||
<t pn="section-a.2.14-1"> | ||||
<section title="Example 14" anchor="section-a.2.14"><t> | The following example illustrates incoming label resolution based on the nume | |||
Illustration of incoming label resolution based on numerical value of | rical value of | |||
the policy endpoint.</t> | the policy endpoint.</t> | |||
<t pn="section-a.2.14-2"> | ||||
<t> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.2.14-3"> | ||||
<t> | SR Policy Advertisement from the controller to Node A. Endpoint | |||
SR Policy advertisement from controller to node A. Endpoint | address=192.0.2.70, color=100, SID-List=<S1, S2>, and Binding-SID | |||
address=192.0.2.70, color=100, SID-List=<S1, S2> and Binding-SID | label=1021.</t> | |||
label=1021</t> | <t pn="section-a.2.14-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.2.14-5"> | ||||
<t> | SR Policy Advertisement from the controller to Node A. Endpoint | |||
SR Policy advertisement from controller to node A Endpoint | address=192.0.2.71, color=100, SID-List=<S3, S4>, and Binding-SID | |||
address=192.0.2.71, color=100, SID-List=<S3, S4> and Binding-SID | label=1021.</t> | |||
label=1021</t> | <t pn="section-a.2.14-6"> | |||
The FEC tiebreakers match, and they have the | ||||
<t> | same address family. Thus, FEC1 wins by having the lower numerical endpoint | |||
The FECs match through the tie-breaks up to and including having the | ||||
same address family. FEC1 wins by having the lower numerical endpoint | ||||
address value.</t> | address value.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="convert-section-a.3" numbered="true" toc="include" remove | ||||
</section> | InRFC="false" pn="section-a.3"> | |||
<name slugifiedName="name-examples-for-the-effect-of-">Examples for the | ||||
<section title="Examples for the Effect of Incoming Label Collision on Ou | Effect of Incoming Label Collision on an Outgoing Label</name> | |||
tgoing Label" anchor="section-a.3"><t> | <t pn="section-a.3-1"> | |||
This section presents examples to illustrate the effect of incoming | This section presents examples to illustrate the effect of incoming | |||
label collision on the selection of the outgoing label described in | label collision on the selection of the outgoing label as described in | |||
<xref target="section-2.6"/>.</t> | <xref target="convert-section-2.6" format="default" sectionFormat="of" derive | |||
dContent="Section 2.6"/>.</t> | ||||
<section title="Example 1" anchor="section-a.3.1"><t> | <section anchor="convert-section-a.3.1" numbered="true" toc="include" re | |||
Illustration of the effect of incoming label resolution on the | moveInRFC="false" pn="section-a.3.1"> | |||
outgoing label</t> | <name slugifiedName="name-example-1-2">Example 1</name> | |||
<t pn="section-a.3.1-1"> | ||||
<t> | The following example illustrates the effect of incoming label resolution on | |||
the | ||||
outgoing label.</t> | ||||
<t pn="section-a.3.1-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.3.1-3"> | ||||
<t> | IS-IS on Node A receives a Prefix-SID Advertisement from Node B for | |||
ISIS on node A receives a prefix SID advertisement from node B for | 203.0.113.122/32 with index=22. Assuming that the IS-IS SRGB on Node A | |||
203.0.113.122/32 with index 22. Assuming that the ISIS SRGB on node A | = [1000,1999], the corresponding incoming label is 1022.</t> | |||
is [1000,1999] the corresponding incoming label is 1022.</t> | <t pn="section-a.3.1-4"> | |||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.3.1-5"> | ||||
IS-IS on Node A receives a Prefix-SID Advertisement from Node C for | ||||
203.0.113.222/32 with index=22. Assuming that the IS-IS SRGB on Node A | ||||
= [1000,1999], the corresponding incoming label is 1022.</t> | ||||
<t pn="section-a.3.1-6"> | ||||
<t> | FEC1 wins based on the lowest numerical prefix value. This means that | |||
ISIS on node A receives a prefix SID advertisement from node C for | Node A installs a transit MPLS forwarding entry to swap incoming | |||
203.0.113.222/32 with index=22 Assuming that the ISIS SRGB on node A | label 1022 with outgoing label N and to use outgoing interface I. N is | |||
is [1000,1999] the corresponding incoming label is 1022.</t> | determined by the index associated with FEC1 (index=22) and the SRGB | |||
<t> | ||||
FEC1 wins based on lowest numerical prefix value. This means that | ||||
node A installs a transit MPLS forwarding entry to SWAP incoming | ||||
label 1022, with outgoing label N and use outgoing interface I. N is | ||||
determined by the index associated with FEC1 (index 22) and the SRGB | ||||
advertised by the next-hop node on the shortest path to reach | advertised by the next-hop node on the shortest path to reach | |||
203.0.113.122/32.</t> | 203.0.113.122/32.</t> | |||
<t pn="section-a.3.1-7"> | ||||
<t> | ||||
Node A will generally also install an imposition MPLS forwarding | Node A will generally also install an imposition MPLS forwarding | |||
entry corresponding to FEC1 for incoming prefix=203.0.113.122/32 | entry corresponding to FEC1 for incoming prefix=203.0.113.122/32 | |||
pushing outgoing label N, and using outgoing interface I.</t> | pushing outgoing label N, and using outgoing interface I.</t> | |||
<t pn="section-a.3.1-8"> | ||||
<t> | The rule in <xref target="convert-section-2.6" format="default" sectionFormat | |||
The rule in <xref target="section-2.6"/> means node A MUST NOT install an ing | ="of" derivedContent="Section 2.6"/> means Node A <bcp14>MUST NOT</bcp14> instal | |||
ress | l an ingress | |||
MPLS forwarding entry corresponding to FEC2 (the losing FEC, which | MPLS forwarding entry corresponding to FEC2 (the losing FEC, which | |||
would be for prefix 203.0.113.222/32).</t> | would be for prefix 203.0.113.222/32).</t> | |||
</section> | ||||
</section> | <section anchor="convert-section-a.3.2" numbered="true" toc="include" re | |||
moveInRFC="false" pn="section-a.3.2"> | ||||
<section title="Example 2" anchor="section-a.3.2"><t> | <name slugifiedName="name-example-2-2">Example 2</name> | |||
Illustration of the effect of incoming label collision resolution on | <t pn="section-a.3.2-1"> | |||
outgoing label programming on node A</t> | The following example illustrates the effect of incoming label collision reso | |||
lution on | ||||
<t> | outgoing label programming on Node A.</t> | |||
<t pn="section-a.3.2-2"> | ||||
FEC1:</t> | FEC1:</t> | |||
<t pn="section-a.3.2-3">SR Policy Advertisement from the controller to | ||||
<t><list style="symbols"><t>SR Policy advertisement from controller to no | Node A. | |||
de A</t> | Endpoint address=192.0.2.80, color=100, SID-List=<S1, S2>, and | |||
Binding-SID label=1023. | ||||
<t>Endpoint address=192.0.2.80, color=100, SID-List=<S1, S2></t> | </t> | |||
<t pn="section-a.3.2-4"> | ||||
<t>Binding-SID label=1023</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
FEC2:</t> | FEC2:</t> | |||
<t pn="section-a.3.2-5"> | ||||
<t><list style="symbols"><t>SR Policy advertisement from controller to no | SR Policy Advertisement from controller to Node A. | |||
de A</t> | Endpoint address=192.0.2.81, color=100, SID-List=<S3, S4>, and | |||
Binding-SID label=1023. | ||||
<t>Endpoint address=192.0.2.81, color=100, SID-List=<S3, S4></t> | </t> | |||
<t pn="section-a.3.2-6"> | ||||
<t>Binding-SID label=1023</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
FEC1 wins by having the lower numerical endpoint address value. This | FEC1 wins by having the lower numerical endpoint address value. This | |||
means that node A installs a transit MPLS forwarding entry to SWAP | means that Node A installs a transit MPLS forwarding entry to swap | |||
incoming label=1023, with outgoing labels and outgoing interface | incoming label=1023 with outgoing labels, and the outgoing interface | |||
determined by the SID-List for FEC1.</t> | is determined by the SID-List for FEC1.</t> | |||
<t pn="section-a.3.2-7"> | ||||
<t> | In this example, we assume that Node A receives two BGP/VPN routes:</t> | |||
In this example, we assume that node A receives two BGP/VPN routes:</t> | <ul spacing="normal" bare="false" empty="false" pn="section-a.3.2-8"> | |||
<li pn="section-a.3.2-8.1">R1 with VPN label=V1, BGP next hop = 192. | ||||
<t><list style="symbols"><t>R1 with VPN label=V1, BGP next-hop = 192.0.2. | 0.2.80, and color=100</li> | |||
80, and color=100,</t> | <li pn="section-a.3.2-8.2">R2 with VPN label=V2, BGP next hop = 192. | |||
0.2.81, and color=100</li> | ||||
<t>R2 with VPN label=V2, BGP next-hop = 192.0.2.81, and color=100,</t> | </ul> | |||
<t pn="section-a.3.2-9"> | ||||
</list> | We also assume that Node A has a BGP policy that matches color=100 | |||
</t> | and allows its usage as Service Level Agreement (SLA) steering information. I | |||
n this case, | ||||
<t> | Node A will install a VPN route with label stack = <S1,S2,V1> | |||
We also assume that A has a BGP policy which matches on color=100 | ||||
that allows that its usage as SLA steering information. In this case, | ||||
node A will install a VPN route with label stack = <S1,S2,V1> | ||||
(corresponding to FEC1).</t> | (corresponding to FEC1).</t> | |||
<t pn="section-a.3.2-10"> | ||||
<t> | The rule described in <xref target="convert-section-2.6" format="default" sec | |||
The rule described in section 2.6 means that node A MUST NOT install | tionFormat="of" derivedContent="Section 2.6"/> means that Node A <bcp14>MUST NOT | |||
</bcp14> install | ||||
a VPN route with label stack = <S3,S4,V1> (corresponding to FEC2.)</t> | a VPN route with label stack = <S3,S4,V1> (corresponding to FEC2.)</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="convert-section-7" numbered="false" toc="include" removeInR | |||
FC="false" pn="section-appendix.b"> | ||||
</section> | <name slugifiedName="name-acknowledgements">Acknowledgements</name> | |||
<t pn="section-appendix.b-1"> | ||||
</back> | The authors would like to thank Les Ginsberg, Chris Bowers, Himanshu | |||
Shah, Adrian Farrel, Alexander Vainshtein, Przemyslaw Krol, Darren | ||||
</rfc> | Dukes, Zafar Ali, and Martin Vigoureux for their valuable comments on | |||
this document.</t> | ||||
</section> | ||||
<section anchor="convert-section-6" numbered="false" toc="include" removeInR | ||||
FC="false" pn="section-appendix.c"> | ||||
<name slugifiedName="name-contributors">Contributors</name> | ||||
<t pn="section-appendix.c-1"> | ||||
The following contributors have substantially helped the definition | ||||
and editing of the content of this document:</t> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-2"> | ||||
Martin Horneffer | ||||
Deutsche Telekom | ||||
Email: Martin.Horneffer@telekom.de</artwork> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-3"> | ||||
Wim Henderickx | ||||
Nokia | ||||
Email: wim.henderickx@nokia.com</artwork> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-4"> | ||||
Jeff Tantsura | ||||
Email: jefftant@gmail.com</artwork> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-5"> | ||||
Edward Crabbe | ||||
Email: edward.crabbe@gmail.com</artwork> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-6"> | ||||
Igor Milojevic | ||||
Email: milojevicigor@gmail.com</artwork> | ||||
<artwork name="" type="" align="left" alt="" pn="section-appendix.c-7"> | ||||
Saku Ytti | ||||
Email: saku@ytti.fi</artwork> | ||||
</section> | ||||
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
="include" pn="section-appendix.d"> | ||||
<name slugifiedName="name-authors-addresses">Authors' Addresses</name> | ||||
<author fullname="Ahmed Bashandy" initials="A." role="editor" surname="Bas | ||||
handy"> | ||||
<organization showOnFrontPage="true">Arrcus</organization> | ||||
<address> | ||||
<email>abashandy.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Clarence Filsfils" initials="C." role="editor" surname=" | ||||
Filsfils"> | ||||
<organization showOnFrontPage="true">Cisco Systems, Inc.</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Brussels</street> | ||||
<street>Belgium</street> | ||||
</postal> | ||||
<email>cfilsfil@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Stefano Previdi" initials="S." surname="Previdi"> | ||||
<organization showOnFrontPage="true">Cisco Systems, Inc.</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Italy</street> | ||||
</postal> | ||||
<email>stefano@previdi.net</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Bruno Decraene" initials="B." surname="Decraene"> | ||||
<organization showOnFrontPage="true">Orange</organization> | ||||
<address> | ||||
<postal> | ||||
<street>France</street> | ||||
</postal> | ||||
<email>bruno.decraene@orange.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Stephane Litkowski" initials="S." surname="Litkowski"> | ||||
<organization showOnFrontPage="true">Orange</organization> | ||||
<address> | ||||
<postal> | ||||
<street>France</street> | ||||
</postal> | ||||
<email>slitkows.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Rob Shakir" initials="R." surname="Shakir"> | ||||
<organization showOnFrontPage="true">Google</organization> | ||||
<address> | ||||
<postal> | ||||
<street>United States of America</street> | ||||
</postal> | ||||
<email>robjs@google.com</email> | ||||
</address> | ||||
</author> | ||||
</section> | ||||
</back> | ||||
</rfc> | ||||
End of changes. 202 change blocks. | ||||
1593 lines changed or deleted | 2597 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/ |