<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- This template is for creating an Internet Draft using xml2rfc,
which is available here: http://xml.resource.org. -->
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<?rfc compact="no" ?>
<!-- do not start each main section on a new page -->
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<rfc category="std" docName="draft-eastlake-dnsop-rrtype-srv6-02"
     ipr="trust200902" submissionType="IETF" xml:lang="en"
     obsoletes="" updates="" tocInclude="true" tocDepth="3"
     symRefs="true" sortRefs="true" version="3"> 
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <!-- xml2rfc v2v3 conversion 2.38.1 -->
 <!-- category values: std, bcp, info, exp, and historic ipr values:
      trust200902, noModificationTrust200902,
      noDerivativesTrust200902, or pre5378Trust200902 you can add the
      attributes updates="NNNN" and obsoletes="NNNN" they will
      automatically be output with "(if approved)" -->

<!-- ***** FRONT MATTER ***** -->

<front>
    <title abbrev="An SRv6 DNS RR">
    An IPv6 Segment Routing (SRv6) Domain Name System (DNS) Resource
    Record</title>
    <seriesInfo name="Internet-Draft"
		value="draft-eastlake-dnsop-rrtype-srv6-02"/>
    
    <author fullname="Donald Eastlake" initials="D." surname="Eastlake">
      <organization>Futurewei Technologies</organization>
      <address>
        <postal>
          <street>2386 Panoramic Circle</street>
          <city>Apopka</city>
          <region>FL</region>
          <code>32703</code>
          <country>US</country>
        </postal>
        <phone>+1 508 333 2270</phone>
        <email>d3e3e3@gmail.com</email>
      </address>
    </author>
    
    <author fullname="Haoyu Song" initials="H." surname="Song">
      <organization>Futurewei Technologies</organization>
      <address>
        <postal>
          <street>2220 Central Expressway</street>
          <city>Santa Clara</city>
          <region>CA</region>
          <code>95050</code>
          <country>US</country>
        </postal>
        <email>haoyu.song@futurewei.com</email>
      </address>
    </author>
    
    <date year="2022" month="November" day="27"/>
    <!-- If the month and year are both specified and are the current
       ones, xml2rfc will fill in the current day for you. If only the
       current year is specified, xml2rfc will fill in the current day
       and month for you. If the year is not the current one, it is
       necessary to specify at least a month (xml2rfc assumes day="1"
       if not specified for the purpose of calculating the expiry
       date).  With drafts it is normally sufficient to specify just
       the year. -->

  <!-- Meta-data Declarations -->

  <area/>
    <workgroup>Internet Engineering Task Force</workgroup>
    <!-- WG name at the upperleft corner of the doc, IETF is fine for
       individual submissions.  If this element is not present, the
       default is "Network Working Group", which is used by the RFC
       Editor as a nod to the history of the IETF. -->

  <keyword>DNS</keyword>
  <keyword>SRv6</keyword>
  <!-- Keywords will be incorporated into HTML output files in a meta
       tag but they have no effect on text or nroff output. If you
       submit your draft to the RFC Editor, the keywords will be used
       for the search engine. -->

  <abstract>
    <t>A Domain Name System (DNS) Resource Record (RR) Type is
    specified for storing IPv6 Segment Routing (SRv6) Information in
    the DNS.</t>
    </abstract>
