<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC4291 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml">
<!ENTITY RFC6052 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6052.xml">
<!ENTITY RFC6169 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6169.xml">
<!ENTITY RFC7343 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7343.xml">
<!ENTITY RFC7608 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7608.xml">
<!ENTITY RFC8200 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY RFC8402 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8754 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8986.xml">
<!ENTITY I-D.filsfilscheng-spring-srv6-srh-compression SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-filsfilscheng-spring-srv6-srh-compression-02.xml"> 
<!ENTITY I-D.ietf-spring-compression-analysis SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-compression-analysis-00.xml">

]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-ietf-6man-sids-01" ipr="trust200902">

  <front>

    <title abbrev="SRv6 SIDs">Segment Identifiers in SRv6</title>

    <author fullname="Suresh Krishnan" initials="S." 
            surname="Krishnan">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street></street>

          <city></city>

          <region></region>

          <code></code>

          <country></country>
        </postal>

        <email>suresh.krishnan@gmail.com</email>

      </address>
    </author>

    <date/>

    <area>Internet</area>

    <workgroup>6man</workgroup>

    <abstract>
      <t>The data plane for Segment Routing over IPv6 (SRv6) [RFC8754] is built using IPv6 as the underlying forwarding plane. 
      Due to this underlying use of IPv6, Segment Identifiers (SIDs) used by SRv6 can resemble IPv6 addresses and behave like them [RFC8754][RFC8986]
      while exhibiting slightly different behaviors in some situations. This 
      document intends to explore the characteristics of SRv6 SIDs 
      and to clarify the relationship of SRv6 SIDs to the IPv6 Addressing 
      Architecture [RFC4291].
      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">

      <t>
      Segment Routing over IPv6 (SRv6) <xref target="RFC8754"/> uses IPv6 as the underlying data plane. In SRv6, SR source nodes initiate packets with a segment identifier in the Destination Address of the IPv6 header, and SR segment endpoint nodes that process a local segment present the Destination Address of an IPv6 header. Thus Segment Identifiers (SIDs) in SRv6 can and do appear in the Destination Address field of IPv6 datagrams by design. 
      </t>
    </section>

    <section title="Terminology">
    <t>The following terms are used as defined in <xref target="RFC8402"/>. 
      <list style="symbols">
        <t>Segment Routing (SR)</t>
        <t>SR Domain</t>
        <t>Segment</t>
        <t>Segment Identifier (SID)</t>
        <t>SRv6</t>
        <t>SRv6 SID</t>
        <t>SR Policy.</t>
      </list>
    </t>
    <t>The following terms are used as defined in <xref target="RFC8754"/>. 
      <list style="symbols">
        <t>Segment Routing Header (SRH)</t>
        <t>SR Source Node</t>
        <t>Transit Node</t>
        <t>SR Segment Endpoint Node</t>
        <t>Reduced SRH</t>
        <t>Segments Left</t>
        <t>Last Entry</t>
      </list>
    </t>
    <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 title="SRv6 SIDs and the IPv6 addressing architecture">

      <t>
      <xref target="RFC8754"/> defines the Segment List of the SRH as a contiguous array of 128-bit IPv6 addresses, and that each of the elements in this list are SIDs. But all of these elements are not necessarily made equal. Some of these elements may represent a local interface as described in Section 4.3 of <xref target="RFC8754"/> as "A FIB entry that represents a local interface, not locally instantiated as an SRv6 SID". From this it follows that all the SIDs that appear in the SRH are not SRv6 SIDs as defined by <xref target="RFC8402"/>. 
      </t>

      <t>
      It is also fairly clear that the non-SRv6-SID elements that appear in the SRH SID list are simply IPv6 addresses assigned to local interfaces annd MUST conform to <xref target="RFC4291"/>. So, the following discussions are intended to be applicable solely to SRv6 SIDs that are not assigned to local interfaces.
      </t>

      <t>
      One of the key questions to address is how these SRv6 SIDs appearing as IPv6 Destination Addresses are perceived and treated by "transit nodes" (that are not required to be capable of processing a Segment or the Segment Routing Header). 
      </t>
      <t>
      Section 3.1. of <xref target="RFC8986"/> describes the format of an SRv6 SID as composed of three parts LOC:FUNCT:ARG, where a locator (LOC) is encoded in the L most significant bits of the SID, followed by F bits of function (FUNCT) and A bits of arguments (ARG). Such a SID is assigned to a node within a prefix defined as a Locator of length L. When an SRv6 SID occurs in the IPv6 destination address field of an IPv6 header, only the longest match prefix corresponding to the locator is used to forward the packet to the node identified by the Locator.   
      </t>
      <t>
      It is clear that this format for SRv6 SIDs is not compliant with the requirements set forth in <xref target="RFC4291"/> for IPv6 addresses but it is also clear that SRv6 SIDs are not intended for assignment onto interfaces on end hosts. They look and act similar to other mechanisms that use IPv6 addresses with different formats such as <xref target="RFC6052"/> that defines the IPv6 Addressing of IPv4/IPv6 Translators and <xref target="RFC7343"/> that describes ORCHIDv2 (a cryptographic hash identifier format). 
      </t>

      <t>
      While looking at the transit nodes it becomes apparent that these addresses are used purely for routing and not for packet delivery to end hosts. Hence the relevant standard to apply here is <xref target="RFC7608"/> that allows the use of variable length prefixes in forwarding while explicitly decoupling IPv6 routing and forwarding from the IPv6 address/prefix semantics described in <xref target="RFC4291"/>. Please note that <xref target="RFC7608"/> does not override the rules in <xref target="RFC4291"/>, but merely limits where their impact is observed
      </t>

      <t>
      Furthermore, in the SRv6 specifications, all SIDs assigned within a given Locator prefix are located inside the node identified by Locator.  Therefore there does not appear to be a conflict with section 2.6.1 of <xref target="RFC4291"/> since subnet-router anycast addresses are neither required nor useful within a node.
      </t>

    </section>

    <section title="Special Considerations for Compressed SIDs">

      <t>
      The C-SID document <xref target="I-D.filsfilscheng-spring-srv6-srh-compression"/> describes how to use a single entry in the SRH list as a container for multiple SIDs and defines a few flavors of how to do so. A node taking part in this mechanism accomplishes this by using the ARG part <xref target="RFC8986"/> of the Destination address field of the IPv6 header to come up with a new Destination address in some of these flavors. i.e. The destination address field of the packet changes at a segment endpoint in a way similar to how the address changes as the result of processing a segment in the SRH. 
      </t>
      <t>
      One key thing to note in here is that the Locator Block at the beginning of the address does not get modified by the operations needed for supporting compressed SIDs. As we have established that the SRv6 SIDs are being treated simply as routing prefixes on transit nodes this does not constitute a modification to the IPv6 data plane on such transit nodes and any changes are restricted to SR aware nodes.
      </t>

      <section anchor="issues" title="Open Issues to be Addressed with C-SIDs">
      <t>There are a few issues that need to be addressed in the C-SID draft prior to its publication as RFC:
      <list style="symbols">
        <t>This draft needs to provide an updated definition for the SegmentsLeft field of the SRH since the current definition in <xref target="RFC8754"/><xref target="RFC8200"/> no longer holds true in the presence of C-SIDs.
        </t>
        <t>In some cases it is possible that the SR policy can be expressed purely with C-SIDs without requiring an SRH. In this case, to allow the SR domain to fail closed, some form of filtering based on the LOC part of the SRv6 SID is required as relying purely on the presence of an SRH will not be sufficient. 
        </t>
        <t>The use of C-SIDs might cause some difficulty in troubleshooting error conditions signaled by ICMPv6. Section 5.4 of <xref target="RFC8754"/> describes the ICMPv6 error processing that is required to be performed on the SR Source Nodes to correlate packets since the Destination Address field of the packet changes in flight. Similar logic needs to be specified for SR Source Nodes that use C-SIDs to determine the destination address for use by protocol-error handlers. 
        </t>
      </list> 
      </t>

      </section>

      <section title="Applicability to other forms of compressed SIDs">
      <t>The spring working group is in the process of analyzing multiple mechanisms for compressing the SRv6 SID list as described in <xref target="I-D.ietf-spring-compression-analysis"/>. Even though this document focuses on <xref target="I-D.filsfilscheng-spring-srv6-srh-compression"/>, the considerations specified in this document might also be applicable to the other mechanisms being analyzed and compared.
      </t>

      </section>
    </section>

    <section title="Allocation of a Global Unicast Prefix for SIDs">

      <t>All of the SRv6 related specifications discussed above are intended to be applicable to a contained SR Domain or between collaborating SR Domains. Hence the behavior of SRv6 SIDs is visible purely within the SR domain and they would be treated solely as IPv6 routing prefixes by nodes that are not SR aware.  
      </t>

      <t>
      As an added factor of safety, it might be prudent to allocate some address space that explicitly signals that the addresses within that space are not intended to comply with <xref target="RFC4291"/>. As described in Section 3 above, there is precedent for mechanisms that use IPv6 addresses in a manner different from that specified in <xref target="RFC4291"/>. This would be useful in identifying and potentially filtering packets at the edges of the SR Domains as described in <xref target="issues"/>.
      </t>

      <t>
      The SRv6 operational community, which is the first intended user of this block, is requested to come up with conventions and guidelines for the use of this newly allocated address block in line with their requirements. 
      </t>
      
    </section>

    <section title="IANA Considerations">
      <t>IANA is requested to assign a /16 address block for the purposes described in Section 5 out of the "Reserved by IETF" range defined in the Internet Protocol Version 6 Address Space registry. 
      </t>
    </section>

    <section title="Security Considerations">
      <t>The security considerations for the use of Segment Routing <xref target="RFC8402"/>, SRv6 <xref target="RFC8754"/>, and SRv6 network programming <xref target="RFC8986"/> 
      apply to the use of these addresses. The use of IPv6 tunneling mechanisms (including SRv6) also 
      brings up additional concerns such as those described in <xref target="RFC6169"/>. 
      </t>

    </section>

    <section title="Acknowledgments">

      <t>The author would like to extend a special note of thanks to Brian Carpenter and Erik Kline for their precisely summarized thoughts 
      on this topic that provided the seed of this draft. The author would also like to thank Andrew Alston, Ron Bonica, Bruno Decraene, Darren Dukes, Clarence Filsfils, Jim Guichard, Joel Halpern, Bob Hinden, Alvaro Retana, Ole Troan, Eric Vyncke and Jen Linkova for their ideas and comments to improve this document. 
      </t>

    </section>


  </middle>

  <back>

    <references title="Normative References">
      &RFC2119;
      &RFC4291;
      &RFC7608;
      &RFC8200;
      &RFC8402;
      &RFC8174;
      &RFC8754;
      &RFC8986;
    </references>

    <references title="Informative References">
      &RFC6052;
      &RFC6169;
      &RFC7343;
      &I-D.filsfilscheng-spring-srv6-srh-compression;
      &I-D.ietf-spring-compression-analysis;
   </references>

    
  </back>
</rfc>
