rfc8754xml2.original.xml | rfc8754.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="utf-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | ||||
<?rfc tocdepth="3"?> | ||||
<?rfc tocindent="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-6man-segment-routing-header-26" | ||||
ipr="trust200902"> | ||||
<front> | ||||
<title abbrev="IPv6 Segment Routing Header (SRH)">IPv6 Segment Routing | ||||
Header (SRH)</title> | ||||
<author fullname="Clarence Filsfils" initials="C." role="editor" | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
surname="Filsfils"> | ||||
<organization>Cisco Systems, Inc.</organization> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | ||||
consensus="true" docName="draft-ietf-6man-segment-routing-header-26" | ||||
number="8754" ipr="trust200902" obsoletes="" updates="" | ||||
submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" | ||||
symRefs="true" sortRefs="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 2.35.0 --> | ||||
<front> | ||||
<title abbrev="IPv6 Segment Routing Header (SRH)">IPv6 Segment Routing Heade | ||||
r (SRH)</title> | ||||
<seriesInfo name="RFC" value="8754" /> | ||||
<author fullname="Clarence Filsfils" initials="C." role="editor" surname="Fi | ||||
lsfils"> | ||||
<organization>Cisco Systems, Inc.</organization> | ||||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<city>Brussels</city> | <city>Brussels</city> | |||
<region/> | <region/> | |||
<code/> | <code/> | |||
<country>BE</country> | <country>BE</country> | |||
</postal> | </postal> | |||
<email>cfilsfil@cisco.com</email> | <email>cfilsfil@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Darren Dukes" initials="D." role="editor" surname="Dukes"> | ||||
<author fullname="Darren Dukes" initials="D." role="editor" | ||||
surname="Dukes"> | ||||
<organization>Cisco Systems, Inc.</organization> | <organization>Cisco Systems, Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<city>Ottawa</city> | <city>Ottawa</city> | |||
<region/> | <region/> | |||
<code/> | <code/> | |||
<country>CA</country> | <country>CA</country> | |||
</postal> | </postal> | |||
<email>ddukes@cisco.com</email> | <email>ddukes@cisco.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Stefano Previdi" initials="S." surname="Previdi"> | <author fullname="Stefano Previdi" initials="S." surname="Previdi"> | |||
<organization>Huawei</organization> | <organization>Huawei</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<city/> | <city/> | |||
<code/> | <code/> | |||
<country>Italy</country> | <country>Italy</country> | |||
</postal> | </postal> | |||
<email>stefano@previdi.net</email> | <email>stefano@previdi.net</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="John Leddy" initials="J." surname="Leddy"> | <author fullname="John Leddy" initials="J." surname="Leddy"> | |||
<organization>Individual</organization> | <organization>Individual</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | <street/> | |||
<city/> | <city/> | |||
<region/> | <region/> | |||
<code/> | <code/> | |||
<country>US</country> | <country>US</country> | |||
</postal> | </postal> | |||
<email>john@leddy.net</email> | <email>john@leddy.net</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Satoru Matsushima" initials="S." surname="Matsushima"> | <author fullname="Satoru Matsushima" initials="S." surname="Matsushima"> | |||
<organization>Softbank</organization> | <organization>SoftBank</organization> | |||
<address> | <address> | |||
<email>satoru.matsushima@g.softbank.co.jp</email> | <email>satoru.matsushima@g.softbank.co.jp</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Daniel Voyer" initials="D." surname="Voyer"> | <author fullname="Daniel Voyer" initials="D." surname="Voyer"> | |||
<organization>Bell Canada</organization> | <organization>Bell Canada</organization> | |||
<address> | <address> | |||
<email>daniel.voyer@bell.ca</email> | <email>daniel.voyer@bell.ca</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2020" month="March"/> | ||||
<date year="2019"/> | ||||
<workgroup>Network Working Group</workgroup> | <workgroup>Network Working Group</workgroup> | |||
<keyword>SRv6</keyword> | ||||
<keyword>source-routing</keyword> | ||||
<keyword>network-programming</keyword> | ||||
<abstract> | <abstract> | |||
<t>Segment Routing can be applied to the IPv6 data plane using a new | <t>Segment Routing can be applied to the IPv6 data plane using a new | |||
type of Routing Extension Header called the Segment Routing Header. This | type of Routing Extension Header called the Segment Routing Header (SRH). | |||
document describes the Segment Routing Header and how it is used by | This | |||
Segment Routing capable nodes.</t> | document describes the SRH and how it is used by nodes that are | |||
Segment Routing (SR) capable.</t> | ||||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="INTRO" title="Introduction"> | <section anchor="INTRO" numbered="true" toc="default"> | |||
<t>Segment Routing can be applied to the IPv6 data plane using a new | <name>Introduction</name> | |||
type of Routing Header called the Segment Routing Header. This document | <t>Segment Routing (SR) can be applied to the IPv6 data plane using a new | |||
describes the Segment Routing Header and how it is used by Segment | type of routing header called the Segment Routing Header (SRH). This docum | |||
Routing capable nodes.</t> | ent | |||
describes the SRH and how it is used by nodes that are SR capable.</t> | ||||
<t>The Segment Routing Architecture <xref target="RFC8402"/> describes | <t>"Segment Routing Architecture" <xref target="RFC8402" format="default"/ | |||
Segment Routing and its instantiation in two data planes; MPLS and | > describes | |||
Segment Routing and its instantiation in two data planes: MPLS and | ||||
IPv6.</t> | IPv6.</t> | |||
<t>The encoding of IPv6 segments in the SRH is | ||||
<t>The encoding of IPv6 segments in the Segment Routing Header is | ||||
defined in this document.</t> | defined in this document.</t> | |||
<section anchor="TERMS" numbered="true" toc="default"> | ||||
<name>Terminology</name> | ||||
<t>This document uses the terms Segment Routing (SR), SR domain, SR over | ||||
IPv6 (SRv6), Segment Identifier (SID), SRv6 SID, Active Segment, and SR Po | ||||
licy as defined in | ||||
<xref target="RFC8402" format="default"/>.</t></section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Requirements Language</name> | ||||
<t> | ||||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>This document uses the terms Segment Routing, SR Domain, SRv6, | ||||
Segment ID (SID), SRv6 SID, Active Segment, and SR Policy as defined in | ||||
<xref target="RFC8402"/>.</t> | ||||
<section title="Requirements Language"> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
"OPTIONAL" in this document are to be interpreted as described in BCP | ||||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | ||||
when, they appear in all capitals, as shown here.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="SRH" numbered="true" toc="default"> | ||||
<section anchor="SRH" title="Segment Routing Header"> | <name>Segment Routing Header</name> | |||
<t>Routing Headers are defined in <xref target="RFC8200"/>. The Segment | <t>Routing headers are defined in <xref target="RFC8200" format="default"/ | |||
Routing Header has a new Routing Type (suggested value 4) to be assigned | >. The Segment | |||
by IANA.</t> | Routing Header (SRH) has a new Routing Type (4).</t> | |||
<t>The SRH is defined as follows:</t> | ||||
<t>The Segment Routing Header (SRH) is defined as follows:<figure | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
align="left" anchor="SRHFIG" suppress-title="true"> | ||||
<artwork> | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Next Header | Hdr Ext Len | Routing Type | Segments Left | | | Next Header | Hdr Ext Len | Routing Type | Segments Left | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Last Entry | Flags | Tag | | | Last Entry | Flags | Tag | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Segment List[0] (128 bits IPv6 address) | | | Segment List[0] (128-bit IPv6 address) | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| | | | | | |||
... | ... | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Segment List[n] (128 bits IPv6 address) | | | Segment List[n] (128-bit IPv6 address) | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
// // | // // | |||
// Optional Type Length Value objects (variable) // | // Optional Type Length Value objects (variable) // | |||
// // | // // | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
]]></artwork> | ||||
<t>where:</t> | ||||
<dl spacing="normal"> | ||||
<dt>Next Header:</dt><dd>Defined in <xref target="RFC8200" | ||||
sectionFormat="comma" section="4.4"/>.</dd> | ||||
<dt>Hdr Ext Len:</dt><dd>Defined in <xref target="RFC8200" sectionFormat | ||||
="comma" section="4.4"/>.</dd> | ||||
<dt>Routing Type:</dt><dd>4.</dd> | ||||
<dt>Segments Left:</dt><dd>Defined in <xref target="RFC8200" | ||||
sectionFormat="comma" section="4.4"/>.</dd> | ||||
<dt>Last Entry:</dt><dd>contains the index (zero based), in the Segment | ||||
List, | ||||
of the last element of the Segment List.</dd> | ||||
where:</artwork> | <dt>Flags:</dt><dd>8 bits of flags. <xref target="SRHFLAGSREG" format= | |||
</figure><list style="symbols"> | "default"/> creates an | |||
<t>Next Header: Defined in <xref target="RFC8200"/> Section 4.4</t> | ||||
<t>Hdr Ext Len: Defined in <xref target="RFC8200"/> Section 4.4</t> | ||||
<t>Routing Type: TBD, to be assigned by IANA (suggested value: | ||||
4).</t> | ||||
<t>Segments Left: Defined in <xref target="RFC8200"/> Section | ||||
4.4</t> | ||||
<t>Last Entry: contains the index (zero based), in the Segment List, | ||||
of the last element of the Segment List.</t> | ||||
<t>Flags: 8 bits of flags. <xref target="SRHFLAGSREG"/> creates an | ||||
IANA registry for new flags to be defined. The following flags are | IANA registry for new flags to be defined. The following flags are | |||
defined:<figure align="left" anchor="SRHFLAGS" suppress-title="true"> | defined:</dd></dl> | |||
<artwork align="left"> | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|U U U U U U U U| | |U U U U U U U U| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
</artwork> | ]]></artwork> | |||
</figure><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
<t>U: Unused and for future use. MUST be 0 on transmission and | <dt/> | |||
ignored on receipt.</t> | <dd>U: Unused and for future use. <bcp14>MUST</bcp14> be 0 on transm | |||
</list></t> | ission and | |||
ignored on receipt.</dd> | ||||
<t>Tag: tag a packet as part of a class or group of packets, e.g., | </dl> | |||
packets sharing the same set of properties. When tag is not used at | <dl spacing="normal"> | |||
source it MUST be set to zero on transmission. When tag is not used | <dt>Tag:</dt><dd>Tag a packet as part of a class or group of packets -- | |||
during SRH Processing it SHOULD be ignored. Tag is not used when | e.g., | |||
processing the SID defined in <xref target="pktENDSID"/>. It may be | packets sharing the same set of properties. When Tag is not used at th | |||
e | ||||
source, it <bcp14>MUST</bcp14> be set to zero on transmission. When | ||||
Tag is not used during SRH processing, it <bcp14>SHOULD</bcp14> be | ||||
ignored. Tag is not used when | ||||
processing the SID defined in <xref target="pktENDSID" format="default | ||||
"/>. It may be | ||||
used when processing other SIDs that are not defined in this | used when processing other SIDs that are not defined in this | |||
document. The allocation and use of tag is outside the scope of this | document. The allocation and use of tag is outside the scope of this | |||
document.</t> | document.</dd> | |||
<t>Segment List[n]: 128 bit IPv6 addresses representing the nth | <dt>Segment List[0..n]:</dt><dd>128-bit IPv6 addresses representing the nth | |||
segment in the Segment List. The Segment List is encoded starting | segment in the Segment List. The Segment List is encoded starting | |||
from the last segment of the SR Policy. I.e., the first element of | from the last segment of the SR Policy. That is, the first element of | |||
the segment list (Segment List [0]) contains the last segment of the | the Segment List (Segment List[0]) contains the last segment of the | |||
SR Policy, the second element contains the penultimate segment of | SR Policy, the second element contains the penultimate segment of | |||
the SR Policy and so on.</t> | the SR Policy, and so on.</dd> | |||
<dt>TLV:</dt><dd>Type Length Value (TLV) is described in <xref target="T | ||||
<t>Type Length Value (TLV) are described in <xref | LVS" | |||
target="TLVS"/>.</t> | format="default"/>.</dd> | |||
</list></t> | </dl> | |||
<t>In the SRH, the Next Header, Hdr Ext Len, Routing Type, and Segments | <t>In the SRH, the Next Header, Hdr Ext Len, Routing Type, and Segments | |||
Left fields are defined in Section 4.4 of <xref target="RFC8200"/>. | Left fields are defined in <xref target="RFC8200" | |||
sectionFormat="of" section="4.4"/>. | ||||
Based on the constraints in that section, Next Header, Header Ext Len, | Based on the constraints in that section, Next Header, Header Ext Len, | |||
and Routing Type are not mutable while Segments Left is mutable.</t> | and Routing Type are not mutable while Segments Left is mutable.</t> | |||
<t>The mutability of the TLV value is defined by the most significant | <t>The mutability of the TLV value is defined by the most significant | |||
bit in the type, as specified in <xref target="TLVS"/>.</t> | bit in the type, as specified in <xref target="TLVS" format="default"/>.</ | |||
t> | ||||
<t><xref target="ENDSID"/> defines the mutability of the remaining | <t><xref target="ENDSID" format="default"/> defines the mutability of the | |||
remaining | ||||
fields in the SRH (Flags, Tag, Segment List) in the context of the SID | fields in the SRH (Flags, Tag, Segment List) in the context of the SID | |||
defined in this document.</t> | defined in this document.</t> | |||
<t>New SIDs defined in the future <bcp14>MUST</bcp14> specify the mutabili | ||||
<t>New SIDs defined in the future MUST specify the mutability properties | ty properties | |||
of the Flags, Tag, and Segment List and indicate how the HMAC TLV (<xref | of the Flags, Tag, and Segment List and indicate how the Hashed Message | |||
target="HMACTLV"/>) verification works. Note, that in effect these | Authentication Code (HMAC) TLV (<xref target="HMACTLV" | |||
format="default"/>) verification works. Note that, in effect, these | ||||
fields are mutable.</t> | fields are mutable.</t> | |||
<t>Consistent with the SR model, the source of the SRH | ||||
<t>Consistent with the source routing model, the source of the SRH | always knows how to set the Segment List, Flags, Tag, and TLVs of the SRH | |||
always knows how to set the segment list, Flags, Tag and TLVs of the SRH | for use within the SR domain. How it achieves this is outside the scope | |||
for use within the SR Domain. How it achieves this is outside the scope | of this document but may be based on topology, available SIDs and their | |||
of this document, but may be based on topology, available SIDs and their | ||||
mutability properties, the SRH mutability requirements of the | mutability properties, the SRH mutability requirements of the | |||
destination, or any other information.</t> | destination, or any other information.</t> | |||
<section anchor="TLVS" numbered="true" toc="default"> | ||||
<section anchor="TLVS" title="SRH TLVs"> | <name>SRH TLVs</name> | |||
<t>This section defines TLVs of the Segment Routing Header.</t> | <t>This section defines TLVs of the Segment Routing Header.</t> | |||
<t>A TLV provides meta-data for segment processing. The only TLVs | <t>A TLV provides metadata for segment processing. The only TLVs | |||
defined in this document are the HMAC (<xref target="HMACTLV"/>) and | defined in this document are the HMAC (<xref target="HMACTLV" format="de | |||
PAD (<xref target="PADDINGTLV"/>) TLVs. While processing the SID | fault"/>) and | |||
defined in <xref target="pktENDSID"/>, all TLVs are ignored unless | padding TLVs (<xref target="PADDINGTLV" format="default"/>). While proce | |||
local configuration indicates otherwise (<xref target="TLVPROCESS"/>). | ssing the SID | |||
Thus, TLV and HMAC support is optional for any implementation, | defined in <xref target="pktENDSID" format="default"/>, all TLVs are ign | |||
however, an implementation adding or parsing TLVs MUST support PAD | ored unless | |||
local configuration indicates otherwise (<xref target="TLVPROCESS" forma | ||||
t="default"/>). | ||||
Thus, TLV and HMAC support is optional for any implementation; | ||||
however, an implementation adding or parsing TLVs <bcp14>MUST</bcp14> su | ||||
pport PAD | ||||
TLVs. Other documents may define additional TLVs and processing rules | TLVs. Other documents may define additional TLVs and processing rules | |||
for them.</t> | for them.</t> | |||
<t>TLVs are present when the Hdr Ext Len is greater than (Last | <t>TLVs are present when the Hdr Ext Len is greater than (Last | |||
Entry+1)*2.</t> | Entry+1)*2.</t> | |||
<t>While processing TLVs at a segment endpoint, TLVs <bcp14>MUST</bcp14> | ||||
<t>While processing TLVs at a segment endpoint, TLVs MUST be fully | be fully | |||
contained within the SRH as determined by the Hdr Ext Len. Detection | contained within the SRH as determined by the Hdr Ext | |||
Len. Detection | ||||
of TLVs exceeding the boundary of the SRH Hdr Ext Len results in an | of TLVs exceeding the boundary of the SRH Hdr Ext Len results in an | |||
ICMP Parameter Problem, Code 0, message to the Source Address, | ICMP Parameter Problem, Code 0, message to the Source Address, | |||
pointing to the Hdr Ext Len field of the SRH, and the packet being | pointing to the Hdr Ext Len field of the SRH, and the packet being | |||
discarded.</t> | discarded.</t> | |||
<t>An implementation <bcp14>MAY</bcp14> limit the number and/or length o | ||||
<t>An implementation MAY limit the number and/or length of TLVs it | f TLVs it | |||
processes based on local configuration. It MAY:<list style="symbols"> | processes based on local configuration. It <bcp14>MAY</bcp14> limit:</t> | |||
<t>Limit the number of consecutive Pad1 (<xref target="PAD1"/>) | <ul spacing="normal"> | |||
<li>the number of consecutive Pad1 (<xref target="PAD1" format="defaul | ||||
t"/>) | ||||
options to 1. If padding of more than one byte is required, then | options to 1. If padding of more than one byte is required, then | |||
PadN (<xref target="PADN"/>) should be used.</t> | PadN (<xref target="PADN" format="default"/>) should be used.</li> | |||
<li>The length in PadN to 5.</li> | ||||
<t>Limit the length in PadN to 5.</t> | <li>The maximum number of non-Pad TLVs to be processed.</li> | |||
<li>The maximum length of all TLVs to be processed.</li> | ||||
<t>Limit the maximum number of non-Pad TLVs to be processed.</t> | </ul> | |||
<t> The implementation <bcp14>MAY</bcp14> stop processing additional TLV | ||||
<t>Limit the maximum length of all TLVs to be processed.</t> | s in | |||
</list> The implementation MAY stop processing additional TLVs in | ||||
the SRH when these configured limits are exceeded.</t> | the SRH when these configured limits are exceeded.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure> | ||||
<artwork> | ||||
0 1 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+----------------------- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+----------------------- | |||
| Type | Length | Variable length data | | Type | Length | Variable-length data | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+----------------------- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+----------------------- | |||
</artwork> | ]]></artwork><dl spacing="normal"> | |||
</figure> | <dt>Type:</dt><dd>An 8-bit codepoint from the "Segment Routing Head | |||
er TLVs" <xref target="IANA-SRHTLV" format="default"/>. | ||||
<t>Type: An 8 bit codepoint from Segment Routing Header TLVs Registry | ||||
TBD IANA Reference. Unrecognized Types MUST be ignored on receipt.</t> | ||||
<t>Length: The length of the Variable length data in bytes.</t> | ||||
<t>Variable length data: Length bytes of data that is specific to the | Unrecognized Types <bcp14>MUST</bcp14> be ignored on receipt.</dd> | |||
Type.</t> | <dt>Length:</dt><dd>The length of the variable-length data field in byte | |||
s.</dd> | ||||
<t>Type Length Value (TLV) entries contain OPTIONAL information that | <dt>Variable-length data:</dt><dd>data that is specific to the | |||
Type.</dd></dl> | ||||
<t>Type Length Value (TLV) entries contain <bcp14>OPTIONAL</bcp14> infor | ||||
mation that | ||||
may be used by the node identified in the Destination Address (DA) of | may be used by the node identified in the Destination Address (DA) of | |||
the packet.</t> | the packet.</t> | |||
<t>Each TLV has its own length, format, and semantic. The codepoint | ||||
<t>Each TLV has its own length, format and semantic. The codepoint | ||||
allocated (by IANA) to each TLV Type defines both the format and the | allocated (by IANA) to each TLV Type defines both the format and the | |||
semantic of the information carried in the TLV. Multiple TLVs may be | semantic of the information carried in the TLV. Multiple TLVs may be | |||
encoded in the same SRH.</t> | encoded in the same SRH.</t> | |||
<t>The highest-order bit of the TLV type (bit 0) specifies whether or | <t>The highest-order bit of the TLV type (bit 0) specifies whether or | |||
not the TLV data of that type can change en route to the packet's | not the TLV data of that type can change en route to the packet's | |||
final destination: <list> | final destination: </t> | |||
<t>0: TLV data does not change en route</t> | <ul empty="true" spacing="normal"> | |||
<li>0: TLV data does not change en route</li> | ||||
<t>1: TLV data does change en route</t> | <li>1: TLV data does change en route</li> | |||
</list></t> | </ul> | |||
<t>All TLVs specify their alignment requirements using an xn+y format. | <t>All TLVs specify their alignment requirements using an xn+y format. | |||
The xn+y format is defined as per <xref target="RFC8200"/>. The SR | The xn+y format is defined as per <xref target="RFC8200" format="default | |||
Source nodes use the xn+y alignment requirements of TLVs and Padding | "/>. The SR | |||
source nodes use the xn+y alignment requirements of TLVs and Padding | ||||
TLVs when constructing an SRH.</t> | TLVs when constructing an SRH.</t> | |||
<t>The Length field of the TLV is used to skip the TLV while | ||||
<t>The "Length" field of the TLV is used to skip the TLV while | ||||
inspecting the SRH in case the node doesn't support or recognize the | inspecting the SRH in case the node doesn't support or recognize the | |||
Type. The "Length" defines the TLV length in octets, not including the | Type. The Length defines the TLV length in octets, not including the | |||
"Type" and "Length" fields.</t> | Type and Length fields.</t> | |||
<t>The following TLVs are defined in this document:</t> | ||||
<t>The following TLVs are defined in this document:<list> | <ul empty="true" spacing="normal"> | |||
<t>Padding TLVs</t> | <li>Padding TLVs</li> | |||
<li>HMAC TLV</li> | ||||
<t>HMAC TLV</t> | </ul> | |||
</list></t> | ||||
<t>Additional TLVs may be defined in the future.</t> | <t>Additional TLVs may be defined in the future.</t> | |||
<section anchor="PADDINGTLV" numbered="true" toc="default"> | ||||
<section anchor="PADDINGTLV" title="Padding TLVs"> | <name>Padding TLVs</name> | |||
<t>There are two types of Padding TLVs, pad1 and padN, the following | <t>There are two types of Padding TLVs, Pad1 and PadN, and the followi | |||
applies to both:<list> | ng | |||
<t>Padding TLVs are used for meeting the alignment requirement | applies to both:</t> | |||
of the subsequent TLVs.</t> | <ul empty="true" spacing="normal"> | |||
<li>Padding TLVs are used for meeting the alignment requirement | ||||
<t>Padding TLVs are used to pad the SRH to a multiple of 8 | of the subsequent TLVs.</li> | |||
octets.</t> | <li>Padding TLVs are used to pad the SRH to a multiple of 8 | |||
octets.</li> | ||||
<t>Padding TLVs are ignored by a node processing the SRH | <li>Padding TLVs are ignored by a node processing the SRH | |||
TLV.</t> | TLV.</li> | |||
<li>Multiple Padding TLVs <bcp14>MAY</bcp14> be used in one SRH.</li | ||||
<t>Multiple Padding TLVs MAY be used in one SRH</t> | > | |||
</list></t> | </ul> | |||
<section anchor="PAD1" numbered="true" toc="default"> | ||||
<section anchor="PAD1" title="PAD1"> | <name>Pad1</name> | |||
<t>Alignment requirement: none</t> | <t>Alignment requirement: none</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure> | ||||
<artwork> | ||||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| Type | | | Type | | |||
+-+-+-+-+-+-+-+-+</artwork> | +-+-+-+-+-+-+-+-+]]></artwork> | |||
</figure> | <dl spacing="normal"> | |||
<dt>Type:</dt><dd>0</dd> | ||||
<t><list> | </dl> | |||
<t>Type: to be assigned by IANA (Suggested value 0)</t> | <t>A single Pad1 TLV <bcp14>MUST</bcp14> be used when a single byte | |||
</list></t> | of padding is | |||
required. A Pad1 TLV <bcp14>MUST NOT</bcp14> be used if more than on | ||||
<t>A single Pad1 TLV MUST be used when a single byte of padding is | e consecutive | |||
required. A Pad1 TLV MUST NOT be used if more than one consecutive | ||||
byte of padding is required.</t> | byte of padding is required.</t> | |||
</section> | </section> | |||
<section anchor="PADN" numbered="true" toc="default"> | ||||
<section anchor="PADN" title="PADN"> | <name>PadN</name> | |||
<t>Alignment requirement: none</t> | <t>Alignment requirement: none</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure> | ||||
<artwork> | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Length | Padding (variable) | | | Type | Length | Padding (variable) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
// Padding (variable) // | // Padding (variable) // | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | |||
</figure> | <dl spacing="normal"> | |||
<dt>Type:</dt><dd>4</dd> | ||||
<t><list> | <dt>Length:</dt><dd>0 to 5. The length of the Padding field in byt | |||
<t>Type: to be assigned by IANA (suggested value 4).</t> | es.</dd> | |||
<t>Length: 0 to 5</t> | ||||
<t>Padding: Length octets of padding. Padding bits have no | ||||
semantic. They MUST be set to 0 on transmission and ignored on | ||||
receipt.</t> | ||||
</list></t> | ||||
<t>The PadN TLV MUST be used when more than one byte of padding is | <dt>Padding:</dt><dd>Padding bits have no | |||
semantic. They <bcp14>MUST</bcp14> be set to 0 on transmission a | ||||
nd ignored on | ||||
receipt.</dd> | ||||
</dl> | ||||
<t>The PadN TLV <bcp14>MUST</bcp14> be used when more than one byte | ||||
of padding is | ||||
required.</t> | required.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="HMACTLV" numbered="true" toc="default"> | ||||
<section anchor="HMACTLV" title="HMAC TLV"> | <name>HMAC TLV</name> | |||
<t>Alignment requirement: 8n</t> | <t>Alignment requirement: 8n</t> | |||
<t>The keyed Hashed Message Authentication Code (HMAC) TLV is | <t>The keyed Hashed Message Authentication Code (HMAC) TLV is | |||
OPTIONAL and has the following format:<figure> | <bcp14>OPTIONAL</bcp14> and has the following format:</t> | |||
<artwork> 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ 0 | |||
3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Length |D| RESERVED | | | Type | Length |D| RESERVED | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| HMAC Key ID (4 octets) | | | HMAC Key ID (4 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| // | | // | |||
| HMAC (Variable) // | | HMAC (variable) // | |||
| // | | // | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
where:</artwork> | where:]]></artwork> | |||
</figure> <list style="symbols"> | <dl spacing="normal"> | |||
<t>Type: to be assigned by IANA (suggested value 5).</t> | <dt>Type:</dt><dd>5.</dd> | |||
<dt>Length:</dt><dd>The length of the variable-length data in bytes. | ||||
<t>Length: The length of the variable length data in bytes.</t> | </dd> | |||
<dt>D:</dt><dd>1 bit. 1 indicates that the Destination Address verif | ||||
<t>D: 1 bit. 1 indicates the Destination Address verification is | ication is | |||
disabled due to use of reduced segment list, <xref | disabled due to use of a reduced Segment List (see <xref | |||
target="REDUCED"/>.</t> | target="REDUCED" format="default"/>).</dd> | |||
<dt>RESERVED:</dt><dd>15 bits. <bcp14>MUST</bcp14> be 0 on transmiss | ||||
<t>RESERVED: 15 bits. MUST be 0 on transmission.</t> | ion.</dd> | |||
<dt>HMAC Key ID:</dt><dd>A 4-octet opaque number that uniquely | ||||
<t>HMAC Key ID: A 4 octet opaque number which uniquely | ||||
identifies the pre-shared key and algorithm used to generate the | identifies the pre-shared key and algorithm used to generate the | |||
HMAC.</t> | HMAC.</dd> | |||
<dt>HMAC:</dt><dd>Keyed HMAC, in multiples of 8 octets, at most 32 | ||||
<t>HMAC: Keyed HMAC, in multiples of 8 octets, at most 32 | octets.</dd> | |||
octets.</t> | </dl> | |||
</list></t> | ||||
<t>The HMAC TLV is used to verify that the SRH applied to a packet | <t>The HMAC TLV is used to verify that the SRH applied to a packet | |||
was selected by an authorized party, and to ensure that the segment | was selected by an authorized party and to ensure that the segment | |||
list is not modified after generation. This also allows for | list is not modified after generation. This also allows for | |||
verification that the current segment (by virtue of being in the | verification that the current segment (by virtue of being in the | |||
authorized segment list) is authorized for use. The SR Domain | authorized Segment List) is authorized for use. The SR domain | |||
ensures the source node is permitted to use the source address in | ensures that the source node is permitted to use the source address in | |||
the packet via ingress filtering mechanisms as defined in BCP 84 | the packet via ingress filtering mechanisms as defined in BCP 84 | |||
<xref target="RFC3704"/>, or other strategies as appropriate.</t> | <xref target="RFC3704" format="default"/> or other strategies as appro | |||
priate.</t> | ||||
<section title="HMAC Generation and Verification"> | <section numbered="true" toc="default"> | |||
<name>HMAC Generation and Verification</name> | ||||
<t>Local configuration determines when to check for an HMAC. This | <t>Local configuration determines when to check for an HMAC. This | |||
local configuration is outside the scope of this document. It may | local configuration is outside the scope of this document. It may | |||
be based on the active segment at an SR Segment endpoint node, the | be based on the active segment at an SR Segment endpoint node, the | |||
result of an ACL that considers incoming interface, HMAC Key ID, | result of an Access Control List (ACL) that considers incoming inter face, HMAC Key ID, | |||
or other packet fields.</t> | or other packet fields.</t> | |||
<t>An implementation that supports the generation and verification | <t>An implementation that supports the generation and verification | |||
of the HMAC supports the following default behavior, as | of the HMAC supports the following default behavior, as | |||
defined in the remainder of this section.</t> | defined in the remainder of this section.</t> | |||
<t>The HMAC verification begins by checking that the current segment | ||||
<t>The HMAC verification begins by checking the current segment is | is | |||
equal to the destination address of the IPv6 header. The check is | equal to the destination address of the IPv6 header. The check is | |||
successful when either<list style="symbols"> | successful when either:</t> | |||
<t>HMAC D bit is 1 and Segments Left is greater than Last | <ul spacing="normal"> | |||
Entry.</t> | <li>HMAC D bit is 1 and Segments Left is greater than Last | |||
Entry, or</li> | ||||
<t>HMAC Segments Left is less than or equal to Last Entry and | <li>HMAC Segments Left is less than or equal to Last Entry, and th | |||
destination address is equal to Segment List [Segments | e | |||
Left].</t> | destination address is equal to Segment List[Segments | |||
</list></t> | Left].</li> | |||
</ul> | ||||
<t>The HMAC field is the output of the HMAC computation as defined | <t>The HMAC field is the output of the HMAC computation as defined | |||
in <xref target="RFC2104"/>, using:<list style="symbols"> | in <xref target="RFC2104" format="default"/>, using:</t> | |||
<t>key: the pre-shared key identified by HMAC Key ID</t> | <ul spacing="normal"> | |||
<li>key: The pre-shared key identified by HMAC Key ID</li> | ||||
<t>HMAC algorithm: identified by the HMAC Key ID</t> | <li>HMAC algorithm: Identified by the HMAC Key ID</li> | |||
<li> | ||||
<t>Text: a concatenation of the following fields from the IPv6 | <t>Text: A concatenation of the following fields from the IPv6 | |||
header and the SRH, as it would be received at the node | header and the SRH, as it would be received at the node | |||
verifying the HMAC:<list style="symbols"> | verifying the HMAC:</t> | |||
<t>IPv6 header: source address (16 octets)</t> | <ul spacing="normal"> | |||
<li>IPv6 header: Source address (16 octets)</li> | ||||
<t>SRH: Last Entry (1 octet)</t> | <li>SRH: Last Entry (1 octet)</li> | |||
<li>SRH: Flags (1 octet)</li> | ||||
<t>SRH: Flags (1 octet)</t> | <li>SRH: HMAC 16 bits following Length</li> | |||
<li>SRH: HMAC Key ID (4 octets)</li> | ||||
<t>SRH: HMAC 16 bits following Length</t> | <li>SRH: All addresses in the Segment List (variable | |||
octets)</li> | ||||
<t>SRH: HMAC Key ID (4 octets)</t> | </ul> | |||
</li> | ||||
<t>SRH: all addresses in the Segment List (variable | </ul> | |||
octets)</t> | ||||
</list></t> | ||||
</list></t> | ||||
<t>The HMAC digest is truncated to 32 octets and placed in the | <t>The HMAC digest is truncated to 32 octets and placed in the | |||
HMAC field of the HMAC TLV.</t> | HMAC field of the HMAC TLV.</t> | |||
<t>For HMAC algorithms producing digests less than 32 octets long, t | ||||
<t>For HMAC algorithms producing digests less than 32 octets, the | he | |||
digest is placed in the lowest order octets of the HMAC field. | digest is placed in the lowest-order octets of the HMAC field. | |||
Subsequent octets MUST be set to zero such that the HMAC length is | Subsequent octets <bcp14>MUST</bcp14> be set to zero such that the H | |||
MAC length is | ||||
a multiple of 8 octets.</t> | a multiple of 8 octets.</t> | |||
<t>If HMAC verification is successful, processing proceeds as | <t>If HMAC verification is successful, processing proceeds as | |||
normal.</t> | normal.</t> | |||
<t>If HMAC verification fails, an ICMP error message (parameter | <t>If HMAC verification fails, an ICMP error message (parameter | |||
problem, error code 0, pointing to the HMAC TLV) SHOULD be | problem, error code 0, pointing to the HMAC TLV) <bcp14>SHOULD</bcp1 | |||
generated (but rate limited) and SHOULD be logged and the packet | 4> be | |||
discarded.</t> | generated (but rate limited) and logged, and the packet | |||
<bcp14>SHOULD</bcp14> be discarded.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="HMAC Pre-Shared Key Algorithm"> | <name>HMAC Pre-shared Key Algorithm</name> | |||
<t>The HMAC Key ID field allows for the simultaneous existence of | <t>The HMAC Key ID field allows for the simultaneous existence of | |||
several hash algorithms (SHA-256, SHA3-256 ... or future ones) as | several hash algorithms (SHA-256, SHA3-256 ... or future ones) as | |||
well as pre-shared keys.</t> | well as pre-shared keys.</t> | |||
<t>The HMAC Key ID field is opaque -- i.e., it has neither syntax | ||||
<t>The HMAC Key ID field is opaque, i.e., it has neither syntax | ||||
nor semantic except as an identifier of the right combination of | nor semantic except as an identifier of the right combination of | |||
pre-shared key and hash algorithm.</t> | pre-shared key and hash algorithm.</t> | |||
<t>At the HMAC TLV generating and verification nodes, the Key ID | <t>At the HMAC TLV generating and verification nodes, the Key ID | |||
uniquely identifies the pre-shared key and HMAC algorithm.</t> | uniquely identifies the pre-shared key and HMAC algorithm.</t> | |||
<t>At the HMAC TLV generating node, the Text for the HMAC | <t>At the HMAC TLV generating node, the Text for the HMAC | |||
computation is set to the IPv6 header fields and SRH fields as | computation is set to the IPv6 header fields and SRH fields as | |||
they would appear at the verification node(s), not necessarily the | they would appear at the verification node(s), not necessarily the | |||
same as the source node sending a packet with the HMAC TLV.</t> | same as the source node sending a packet with the HMAC TLV.</t> | |||
<t>Pre-Shared key rollover is supported by having two key IDs in | ||||
<t>Pre-shared key roll-over is supported by having two key IDs in | ||||
use while the HMAC TLV generating node and verifying node converge | use while the HMAC TLV generating node and verifying node converge | |||
to a new key.</t> | to a new key.</t> | |||
<t>The HMAC TLV generating node may need to revoke an SRH for | <t>The HMAC TLV generating node may need to revoke an SRH for | |||
which it previously generated an HMAC. Revocation is achieved by | which it previously generated an HMAC. Revocation is achieved by | |||
allocating a new key and key ID, then rolling over the key ID | allocating a new key and key ID, then rolling over the key ID | |||
associated with the SRH to be revoked. The HMAC TLV verifying node | associated with the SRH to be revoked. The HMAC TLV verifying node | |||
drops packets with the revoked SRH.</t> | drops packets with the revoked SRH.</t> | |||
<t>An implementation supporting HMAC can support multiple hash | <t>An implementation supporting HMAC can support multiple hash | |||
functions. An implementation supporting HMAC MUST implement SHA-2 | functions. An implementation supporting HMAC <bcp14>MUST</bcp14> imp | |||
<xref target="FIPS180-4"/> in its SHA-256 variant.</t> | lement SHA-2 | |||
<xref target="FIPS180-4" format="default"/> in its SHA-256 variant.< | ||||
/t> | ||||
<t>The selection of pre-shared key and algorithm, and their | <t>The selection of pre-shared key and algorithm and their | |||
distribution is outside the scope of this document. Some options | distribution is outside the scope of this document. Some options | |||
may include: <list style="symbols"> | may include: </t> | |||
<t>in the configuration of the HMAC generating or verifying | <ul spacing="normal"> | |||
nodes, either by static configuration or any SDN oriented | ||||
approach</t> | ||||
<t>dynamically using a trusted key distribution protocol such | ||||
as <xref target="RFC6407"/></t> | ||||
</list></t> | ||||
<li>setting these items in the configuration of the HMAC generatin | ||||
g or verifying | ||||
nodes, either by static configuration or any | ||||
SDN-oriented | ||||
approach</li> | ||||
<li>dynamically using a trusted key distribution protocol such | ||||
as <xref target="RFC6407" format="default"/></li> | ||||
</ul> | ||||
<t>While key management is outside the scope of this document, the | <t>While key management is outside the scope of this document, the | |||
recommendations of BCP 107 <xref target="RFC4107"/> should be | recommendations of BCP 107 <xref target="RFC4107" format="default"/> should be | |||
considered when choosing the key management system.</t> | considered when choosing the key management system.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="SRNODES" numbered="true" toc="default"> | ||||
<section anchor="SRNODES" title="SR Nodes"> | <name>SR Nodes</name> | |||
<t>There are different types of nodes that may be involved in segment | <t>There are different types of nodes that may be involved in segment | |||
routing networks: source SR nodes originate packets with a segment in | routing networks: SR source nodes that originate packets with a segment in | |||
the destination address of the IPv6 header, transit nodes that forward | the destination address of the IPv6 header, transit nodes that forward | |||
packets destined to a remote segment, and SR segment endpoint nodes that | packets destined to a remote segment, and SR segment endpoint nodes that | |||
process a local segment in the destination address of an IPv6 | process a local segment in the destination address of an IPv6 | |||
header.</t> | header.</t> | |||
<section anchor="SOURCE" numbered="true" toc="default"> | ||||
<section anchor="SOURCE" title="Source SR Node"> | <name>SR Source Node</name> | |||
<t>A Source SR Node is any node that originates an IPv6 packet with a | <t>A SR source node is any node that originates an IPv6 packet with a | |||
segment (i.e. SRv6 SID) in the destination address of the IPv6 header. | segment (i.e., SRv6 SID) in the destination address of the IPv6 header. | |||
The packet leaving the source SR Node may or may not contain an SRH. | The packet leaving the SR source node may or may not contain an SRH. | |||
This includes either: <list style="hanging"> | This includes either: </t> | |||
<t>A host originating an IPv6 packet.</t> | <ul spacing="normal"> | |||
<li>A host originating an IPv6 packet, or</li> | ||||
<t>An SR domain ingress router encapsulating a received packet in | <li>An SR domain ingress router encapsulating a received packet in | |||
an outer IPv6 header, followed by an optional SRH.</t> | an outer IPv6 header, followed by an optional SRH.</li> | |||
</list></t> | </ul> | |||
<t>It is out of the scope of this document to describe the mechanism | ||||
<t>The mechanism through which a segment in the destination address of | through which a segment in the destination address of | |||
the IPv6 header and the Segment List in the SRH, is derived is outside | the IPv6 header and the Segment List in the SRH are derived.</t> | |||
the scope of this document.</t> | ||||
</section> | </section> | |||
<section anchor="TRANSIT" numbered="true" toc="default"> | ||||
<section anchor="TRANSIT" title="Transit Node"> | <name>Transit Node</name> | |||
<t>A transit node is any node forwarding an IPv6 packet where the | <t>A transit node is any node forwarding an IPv6 packet where the | |||
destination address of that packet is not locally configured as a | destination address of that packet is not locally configured as a | |||
segment nor a local interface. A transit node is not required to be | segment or a local interface. A transit node is not required to be | |||
capable of processing a segment nor SRH.</t> | capable of processing a segment or SRH.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="SR Segment Endpoint Node"> | <name>SR Segment Endpoint Node</name> | |||
<t>A SR segment endpoint node is any node receiving an IPv6 packet | <t>An SR segment endpoint node is any node receiving an IPv6 packet | |||
where the destination address of that packet is locally configured as | where the destination address of that packet is locally configured as | |||
a segment or local interface.</t> | a segment or local interface.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="PacketProcessing" numbered="true" toc="default"> | ||||
<section anchor="PacketProcessing" title="Packet Processing"> | <name>Packet Processing</name> | |||
<t>This section describes SRv6 packet processing at the SR source, | <t>This section describes SRv6 packet processing at the SR source, | |||
Transit and SR segment endpoint nodes.</t> | Transit, and SR segment endpoint nodes.</t> | |||
<section anchor="pktSourceNode" numbered="true" toc="default"> | ||||
<section anchor="pktSourceNode" title="Source SR Node"> | <name>SR Source Node</name> | |||
<t>A Source node steers a packet into an SR Policy. If the SR Policy | <t>A source node steers a packet into an SR Policy. If the SR Policy | |||
results in a segment list containing a single segment, and there is no | results in a Segment List containing a single segment, and there is no | |||
need to add information to the SRH flag or to add TLV, the DA is set | need to add information to the SRH flag or add TLV; the DA is set | |||
to the single segment list entry and the SRH MAY be omitted.</t> | to the single Segment List entry, and the SRH <bcp14>MAY</bcp14> be omit | |||
ted.</t> | ||||
<t>When needed, the SRH is created as follows:<list style="hanging"> | <t>When needed, the SRH is created as follows:</t> | |||
<t>Next Header and Hdr Ext Len fields are set as specified in | <dl newline="false" spacing="normal"> | |||
<xref target="RFC8200"/>.</t> | <dt/> | |||
<dd>The Next Header and Hdr Ext Len fields are set as specified in | ||||
<t>Routing Type field is set as TBD (to be allocated by IANA, | <xref target="RFC8200" format="default"/>.</dd> | |||
suggested value 4).</t> | <dt/> | |||
<dd>The Routing Type field is set to 4.</dd> | ||||
<t>The DA of the packet is set with the value of the first | <dt/> | |||
segment.</t> | <dd>The DA of the packet is set with the value of the first | |||
segment.</dd> | ||||
<t>The first element of the SRH Segment List is the ultimate | <dt/> | |||
<dd>The first element of the SRH Segment List is the ultimate | ||||
segment. The second element is the penultimate segment, and so | segment. The second element is the penultimate segment, and so | |||
on.</t> | on.</dd> | |||
<dt/> | ||||
<t>The Segments Left field is set to n-1 where n is the number of | <dd>The Segments Left field is set to n-1, where n is the number of | |||
elements in the SR Policy.</t> | elements in the SR Policy.</dd> | |||
<dt/> | ||||
<t>The Last Entry field is set to n-1 where n is the number of | <dd>The Last Entry field is set to n-1, where n is the number of | |||
elements in the SR Policy.</t> | elements in the SR Policy.</dd> | |||
<dt/> | ||||
<t>TLVs (including HMAC) may be set according to their | <dd>TLVs (including HMAC) may be set according to their | |||
specification.</t> | specification.</dd> | |||
<dt/> | ||||
<t>The packet is forwarded toward the packet's Destination Address | <dd>The packet is forwarded toward the packet's Destination Address | |||
(the first segment).</t> | (the first segment).</dd> | |||
</list></t> | </dl> | |||
<section anchor="REDUCED" numbered="true" toc="default"> | ||||
<section anchor="REDUCED" title="Reduced SRH"> | <name>Reduced SRH</name> | |||
<t>When a source does not require the entire SID list to be | <t>When a source does not require the entire SID list to be | |||
preserved in the SRH, a reduced SRH may be used.</t> | preserved in the SRH, a reduced SRH may be used.</t> | |||
<t>A reduced SRH does not contain the first segment of the related | <t>A reduced SRH does not contain the first segment of the related | |||
SR Policy (the first segment is the one already in the DA of the | SR Policy (the first segment is the one already in the DA of the | |||
IPv6 header), and the Last Entry field is set to n-2 where n is the | IPv6 header), and the Last Entry field is set to n-2, where n is the | |||
number of elements in the SR Policy.</t> | number of elements in the SR Policy.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Transit Node"> | <name>Transit Node</name> | |||
<t>As specified in <xref target="RFC8200"/>, the only node allowed to | <t>As specified in <xref target="RFC8200" format="default"/>, the only n | |||
inspect the Routing Extension Header (and therefore the SRH), is the | ode allowed to | |||
inspect the Routing Extension Header (and therefore the SRH) is the | ||||
node corresponding to the DA of the packet. Any other transit node | node corresponding to the DA of the packet. Any other transit node | |||
MUST NOT inspect the underneath routing header and MUST forward the | <bcp14>MUST NOT</bcp14> inspect the underneath routing header and <bcp14 >MUST</bcp14> forward the | |||
packet toward the DA according to its IPv6 routing table.</t> | packet toward the DA according to its IPv6 routing table.</t> | |||
<t>When a SID is in the destination address of an IPv6 header of a | <t>When a SID is in the destination address of an IPv6 header of a | |||
packet, it's routed through an IPv6 network as an IPv6 address. SIDs, | packet, it's routed through an IPv6 network as an IPv6 address. SIDs, | |||
or the prefix(es) covering SIDs, and their reachability may be | or the prefix(es) covering SIDs, and their reachability may be | |||
distributed by means outside the scope of this document. For example, | distributed by means outside the scope of this document. For example, | |||
<xref target="RFC5308"/> or <xref target="RFC5340"/> may be used to | <xref target="RFC5308" format="default"/> or <xref target="RFC5340" form at="default"/> may be used to | |||
advertise a prefix covering the SIDs on a node.</t> | advertise a prefix covering the SIDs on a node.</t> | |||
</section> | </section> | |||
<section anchor="ENDSID" numbered="true" toc="default"> | ||||
<section anchor="ENDSID" title="SR Segment Endpoint Node"> | <name>SR Segment Endpoint Node</name> | |||
<t>Without constraining the details of an implementation, the SR | <t>Without constraining the details of an implementation, the SR | |||
segment endpoint node creates Forwarding Information Base (FIB) | segment endpoint node creates Forwarding Information Base (FIB) | |||
entries for its local SIDs.</t> | entries for its local SIDs.</t> | |||
<t>When an SRv6-capable node receives an IPv6 packet, it performs a | <t>When an SRv6-capable node receives an IPv6 packet, it performs a | |||
longest-prefix-match lookup on the packets destination address. This | longest-prefix-match lookup on the packet's destination address. This | |||
lookup can return any of the following:<figure align="left"> | lookup can return any of the following:</t> | |||
<artwork> | <ul> | |||
* A FIB entry that represents a locally instantiated SRv6 SID | <li>A FIB entry that represents a locally instantiated SRv6 SID</li> | |||
* A FIB entry that represents a local interface, not locally | <li>A FIB entry that represents a local interface, not locally | |||
instantiated as an SRv6 SID | instantiated as an SRv6 SID</li> | |||
* A FIB entry that represents a non-local route | <li>A FIB entry that represents a nonlocal route</li> | |||
* No Match</artwork> | <li>No Match</li> | |||
</figure></t> | </ul> | |||
<section anchor="pktENDSID" numbered="true" toc="default"> | ||||
<section anchor="pktENDSID" | <name>FIB Entry Is a Locally Instantiated SRv6 SID</name> | |||
title="FIB Entry Is Locally Instantiated SRv6 SID"> | <t>This document and section define a single SRv6 SID. Future | |||
<t>This document, and section, defines a single SRv6 SID. Future | documents may define additional SRv6 SIDs. In such a case, the entire | |||
documents may define additional SRv6 SIDs. In which case, the entire | ||||
content of this section will be defined in that document.</t> | content of this section will be defined in that document.</t> | |||
<t>If the FIB entry represents a locally instantiated SRv6 SID, | <t>If the FIB entry represents a locally instantiated SRv6 SID, | |||
process the next header chain of the IPv6 header as defined in | process the next header chain of the IPv6 header as defined in | |||
section 4 of <xref target="RFC8200"/>. <xref target="SRHPROC"/> | <xref target="RFC8200" sectionFormat="of" section="4"/>. <xref | |||
describes how to process an SRH, <xref target="UPPERHEADER"/> | target="SRHPROC" format="default"/> | |||
describes how to process an upper layer header or no next | describes how to process an SRH; <xref target="UPPERHEADER" format="de | |||
header.</t> | fault"/> | |||
describes how to process an upper-layer header or the absence of a Nex | ||||
t | ||||
Header.</t> | ||||
<t>Processing this SID modifies the Segments Left and, if configured | <t>Processing this SID modifies the Segments Left and, if configured | |||
to process TLVs, it may modify the "variable length data" of TLV | to process TLVs, it may modify the "variable-length data" of TLV | |||
types that change en route. Therefore Segments Left is mutable and | types that change en route. Therefore, Segments Left is mutable, and | |||
TLVs that change en route are mutable. The remainder of the SRH | TLVs that change en route are mutable. The remainder of the SRH | |||
(Flags, Tag, Segment List, and TLVs that do not change en route) are | (Flags, Tag, Segment List, and TLVs that do not change en route) are | |||
immutable while processing this SID.</t> | immutable while processing this SID.</t> | |||
<section anchor="SRHPROC" numbered="true" toc="default"> | ||||
<section anchor="SRHPROC" title="SRH Processing"> | <name>SRH Processing</name> | |||
<t><figure align="left"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If Segments Left is equal to zero { | S02. If Segments Left is equal to zero { | |||
S03. Proceed to process the next header in the packet, | S03. Proceed to process the next header in the packet, | |||
whose type is identified by the Next Header field in | whose type is identified by the Next Header field in | |||
the Routing header. | the routing header. | |||
S04. } | S04. } | |||
S05. Else { | S05. Else { | |||
S06. If local configuration requires TLV processing { | S06. If local configuration requires TLV processing { | |||
S07. Perform TLV processing (see TLV Processing) | S07. Perform TLV processing (see TLV Processing) | |||
S08. } | S08. } | |||
S09. max_last_entry = ( Hdr Ext Len / 2 ) - 1 | S09. max_last_entry = ( Hdr Ext Len / 2 ) - 1 | |||
S10. If ((Last Entry > max_last_entry) or | S10. If ((Last Entry > max_last_entry) or | |||
S11. (Segments Left is greater than (Last Entry+1)) { | S11. (Segments Left is greater than (Last Entry+1)) { | |||
S12. Send an ICMP Parameter Problem, Code 0, message to | S12. Send an ICMP Parameter Problem, Code 0, message to | |||
the Source Address, pointing to the Segments Left | the Source Address, pointing to the Segments Left | |||
field, and discard the packet. | field, and discard the packet. | |||
S13. } | S13. } | |||
S14. Else { | S14. Else { | |||
S15. Decrement Segments Left by 1. | S15. Decrement Segments Left by 1. | |||
S16. Copy Segment List[Segments Left] from the SRH to the | S16. Copy Segment List[Segments Left] from the SRH to the | |||
destination address of the IPv6 header. | destination address of the IPv6 header. | |||
S17. If the IPv6 Hop Limit is less than or equal to 1 { | S17. If the IPv6 Hop Limit is less than or equal to 1 { | |||
skipping to change at line 752 ¶ | skipping to change at line 655 ¶ | |||
the packet. | the packet. | |||
S19. } | S19. } | |||
S20. Else { | S20. Else { | |||
S21. Decrement the Hop Limit by 1 | S21. Decrement the Hop Limit by 1 | |||
S22. Resubmit the packet to the IPv6 module for transmission | S22. Resubmit the packet to the IPv6 module for transmission | |||
to the new destination. | to the new destination. | |||
S23. } | S23. } | |||
S24. } | S24. } | |||
S25. } | S25. } | |||
S26. } | S26. } | |||
</artwork> | ]]></artwork> | |||
</figure></t> | ||||
<section anchor="TLVPROCESS" title="TLV Processing"> | ||||
<t>Local configuration determines how TLVs are to be processed | ||||
when the Active Segment is a local SID defined in this document. | ||||
The definition of local configuration is outside the scope of | ||||
this document.</t> | ||||
<t>For illustration purpose only, two example local | <section anchor="TLVPROCESS" numbered="true" toc="default"> | |||
configurations that may be associated with a SID are provided | <name>TLV Processing</name> | |||
below.</t> | <t>Local configuration determines how TLVs are to be processed | |||
when the Active Segment is a local SID defined in this document. | ||||
The definition of local configuration is outside the scope of | ||||
this document.</t> | ||||
<t>For illustration purposes only, two example local | ||||
configurations that may be associated with a SID are provided | ||||
below.</t> | ||||
<t><figure align="left"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
Example 1: | Example 1: | |||
For any packet received from interface I2 | For any packet received from interface I2 | |||
Skip TLV processing | Skip TLV processing | |||
Example 2: | Example 2: | |||
For any packet received from interface I1 | For any packet received from interface I1 | |||
If first TLV is HMAC { | If first TLV is HMAC { | |||
Process the HMAC TLV | Process the HMAC TLV | |||
} | } | |||
Else { | Else { | |||
Discard the packet | Discard the packet | |||
}</artwork> | }]]></artwork> | |||
</figure></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="UPPERHEADER" numbered="true" toc="default"> | ||||
<section anchor="UPPERHEADER" | <name>Upper-Layer Header or No Next Header</name> | |||
title="Upper-layer Header or No Next Header"> | <t>When processing the upper-layer header of a packet matching a | |||
<t>When processing the Upper-layer header of a packet matching a | ||||
FIB entry locally instantiated as an SRv6 SID defined in this | FIB entry locally instantiated as an SRv6 SID defined in this | |||
document.</t> | document:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<t><figure> | ||||
<artwork> | ||||
IF (Upper-layer Header is IPv4 or IPv6) and | IF (Upper-layer Header is IPv4 or IPv6) and | |||
local configuration permits { | local configuration permits { | |||
Perform IPv6 decapsulation | Perform IPv6 decapsulation | |||
Resubmit the decapsulated packet to the IPv4 or IPv6 module | Resubmit the decapsulated packet to the IPv4 or IPv6 module | |||
} | } | |||
ELSE { | ELSE { | |||
Send an ICMP parameter problem message to the Source Address and | Send an ICMP parameter problem message to the Source Address and | |||
discard the packet. Error code (TBD by IANA) "SR Upper-layer | discard the packet. Error code (4) "SR Upper-layer | |||
Header Error", pointer set to the offset of the upper-layer | Header Error", pointer set to the offset of the upper-layer | |||
header. | header. | |||
} | } | |||
</artwork> | ]]></artwork> | |||
</figure></t> | <t>A unique error code allows an SR source node to recognize an | |||
<t>A unique error code allows an SR Source node to recognize an | ||||
error in SID processing at an endpoint.</t> | error in SID processing at an endpoint.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<name>FIB Entry Is a Local Interface</name> | ||||
<section title="FIB Entry Is A Local Interface"> | <t>If the FIB entry represents a local interface and is not locally | |||
<t>If the FIB entry represents a local interface, not locally | instantiated as an SRv6 SID, the SRH is processed as follows:</t> | |||
instantiated as an SRv6 SID, the SRH is processed as follows:<list> | <ul empty="true" spacing="normal"> | |||
<t>If Segments Left is zero, the node must ignore the Routing | <li>If Segments Left is zero, the node must ignore the routing | |||
header and proceed to process the next header in the packet, | header and proceed to process the next header in the packet, | |||
whose type is identified by the Next Header field in the Routing | whose type is identified by the Next Header field in the routing | |||
Header.</t> | header.</li> | |||
<li>If Segments Left is non-zero, the node must discard the | ||||
<t>If Segments Left is non-zero, the node must discard the | ||||
packet and send an ICMP Parameter Problem, Code 0, message to | packet and send an ICMP Parameter Problem, Code 0, message to | |||
the packet's Source Address, pointing to the unrecognized | the packet's Source Address, pointing to the unrecognized | |||
Routing Type.</t> | Routing Type.</li> | |||
</list></t> | </ul> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="FIB Entry Is A Non-Local Route"> | <name>FIB Entry Is a Nonlocal Route</name> | |||
<t>Processing is not changed by this document.</t> | <t>Processing is not changed by this document.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="FIB Entry Is A No Match"> | <name>FIB Entry Is a No Match</name> | |||
<t>Processing is not changed by this document.</t> | <t>Processing is not changed by this document.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="DEP" numbered="true" toc="default"> | ||||
<section anchor="DEP" title="Intra SR Domain Deployment Model"> | <name>Intra-SR-Domain Deployment Model</name> | |||
<t>The use of the SIDs exclusively within the SR Domain and solely for | <t>The use of the SIDs exclusively within the SR domain and solely for | |||
packets of the SR Domain is an important deployment model.</t> | packets of the SR domain is an important deployment model.</t> | |||
<t>This enables the SR domain to act as a single routing system.</t> | ||||
<t>This enables the SR Domain to act as a single routing system.</t> | <t>This section covers:</t> | |||
<ul spacing="normal"> | ||||
<t>This section covers:<list style="symbols"> | <li>securing the SR domain from external attempts to use its SIDs</li> | |||
<t>securing the SR Domain from external attempt to use its SIDs</t> | <li>using the SR domain as a single system with delegation between | |||
components</li> | ||||
<t>SR Domain as a single system with delegation between | <li>handling packets of the SR domain</li> | |||
components</t> | </ul> | |||
<section anchor="SECSRDOMAIN" numbered="true" toc="default"> | ||||
<t>handling packets of the SR Domain</t> | <name>Securing the SR Domain</name> | |||
</list></t> | <t>Nodes outside the SR domain are not trusted: they cannot directly | |||
<section anchor="SECSRDOMAIN" title="Securing the SR Domain"> | ||||
<t>Nodes outside the SR Domain are not trusted: they cannot directly | ||||
use the SIDs of the domain. This is enforced by two levels of access | use the SIDs of the domain. This is enforced by two levels of access | |||
control lists: <list style="numbers"> | control lists: </t> | |||
<t>Any packet entering the SR Domain and destined to a SID within | <ol spacing="normal" type="1"> | |||
the SR Domain is dropped. This may be realized with the following | <li> | |||
<t>Any packet entering the SR domain and destined to a SID within | ||||
the SR domain is dropped. This may be realized with the following | ||||
logic. Other methods with equivalent outcome are considered | logic. Other methods with equivalent outcome are considered | |||
compliant: <list style="symbols"> | compliant: </t> | |||
<t>allocate all the SID's from a block S/s</t> | <ul spacing="normal"> | |||
<li>Allocate all the SIDs from a block S/s</li> | ||||
<t>configure each external interface of each edge node of the | <li>Configure each external interface of each edge node of the | |||
domain with an inbound infrastructure access list (IACL) which | domain with an inbound infrastructure access list (IACL) that | |||
drops any incoming packet with a destination address in | drops any incoming packet with a destination address in | |||
S/s</t> | S/s</li> | |||
<li>Failure to implement this method of ingress filtering | ||||
<t>Failure to implement this method of ingress filtering | exposes the SR domain to source-routing attacks, as described | |||
exposes the SR Domain to source routing attacks as described | and referenced in <xref target="RFC5095" format="default"/></li> | |||
and referenced in <xref target="RFC5095"/></t> | </ul> | |||
</list></t> | </li> | |||
<li> | ||||
<t>The distributed protection in #1 is complemented with per node | <t>The distributed protection in #1 is complemented with per-node | |||
protection, dropping packets to SIDs from source addresses outside | protection, dropping packets to SIDs from source addresses outside | |||
the SR Domain. This may be realized with the following logic. | the SR domain. This may be realized with the following logic. | |||
Other methods with equivalent outcome are considered compliant: | Other methods with equivalent outcome are considered compliant: | |||
<list style="symbols"> | </t> | |||
<t>assign all interface addresses from prefix A/a</t> | <ul spacing="normal"> | |||
<li>Assign all interface addresses from prefix A/a</li> | ||||
<t>at node k, all SIDs local to k are assigned from prefix | <li>At node k, all SIDs local to k are assigned from prefix | |||
Sk/sk</t> | Sk/sk</li> | |||
<li>Configure each internal interface of each SR node k in the | ||||
<t>configure each internal interface of each SR node k in the | SR domain with an inbound IACL that drops any incoming packet | |||
SR Domain with an inbound IACL which drops any incoming packet | ||||
with a destination address in Sk/sk if the source address is | with a destination address in Sk/sk if the source address is | |||
not in A/a.</t> | not in A/a.</li> | |||
</list></t> | </ul> | |||
</list></t> | </li> | |||
</ol> | ||||
</section> | </section> | |||
<section anchor="SINGLESYS" numbered="true" toc="default"> | ||||
<section anchor="SINGLESYS" | <name>SR Domain as a Single System with Delegation among Components</nam | |||
title="SR Domain as A Single System with Delegation Among Compone | e> | |||
nts"> | <t>All intra-SR-domain packets are of the SR domain. The IPv6 header | |||
<t>All intra SR Domain packets are of the SR Domain. The IPv6 header | is originated by a node of the SR domain and is destined to a node of | |||
is originated by a node of the SR Domain, and is destined to a node of | the SR domain.</t> | |||
the SR Domain.</t> | <t>All interdomain packets are encapsulated for the part of the | |||
packet journey that is within the SR domain. The outer IPv6 header is | ||||
<t>All inter domain packets are encapsulated for the part of the | originated by a node of the SR domain and is destined to a node of | |||
packet journey that is within the SR Domain. The outer IPv6 header is | the SR domain.</t> | |||
originated by a node of the SR Domain, and is destined to a node of | <t>As a consequence, any packet within the SR domain is of the SR | |||
the SR Domain.</t> | domain.</t> | |||
<t>The SR domain is a system in which the operator may want to | ||||
<t>As a consequence, any packet within the SR Domain is of the SR | distribute or delegate different operations of the outermost header | |||
Domain.</t> | ||||
<t>The SR Domain is a system in which the operator may want to | ||||
distribute or delegate different operations of the outer most header | ||||
to different nodes within the system.</t> | to different nodes within the system.</t> | |||
<t>An operator of an SR domain may choose to delegate SRH addition to | <t>An operator of an SR domain may choose to delegate SRH addition to | |||
a host node within the SR domain, and validation of the contents of | a host node within the SR domain and delegate validation of the contents of | |||
any SRH to a more trusted router or switch attached to the host. | any SRH to a more trusted router or switch attached to the host. | |||
Consider a top of rack switch (T) connected to host (H) via interface | Consider a top-of-rack switch T connected to host H via interface | |||
(I). H receives an SRH (SRH1) with a computed HMAC via some SDN method | I. H receives an SRH (SRH1) with a computed HMAC via some SDN method | |||
outside the scope of this document. H classifies traffic it sources | outside the scope of this document. H classifies traffic it sources | |||
and adds SRH1 to traffic requiring a specific SLA. T is configured | and adds SRH1 to traffic requiring a specific Service Level | |||
Agreement (SLA). T is configured | ||||
with an IACL on I requiring verification of the SRH for any packet | with an IACL on I requiring verification of the SRH for any packet | |||
destined to the SID block of the SR Domain (S/s). T checks and | destined to the SID block of the SR domain (S/s). T checks and | |||
verifies that SRH1 is valid, contains an HMAC TLV and verifies the | verifies that SRH1 is valid and contains an HMAC TLV; T then verifies th | |||
e | ||||
HMAC.</t> | HMAC.</t> | |||
<t>An operator of the SR domain may choose to have all segments in the | ||||
<t>An operator of the SR Domain may choose to have all segments in the | SR domain verify the HMAC. This mechanism would verify that the SRH | |||
SR Domain verify the HMAC. This mechanism would verify that the SRH | Segment List is not modified while traversing the SR domain.</t> | |||
segment list is not modified while traversing the SR Domain.</t> | ||||
</section> | </section> | |||
<section anchor="MTU" numbered="true" toc="default"> | ||||
<section anchor="MTU" title="MTU Considerations"> | <name>MTU Considerations</name> | |||
<t>An SR Domain ingress edge node encapsulates packets traversing the | <t>An SR domain ingress edge node encapsulates packets traversing the | |||
SR Domain, and needs to consider the MTU of the SR Domain. Within the | SR domain and needs to consider the MTU of the SR domain. Within the | |||
SR Domain, well known mitigation techniques are RECOMMENDED, such as | SR domain, well-known mitigation techniques are <bcp14>RECOMMENDED</bcp1 | |||
deploying a greater MTU value within the SR Domain than at the ingress | 4>, such as | |||
deploying a greater MTU value within the SR domain than at the ingress | ||||
edges.</t> | edges.</t> | |||
<t>Encapsulation with an outer IPv6 header and SRH shares the same MTU | ||||
<t>Encapsulation with an outer IPv6 header and SRH share the same MTU | and fragmentation considerations as IPv6 tunnels described in <xref targ | |||
and fragmentation considerations as IPv6 tunnels described in <xref | et="RFC2473" format="default"/>. Further investigation on the limitation of vari | |||
target="RFC2473"/>. Further investigation on the limitation of various | ous | |||
tunneling methods (including IPv6 tunnels) are discussed in <xref | tunneling methods (including IPv6 tunnels) is discussed in <xref | |||
target="I-D.ietf-intarea-tunnels"/> and SHOULD be considered by | target="I-D.ietf-intarea-tunnels" format="default"/> and | |||
operators when considering MTU within the SR Domain.</t> | <bcp14>SHOULD</bcp14> be considered by | |||
operators when considering MTU within the SR domain.</t> | ||||
</section> | </section> | |||
<section anchor="ICMP" numbered="true" toc="default"> | ||||
<section anchor="ICMP" title="ICMP Error Processing"> | <name>ICMP Error Processing</name> | |||
<t>ICMP error packets generated within the SR Domain are sent to | <t>ICMP error packets generated within the SR domain are sent to | |||
source nodes within the SR Domain. The invoking packet in the ICMP | source nodes within the SR domain. The invoking packet in the ICMP | |||
error message may contain an SRH. Since the destination address of a | error message may contain an SRH. Since the destination address of a | |||
packet with an SRH changes as each segment is processed, it may not be | packet with an SRH changes as each segment is processed, it may not be | |||
the destination used by the socket or application that generated the | the destination used by the socket or application that generated the | |||
invoking packet.</t> | invoking packet.</t> | |||
<t>For the source of an invoking packet to process the ICMP error | <t>For the source of an invoking packet to process the ICMP error | |||
message, the ultimate destination address of the IPv6 header may be | message, the ultimate destination address of the IPv6 header may be | |||
required. The following logic is used to determine the destination | required. The following logic is used to determine the destination | |||
address for use by protocol error handlers.<list style="symbols"> | address for use by protocol-error handlers.</t> | |||
<ul spacing="normal"> | ||||
<li> | ||||
<t>Walk all extension headers of the invoking IPv6 packet to the | <t>Walk all extension headers of the invoking IPv6 packet to the | |||
routing extension header preceding the upper layer header.<list | routing extension header preceding the upper-layer header.</t> | |||
style="symbols"> | <ul spacing="normal"> | |||
<t>If routing header is type TBD IANA (SRH)<list | <li> | |||
style="symbols"> | <t>If routing header is type 4 Segment Routing Header (SRH)</t> | |||
<t>The SID at Segment List[0] may be used as the | <ul spacing="normal"> | |||
destination address of the invoking packet.</t> | <li>The SID at Segment List[0] may be used as the | |||
</list></t> | destination address of the invoking packet.</li> | |||
</list></t> | </ul> | |||
</list></t> | </li> | |||
</ul> | ||||
<t>ICMP errors are then processed by upper layer transports as defined | </li> | |||
in <xref target="RFC4443"/>.</t> | </ul> | |||
<t>ICMP errors are then processed by upper-layer transports as defined | ||||
in <xref target="RFC4443" format="default"/>.</t> | ||||
<t>For IP packets encapsulated in an outer IPv6 header, ICMP error | <t>For IP packets encapsulated in an outer IPv6 header, ICMP error | |||
handling is as defined in <xref target="RFC2473"/>.</t> | handling is as defined in <xref target="RFC2473" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="LBECMP" numbered="true" toc="default"> | ||||
<section anchor="LBECMP" title="Load Balancing and ECMP"> | <name>Load Balancing and ECMP</name> | |||
<t>For any inter domain packet, the SR Source node MUST impose a flow | <t>For any interdomain packet, the SR source node <bcp14>MUST</bcp14> im | |||
pose a flow | ||||
label computed based on the inner packet. The computation of the flow | label computed based on the inner packet. The computation of the flow | |||
label is as recommended in <xref target="RFC6438"/> for the sending | label is as recommended in <xref target="RFC6438" format="default"/> for the sending | |||
Tunnel End Point.</t> | Tunnel End Point.</t> | |||
<t>For any intradomain packet, the SR source node <bcp14>SHOULD</bcp14> | ||||
<t>For any intra domain packet, the SR Source node SHOULD impose a | impose a | |||
flow label computed as described in <xref target="RFC6437"/> to assist | flow label computed as described in <xref target="RFC6437" format="defau | |||
lt"/> to assist | ||||
ECMP load balancing at transit nodes incapable of computing a 5-tuple | ECMP load balancing at transit nodes incapable of computing a 5-tuple | |||
beyond the SRH.</t> | beyond the SRH.</t> | |||
<t>At any transit node within an SR domain, the flow label <bcp14>MUST</ | ||||
<t>At any transit node within an SR domain, the flow label MUST be | bcp14> be | |||
used as defined in <xref target="RFC6438"/> to calculate the ECMP hash | used as defined in <xref target="RFC6438" format="default"/> to calculat | |||
toward the destination address. If flow label is not used, the transit | e the ECMP hash | |||
toward the destination address. If a flow label is not used, the transit | ||||
node would likely hash all packets between a pair of SR Edge nodes to | node would likely hash all packets between a pair of SR Edge nodes to | |||
the same link.</t> | the same link.</t> | |||
<t>At an SR segment endpoint node, the flow label <bcp14>MUST</bcp14> be | ||||
<t>At an SR segment endpoint node, the flow label MUST be used as | used as | |||
defined in <xref target="RFC6438"/> to calculate any ECMP hash used to | defined in <xref target="RFC6438" format="default"/> to calculate any EC | |||
MP hash used to | ||||
forward the processed packet to the next segment.</t> | forward the processed packet to the next segment.</t> | |||
</section> | </section> | |||
<section anchor="other" numbered="true" toc="default"> | ||||
<section anchor="other" title="Other Deployments"> | <name>Other Deployments</name> | |||
<t>Other deployment models and their implications on security, MTU, | <t>Other deployment models and their implications on security, MTU, | |||
HMAC, ICMP error processing and interaction with other extension | HMAC, ICMP error processing, and interaction with other extension | |||
headers are outside the scope of this document.</t> | headers are outside the scope of this document.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="ILL" numbered="true" toc="default"> | ||||
<section anchor="ILL" title="Illustrations"> | <name>Illustrations</name> | |||
<t>This section provides illustrations of SRv6 packet processing at SR | <t>This section provides illustrations of SRv6 packet processing at SR | |||
source, transit and SR segment endpoint nodes.</t> | source, transit, and SR segment endpoint nodes.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Abstract Representation of an SRH"> | <name>Abstract Representation of an SRH</name> | |||
<t>For a node k, its IPv6 address is represented as Ak, its SRv6 SID | <t>For a node k, its IPv6 address is represented as Ak, and its SRv6 SID | |||
is represented as Sk.</t> | is represented as Sk.</t> | |||
<t>IPv6 headers are represented as the tuple of (source, destination). | <t>IPv6 headers are represented as the tuple of (source,destination). | |||
For example, a packet with source address A1 and destination address | For example, a packet with source address A1 and destination address | |||
A2 is represented as (A1,A2). The payload of the packet is | A2 is represented as (A1,A2). The payload of the packet is | |||
omitted.</t> | omitted.</t> | |||
<t>An SR Policy is a list of segments. A list of segments is | <t>An SR Policy is a list of segments. A list of segments is | |||
represented as <S1,S2,S3> where S1 is the first SID to visit, S2 | represented as <S1,S2,S3> where S1 is the first SID to visit, S2 | |||
is the second SID to visit and S3 is the last SID to visit.</t> | is the second SID to visit, and S3 is the last SID to visit.</t> | |||
<t>(SA,DA) (S3,S2,S1; SL) represents an IPv6 packet with:</t> | ||||
<t>(SA,DA) (S3, S2, S1; SL) represents an IPv6 packet with:<list | <ul spacing="normal"> | |||
style="symbols"> | <li>Source Address SA, Destination Addresses DA, and | |||
<t>Source Address is SA, Destination Addresses is DA, and | next header SRH.</li> | |||
next-header is SRH.</t> | <li>SRH with SID list <S1,S2,S3> with SegmentsLeft = | |||
SL.</li> | ||||
<t>SRH with SID list <S1, S2, S3> with SegmentsLeft = | <li>Note the difference between the <> and () symbols. | |||
SL.</t> | <S1,S2,S3> represents a SID list where the leftmost | |||
segment is the first segment. In contrast, (S3,S2,S1; SL) represents | ||||
<t>Note the difference between the <> and () symbols. | ||||
<S1, S2, S3> represents a SID list where the leftmost | ||||
segment is the first segment. Whereas, (S3, S2, S1; SL) represents | ||||
the same SID list but encoded in the SRH Segment List format where | the same SID list but encoded in the SRH Segment List format where | |||
the leftmost segment is the last segment. When referring to an SR | the leftmost segment is the last segment. When referring to an SR | |||
policy in a high-level use-case, it is simpler to use the <S1, | Policy in a high-level use case, it is simpler to use the <S1,S2, | |||
S2, S3> notation. When referring to an illustration of detailed | S3> notation. When referring to an illustration of detailed | |||
behavior, the (S3, S2, S1; SL) notation is more convenient.</t> | behavior, the (S3,S2,S1; SL) notation is more convenient.</li> | |||
</list></t> | </ul> | |||
<t>At its SR Policy headend, the Segment List <S1,S2,S3> results | <t>At its SR Policy headend, the Segment List <S1,S2,S3> results | |||
in SRH (S3,S2,S1; SL=2) represented fully as: <figure align="left"> | in SRH (S3,S2,S1; SL=2) represented fully as: </t> | |||
<artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Segments Left=2 | Segments Left=2 | |||
Last Entry=2 | Last Entry=2 | |||
Flags=0 | Flags=0 | |||
Tag=0 | Tag=0 | |||
Segment List[0]=S3 | Segment List[0]=S3 | |||
Segment List[1]=S2 | Segment List[1]=S2 | |||
Segment List[2]=S1</artwork> | Segment List[2]=S1]]></artwork> | |||
</figure></t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Example Topology"> | <name>Example Topology</name> | |||
<t>The following topology is used in examples below: <figure | <t>The following topology is used in examples below: </t> | |||
align="center" anchor="TOPO1"> | <figure anchor="TOPO1"> | |||
<artwork> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+ * * * * * * * * * * * * * * * * * * * * + | + * * * * * * * * * * * * * * * * * * * * + | |||
* [8] [9] * | * [8] [9] * | |||
| | | | | | |||
* | | * | * | | * | |||
[1]----[3]--------[5]----------------[6]---------[4]---[2] | [1]----[3]--------[5]----------------[6]---------[4]---[2] | |||
* | | * | * | | * | |||
| | | | | | |||
* | | * | * | | * | |||
+--------[7]-------+ | +--------[7]-------+ | |||
* * | * * | |||
+ * * * * * * * SR Domain * * * * * * * +</artwork> | + * * * * * * * SR domain * * * * * * * +]]></artwork> | |||
</figure><list style="symbols"> | </figure> | |||
<t>3 and 4 are SR Domain edge routers</t> | <ul spacing="normal"> | |||
<li>3 and 4 are SR domain edge routers</li> | ||||
<t>5, 6, and 7 are all SR Domain routers</t> | <li>5, 6, and 7 are all SR domain routers</li> | |||
<li>8 and 9 are hosts within the SR domain</li> | ||||
<t>8 and 9 are hosts within the SR Domain</t> | <li>1 and 2 are hosts outside the SR domain</li> | |||
<li>The SR domain implements ingress filtering as per <xref | ||||
<t>1 and 2 are hosts outside the SR Domain</t> | target="SECSRDOMAIN" format="default"/> and no external packet can | |||
enter the domain | ||||
<t>The SR domain implements ingress filtering as per <xref | with a destination address equal to a segment of the domain.</li> | |||
target="SECSRDOMAIN"/> and no external packet can enter the domain | </ul> | |||
with a destination address equal to a segment of the domain.</t> | ||||
</list></t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Source SR Node"> | <name>SR Source Node</name> | |||
<section title="Intra SR Domain Packet"> | <section numbered="true" toc="default"> | |||
<name>Intra-SR-Domain Packet</name> | ||||
<t>When host 8 sends a packet to host 9 via an SR Policy | <t>When host 8 sends a packet to host 9 via an SR Policy | |||
<S7,A9> the packet is</t> | <S7,A9> the packet is</t> | |||
<t>P1: (A8,S7)(A9,S7; SL=1)</t> | <t>P1: (A8,S7)(A9,S7; SL=1)</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Reduced Variant"> | <name>Reduced Variant</name> | |||
<t>When host 8 sends a packet to host 9 via an SR Policy | <t>When host 8 sends a packet to host 9 via an SR Policy | |||
<S7,A9> and it wants to use a reduced SRH, the packet is</t> | <S7,A9> and it wants to use a reduced SRH, the packet is</t> | |||
<t>P2: (A8,S7)(A9; SL=1)</t> | <t>P2: (A8,S7)(A9; SL=1)</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Inter SR Domain Packet - Transit"> | <name>Inter-SR-Domain Packet -- Transit</name> | |||
<t>When host 1 sends a packet to host 2, the packet is</t> | <t>When host 1 sends a packet to host 2, the packet is</t> | |||
<t>P3: (A1,A2)</t> | <t>P3: (A1,A2)</t> | |||
<t>The SR domain ingress router 3 receives P3 and steers it to SR | ||||
<t>The SR Domain ingress router 3 receives P3 and steers it to SR | domain egress router 4 via an SR Policy <S7,S4>. Router 3 | |||
Domain egress router 4 via an SR Policy <S7, S4>. Router 3 | ||||
encapsulates the received packet P3 in an outer header with an SRH. | encapsulates the received packet P3 in an outer header with an SRH. | |||
The packet is</t> | The packet is</t> | |||
<t>P4: (A3,S7)(S4,S7; SL=1)(A1,A2)</t> | ||||
<t>P4: (A3, S7)(S4, S7; SL=1)(A1, A2)</t> | ||||
<t>If the SR Policy contains only one segment (the egress router 4), | <t>If the SR Policy contains only one segment (the egress router 4), | |||
the ingress Router 3 encapsulates P3 into an outer header (A3, S4) | the ingress router 3 encapsulates P3 into an outer header (A3,S4) | |||
without SRH. The packet is</t> | without SRH. The packet is</t> | |||
<t>P5: (A3,S4)(A1,A2)</t> | ||||
<t>P5: (A3, S4)(A1, A2)</t> | <section numbered="true" toc="default"> | |||
<name>Reduced Variant</name> | ||||
<section title="Reduced Variant"> | <t>The SR domain ingress router 3 receives P3 and steers it to SR | |||
<t>The SR Domain ingress router 3 receives P3 and steers it to SR | domain egress router 4 via an SR Policy <S7,S4>. If router | |||
Domain egress router 4 via an SR Policy <S7, S4>. If router | 3 wants to use a reduced SRH, it encapsulates the received | |||
3 wants to use a reduced SRH, Router 3 encapsulates the received | ||||
packet P3 in an outer header with a reduced SRH. The packet is</t> | packet P3 in an outer header with a reduced SRH. The packet is</t> | |||
<t>P6: (A3,S7)(S4; SL=1)(A1,A2)</t> | ||||
<t>P6: (A3, S7)(S4; SL=1)(A1, A2)</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Inter SR Domain Packet - Internal to External"> | <name>Inter-SR-Domain Packet -- Internal to External</name> | |||
<t>When host 8 sends a packet to host 1, the packet is encapsulated | <t>When host 8 sends a packet to host 1, the packet is encapsulated | |||
for the portion of its journey within the SR Domain. From 8 to 3 the | for the portion of its journey within the SR domain. From 8 to 3 the | |||
packet is</t> | packet is</t> | |||
<t>P7: (A8,S3)(A8,A1)</t> | <t>P7: (A8,S3)(A8,A1)</t> | |||
<t>In the opposite direction, the packet generated from 1 to 8 | <t>In the opposite direction, the packet generated from 1 to 8 | |||
is</t> | is</t> | |||
<t>P8: (A1,A8)</t> | <t>P8: (A1,A8)</t> | |||
<t>At node 3, P8 is encapsulated for the portion of its journey | ||||
<t>At node 3 P8 is encapsulated for the portion of its journey | ||||
within the SR domain, with the outer header destined to segment S8. | within the SR domain, with the outer header destined to segment S8. | |||
Resulting in</t> | This results in</t> | |||
<t>P9: (A3,S8)(A1,A8)</t> | <t>P9: (A3,S8)(A1,A8)</t> | |||
<t>At node 8, the outer IPv6 header is removed by S8 processing, then | ||||
<t>At node 8 the outer IPv6 header is removed by S8 processing, then | ||||
processed again when received by A8.</t> | processed again when received by A8.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Transit Node"> | <name>Transit Node</name> | |||
<t>Nodes 5 acts as transit nodes for packet P1, and sends packet</t> | <t>Node 5 acts as transit node for packet P1 and sends packet</t> | |||
<t>P1: (A8,S7)(A9,S7;SL=1)</t> | <t>P1: (A8,S7)(A9,S7;SL=1)</t> | |||
<t>on the interface toward node 7.</t> | <t>on the interface toward node 7.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="SR Segment Endpoint Node"> | <name>SR Segment Endpoint Node</name> | |||
<t>Node 7 receives packet P1 and, using the logic in <xref | <t>Node 7 receives packet P1 and, using the logic in <xref target="pktEN | |||
target="pktENDSID"/>, sends packet</t> | DSID" format="default"/>, sends packet</t> | |||
<t>P7: (A8,A9)(A9,S7; SL=0)</t> | <t>P7: (A8,A9)(A9,S7; SL=0)</t> | |||
<t>on the interface toward router 6.</t> | <t>on the interface toward router 6.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Delegation of Function with HMAC Verification"> | <name>Delegation of Function with HMAC Verification</name> | |||
<t>This section describes how a function may be delegated within the | <t>This section describes how a function may be delegated within the | |||
SR Domain. In the following sections consider a host 8 connected to a | SR domain. In the following sections, consider a host 8 connected to a | |||
top of rack 5.</t> | top of rack 5.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="SID List Verification"> | <name>SID List Verification</name> | |||
<t>An operator may prefer to apply the SRH at source 8, while 5 | <t>An operator may prefer to apply the SRH at source 8, while 5 | |||
verifies the SID list is valid.</t> | verifies that the SID list is valid.</t> | |||
<t>For illustration purposes, an SDN controller provides 8 an SRH | ||||
<t>For illustration purpose, an SDN controller provides 8 an SRH | terminating at node 9, with Segment List <S5,S7,S6,A9>, and | |||
terminating at node 9, with segment list <S5,S7,S6,A9>, and | ||||
HMAC TLV computed for the SRH. The HMAC key ID and key associated | HMAC TLV computed for the SRH. The HMAC key ID and key associated | |||
with the HMAC TLV is shared with 5. Node 8 does not know the key. | with the HMAC TLV is shared with 5. Node 8 does not know the key. | |||
Node 5 is configured with an IACL applied to the interface connected | Node 5 is configured with an IACL applied to the interface connected | |||
to 8, requiring HMAC verification for any packet destined to | to 8, requiring HMAC verification for any packet destined to | |||
S/s.</t> | S/s.</t> | |||
<t>Node 8 originates packets with the received SRH, including HMAC | ||||
<t>Node 8 originates packets with the received SRH including HMAC | ||||
TLV.</t> | TLV.</t> | |||
<t>P15: (A8,S5)(A9,S6,S7,S5;SL=3;HMAC)</t> | ||||
<t>P15:(A8,S5)(A9,S6,S7,S5;SL=3;HMAC)</t> | ||||
<t>Node 5 receives and verifies the HMAC for the SRH, then forwards | <t>Node 5 receives and verifies the HMAC for the SRH, then forwards | |||
the packet to the next segment</t> | the packet to the next segment</t> | |||
<t>P16: (A8,S7)(A9,S6,S7,S5;SL=2;HMAC)</t> | ||||
<t>P16:(A8,S7)(A9,S6,S7,S5;SL=2;HMAC)</t> | ||||
<t>Node 6 receives</t> | <t>Node 6 receives</t> | |||
<t>P17: (A8,S6)(A9,S6,S7,S5;SL=1;HMAC)</t> | ||||
<t>P17:(A8,S6)(A9,S6,S7,S5;SL=1;HMAC)</t> | ||||
<t>Node 9 receives</t> | <t>Node 9 receives</t> | |||
<t>P18: (A8,A9)(A9,S6,S7,S5;SL=0;HMAC)</t> | ||||
<t>P18:(A8,A9)(A9,S6,S7,S5;SL=0;HMAC)</t> | <t>This use of an HMAC is particularly valuable within an | |||
enterprise-based SR domain <xref target="SRN" | ||||
<t>This use of an HMAC is particularly valuable within an enterprise | format="default"/>.</t> | |||
based SR Domain <xref target="SRN"/>.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>This section reviews security considerations related to the SRH, | <t>This section reviews security considerations related to the SRH, | |||
given the SRH processing and deployment models discussed in this | given the SRH processing and deployment models discussed in this | |||
document.</t> | document.</t> | |||
<t>As described in <xref target="DEP" format="default"/>, it is necessary | ||||
<t>As described in <xref target="DEP"/>, it is necessary to filter | to filter | |||
packets ingress to the SR Domain, destined to SIDs within the SR Domain | packets' ingress to the SR domain, destined to SIDs within the SR domain | |||
(i.e., bearing a SID in the destination address). This ingress filtering | (i.e., bearing a SID in the destination address). This ingress filtering | |||
is via an IACL at SR Domain ingress border nodes. Additional protection | is via an IACL at SR domain ingress border nodes. Additional protection | |||
is applied via an IACL at each SR Segment Endpoint node, filtering | is applied via an IACL at each SR Segment Endpoint node, filtering | |||
packets not from within the SR Domain, destined to SIDs in the SR | packets not from within the SR domain, destined to SIDs in the SR domain. | |||
Domain. ACLs are easily supported for small numbers of prefixes, making | ACLs are easily supported for small numbers of seldom changing prefixes, making | |||
summarization important, and when the prefixes requiring filtering is | summarization important.</t> | |||
kept to a seldom changing set.</t> | ||||
<t>Additionally, ingress filtering of IPv6 source addresses as | <t>Additionally, ingress filtering of IPv6 source addresses as | |||
recommended in BCP38 <xref target="RFC2827"/> SHOULD be used.</t> | recommended in BCP 38 <xref target="RFC2827" format="default"/> <bcp14>SHO | |||
ULD</bcp14> be used.</t> | ||||
<section title="Source Routing Attacks"> | <section numbered="true" toc="default"> | |||
<t>An SR domain implements distributed and per node protection as | <name>SR Attacks</name> | |||
described in section 5.1. Additionally, domains deny traffic with | <t>An SR domain implements distributed and per-node protection as | |||
spoofed addresses by implementing the recommendations in BCP 84 <xref | described in <xref target="SECSRDOMAIN"/>. Additionally, domains deny tr | |||
target="RFC3704"/>.</t> | affic with | |||
spoofed addresses by implementing the recommendations in BCP 84 <xref ta | ||||
rget="RFC3704" format="default"/>.</t> | ||||
<t>Full implementation of the recommended protection blocks the | <t>Full implementation of the recommended protection blocks the | |||
attacks documented in <xref target="RFC5095"/> from outside the SR | attacks documented in <xref target="RFC5095" format="default"/> from out | |||
domain, including bypassing filtering devices, reaching otherwise | side the SR | |||
unreachable Internet systems, network topology discovery, bandwidth | domain, including bypassing filtering devices, reaching | |||
otherwise-unreachable Internet systems, network topology discovery, | ||||
bandwidth | ||||
exhaustion, and defeating anycast.</t> | exhaustion, and defeating anycast.</t> | |||
<t>Failure to implement distributed and per-node protection allows | ||||
<t>Failure to implement distributed and per node protection allows | attackers to bypass filtering devices and exposes the SR domain to | |||
attackers to bypass filtering devices and exposes the SR Domain to | ||||
these attacks.</t> | these attacks.</t> | |||
<t>Compromised nodes within the SR domain may mount the attacks listed | ||||
<t>Compromised nodes within the SR Domain may mount the attacks listed | above along with other known attacks on IP networks (e.g., DoS/DDoS, | |||
above along with other known attacks on IP networks (e.g. DOS/DDOS, | ||||
topology discovery, man-in-the-middle, traffic | topology discovery, man-in-the-middle, traffic | |||
interception/siphoning).</t> | interception/siphoning).</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Service Theft"> | <name>Service Theft</name> | |||
<t>Service theft is defined as the use of a service offered by the SR | <t>Service theft is defined as the use of a service offered by the SR | |||
Domain by a node not authorized to use the service.</t> | domain by a node not authorized to use the service.</t> | |||
<t>Service theft is not a concern within the SR domain, as all SR | ||||
<t>Service theft is not a concern within the SR Domain as all SR | source nodes and SR segment endpoint nodes within the domain are able | |||
Source nodes and SR segment endpoint nodes within the domain are able | to utilize the services of the domain. If a node outside the SR domain | |||
to utilize the services of the Domain. If a node outside the SR Domain | ||||
learns of segments or a topological service within the SR domain, IACL | learns of segments or a topological service within the SR domain, IACL | |||
filtering denies access to those segments.</t> | filtering denies access to those segments.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Topology Disclosure"> | <name>Topology Disclosure</name> | |||
<t>The SRH is unencrypted and may contain SIDs of some intermediate | <t>The SRH is unencrypted and may contain SIDs of some intermediate | |||
SR-nodes in the path towards the destination within the SR Domain. If | SR nodes in the path towards the destination within the SR domain. If | |||
packets can be snooped within the SR Domain, the SRH may reveal | packets can be snooped within the SR domain, the SRH may reveal | |||
topology, traffic flows, and service usage.</t> | topology, traffic flows, and service usage.</t> | |||
<t>This is applicable within an SR domain, but the disclosure is less | ||||
<t>This is applicable within an SR Domain, but the disclosure is less | ||||
relevant as an attacker has other means of learning topology, flows, | relevant as an attacker has other means of learning topology, flows, | |||
and service usage.</t> | and service usage.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="ICMP Generation"> | <name>ICMP Generation</name> | |||
<t>The generation of ICMPv6 error messages may be used to attempt | <t>The generation of ICMPv6 error messages may be used to attempt | |||
denial-of-service attacks by sending an error-causing destination | denial-of-service attacks by sending an error-causing destination | |||
address or SRH in back-to-back packets. An implementation that | address or SRH in back-to-back packets. An implementation that | |||
correctly follows Section 2.4 of <xref target="RFC4443"/> would be | correctly follows <xref target="RFC4443" | |||
sectionFormat="of" section="2.4"/> would be | ||||
protected by the ICMPv6 rate-limiting mechanism.</t> | protected by the ICMPv6 rate-limiting mechanism.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<name>Applicability of AH</name> | ||||
<section title="Applicability of AH"> | <t>The SR domain is a trusted domain, as defined in <xref | |||
<t>The SR Domain is a trusted domain, as defined in <xref | target="RFC8402" format="default"/>, Sections <xref target="RFC8402" sect | |||
target="RFC8402"/> Section 2 and Section 8.2. The SR Source is trusted | ion="2" | |||
sectionFormat="bare" /> and <xref target="RFC8402" section="8.2" | ||||
sectionFormat="bare" />. The SR source is trusted | ||||
to add an SRH (optionally verified as having been generated by a | to add an SRH (optionally verified as having been generated by a | |||
trusted source via the HMAC TLV in this document), and segments | trusted source via the HMAC TLV in this document), and segments | |||
advertised within the domain are trusted to be accurate and advertised | advertised within the domain are trusted to be accurate and advertised | |||
by trusted sources via a secure control plane. As such the SR Domain | by trusted sources via a secure control plane. As such, the SR domain | |||
does not rely on the Authentication Header (AH) as defined in <xref | does not rely on the Authentication Header (AH) as defined in <xref targ | |||
target="RFC4302"/> to secure the SRH.</t> | et="RFC4302" format="default"/> to secure the SRH.</t> | |||
<t>The use of SRH with AH by an SR source node and its processing at an | ||||
<t>The use of SRH with AH by an SR source node, and processing at a SR | SR | |||
segment endpoint node is not defined in this document. Future | segment endpoint node are not defined in this document. Future | |||
documents may define use of SRH with AH and its processing.</t> | documents may define use of SRH with AH and its processing.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<t>This document makes the following registrations in the "Internet | ||||
Protocol Version 6 (IPv6) Parameters" "Routing Types" subre | ||||
gistry maintained | ||||
by IANA:</t> | ||||
<section anchor="IANA" title="IANA Considerations"> | <table anchor="SRH-REG"> | |||
<t>This document makes the following registrations in the Internet | <name>SRH Registration</name> | |||
Protocol Version 6 (IPv6) Parameters "Routing Type" registry maintained | <thead> | |||
by IANA:<figure align="center"> | <tr> | |||
<artwork align="left"> | <th>Value</th> | |||
Suggested Description Reference | <th>Description</th> | |||
Value | <th>Reference</th> | |||
4 Segment Routing Header (SRH) This document</artwork> | </tr> | |||
</figure></t> | </thead> | |||
<tbody> | ||||
<tr> | ||||
<td>4</td> | ||||
<td>Segment Routing Header (SRH)</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>This document makes the following registrations in "Type 4 - | <t>This document makes the following registrations in the "Type 4 - | |||
Parameter Problem" message of the "Internet Control Message Protocol | Parameter Problem" message of the "Internet Control Message Protocol | |||
version 6 (ICMPv6) Parameters" registry maintained by IANA:<figure | version 6 (ICMPv6) Parameters" registry maintained by IANA:</t> | |||
align="center"> | ||||
<artwork align="left"> | ||||
CODE NAME/DESCRIPTION | ||||
TBD IANA SR Upper-layer Header Error</artwork> | ||||
</figure></t> | ||||
<t>This section provides guidance to the Internet Assigned Numbers | ||||
Authority (IANA) regarding registration of values related to the SRH, in | ||||
accordance with BCP 26, <xref target="RFC8126"/>.</t> | ||||
<t>The following terms are used here with the meanings defined in BCP | ||||
26: "namespace", "assigned value", "registration".</t> | ||||
<t>The following policies are used here with the meanings defined in BCP | <table anchor="UPPER-LAYER"> | |||
26 <xref target="RFC8126"/>: "IETF Review".</t> | <name>SR Upper-layer Header Error Registration</name> | |||
<thead> | ||||
<tr> | ||||
<th>Code</th> | ||||
<th>Name</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>4</td> | ||||
<td>SR Upper-layer Header Error</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<section anchor="SRHFLAGSREG" | <section anchor="SRHFLAGSREG" numbered="true" toc="default"> | |||
title="Segment Routing Header Flags Registry"> | <name>Segment Routing Header Flags Registry</name> | |||
<t>This document requests the creation of a new IANA managed registry | <t>This document describes a new IANA-managed registry | |||
to identify SRH Flags Bits. The registration procedure is "IETF | to identify SRH Flags Bits. The registration procedure is "IETF | |||
Review". Suggested registry name is "Segment Routing Header Flags". | Review" <xref target="RFC8126" format="default"/>. The registry name is | |||
Flags is 8 bits.</t> | "Segment Routing Header Flags". | |||
Flags are 8 bits.</t> | ||||
</section> | </section> | |||
<section anchor="SRHTLVREG" numbered="true" toc="default"> | ||||
<section anchor="SRHTLVREG" title="Segment Routing Header TLVs Registry"> | <name>Segment Routing Header TLVs Registry</name> | |||
<t>This document requests the creation of a new IANA managed registry | <t>This document describes a new IANA-managed registry | |||
to identify SRH TLVs. The registration procedure is "IETF Review". | to identify SRH TLVs. The registration procedure is "IETF Review". | |||
Suggested registry name is "Segment Routing Header TLVs". A TLV is | The registry name is "Segment Routing Header TLVs". A TLV is | |||
identified through an unsigned 8 bit codepoint value, with assigned | identified through an unsigned 8-bit codepoint value, with assigned | |||
values 0-127 for TLVs that do not change en route, and 128-255 for | values 0-127 for TLVs that do not change en route and 128-255 for | |||
TLVs that may change en route. The following codepoints are defined in | TLVs that may change en route. The following codepoints are defined in | |||
this document: <figure align="center"> | this document: </t> | |||
<artwork align="left"> | ||||
Assigned Description Reference | ||||
Value | ||||
0 Pad1 TLV This document | ||||
1 Reserved This document | ||||
2 Reserved This document | ||||
3 Reserved This document | ||||
4 PadN TLV This document | ||||
5 HMAC TLV This document | ||||
6 Reserved This document | ||||
124-126 Experimentation and Test This document | ||||
127 Reserved This document | ||||
252-254 Experimentation and Test This document | ||||
255 Reserved This document</artwork> | ||||
</figure></t> | ||||
<t>Values 1,2,3,6 were defined in draft versions of this specification | <table anchor="TLV-REG"> | |||
<name>Segment Routing Header TLVs Registry</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Value</th> | ||||
<th>Description</th> | ||||
<th>Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>0</td> | ||||
<td>Pad1 TLV</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>2</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>4</td> | ||||
<td>PadN TLV</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>5</td> | ||||
<td>HMAC TLV</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>6</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>124-126</td> | ||||
<td>Experimentation and Test</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>127</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>252-254</td> | ||||
<td>Experimentation and Test</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
<tr> | ||||
<td>255</td> | ||||
<td>Reserved</td> | ||||
<td>This document</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Values 1, 2, 3, and 6 were defined in draft versions of this specific | ||||
ation | ||||
and are Reserved for backwards compatibility with early | and are Reserved for backwards compatibility with early | |||
implementations and should not be reassigned. Values 127 and 255 are | implementations and should not be reassigned. Values 127 and 255 are | |||
Reserved to allow for expansion of the Type field in future | Reserved to allow for expansion of the Type field in future | |||
specifications if needed.</t> | specifications, if needed.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="Implementation" title="Implementation Status"> | </middle> | |||
<t>This section is to be removed prior to publishing as an RFC.</t> | <back> | |||
<t>See <xref target="I-D.matsushima-spring-srv6-deployment-status"/> for | ||||
updated deployment and interoperability reports.</t> | ||||
<section anchor="IMPLINUX" title="Linux"> | ||||
<t>Name: Linux Kernel v4.14</t> | ||||
<t>Status: Production</t> | ||||
<t>Implementation: adds SRH, performs END processing, supports HMAC | ||||
TLV</t> | ||||
<t>Details: https://irtf.org/anrw/2017/anrw17-final3.pdf and <xref | ||||
target="I-D.filsfils-spring-srv6-interop"/></t> | ||||
</section> | ||||
<section anchor="IMPCISCO" title="Cisco Systems"> | ||||
<t>Name: IOS XR and IOS XE</t> | ||||
<t>Status: Production (IOS XR), Pre-production (IOS XE)</t> | ||||
<t>Implementation: adds SRH, performs END processing, no TLV | ||||
processing</t> | ||||
<t>Details: <xref target="I-D.filsfils-spring-srv6-interop"/></t> | ||||
</section> | ||||
<section anchor="IMPFDIO" title="FD.io"> | ||||
<t>Name: VPP/Segment Routing for IPv6</t> | ||||
<t>Status: Production</t> | ||||
<t>Implementation: adds SRH, performs END processing, no TLV | ||||
processing</t> | ||||
<t>Details: https://wiki.fd.io/view/VPP/Segment_Routing_for_IPv6 and | ||||
<xref target="I-D.filsfils-spring-srv6-interop"/></t> | ||||
</section> | ||||
<section anchor="IMPBAREFOOT" title="Barefoot"> | ||||
<t>Name: Barefoot Networks Tofino NPU</t> | ||||
<t>Status: Prototype</t> | ||||
<t>Implementation: performs END processing, no TLV processing</t> | ||||
<t>Details: <xref target="I-D.filsfils-spring-srv6-interop"/></t> | <displayreference target="I-D.ietf-intarea-tunnels" to="INTAREA-TUNNELS"/> | |||
</section> | ||||
<section title="Juniper"> | <references> | |||
<t>Name: Juniper Networks Trio and vTrio NPU's</t> | <name>References</name> | |||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5095.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6407.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8402.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2473.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4302.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2827.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2104.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6438.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6437.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4107.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.3704.xml"/> | ||||
<t>Status: Prototype & Experimental</t> | <reference anchor="FIPS180-4" target="http://csrc.nist.gov/publications/ | |||
fips/fips180-4/fips-180-4.pdf"> | ||||
<front> | ||||
<title>Secure Hash Standard (SHS)</title> | ||||
<author> | ||||
<organization>National Institute of Standards and Technology (NIST | ||||
)</organization> | ||||
</author> | ||||
<date month="August" year="2015"/> | ||||
</front> | ||||
<refcontent>FIPS PUB 180-4</refcontent> | ||||
<refcontent>DOI 10.6028/NIST.FIPS.180-4</refcontent> | ||||
</reference> | ||||
<reference anchor="IANA-SRHTLV" target="https://www.iana.org/assignmen | ||||
ts/ipv6-parameters/"> | ||||
<front> | ||||
<title>Segment Routing Header TLVs</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<t>Implementation: SRH insertion mode, Process SID where SID is an | <references> | |||
interface address, no TLV processing</t> | <name>Informative References</name> | |||
</section> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ence.RFC.8126.xml"/> | ||||
<section title="Huawei"> | <!-- I-D.draft-ietf-intarea-tunnels-10; IESG state I-D Exists --> | |||
<t>Name: Huawei Systems VRP Platform</t> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | |||
rence.I-D.draft-ietf-intarea-tunnels-10.xml"/> | ||||
<t>Status: Production</t> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ence.RFC.5340.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.5308.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4443.xml"/> | ||||
<t>Implementation: adds SRH, performs END processing, no TLV | <reference anchor="SRN" target="https://inl.info.ucl.ac.be/system/files/ | |||
processing</t> | sosr18-final15-embedfonts.pdf"> | |||
</section> | <front> | |||
</section> | <title>Software Resolved Networks: Rethinking Enterprise Networks wi | |||
th IPv6 Segment Routing</title> | ||||
<author fullname="David Lebrun"/> | ||||
<author fullname="Mathieu Jadin"/> | ||||
<author fullname="Francois Clad"/> | ||||
<author fullname="Clarence Filsfils"/> | ||||
<author fullname="Olivier Bonaventure"/> | ||||
<date year="2018"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="Contributors" title="Contributors"> | <section anchor="Acknowledgements" numbered="false" toc="default"> | |||
<t>Kamran Raza, Zafar Ali, Brian Field, Daniel Bernier, Ida Leung, Jen | <name>Acknowledgements</name> | |||
Linkova, Ebben Aries, Tomoya Kosugi, Eric Vyncke, David Lebrun, Dirk | <t>The authors would like to thank <contact fullname="Ole Troan"/>, <conta | |||
Steinberg, Robert Raszuk, Dave Barach, John Brzozowski, Pierre Francois, | ct fullname="Bob Hinden"/>, <contact fullname="Ron Bonica"/>, | |||
Nagendra Kumar, Mark Townsley, Christian Martin, Roberta Maglione, James | <contact fullname="Fred Baker"/>, <contact fullname="Brian Carpenter"/>, < | |||
Connolly, Aloys Augustin contributed to the content of this | contact fullname="Alexandru Petrescu"/>, <contact fullname="Punit Kumar Jaiswal" | |||
/>, | ||||
<contact fullname="David Lebrun"/>, <contact fullname="Benjamin Kaduk"/>, | ||||
<contact fullname="Frank Xialiang"/>, <contact fullname="Mirja Kühlewind"/>, <co | ||||
ntact fullname="Roman | ||||
Danyliw"/>, <contact fullname="Joe Touch"/>, and <contact fullname="Magnus | ||||
Westerlund"/> for their comments to this | ||||
document.</t> | document.</t> | |||
</section> | </section> | |||
<section anchor="Contributors" numbered="false" toc="default"> | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | <name>Contributors</name> | |||
<t>The authors would like to thank Ole Troan, Bob Hinden, Ron Bonica, | <t><contact fullname="Kamran Raza"/>, <contact fullname="Zafar Ali"/>, <co | |||
Fred Baker, Brian Carpenter, Alexandru Petrescu, Punit Kumar Jaiswal, | ntact fullname="Brian Field"/>, <contact fullname="Daniel Bernier"/>, <contact f | |||
David Lebrun, Benjamin Kaduk, Frank Xialiang, Mirja Kuhlewind, Roman | ullname="Ida Leung"/>, <contact fullname="Jen | |||
Danyliw, Joe Touch, and Magnus Westerlund for their comments to this | Linkova"/>, <contact fullname="Ebben Aries"/>, <contact fullname="Tomoya K | |||
osugi"/>, <contact fullname="Eric Vyncke"/>, <contact fullname="David Lebrun"/>, | ||||
<contact fullname="Dirk | ||||
Steinberg"/>, <contact fullname="Robert Raszuk"/>, <contact fullname="Dave | ||||
Barach"/>, <contact fullname="John Brzozowski"/>, <contact fullname="Pierre Fra | ||||
ncois"/>, | ||||
<contact fullname="Nagendra Kumar"/>, <contact fullname="Mark Townsley"/>, | ||||
<contact fullname="Christian Martin"/>, <contact fullname="Roberta Maglione"/>, | ||||
<contact fullname="James | ||||
Connolly"/>, and <contact fullname="Aloys Augustin"/> contributed to the c | ||||
ontent of this | ||||
document.</t> | document.</t> | |||
</section> | </section> | |||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.211 | ||||
9.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.817 | ||||
4.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.820 | ||||
0.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.509 | ||||
5.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.640 | ||||
7.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.840 | ||||
2.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.247 | ||||
3.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.430 | ||||
2.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.282 | ||||
7.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.210 | ||||
4.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.643 | ||||
8.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.643 | ||||
7.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.410 | ||||
7.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.370 | ||||
4.xml"?> | ||||
<reference anchor="FIPS180-4" | ||||
target="http://csrc.nist.gov/publications/fips/fips180-4/fips-1 | ||||
80-4.pdf"> | ||||
<front> | ||||
<title>FIPS 180-4 Secure Hash Standard (SHS)</title> | ||||
<author> | ||||
<organization>National Institute of Standards and | ||||
Technology</organization> | ||||
</author> | ||||
<date month="March" year="2012"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.812 | ||||
6.xml"?> | ||||
<?rfc include="reference.I-D.filsfils-spring-srv6-interop.xml"?> | ||||
<?rfc include="reference.I-D.ietf-intarea-tunnels.xml"?> | ||||
<?rfc include="reference.I-D.matsushima-spring-srv6-deployment-status.xml" | ||||
?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.534 | ||||
0.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.530 | ||||
8.xml"?> | ||||
<?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.444 | ||||
3.xml"?> | ||||
<reference anchor="SRN" | ||||
target="https://inl.info.ucl.ac.be/system/files/sosr18-final15- | ||||
embedfonts.pdf"> | ||||
<front> | ||||
<title>Software Resolved Networks: Rethinking Enterprise Networks | ||||
with IPv6 Segment Routing</title> | ||||
<author fullname="David Lebrun"/> | ||||
<author fullname="Mathieu Jadin"/> | ||||
<author fullname="Francois Clad"/> | ||||
<author fullname="Clarence Filsfils"/> | ||||
<author fullname="Olivier Bonaventure"/> | ||||
<date year="2018"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 261 change blocks. | ||||
1024 lines changed or deleted | 956 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/ |