</front>

  <middle>
    <section anchor="Introduction" numbered="true" toc="default">
      <name>Introduction</name>

      <t>The Domain Name System (DNS) is a hierarchical, distributed,
      highly available database with a variety of security features
      used for bi-directional mapping between domain names and
      addresses, for email routing, and for other information <xref
      target="RFC1034" format="default"/> <xref target="RFC1035"
      format="default"/>. This data is formatted into resource records
      (RRs) whose content type and structure are indicated by the RR
      Type field. General familiarity with the DNS and its terminology
      <xref target="RFC8499" format="default"/> is assumed in this
      document.</t>
      
      <section anchor="SRv6" numbered="true" toc="default">
        <name>IPv6 Segment Routing</name>
	
        <t>Internet Protocol versions 4 (IPv4,<xref target="RFC0791"
        format="default"/>) and 6 (IPv6, <xref target="RFC8200"
        format="default"/>) have long provided header options to
        include an ordered sequence of addresses in a packet header so
        the packet travels in order through the nodes specified by
        that sequence of addresses. This is sometimes referred to as
        "source routing" because the route or path the packet follows
        is set, at least in part, when the sequence of addresses is
        added to the packet, usually at the packet's source, rather
        than being dynamically determined as the packet proceeds
        through the network.</t>
	
        <t>IPv6 Segment Routing (SRv6, <xref target="RFC8402"
        format="default"/>) extends "source routing" by generalizing
        the IPv6 sized "address" quantities in a sequence to be
        "instructions". <xref target="RFC8754" format="default"/>
        specifies a particular Segment Routing Header (SRH) that may
        be use used as part of the headers of an IPv6 packet to
        indicate an IPv6 Segment Routing sequence of
        addresses/instructions. And <xref target="RFC8986"
        format="default"/> further specifies the structuring of an
        IPv6 address size quantity such that it is composed of
        addressing information followed by a function designation
        which is optionally further followed by arguments to that
        function. Thus, segment routing might encode a series of
        operations to be performed on a packet.</t>
	
        <t>Furthermore, because a sequence of SRv6 instructions may
        all start with the same constant addressing prefix, methods of
        compression have been suggested to represent this addressing
        prefix less often and pack an increased number of quantities
        into a Segment Routing Header where each quantity may consist
        optionally of additional address information and/or function
        designation and/or function arguments.</t>
	
      </section>

      <section anchor="SRV6RRType" numbered="true"
	       toc="default">
	<name>The SRV6 RR Type</name>
	
	<t>This document specifies a SRV6 RR Type to return a sequence
	of IPv6 Segment Routing addresses / instructions and
	optionally other data.</t>
	
	<t>In many ways, the data returned for an SRV6 DNS RR is like
	an address. For example, it would be reasonable for an
	application using SRv6 to do a type SRV DNS query <xref
	target="RFC2782" format="default"/> followed by an SRV6 query
	at the resulting domain name if it was in a domain where SRv6
	was in use.  Furthermore, as a fall back, if no SRV6 RR is
	present in the DNS at a domain name, an application could
	query for the AAAA IPv6 address RR type.</t>

	<t>Segment Routing is intended to be used in a
	relatively localized domain compared with the global Internet
	and the DNS is commonly thought of as the source for global
	Internet addressing. However, DNS servers can be configured in
	a network so that some names are only visible locally and some
	RRs are only delivered locally.</t>
	
      </section>
      
      <section anchor="Terminology" numbered="true" toc="default">
        <name>Terminology</name>
	
        <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"
        format="default"/> <xref target="RFC8174" format="default"/>
        when, and only when, they appear in all capitals, as shown
        here.</t>
	
        <t>The following acronyms are used in this document:</t>
        <ul empty="true" spacing="normal">
          <li>DNS - Domain Name System</li>
          <li>IANA - Internet Assigned Number Authority</li>
          <li>RR - DNS Resource Record</li>
	  <li>SRH - Segment Routing (IPv6) Header</li>
          <li>SRv6 - IPv6 Segment Routing</li>
          <li>SRV6 - Mnemonic for the SRv6 RR Type</li>
        </ul>
	
      </section>
      
    </section>
    
    <section anchor="RDATA" numbered="true" toc="default">
      <name>SRV6 RR Type RDATA</name>
      
      <t>The SRV6 RR type enables the storage and retrieval of an
      ordered sequence of SRv6 quantities each of which is the size of
      an IPv6 <xref target="RFC8200" format="default"/> address. The
      RDATA for this type of RR is simply a sequence of such
      quantities followed by optional data (see Figure 1) and will be
      (N*16) bytes long, where N is the number of such quantities
      present, plus the length of the optional data. This optional
      data MUST NOT exceed 15 bytes in length or else some of the
      optional data will be erroneously interpreted as one or more
      Segements.
      </t>
      
      <t>The RR Type Code for the SRV6 RR is TBD1.</t>
            
      <figure anchor="RDataFigure">
        <name>SRV6 RRTYPE Data</name>
	
        <artwork align="center" name="" type="" alt=""><![CDATA[
 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|           128-bit SRv6 Address/Instruction (Segment)          |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                                                               .
.    Additional 128-bit SRv6 Addresses/Instructions (Segment)   .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F|T|  Res      | +-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+ |   SRH Flags   |
                  +-+-+-+-+-+-+-+-+
                    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                    |         SRH Tag               |
                    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                        +-+-+-
                        | Other
                        +-+-+-
		  ]]></artwork>
      </figure>
      
      <t> The RDATA consists of one or more 128-bit SRv6 segments
      optionally followed by optional data. If the RDATA length is an
      exact multiple of 16 bytes, there is no optional data. If
      optional data is present, the first byte of that optional data
      consists of flags indicating what further optional data fields
      are present as decribed below. The optional data fields, if
      present, appear in the same order as the flags indicating their
      presence.</t>

      <ul empty="true" spacing="normal">
	<li>F - If one, indicates that the "SRH Flags" byte is
	present. This byte is intended for use in the Flags field of
	the SRH. When this bit is a one, the total optional data MUST
	be at least 2 bytes long. If it is only one byte long, the
	SRV6 RR is corrupt and is ignored.</li>
	<li>T - If one, indicates that the "SRH Tag" 2-byte field is
	present. This field is intended for use in the Tag field of the
	SRH. If it is one and F is zero, the optional data MUST be at
	least 3 bytes long. It T is one and F is one, the optional
	data MUST be at least 4 bytes long. If the optional data is too
	short, the SRV6 RR is corrupt and is ignored.</li>
	<li>Res - These bits are for future extensibility and MUST be
	sent as zero and ignored on receipt.</li>
	<li>SRH Flags - See F bit above.</li>
	<li>SRH Tag - See T bit above.</li>
	<li>Other - Later expansion of the SRV6 RR may require
	additional optional data but the total amount of optional data
	MUST NOT exceed 15 bytes or the initial 16 bytes of optional
	data will be incorrectly parsed as a Segment. Other data MUST
	be ignored on receipt.</li>
      </ul>

    </section>
    
    <section anchor="Acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      
      <t>The suggestions and comments of the following persons are
      gratefully acknowledged:</t>
      
      <t>tbd</t>
      
    </section>
    <!-- Possibly a 'Contributors' section ... -->

  <section anchor="IANA" numbered="true" toc="default">
    <name>IANA Considerations</name>
    
      <t>IANA is requested to assign an SRV6 RR Type (TBD1) as in the
      template in Appendix A.</t>

  </section>
  
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      
      <t>tbd</t>
      
    </section>
    
  </middle>
  
  <!--  *****BACK MATTER ***** -->

