<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-ietf-lisp-gpe-01" ipr="trust200902">
  <!-- 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>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

    <title>LISP Generic Protocol Extension</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Darrel Lewis" initials="D." surname="Lewis">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <email>darlewis@cisco.com</email>
      </address>
    </author>

    <author fullname="John Lemon" initials="J." surname="Lemon">
      <organization>Broadcom</organization>

      <address>
        <postal>
          <street>3151 Zanker Road</street>

          <!-- Reorder these if your country does things differently -->

          <city>San Jose</city>

          <region>CA</region>

          <code>95134</code>

          <country>USA</country>
        </postal>

        <email>john.lemon@broadcom.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Puneet Agarwal" initials="P." surname="Agarwal">
      <organization>Innovium</organization>

      <address>
        <postal>
          <street/>

          <!-- Reorder these if your country does things differently -->

          <city/>

          <region/>

          <code/>

          <country>USA</country>
        </postal>

        <email>puneet@acm.org</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Larry Kreeger" initials="L." surname="Kreeger">
      <organization/>

      <address>
        <postal>
          <street/>

          <!-- Reorder these if your country does things differently -->

          <city/>

          <region/>

          <code/>

          <country>USA</country>
        </postal>

        <email>lkreeger@gmail.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Paul Quinn" initials="P." surname="Quinn">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <email>paulq@cisco.com</email>
      </address>
    </author>

    <author fullname="Michael Smith" initials="M." surname="Smith">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <email>michsmit@cisco.com</email>
      </address>
    </author>

    <author fullname="Navindra Yadav" initials="N." surname="Yadav">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <email>nyadav@cisco.com</email>
      </address>
    </author>

    <author fullname="Fabio Maino" initials="F." role="editor" surname="Maino">
      <organization abbrev="Cisco">Cisco Systems</organization>

      <address>
        <postal>
          <street/>

          <!-- Reorder these if your country does things differently -->

          <city>San Jose</city>

          <region>CA</region>

          <code>95134</code>

          <country>USA</country>
        </postal>

        <email>fmaino@cisco.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date day="05" month="March" year="2018"/>

    <!-- 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>General</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>security</keyword>

    <keyword>policy</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>This draft describes extending the Locator/ID Separation Protocol
      (LISP), via changes to the LISP header, to support multi-protocol
      encapsulation.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>LISP, as defined in <xref target="RFC6830"/> and extended in <xref
      target="I-D.ietf-lisp-rfc6830bis"/>, defines an encapsulation format
      that carries IPv4 or IPv6 (henceforth referred to as IP) packets in a
      LISP header and outer UDP/IP transport.</t>

      <t>The LISP header does not specify the protocol being encapsulated and
      therefore is currently limited to encapsulating only IP packet payloads.
      Other protocols, most notably VXLAN <xref target="RFC7348"/> (which
      defines a similar header format to LISP), are used to encapsulate L2
      protocols such as Ethernet.</t>

      <t>This document defines an extension for the LISP header, as defined in
      <xref target="I-D.ietf-lisp-rfc6830bis"/>, to indicate the inner
      protocol, enabling the encapsulation of Ethernet, IP or any other
      desired protocol all the while ensuring compatibility with existing LISP
      deployments.</t>

      <t>A flag in the LISP header, called the P-bit, is used to signal the
      presence of the 8-bit Next Protocol field. The Next Protocol field, when
      present, uses 8 bits of the field allocated to the echo-noncing and
      map-versioning features. The two features are still available, albeit
      with a reduced length of Nonce and Map-Version.</t>

      <section anchor="Conventions" title="Conventions">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref
        target="RFC2119">RFC 2119</xref>.</t>
      </section>

      <section anchor="Abbreviations" title="Definition of Terms">
        <t>This document uses terms already defined in <xref
        target="I-D.ietf-lisp-rfc6830bis"/>.</t>
      </section>
    </section>

    <section anchor="LISP_header"
             title="LISP Header Without Protocol Extensions">
      <t>As described in the introduction, the LISP header has no protocol
      identifier that indicates the type of payload being carried. Because of
      this, LISP is limited to carry IP payloads.</t>

      <t>The LISP header <xref target="I-D.ietf-lisp-rfc6830bis"/> contains a
      series of flags (some defined, some reserved), a Nonce/Map-version field
      and an instance ID/Locator-status-bit field. The flags provide
      flexibility to define how the various fields are encoded. Notably, Flag
      bit 5 is the last reserved bit in the LISP header.</t>

      <figure align="left" title="LISP Header">
        <artwork align="left"><![CDATA[
       
     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |N|L|E|V|I|R|K|K|            Nonce/Map-Version                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 Instance ID/Locator-Status-Bits               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

           ]]></artwork>
      </figure>
    </section>

    <section anchor="LISP_GPE"
             title="Generic Protocol Extension for LISP (LISP-GPE)">
      <t>This document defines the following changes to the LISP header in
      order to support multi-protocol encapsulation:</t>

      <t><list style="hanging">
          <t hangText="P Bit:">Flag bit 5 is defined as the Next Protocol bit.
          The P bit MUST be set to 1 to indicate the presence of the 8 bit
          next protocol field.</t>

          <t hangText="">P = 0 indicates that the payload MUST conform to LISP
          as defined in <xref target="I-D.ietf-lisp-rfc6830bis"/>. Flag bit 5
          was chosen as the P bit because this flag bit is currently
          unallocated.</t>

          <t hangText="Next Protocol:">The lower 8 bits of the first 32-bit
          word are used to carry a Next Protocol. This Next Protocol field
          contains the protocol of the encapsulated payload packet.</t>

          <t>LISP uses the lower 24 bits of the first word for either a nonce,
          an echo-nonce, or to support map-versioning <xref
          target="RFC6834"/>. These are all optional capabilities that are
          indicated in the LISP header by setting the N, E, and the V bit
          respectively.</t>

          <t>When the P-bit and the N-bit are set to 1, the Nonce field is the
          middle 16 bits.</t>

          <t>When the P-bit and the V-bit are set to 1, the Version field is
          the middle 16 bits.</t>

          <t>When the P-bit is set to 1 and the N-bit and the V-bit are both
          0, the middle 16-bits are set to 0.</t>

          <t>This draft defines the following Next Protocol values:</t>

          <t hangText=""><list style="hanging">
              <t hangText="0x1 :">IPv4</t>

              <t hangText="0x2 :">IPv6</t>

              <t hangText="0x3 :">Ethernet</t>

              <t hangText="0x4 :">Network Service Header <xref
              target="RFC8300"/></t>
            </list></t>
        </list></t>

      <t><figure align="left" title="LISP-GPE Header">
          <artwork align="left"><![CDATA[
       
     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |N|L|E|V|I|P|K|K|        Nonce/Map-Version      | Next Protocol |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 Instance ID/Locator-Status-Bits               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

           ]]></artwork>
        </figure></t>
    </section>

    <section anchor="Compatibility" title="Backward Compatibility">
      <t>LISP-GPE uses the same UDP destination port (4341) allocated to
      LISP.</t>

      <t>A LISP-GPE router MUST not encapsulate non-IP packets to a LISP
      router. A method for determining the capabilities of a LISP router (GPE
      or "legacy") is out of the scope of this draft.</t>

      <t>When encapsulating IP packets to a LISP "legacy" router the P bit
      MUST be set to 0.</t>

      <section anchor="TOS" title="Type of Service">
        <t>When a LISP-GPE router performs Ethernet encapsulation, the inner
        802.1Q [IEEE8021Q] priority code point (PCP) field MAY be mapped from
        the encapsulated frame to the Type of Service field in the outer IPv4
        header, or in the case of IPv6 the 'Traffic Class' field.</t>
      </section>

      <section anchor="VID" title="VLAN Identifier (VID)">
        <t>When a LISP-GPE router performs Ethernet encapsulation, the inner
        header 802.1Q [IEEE8021Q] VLAN Identifier (VID) MAY be mapped to, or
        used to determine the LISP Instance ID field.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to set up a registry of LISP-GPE "Next Protocol".
      These are 8-bit values. Next Protocol values in the table below are
      defined in this draft. New values are assigned via Standards Action
      <xref target="RFC5226"/>.</t>

      <texttable>
        <ttcol>Next Protocol</ttcol>

        <ttcol>Description</ttcol>

        <ttcol>Reference</ttcol>

        <c>0</c>

        <c>Reserved</c>

        <c>This Document</c>

        <c>1</c>

        <c>IPv4</c>

        <c>This Document</c>

        <c>2</c>

        <c>IPv6</c>

        <c>This Document</c>

        <c>3</c>

        <c>Ethernet</c>

        <c>This Document</c>

        <c>4</c>

        <c>NSH</c>

        <c>This Document</c>

        <c>5..255</c>

        <c>Unassigned</c>

        <c/>
      </texttable>

      <t/>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>LISP-GPE security considerations are similar to the LISP security
      considerations documented at length in <xref
      target="I-D.ietf-lisp-rfc6830bis"/>. With LISP-GPE, issues such as
      dataplane spoofing, flooding, and traffic redirection may depend on the
      particular protocol payload encapsulated.</t>
    </section>

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>A special thank you goes to Dino Farinacci for his guidance and
      detailed review.</t>

      <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 title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include="reference.RFC.5226"?>

      <?rfc include="reference.RFC.6830"?>

      <?rfc include="reference.RFC.6834"?>

      <?rfc include="reference.RFC.7348"?>

      <?rfc include="reference.RFC.8300"?>
    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      <?rfc include="reference.I-D.ietf-lisp-rfc6830bis"?>
    </references>

    <!-- Change Log

v00.01 2017-01-24  FM    Renamed as draft-ietf-lisp-gpe to reflect WG adoption 
v00.02 2017-12-12  FM    Changed to reflect RFC6830bis header format
-->

    <!--v00.03 2017-12-14  FM    Changed Intended Status to Standard Track
v01.00 2018-03-05  FM    Removed reference to GBP draft (informational) and fixed paulq email address 
-->

    <!--   -->
  </back>
</rfc>