<back>
    <!-- References split into informative and normative -->

  <!-- There are 2 ways to insert reference entries from the citation
       libraries: 1. define an ENTITY at the top, and use "ampersand
       character"RFC2629; here (as shown) 2. simply use a PI "less
       than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds:
       include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

  Both are cited textually in the same manner: by using xref elements.
  If you use the PI option, xml2rfc will, by default, try to find
  included files in the same directory as the including file. You can
  also define the XML_LIBRARY environment variable with a value
  containing a set of directories to search.  These can be either in
  the local filing system or remote ones accessed by http
  (http://domain/dir/... ).-->

  <references>
    <name>References</name>
    
      <references>
        <name>Normative References</name>
	
        <reference anchor="RFC1034"
		   target="https://www.rfc-editor.org/info/rfc1034"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml"> 
          <front>
            <title>Domain names - concepts and facilities</title>
            <author initials="P.V." surname="Mockapetris"
		    fullname="P.V. Mockapetris"> 
          </author>
            <date year="1987" month="November"/>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
	
        <reference anchor="RFC1035"
		   target="https://www.rfc-editor.org/info/rfc1035"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"> 
          <front>
            <title>Domain names - implementation and
            specification</title>
            <author initials="P.V." surname="Mockapetris"
		    fullname="P.V. Mockapetris"> 
            </author>
            <date year="1987" month="November"/>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
	
        <reference anchor="RFC2119"
		   target="https://www.rfc-editor.org/info/rfc2119"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"> 
          <front>
            <title>Key words for use in RFCs to Indicate Requirement
            Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
            </author>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
	
        <reference anchor="RFC8174"
		   target="https://www.rfc-editor.org/info/rfc8174"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"> 
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key
            Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
            </author>
            <date year="2017" month="May"/>
        </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
	
        <reference anchor="RFC8200"
		   target="https://www.rfc-editor.org/info/rfc8200"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml"> 
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author initials="S." surname="Deering" fullname="S. Deering">
            </author>
            <author initials="R." surname="Hinden" fullname="R. Hinden">
              <organization/>
            </author>
            <date year="2017" month="July"/>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
	
        <reference anchor="RFC8402"
		   target="https://www.rfc-editor.org/info/rfc8402"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml"> 
          <front>
            <title>Segment Routing Architecture</title>
            <author fullname="C. Filsfils" role="editor"> 
            </author>
            <author fullname="S. Previdi" role="editor"> 
            </author>
            <author fullname="L. Ginsberg"> 
            </author>
            <author fullname="B. Decraene"> 
            </author>
            <author fullname="S. Litkowski"> 
            </author>
            <author fullname="R. Shakir"> 
            </author>
            <date year="2018" month="July"/>
          </front>
          <seriesInfo name="RFC" value="8402"/>
          <seriesInfo name="DOI" value="10.17487/RFC8402"/>
        </reference>
	
        <reference anchor="RFC8986"
		   target="https://www.rfc-editor.org/info/rfc8986"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml"> 
          <front>
            <title>Segment Routing over IPv6 (SRv6) Network
            Programming</title>
            <author fullname="C. Filsfils" role="editor"> 
            </author>
            <author fullname="P. Camarillo" role="editor"> 
            </author>
            <author initials="J." surname="Leddy" fullname="J. Leddy">
            </author>
            <author initials="D." surname="Voyer" fullname="D. Voyer">
            </author>
            <author fullname="S. Matsushima"> 
            </author>
            <author initials="Z." surname="Li" fullname="Z. Li">
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="RFC" value="8986"/>
          <seriesInfo name="DOI" value="10.17487/RFC8986"/>
        </reference>
	
      </references>
      <references>
        <name>Informative References</name>
	
        <reference anchor="RFC0791"
		   target="https://www.rfc-editor.org/info/rfc791"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0791.xml"> 
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel"> 
            </author>
            <date year="1981" month="September"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
	
        <reference anchor="RFC2782"
		   target="https://www.rfc-editor.org/info/rfc2782"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2782.xml"> 
          <front>
            <title>A DNS RR for specifying the location of services
            (DNS SRV)</title>
            <author fullname="A. Gulbrandsen"> 
            </author>
            <author initials="P." surname="Vixie" fullname="P. Vixie">
            </author>
            <author fullname="L. Esibov"> 
            </author>
            <date year="2000" month="February"/>
          </front>
          <seriesInfo name="RFC" value="2782"/>
          <seriesInfo name="DOI" value="10.17487/RFC2782"/>
        </reference>

        <reference anchor="RFC3597"
		   target="https://www.rfc-editor.org/info/rfc3597"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3597.xml"> 
          <front>
            <title>Handling of Unknown DNS Resource Record (RR)
	    Types</title> 
            <author fullname="A. Gustafsson"> 
            </author>
            <date year="2003" month="September"/>
          </front>
          <seriesInfo name="RFC" value="3597"/>
          <seriesInfo name="DOI" value="10.17487/RFC3597"/>
        </reference>
	
        <reference anchor="RFC8499"
		   target="https://www.rfc-editor.org/info/rfc8499"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8499.xml"> 
          <front>
            <title>DNS Terminology</title>
            <author fullname="P. Hoffman"> 
            </author>
            <author fullname="A. Sullivan"> 
          </author>
            <author fullname="K. Fujiwara"> 
            </author>
            <date year="2019" month="January"/>
          </front>
          <seriesInfo name="BCP" value="219"/>
          <seriesInfo name="RFC" value="8499"/>
          <seriesInfo name="DOI" value="10.17487/RFC8499"/>
        </reference>
	
        <reference anchor="RFC8754"
		   target="https://www.rfc-editor.org/info/rfc8754"
		   xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml"> 
          <front>
            <title>IPv6 Segment Routing Header (SRH)</title>
            <author fullname="C. Filsfils" role="editor"> 
            </author>
            <author fullname="D. Dukes" role="editor"> 
            </author>
            <author fullname="S. Previdi"> 
            </author>
            <author fullname="J. Leddy">
          </author>
            <author fullname="S. Matsushima"> 
            </author>
            <author fullname="D. Voyer">
            </author>
            <date year="2020" month="March"/>
          </front>
          <seriesInfo name="RFC" value="8754"/>
          <seriesInfo name="DOI" value="10.17487/RFC8754"/>
        </reference>
	
      </references>
    </references>
    
    <section anchor="template" numbered="true" toc="default">
      <name>SRV6 RR Type Template</name>
      
      <artwork name="" type="" align="left" alt=""><![CDATA[
A. Submission Date: tbd

B.1 Submission Type:  [X] New RRTYPE  [ ] Modification to RRTYPE
B.2 Kind of RR:  [X] Data RR  [ ] Meta-RR

C. Contact Information for submitter (will be publicly posted):
   Name: Donald Eastlake       Email Address: d3e3e3@gmail.com
   International telephone number: +1-508-333-2270
   Other contact handles:

D. Motivation for the new RRTYPE application.

   Enable storeage of IPv6 Segment Routing sequences in the DNS.

E. Description of the proposed RR type.
   See draft-eastlake-dnsop-rrtype-srv6

F. What existing RRTYPE or RRTYPEs come closest to filling that need
   and why are they unsatisfactory?

   Perhaps AAAA but that only returns a single IPv6 address, not an
   ordered sequence of IPv6 sized SRv6 instructions.

G. What mnemonic is requested for the new RRTYPE (optional)?

   SRV6

H. Does the requested RRTYPE make use of any existing IANA registry
   or require the creation of a new IANA subregistry in DNS
   Parameters?  If so, please indicate which registry is to be used
   or created.  If a new subregistry is needed, specify the
   allocation policy for it and its initial contents.

   Does not use any existing registry and does not create a new
   registry.

I. Does the proposal require/expect any changes in DNS
   servers/resolvers that prevent the new type from being processed
   as an unknown RRTYPE (see [RFC3597])?

   No.

J. Comments:  None.
]]></artwork>
      
    </section>
    
  </back>
  
</rfc>
