<?xml version="1.0" encoding="US-ASCII"?>
<!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 submissionType="IETF" category="exp" consensus="yes" ipr="trust200902" number="8060">

<front>
  <title>LISP Canonical Address Format (LCAF)</title>

  <author initials='D' surname="Farinacci" fullname='Dino Farinacci'>
      <organization>lispers.net</organization>
	    <address><postal>
          <street></street>
		<city>San Jose</city> <region>CA</region>
		<code></code>
		<country>United States of America</country>
	    </postal>
	    <email>farinacci@gmail.com</email></address>
  </author>
  <author initials='D' surname="Meyer" fullname='Dave Meyer'>
      <organization>Brocade</organization>
	    <address><postal>
          <street></street>
		<city>San Jose</city> <region>CA</region>
		<code></code>
		<country>United States of America</country>
	    </postal>
	    <email>dmm@1-4-5.net</email></address>
  </author>
  <author initials="J" surname="Snijders" fullname="Job Snijders">
    <organization abbrev="NTT">NTT Communications</organization>
    <address><postal>
        <street>Theodorus Majofskistraat 100</street>
        <city>Amsterdam</city><region></region>
        <code>1065 SZ</code>
        <country>The Netherlands</country>
      </postal>
      <email>job@ntt.net</email>
    </address>
  </author>

  <date month="February" year="2017"/>

  <abstract>
    <t>This document defines a canonical address format encoding used in
    Locator/ID Separation Protocol (LISP) control messages and in the encoding of lookup keys for the
    LISP Mapping Database System.</t>
  </abstract>


</front>

<middle>
  <section title="Introduction">
    <t>The LISP architecture and protocol <xref target="RFC6830" />
    introduces two new numbering spaces: Endpoint Identifiers (EIDs)
    and Routing Locators (RLOCs). To provide flexibility for current
    and future applications, these values can be encoded in LISP
    control messages using a general syntax that includes Address
    Family Identifier (AFI), length, and value fields.</t>

    <t>Currently defined AFIs include IPv4 and IPv6 addresses, which
    are formatted according to code-points assigned in the "Address Family
    Numbers" registry <xref target="AFN" /> as follows:</t>

    <figure>
    <preamble>IPv4-Encoded Address:</preamble>
    <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI = 1            |       IPv4 Address ...        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ...  IPv4 Address         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
    <postamble />
    </figure>

    <figure>
    <preamble>IPv6-Encoded Address:</preamble>
    <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI = 2            |       IPv6 Address ...        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ...  IPv6 Address         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
    <postamble />
    </figure>

    <t>This document describes the currently defined AFIs that LISP
    uses along with their encodings and introduces the LISP
    Canonical Address Format (LCAF) that can be used to define the
    LISP-specific encodings for arbitrary AFI values.</t>


    <t>Specific detailed uses for the LCAF Types defined in this
document can be found in the use-case documents that implement them.
    The same LCAF Type may be used by more than one use-case document.
    As an Experimental specification, this work is, by definition,
    incomplete. The LCAF Types defined in this document are to support
    experimentation and are intended for cautious use in self-contained
    environments in support of the corresponding use-case
    documents. This document provides assignment for an initial set of
    approved LCAF Types (registered with IANA) and additional
    unapproved LCAF Types <xref target="RFC6830" />. The unapproved
    LCAF encodings are defined to support further study and
    experimentation.</t>
  </section>
<section title="Terminology">
<section title="Requirements Language">
    <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"/>.</t>
  </section>
  <section title="Definition of Terms">
    <t><list style="hanging">
      <t hangText="Address Family Identifier (AFI):">a term used to
      describe an address encoding in a packet. Address families are
      defined for IPv4 and IPv6. See <xref target="AFN" /> and <xref
      target="RFC3232" /> for details. The reserved AFI value of 0 is
      used in this specification to indicate an unspecified encoded
      address where the length of the address is 0 bytes following the
      16-bit AFI value of 0.</t>
    </list></t>

    <figure>
    <preamble>  Unspecified Address Format:</preamble>
    <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI = 0            |      <no address follows>
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
    <postamble />
    </figure>

    <t><list style="hanging">
      <t hangText="Endpoint ID (EID):"> a 32-bit (for IPv4) or 128-bit
      (for IPv6) value used in the source and destination address fields
      of the first (most inner) LISP header of a packet. The host
      obtains a destination EID the same way it obtains a destination
      address today, for example, through a DNS lookup or SIP exchange.
      The source EID is obtained via existing mechanisms used to set a
      host's "local" IP address. An EID is allocated to a host from an
      EID-prefix block associated with the site where the host is
      located.  An EID can be used by a host to refer to other
      hosts.</t>
  
      <t hangText="Routing Locator (RLOC):"> the IPv4 or IPv6 address
      of an Egress Tunnel Router (ETR). It is the output of an
      EID-to-RLOC mapping lookup. An EID maps to one or more
      RLOCs. Typically, RLOCs are numbered from topologically
      aggregatable blocks that are assigned to a site at each point to
      which it attaches to the global Internet; where the topology is
      defined by the connectivity of provider networks, RLOCs can be
      thought of as Provider-Assigned (PA) addresses. Multiple RLOCs
      can be assigned to the same ETR device or to multiple ETR
      devices at a site.</t>
    </list></t>
  </section>
</section>
  <section title="LISP Canonical Address Format Encodings">


    <t>IANA has assigned AFI value 16387 (0x4003) to the LISP Canonical
    Address Format (LCAF). This specification defines the
    encoding format of the LISP Canonical Address (LCA).  This section
    defines all Types for which an initial allocation in the LISP-LCAF
    registry is requested. See <xref target="IANA" /> for the
    complete list of such Types.</t>

    <t>The AFI definitions in <xref target="AFN" />
    only allocate code-points for the AFI value itself. The length of
    the address or entity that follows is not defined and is implied
    based on conventional experience.  When LISP uses
    LCAF definitions from this document, the AFI-based address lengths are
    specified in this document. When new LCAF definitions are defined
    in other use-case documents, the AFI-based address lengths for any new AFI-encoded addresses are specified in those documents.</t>

    <figure>
    <preamble>The first 6 bytes of a LISP Canonical Address are
    followed by a variable number of fields of variable length:</preamble>
    <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type       |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             . . .                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
    <postamble />
    </figure>

    <t><list style="hanging">
      <t hangText="Rsvd1/Rsvd2:">these 8-bit fields are reserved for future use
      and MUST be transmitted as 0 and ignored on receipt.</t>

      <t hangText="Flags:">this 8-bit field is for future definition
      and use. For now, set to zero on transmission and ignored on
      receipt.</t>

      <t hangText="Type:">this 8-bit field is specific to the LISP Canonical Address
 Format encodings.  Both approved and unapproved values are listed
 below.  Unapproved values are indicated; see Section 5 for more details.</t>

      <t hangText="  Type 0:">Null Body</t>
      <t hangText="  Type 1:">AFI List</t>
      <t hangText="  Type 2:">Instance ID</t>
      <t hangText="  Type 3:">AS Number</t>
      <t hangText="  Type 4:">Application Data (unapproved; see Section 5)</t>
      <t hangText="  Type 5:">Geo-Coordinates</t>
      <t hangText="  Type 6:">Opaque Key (unapproved; see Section 5)</t>
      <t hangText="  Type 7:">NAT-Traversal</t>
      <t hangText="  Type 8:">Nonce Locator (unapproved; see Section 5)</t>
      <t hangText="  Type 9:">Multicast Info</t>
      <t hangText="  Type 10:">Explicit Locator Path</t>
      <t hangText="  Type 11:">Security Key</t>
      <t hangText="  Type 12:">Source/Dest Key</t>
      <t hangText="  Type 13:">Replication List Entry</t>
      <t hangText="  Type 14:">JSON Data Model (unapproved; see Section 5)</t>
      <t hangText="  Type 15:">Key/Value Address Pair (unapproved; see Section 5)</t>
      <t hangText="  Type 16:">Encapsulation Format (unapproved; see Section 5)</t>

      <t hangText="Length:">this 16-bit field is in units of bytes and
      covers all of the LISP Canonical Address payload, starting and
      including the byte after the Length field. When including the
      AFI, an LCAF-encoded address will have a minimum length of 8
      bytes when the Length field is 0.  The 8 bytes include the AFI,
      Flags, Type, Rsvd1, Rsvd2, and Length fields. When the AFI is not
      next to an encoded address in a control message, the encoded
      address will have a minimum length of 6 bytes when the Length
      field is 0. The 6 bytes include the Flags, Type, Rsvd1, Rsvd2, and
      Length fields.</t>
    </list></t>

    <t><xref target="RFC6830" /> states RLOC-records based on an IP
    address are sorted when encoded in control messages, so the
    locator-set has consistent order across all xTRs for a given
    EID. The sort order is based on sort-key {afi, RLOC-address}.  When
    an RLOC based on an IP address is LCAF encoded, the sort-key is
    {afi, LCAF-Type}.  Therefore, when a locator-set has a mix of AFI
    records and LCAF records, they are ordered from smallest to
    largest AFI value.</t>


  </section>

  <section title="LISP Canonical Address Applications">
      <t>The following sections define the LCAF for the currently
      approved initial set of Type values.</t>

      <section title="Segmentation Using LISP">
        <t>When multiple organizations inside of a LISP site are using
        private addresses <xref target="RFC1918" /> as EID prefixes,
        their address spaces must remain segregated due to possible
        address duplication.  An Instance ID in the address encoding
        can aid in making the entire AFI-based address unique.</t>

        <t>Another use for the Instance ID LISP Canonical Address
        Format is when creating multiple segmented VPNs inside of a
        LISP site where keeping EID-prefix-based subnets is
        desirable.</t>

        <figure>
        <preamble>Instance ID LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 2    | IID mask-len  |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Instance ID                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Address  ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="IID mask-len:">if the AFI is set to 0, then
          this format is not encoding an extended EID prefix, but
          rather an Instance ID range where the 'IID mask-len'
          indicates the number of high-order bits used in the Instance
          ID field for the range. The low-order bits of the Instance ID
          field must be 0.</t>

          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Instance ID:">the low-order 24 bits that can go
          into a LISP data header when the I bit is set. See <xref
          target="RFC6830" /> for details. The reason for the length
          difference is so that the maximum number of instances supported
          per mapping system is 2^32, while conserving space in the
          LISP data header. This comes at the expense of limiting the
          maximum number of instances per xTR to 2^24. If an xTR is
          configured with multiple Instance IDs where the value in the
          high-order 8 bits is the same, then the low-order 24 bits
          MUST be unique.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>
        </list></t>

        <t>This LISP Canonical Address Type can be used to encode
        either EID or RLOC addresses.</t>

        <t>Usage: When used as a lookup key, the EID is regarded as an
        extended-EID in the mapping system. This encoding is used in
        EID-records in Map-Request, Map-Reply, Map-Register, and
        Map-Notify messages. When LISP Delegated Database Tree (LISP-DDT) <xref
        target="LISP-DDT"/> is used as the mapping system
        mechanism, extended EIDs are used in Map-Referral
        messages.</t>


      </section>

      <section title="Carrying AS Numbers in the Mapping Database">
        <t>When an Autonomous System (AS) number is stored in the LISP Mapping Database
        System for either policy or documentation reasons, it can be
        encoded in a LISP Canonical Address.</t>

        <figure>
        <preamble>AS Number LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 3    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           AS Number                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Address  ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="AS Number:">the 32-bit AS number of the
          autonomous system that has been assigned to either the EID or
          RLOC that follows.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>
        </list></t>

        <t>The AS Number LCAF Type can be used to encode
        either EID or RLOC addresses.  The former is used to describe
        the LISP-ALT AS number the EID prefix for the site is being
        carried for. The latter is used to describe the AS that is
        carrying RLOC based prefixes in the underlying routing
        system.</t>

        <t>Usage: This encoding can be used in EID-records or RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is used as
        the mapping system mechanism, extended EIDs are used in
        Map-Referral messages.</t>


      </section>

      <section title="Assigning Geo-Coordinates to Locator Addresses">
        <t>If an ETR desires to send a Map-Reply describing the Geo-Coordinates for each locator in its locator-set, it can use
        the Geo-Coordinates LCAF Type to convey physical location
        information.</t>
        <t>Coordinates are specified using the WGS 84 (World Geodetic
        System 1984) reference coordinate system <xref target="WGS-84"
        />.</t>

        <figure>
        <preamble>Geo-Coordinates LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 5    |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|     Latitude Degrees        |    Minutes    |    Seconds    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|     Longitude Degrees       |    Minutes    |    Seconds    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Altitude                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Address  ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="N:">When set to 1 means north; otherwise,
          south.</t>
          <t hangText="Latitude Degrees:">Valid values range from 0 to
          90 degrees above or below the equator (northern or southern
          hemisphere, respectively).</t>
          <t hangText="Latitude Minutes:">Valid values range from 0 to
          59.</t>
          <t hangText="Latitude Seconds:">Valid values range from 0 to
          59.</t>
          <t hangText="E:">When set to 1 means east; otherwise, west.</t>
          <t hangText="Longitude Degrees:">Valid values are from 0 to 180
          degrees right or left of the Prime Meridian.</t>
          <t hangText="Longitude Minutes:">Valid values range from 0
          to 59.</t>
          <t hangText="Longitude Seconds:">Valid values range from 0
          to 59.</t>
          <t hangText="Altitude:">Height relative to sea level in
          meters.  This is a two's complement signed integer meaning
          that the altitude could be below sea level.  A value of
          0x7fffffff indicates no Altitude value is encoded. </t>
          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>
        </list></t>

        <t>The Geo-Coordinates LCAF Type can be used to
        encode either EID or RLOC addresses. When used for EID
        encodings, you can determine the physical location of an EID
        along with the topological location by observing the
        locator-set.</t>

        <t>Usage: This encoding can be used in EID-records or RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is
        used as the mapping system mechanism, extended EIDs are used
        in Map-Referral messages.</t>

        <t>The use of the Geo-Coordinates LCAF encoding raises privacy
        issues as location information is privacy sensitive, and
        possibly unexpectedly privacy-sensitive information may be
        conveyed, e.g., if the location information corresponds to a
        router located in a person's home.  Therefore, this encoding
        should not be used unless needed for operation of a LISP
        deployment. Before electing to utilize this encoding, care
        should be taken to ensure the appropriate policies are being
        used by the EID for controlling the conveyed information.</t>


      </section>

      <section title="NAT Traversal Scenarios">
        <t>When a LISP system is conveying global-address and mapped-port information when traversing through a NAT device, the
        NAT-Traversal LCAF Type is used. See <xref
        target="NAT-LISP"/> for details.</t>

       <figure>
        <preamble>NAT-Traversal Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 7    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       MS UDP Port Number      |      ETR UDP Port Number      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |  Global ETR RLOC Address  ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |       MS RLOC Address  ...    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          | Private ETR RLOC Address  ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |      RTR RLOC Address 1 ...   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |      RTR RLOC Address k ...   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="MS UDP Port Number:">this is the UDP port
          number of the Map-Server and is set to 4342.</t>

          <t hangText="ETR UDP Port Number:">this is the port number
          returned to a LISP system that was copied from the source
          port from a packet that has flowed through a NAT device.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>

          <t hangText="Global ETR RLOC Address:">this is an address
          known to be globally unique built by NAT-traversal
          functionality in a LISP router.</t>


          <t hangText="MS RLOC Address:">this is the address of the
          Map-Server used in the destination RLOC of a packet that has
          flowed through a NAT device.</t>

          <t hangText="Private ETR RLOC Address:">this is an address
          known to be a private address inserted in this LCAF
          by a LISP router that resides on the private side of a NAT
          device.</t>

          <t hangText="RTR RLOC Address:">this is an encapsulation
          address used by an Ingress Tunnel Router (ITR) or Proxy Ingress Tunnel Router (PITR) that resides behind a NAT
          device.  This address is known to have state in a NAT device
          so packets can flow from it to the LISP ETR behind the NAT.
          There can be one or more NAT Re-encapsulating Tunnel Router (RTR)
          <xref target="NAT-LISP"/>
          addresses supplied in these set of fields.  The number of
          RTRs encoded is determined by parsing each field.  When
          there are no RTRs supplied, the RTR fields can be omitted
          and reflected by the LCAF length field or an AFI of 0 can be
          used to indicate zero RTRs encoded.</t>
        </list></t>


        <t>Usage: This encoding can be used in Info-Request and
        Info-Reply messages. The mapping system does not store this
        information. The information is used by an xTR and Map-Server
        to convey private and public address information when
        traversing NAT and firewall devices.</t>

	<t>Care should be taken to protect privacy against the adverse
	use of a Global or Private ETR RLOC Address by ensuring policy
	controls are used during EID registrations that use this LCAF
	Type in RLOC-records. Refer to the use-case documents for
	additional information.</t>


      </section>

      <section title="Multicast Group Membership Information">
        <t>Multicast group information can be published in the mapping
        database. So a lookup on a group address EID can return a
        replication list of RLOC group addresses or RLOC unicast
        addresses.  The intent of this type of unicast replication is
        to deliver packets to multiple ETRs at receiver LISP multicast
        sites.  The locator-set encoding for this EID-record Type can
        be a list of ETRs when they each register with "Merge
        Semantics". The encoding can be a typical AFI-encoded locator
        address. When an RTR list is being registered (with multiple
        levels according to <xref target="LISP-RE"/>), the
        Replication List Entry LCAF Type is used for locator
        encoding.</t>

        <t>This LCAF encoding can be used to send broadcast packets to
        all members of a subnet when an EID is away from its home
        subnet location.</t>

       <figure>
        <preamble>Multicast Info Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 9    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Instance ID                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Reserved           | Source MaskLen| Group MaskLen |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |   Source/Subnet Address  ...  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |       Group Address  ...      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Reserved:">must be set to zero and ignored on
          receipt.</t>

          <t hangText="Instance ID:">the low-order 24 bits that can go
          into a LISP data header when the I bit is set. See <xref
          target="RFC6830" /> for details. The use of the Instance ID
          in this LCAF Type is to associate a multicast forwarding
          entry for a given VPN.  The Instance ID describes the VPN
          and is registered to the mapping database system as a
          3-tuple of (Instance ID, S-prefix, G-prefix).</t>

          <t hangText="Source MaskLen:">the mask length of the source
          prefix that follows. The length is the number of high-order
          mask bits set.</t>

          <t hangText="Group MaskLen:">the mask length of the group
          prefix that follows. The length is the number of high-order
          mask bits set.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />. When a specific address family has a
          multicast address semantic, this field must be either a
          group address or a broadcast address.</t>

          <t hangText="Source/Subnet Address:">the source address or prefix
          for encoding an (S,G) multicast entry.</t>

          <t hangText="Group Address:">the group address or group prefix
          for encoding (S,G) or (*,G) multicast entries.</t>

        </list></t>

        <t>Usage: This encoding can be used in EID-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is
        used as the mapping system mechanism, extended EIDs are used
        in Map-Referral messages.</t>


      </section>

      <section title="Traffic Engineering Using Re-encapsulating Tunnels">
          <t>For a given EID lookup into the mapping database, this
          LCAF can be returned to provide a list of locators in
          an explicit re-encapsulation path. See <xref
          target="LISP-TE"/> for details.</t>

       <figure>
        <preamble>Explicit Locator Path (ELP) Canonical Address
        Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 10   |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Rsvd3         |L|P|S|           AFI = x             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reencap Hop 1  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Rsvd3         |L|P|S|           AFI = x             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reencap Hop k  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

	  <t hangText="Rsvd3:">this field is reserved for future use
	  and MUST be transmitted as 0 and ignored on receipt.</t>

          <t hangText="Lookup bit (L):">this is the Lookup bit used to
          indicate to the user of the ELP not to use this address for
          encapsulation but to look it up in the mapping database
          system to obtain an encapsulating RLOC address.</t>

          <t hangText="RLOC Probe bit (P):">this is the RLOC Probe bit
          that means the Reencap Hop allows RLOC-probe messages to be
          sent to it. When the R bit is set to 0, RLOC-probes must not
          be sent. When a Reencap Hop is an anycast address then
          multiple physical Reencap Hops are using the same RLOC
          address. In this case, RLOC-probes are not needed because
          when the closest RLOC address is not reachable, another RLOC
          address can be reachable.</t>

          <t hangText="Strict bit (S):">this is the Strict bit, which
          means the associated Reencap Hop is required to be used. If
          this bit is 0, the re-encapsulator can skip this Reencap Hop
          and go to the next one in the list.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />. When a specific AFI has its own encoding of
          a multicast address, this field must be either a group
          address or a broadcast address.</t>
        </list></t>

        <t>Usage: This encoding can be used in RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. This encoding does not need to be understood by the
        mapping system for mapping database lookups, since this LCAF
        Type is not a lookup key.</t>


      </section>

      <section title="Storing Security Data in the Mapping Database">
        <t>When a locator in a locator-set has a security key
        associated with it, this LCAF will be used to encode
        key material. See <xref target="LISP-DDT"/> for
        details.</t>

       <figure>
        <preamble>Security Key Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 11   |      Rsvd2    |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Key Count   |      Rsvd3    | Key Algorithm |   Rsvd4     |R|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Key Length          |       Key Material ...        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        ... Key Material                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |       Locator Address ...     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Key Count:">the Key Count field declares the
          number of Key sections included in this LCAF. A Key section is made
          up of Key Length and Key Material fields.</t>

	  <t hangText="Rsvd3:">this field is reserved for future use
	  and MUST be transmitted as 0 and ignored on receipt.</t>

          <t hangText="Key Algorithm:">the Key Algorithm field identifies
          the key's cryptographic algorithm and specifies the format
          of the Public Key field. Refer to the <xref
          target="LISP-DDT"/> and <xref
          target="RFC8061"/> use cases for definitions of
          this field.</t>

	  <t hangText="Rsvd4:">this field is reserved for future use
	  and MUST be transmitted as 0 and ignored on receipt.</t>

          <t hangText="R bit:">this is the Revoke bit and, if set, it
          specifies that this key is being revoked.</t>

          <t hangText="Key Length:">this field determines the length
          in bytes of the Key Material field.</t>

          <t hangText="Key Material:">the Key Material field stores
          the key material.  The format of the key material stored
          depends on the Key Algorithm field.</t>

          <t hangText="AFI = x:">x can be any AFI value from 
          <xref target="AFN" />. This is the locator address that owns the
          encoded security key.</t>
        </list></t>

        <t>Usage: This encoding can be used in EID-records or RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is
        used as the mapping system mechanism, extended EIDs are used
        in Map-Referral messages.</t>


      </section>

      <section title="Source/Destination 2-Tuple Lookups">
        <t>When both a source and destination address of a flow need
        consideration for different locator-sets, this 2-tuple key is
        used in EID fields in LISP control messages. When the
        Source/Dest key is registered to the mapping database, it can
        be encoded as a source-prefix and destination-prefix. When the
        Source/Dest is used as a key for a mapping database lookup, the
        source and destination come from a data packet.</t>

       <figure>
        <preamble>Source/Dest Key Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 12   |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Reserved           |   Source-ML   |    Dest-ML    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Source-Prefix ...     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = y          |     Destination-Prefix ...    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Reserved:">must be set to zero and ignored on
          receipt.</t>

          <t hangText="Source-ML:">the mask length of the source
          prefix that follows. The length is the number of high-order
          mask bits set.</t>

          <t hangText="Dest-ML:">the mask length of the destination
          prefix that follows. The length is the number of high-order
          mask bits set.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>

          <t hangText="AFI = y:">y can be any AFI value from <xref
          target="AFN" />. When a specific address family has a
          multicast address semantic, this field must be either a
          group address or a broadcast address.</t>
        </list></t>

        <t>Usage: This encoding can be used in EID-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is
        used as the mapping system mechanism, extended EIDs are used
        in Map-Referral messages. Refer to <xref
        target="LISP-TE"/> for usage details of this
        LCAF Type.</t>


      </section>

      <section title="Replication List Entries for Multicast Forwarding">
        <t>The Replication List Entry LCAF Type is an encoding for a
        locator being used for unicast replication according to the
        specification in <xref target="LISP-RE"/>. This
        locator encoding is pointed to by a Multicast Info LCAF Type
        and is registered by Re-encapsulating Tunnel Routers (RTRs)
        that are participating in an overlay distribution tree. Each
        RTR will register its locator address and its configured level
        in the distribution tree.</t>

       <figure>
        <preamble>Replication List Entry Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 13   |    Rsvd2      |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Rsvd3            |     Rsvd4     |  Level Value  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |           RTR/ETR #1 ...      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Rsvd3            |     Rsvd4     |  Level Value  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |           RTR/ETR  #n ...     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Rsvd3/Rsvd4:">must be set to zero and ignored
          on receipt.</t>

          <t hangText="Level Value:">this value is associated with the
          level within the overlay distribution tree hierarchy where
          the RTR resides. The level numbers are ordered from lowest
          value being close to the ITR (meaning that ITRs replicate to
          level-0 RTRs) and higher levels are further downstream on
          the distribution tree closer to ETRs of multicast receiver
          sites.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />. A specific AFI has its own encoding of
          either a unicast or multicast locator address. For
          efficiency reasons, all RTR/ETR entries for the same level
          should be combined by a Map-Server to avoid
          searching through the entire multilevel list of locator
          entries in a Map-Reply message.</t>
        </list></t>

        <t>Usage: This encoding can be used in RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages.</t>
      </section>

      <section title="Applications for AFI List LCAF Type">
	  <section title="Binding IPv4 and IPv6 Addresses">
            <t>When header translation between IPv4 and IPv6 is
            desirable, a LISP Canonical Address can use the AFI List
            LCAF Type to carry a variable number of AFIs in one LCAF AFI.</t>
	    
            <figure>
            <preamble>Address Binding LISP Canonical Address Format:</preamble>
            <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI = 1            |       IPv4 Address ...        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ...  IPv4 Address         |            AFI = 2            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          IPv6 Address ...                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address  ...                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     ...  IPv6 Address                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            ]]></artwork>
	    <postamble />
	    </figure>

            <t><list style="hanging">
              <t hangText="Length:">length in bytes starting and
              including the byte after this Length field.</t>
            </list></t>

            <t>This type of address format can be included in a
            Map-Request when the address is being used as an EID, but
            the LISP Mapping Database System lookup destination can use
            only the IPv4 address. This is so a Mapping Database
            Service Transport System, such as LISP-ALT <xref
            target="RFC6836" />, can use the Map-Request destination
            address to route the control message to the desired LISP
            site.</t>

	    <t>Usage: This encoding can be used in EID-records or RLOC-records
	    in Map-Request, Map-Reply, Map-Register, and
	    Map-Notify messages. See the other subsections in this section for
	    specific use cases.</t>


          </section>

	  <section title="Layer 2 VPNs">
            <t>When Media Access Control (MAC) addresses are stored in the LISP Mapping
            Database System, the AFI List LCAF Type can be used to carry
            AFI 6.</t>

          <figure>
          <preamble>MAC Address LISP Canonical Address Format:</preamble>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             AFI = 6           |    Layer 2 MAC Address  ...   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    ... Layer 2 MAC Address                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          ]]></artwork>
	  <postamble />
	  </figure>

          <t><list style="hanging">
            <t hangText="Length:">length in bytes starting and
            including the byte after this Length field.</t>
          </list></t>

        <t>This address format can be used to connect Layer 2 domains
        together using LISP over an IPv4 or IPv6 core network to
        create a Layer 2 VPN. In this use case, a MAC address is being
        used as an EID, and the locator-set that this EID maps to can
        be an IPv4 or IPv6 RLOC, or even another MAC address being
        used as an RLOC. See <xref target="EID-MOBILITY"/>
        for how Layer 2 VPNs operate when doing EID mobility.</t>

	<t>Care should be taken to protect privacy against the adverse
	use of a Layer 2 MAC address by ensuring policy controls are
	used during EID registrations that use AFI=6 encodings in
	RLOC-records. Refer to the use-case documents for additional
	information.</t>


      </section>

      <section title="ASCII Names in the Mapping Database">
        <t>If DNS names <xref target="RFC1035"/> or URIs <xref
        target="RFC3986"/> are stored in the LISP Mapping Database
        System, the AFI List LCAF Type can be used to carry an ASCII
        string.</t>

        <figure>
        <preamble>ASCII LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             AFI = 17          |      DNS Name or URI  ...     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>
        </list></t>

	<t>An example for using DNS names is when an ETR registers a mapping
	with an EID-record encoded as (AFI=1, 10.0.0.0/8) with an
	RLOC-record (AFI=17, "router.abc.com").</t>


      </section>

      <section title="Using Recursive LISP Canonical Address Encodings">
        <t>When any combination of above is desirable, the AFI List LCAF
        Type value can be used to carry within the LCAF AFI another
        LCAF AFI (for example, Application-Specific Data in
	<xref target="ASD"/>).</t>

        <figure>
        <preamble>Recursive LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 4    |     Rsvd2     |            Length2            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   IP TOS, IPv6 TC or Flow Label               |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Local Port (lower-range)   |    Local Port (upper-range)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Remote Port (lower-range)   |   Remote Port (upper-range)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            AFI = 1            |       IPv4 Address ...        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ...  IPv4 Address         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>
          <t hangText="Length2:">length in bytes starting and
          including the byte after this Length2 field.</t>
        </list></t>

        <t>This format could be used by a Mapping Database Service Transport
        System, such as LISP-ALT <xref target="RFC6836" />, where the
        AFI=1 IPv4 address is used as an EID and placed in the
        Map-Request destination address by the sending LISP
        system. The ALT system can deliver the Map-Request to the LISP
        destination site independent of the Application Data LCAF Type AFI
        payload values. When this AFI is processed by the destination
        LISP site, it can return different locator-sets based on the
        type of application or level of service that is being
        requested.</t>


      </section>

      <section title="Compatibility Mode Use Case">
        <t>A LISP system should use the AFI List LCAF Type format when
        sending to LISP systems that do not support a particular LCAF
        Type used to encode locators. This allows the receiving system
        to be able to parse a locator address for encapsulation
        purposes. The list of AFIs in an AFI List LCAF Type has no
        semantic ordering and a receiver should parse each AFI element
        no matter what the ordering.</t>

        <figure>
        <preamble>Compatibility Mode Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 1    |     Rsvd2     |           Length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 5    |     Rsvd2     |           Length2             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|N|     Latitude Degrees        |    Minutes    |    Seconds    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|     Longitude Degrees       |    Minutes    |    Seconds    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Altitude                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = 0          |           AFI = 1             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          IPv4 Address                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>
          <t hangText="Length2:">length in bytes starting and
          including the byte after this Length2 field.</t>
        </list></t>

        <t>If a system does not recognized the Geo-Coordinates LCAF
        Type that is accompanying a locator address, an encoder can
        include the Geo-Coordinates LCAF Type embedded in an AFI List
        LCAF Type where the AFI in the Geo-Coordinates LCAF Type is set to 0
        and the AFI encoded next in the list is encoded with a valid
        AFI value to identify the locator address.</t>

        <t>A LISP system is required to support the AFI List LCAF Type
        to use this procedure. It would skip over 10 bytes of the Geo-Coordinates LCAF Type to get to the locator address encoding
        (an IPv4 locator address). A LISP system that does support the
        Geo-Coordinates LCAF Type can support parsing the locator
        address within the Geo-Coordinates LCAF Type encoding or in the
        locator encoding that follows in the AFI List LCAF Type.</t>


      </section>
    </section>
  </section>

  <section title="Experimental LISP Canonical Address Applications">

    <t>The following sections describe experimental LCAF
    encodings. These LCAF Types are not approved (i.e., not registered with
    IANA). The inclusion of these encodings in this document is in
    support of further study and experimentation to determine whether
    these encodings are functional, if there is a demand for these use
    cases, and to better understand deployment considerations. As noted
    previously, these LCAF Types are restricted to cautious use in
    self-contained environments in support of the corresponding
    use-case documents.</t>

    <section title="Convey Application-Specific Data" anchor="ASD">
      <t>When a locator-set needs to be conveyed based on the type of
      application or the Per-Hop Behavior (PHB) of a packet, the
      Application Data LCAF Type can be used.</t>

      <figure>
      <preamble>Application Data LISP Canonical Address Format:</preamble>
      <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 4    |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       IP TOS, IPv6 TC, or Flow Label          |    Protocol   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Local Port (lower-range)   |    Local Port (upper-range)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Remote Port (lower-range)   |   Remote Port (upper-range)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Address  ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="IP TOS, IPv6 TC, or Flow Label:">this field
          stores the 8-bit IPv4 TOS field used in an IPv4 header, the
          8-bit IPv6 Traffic Class or Flow Label used in an IPv6
          header.</t>

          <t hangText="Local Port/Remote Port Ranges:">these fields
          are from the TCP, UDP, or Stream Control Transmission Protocol (SCTP) transport header. A range can
          be specified by using a lower value and an upper value. When
          a single port is encoded, the lower and upper value fields
          are the same.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>
        </list></t>

        <t>The Application Data LCAF Type is used for an
        EID encoding when an ITR wants a locator-set for a specific
        application. When used for an RLOC encoding, the ETR is
        supplying a locator-set for each specific application is has
        been configured to advertise.</t>

        <t>Usage: This encoding can be used in EID-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages. When LISP-DDT <xref target="LISP-DDT"/> is
        used as the mapping system mechanism, extended EIDs are used
        in Map-Referral messages. This LCAF Type is used as a lookup
        key to the mapping system that can return a longest-match or
        exact-match entry.</t>


      </section>

      <section title="Generic Database Mapping Lookups">
        <t>When the LISP Mapping Database System holds information
        accessed by a generic formatted key (where the key is not the
        usual IPv4 or IPv6 address), an opaque key may be
        desirable.</t>

        <figure>
        <preamble>Opaque Key LISP Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 6    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Field Num |      Key Wildcard Fields      |   Key . . .   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       . . . Key                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Key Field Num:">the value of this field is
          the number of "Key" sub-fields minus 1, the Key field can
          be broken up into. So, if this field has a value of 0, there
          is one sub-field in the "Key". The width of the sub-fields are
          fixed length.  So, for a key size of 8 bytes, with a Key
          Field Num of 3, four sub-fields of 2 bytes each in
          length are allowed. Allowing for a reasonable number of 16 sub-field
          separators, valid values range from 0 to 15.</t>

          <t hangText="Key Wildcard Fields:">describes which fields in
          the key are not used as part of the key lookup. This
          wildcard encoding is a bitfield. Each bit is a don't-care
          bit for a corresponding field in the key. Bit 0 (the
          low-order bit) in this bitfield corresponds the first field,
          the low-order field in the key, bit 1 the second field, and so
          on. When a bit is set in the bitfield, it is a don't-care bit
          and should not be considered as part of the database
          lookup. When the entire 16 bits are set to 0, then all bits
          of the key are used for the database lookup.</t>

          <t hangText="Key:">the variable length key used to do a LISP
          Mapping Database System lookup. The length of the key is the value
          n (as shown above).</t>
        </list></t>

        <t>Usage: This is an experimental Type where the usage has not yet
        been defined.</t>


      </section>

      <section title="PETR Admission Control Functionality">
        <t>When a public Proxy Egress Tunnel Router (PETR) device wants to verify who is
        encapsulating to it, it can check for a specific nonce value
        in the LISP-encapsulated packet. To convey the nonce to
        admitted ITRs or PITRs, this LCAF is used in a
        Map-Register or Map-Reply locator-record.</t>

        <figure>
        <preamble>Nonce Locator Canonical Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 8    |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Reserved    |                  Nonce                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |         Address  ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Reserved:">must be set to zero and ignored on
          receipt.</t>

          <t hangText="Nonce:">a nonce value returned by an
          ETR in a Map-Reply locator-record to be used by an ITR or
          PITR when encapsulating to the locator address encoded in
          the AFI field of this LCAF Type. This nonce value is
	  inserted in the nonce field in the LISP header encapsulation.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />.</t>
        </list></t>

        <t>Usage: This is an experimental Type where the usage has not yet
        been defined.</t>


      </section>

      <section title="Data Model Encoding">
        <t>This Type allows a JSON data model to be encoded as either 
        an EID or an RLOC.</t>

       <figure>
       <preamble>JSON Data Model Type Address Format:</preamble>
       <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 14   |    Rsvd2    |B|            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           JSON length         | JSON binary/text encoding ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |       Optional Address ...    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="B bit:">indicates that the JSON field is binary
          encoded according to <xref target="JSON-BINARY" /> when the
          bit is set to 1. Otherwise, the encoding is based on text
          encoding according to <xref target="RFC7159" />.</t>

 	  <t hangText="JSON length:">length in octets of the following
 	  JSON binary/text encoding field.</t>

          <t hangText="JSON binary/text encoding:">a variable-length field that contains either binary or text
          encodings.</t>

          <t hangText="AFI = x:">x can be any AFI value from <xref
          target="AFN" />. A specific AFI has its own encoding of
          either a unicast or multicast locator address. All RTR/ETR
          entries for the same level should be combined by a
          Map-Server to avoid searching through the entire multilevel
          list of locator entries in a Map-Reply message.</t>
        </list></t>

        <t>Usage: This is an experimental Type where the usage has not yet
        been defined. An example mapping is an EID-record encoded as a
distinguished-name "cpe-router" and an RLOC-record encoded as a JSON
string "{ "router-address" : "1.1.1.1", "router-mask" : "8" }".</t>


      </section>

      <section title="Encoding Key/Value Address Pairs">
        <t>The Key/Value pair is, for example, useful for attaching
        attributes to other elements of LISP packets, such as EIDs or
        RLOCs. When attaching attributes to EIDs or RLOCs, it's
        necessary to distinguish between the element that should be
        used as EID or RLOC and, hence, as the key for lookups and
        additional attributes. This is especially the case when the
        difference cannot be determined from the Types of the
        elements, such as when two IP addresses are being used.</t>

        <figure>
        <preamble>Key/Value Address Pair Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 15   |     Rsvd2     |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |       Address as Key ...      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = y          |       Address as Value ...    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>

        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="AFI = x:">x is the "Address as Key" AFI that can
          have any value from <xref target="AFN" />. A specific AFI has
          its own encoding of either a unicast or a multicast locator
          address. All RTR/ETR entries for the same level should be
          combined by a Map-Server to avoid searching through
          the entire multilevel list of locator entries in a
          Map-Reply message.</t>

          <t hangText="Address as Key:">AFI-encoded address that will
          be attached with the attributes encoded in "Address as
          Value", which follows this field.</t>

          <t hangText="AFI = y:">y is the "Address of Value" AFI that
          can have any value from <xref target="AFN" />. A specific
          AFI has its own encoding of either a unicast or a multicast
          locator address. All RTR/ETR entries for the same level
          should be combined by a Map-Server to avoid
          searching through the entire multilevel list of locator
          entries in a Map-Reply message.</t>

          <t hangText="Address as Value:">AFI-encoded address
          that will be the attribute address that goes along with "Address
          as Key" which precedes this field.</t>
        </list></t>

        <t>Usage: This is an experimental Type where the usage has not yet
        been defined.</t>

      </section>

      <section title="Multiple Data-Planes">
        <t>Overlays are becoming popular in many parts of the network,
        which has created an explosion of data-plane encapsulation
        headers. Since the LISP mapping system can hold many types of
        address formats, it can represent the encapsulation format
        supported by an RLOC as well. When an encapsulator receives a
        Map-Reply with an Encapsulation Format LCAF Type encoded in an
        RLOC-record, it can select an encapsulation format, that it
        can support, from any of the encapsulation protocols that
        have the bit set to 1 in this LCAF Type.</t>

        <figure>
        <preamble>Encapsulation Format Address Format:</preamble>
        <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           AFI = 16387         |     Rsvd1     |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Type = 16   |     Rsvd2     |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Reserved-for-Future-Encapsulations       |U|G|N|v|V|l|L|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              AFI = x          |          Address ...          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        ]]></artwork>
        <postamble />
        </figure>



        <t><list style="hanging">
          <t hangText="Length:">length in bytes starting and
          including the byte after this Length field.</t>

          <t hangText="Reserved-for-Future-Encapsulations:">must be
          set to zero and ignored on receipt. This field will get bits
          allocated to future encapsulations, as they are created.</t>

          <t hangText="U:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept Generic UDP Encapsulation (GUE)
          using destination UDP port 6080 <xref
          target="GUE"/>.</t>

          <t hangText="G:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept Geneve
          encapsulation using destination UDP port 6081 <xref
          target="GENEVE"/>.</t>

          <t hangText="N:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept NV-GRE (Network Virtualization - Generic Routing Encapsulation)
          using IPv4/IPv6 protocol number 47 <xref
          target="RFC7637"/>.</t>

	  <t hangText="v:">The RLOCs listed in the AFI-encoded
	  addresses in the next longword can accept VXLAN-GPE
	  (Generic Protocol Extension) encapsulation using destination UDP port 4790 <xref
	  target="GPE-VXLAN"/>.</t>

          <t hangText="V:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept Virtual eXtensible Local Area Network (VXLAN)
          encapsulation using destination UDP port 4789 <xref
          target="RFC7348" />.</t>

          <t hangText="l:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept Layer 2 LISP
          encapsulation using destination UDP port 8472 <xref
          target="LISP-L2"/>.</t>

          <t hangText="L:">The RLOCs listed in the AFI-encoded
          addresses in the next longword can accept Layer 3 LISP
          encapsulation using destination UDP port 4341 <xref
          target="RFC6830" />.</t>
        </list></t>

        <t>Usage: This encoding can be used in RLOC-records in
        Map-Request, Map-Reply, Map-Register, and Map-Notify
        messages.</t>

      </section>
    </section>

    <section title="Security Considerations">
      <t>This document is classified as Experimental. The LCAF
      encodings defined in this document are intended to be used with
      their corresponding use cases and in self-contained
      environments. Users should carefully consider how the <xref
      target="LISP-SEC" /> threat model applies to their
      particular use case.</t>
      
      <t>The use of the Geo-Coordinates LCAF Type may raise physical
      privacy issues. Care should be taken when configuring the
      mapping system to use specific policy parameters so geolocation
      information is not returned gratuitously. It is recommended that
      any documents that specify the use of the Geo-Coordinates LCAF
      Type should consider the applicability of RFC 6280 (BCP 160) <xref
      target="RFC6280"/> for location-based privacy protection.</t>

      <t>Additional privacy concerns have arisen since publication of
      BCP 160, and future work on LISP should examine potential threats
      beyond BCP 160 and address improving privacy and security for
      LISP deployments.</t>
    </section>

    <section title="IANA Considerations" anchor="IANA">

      <t>This document defines a canonical address format encoding
      used in LISP control messages and in the encoding of lookup keys
      for the LISP Mapping Database System.  Such an address format is
      based on a fixed AFI (16387) and a LISP LCAF Type field.</t>

      <t>The LISP LCAF Type field is an 8-bit field specific to the
      LISP Canonical Address Format encodings. IANA has created
      a new registry (as outlined in <xref
      target="RFC5226"/>) titled "LISP Canonical Address Format (LCAF) Types".  Initial values
      for the "LISP Canonical Address Format (LCAF) Types" registry are given below. Future
      assignments are to be made using the Specification Required policy <xref target="RFC5226"/>.
      Assignments consist of a LISP LCAF Type Name and its associated
      value:</t>



      <texttable anchor="LCAFtype" title="Initial Values in
					  &quot;LISP Canonical Address Format (LCAF) Types&quot; Registry">
        <ttcol align='left'>Value</ttcol>
        <ttcol align='left'>LISP LCAF Type Name</ttcol>
        <ttcol align='left'>Reference</ttcol>
	<c> 0 </c><c> Null Body</c><c> Section 3</c>
	<c> 1 </c><c> AFI List</c><c> Section 3</c>
	<c> 2 </c><c> Instance ID</c><c> Section 3</c>
	<c> 3 </c><c> AS Number</c><c> Section 3</c>
        <c> 5 </c><c> Geo-Coordinates</c><c> Section 3</c>
	<c> 7 </c><c> NAT-Traversal</c><c> Section 3</c>
	<c> 9 </c><c> Multicast Info</c><c> Section 3</c>
	<c> 10 </c><c> Explicit Locator Path</c><c> Section 3</c>
	<c> 11 </c><c> Security Key</c><c> Section 3</c>
	<c> 12 </c><c> Source/Dest Key</c><c> Section 3</c>
	<c> 13 </c><c> Replication List Entry</c><c> Section 3</c>
      </texttable>
  </section>
</middle>

<back>
  <references title='Normative References'>
    <?rfc include="reference.RFC.1918'?>
    <?rfc include="reference.RFC.2119'?>
    <?rfc include="reference.RFC.3232'?>
    <?rfc include="reference.RFC.6830'?>
    <?rfc include="reference.RFC.6836'?>
    <?rfc include="reference.RFC.7159'?>
    <?rfc include="reference.RFC.7348'?>
    <?rfc include="reference.RFC.5226'?>
    <?rfc include="reference.RFC.7637'?>
    <?rfc include="reference.RFC.6280'?>
    <?rfc include="reference.RFC.1035'?>
    <?rfc include="reference.RFC.3986'?>
 


 
  </references>

  <references title='Informative References'>

    <reference anchor="AFN" target="http://www.iana.org/assignments/address-family-numbers/">
      <front>
        <title>Address Family Numbers</title>
        <author>
          <organization>IANA</organization>
        </author>
        <date/>
      </front>

    </reference>
  
<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ermagan-lisp-nat-traversal.xml'?>; I-D Exists -->



<reference anchor='NAT-LISP'>
<front>
<title>NAT traversal for LISP</title>

<author initials='V' surname='Ermagan' fullname='Vina Ermagan'>
    <organization />
</author>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<author initials='D' surname='Lewis' fullname='Darrel Lewis'>
    <organization />
</author>

<author initials='J' surname='Skriver' fullname='Jesper Skriver'>
    <organization />
</author>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

<author initials='C' surname='White' fullname='Chris White'>
    <organization />
</author>

<date month='August' day='29' year='2016' />

<abstract><t>This document describes a mechanism for IPv4 NAT traversal for LISP tunnel routers (xTR) and LISP Mobile Nodes (LISP-MN) behind a NAT device.  A LISP device both detects the NAT and initializes its state.  Forwarding to the LISP device through a NAT is enabled by the LISP Re-encapsulating Tunnel Router (RTR) network element, which acts as an anchor point in the data plane, forwarding traffic from unmodified LISP devices through the NAT.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-ermagan-lisp-nat-traversal-11' />

</reference>


<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.portoles-lisp-eid-mobility.xml'?>; I-D Exists -->



<reference anchor='EID-MOBILITY'>
<front>
<title>LISP L2/L3 EID Mobility Using a Unified Control Plane</title>

<author initials='M' surname='Portoles-Comeras' fullname='Marc Portoles-Comeras'>
    <organization />
</author>

<author initials='V' surname='Ashtaputre' fullname='Vrushali Ashtaputre'>
    <organization />
</author>

<author initials='V' surname='Moreno' fullname='Victor Moreno'>
    <organization />
</author>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<date month='October' day='8' year='2016' />

<abstract><t>The LISP control plane offers the flexibility to support multiple overlay flavors simultaneously.  This document specifies how LISP can be used to provide control-plane support to deploy a unified L2 and L3 overlay solution, as well as analyzing possible deployment options and models.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-portoles-lisp-eid-mobility-01' />
</reference>



<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-lisp-ddt.xml'?>; IESG Eval -->



<reference anchor='LISP-DDT'>
<front>
<title>LISP Delegated Database Tree</title>

<author initials='V' surname='Fuller' fullname='Vince Fuller'>
    <organization />
</author>

<author initials='D' surname='Lewis' fullname='Darrel Lewis'>
    <organization />
</author>

<author initials='V' surname='Ermagan' fullname='Vina Ermagan'>
    <organization />
</author>

<author initials='A' surname='Jain' fullname='Amit Jain'>
    <organization />
</author>

<author initials='A' surname='Smirnov' fullname='Anton Smirnov'>
    <organization />
</author>

<date month='January' day='18' year='2017' />

</front>

<seriesInfo name='Work in Progress,' value='draft-ietf-lisp-ddt-09' />
</reference>


<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-lisp-crypto.xml'?>; In queue in REF state -->



<reference anchor='RFC8061' target='http://www.rfc-editor.org/info/rfc8061'>
<front>
<title>Locator/ID Separation Protocol (LISP) Data-Plane Confidentiality</title>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<author initials='B' surname='Weis' fullname='Brian Weis'>
    <organization />
</author>

<date month='February' year='2017' />

</front>
<seriesInfo name='RFC' value='8061' />
<seriesInfo name="DOI" value="10.17487/RFC8061"/>
</reference>



<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.coras-lisp-re.xml'?>; Expired -->



<reference anchor='LISP-RE'>
<front>
<title>LISP Replication Engineering</title>

<author initials='F' surname='Coras' fullname='Florin Coras'>
    <organization />
</author>

<author initials='A' surname='Cabellos-Aparicio' fullname='Albert Cabellos-Aparicio'>
    <organization />
</author>

<author initials='J' surname='Domingo-Pascual' fullname='Jordi Domingo-Pascual'>
    <organization />
</author>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<date month='November' day='1' year='2015' />

<abstract><t>This document describes a method to build and optimize inter-domain LISP router distribution trees for locator-based unicast and multicast replication of EID-sourced multicast packets.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-coras-lisp-re-08' />

</reference>



<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.farinacci-lisp-te.xml'?>; I-D Exists -->



<reference anchor='LISP-TE'>
<front>
<title>LISP Traffic Engineering Use-Cases</title>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<author initials='M' surname='Kowal' fullname='Michael Kowal'>
    <organization />
</author>

<author initials='P' surname='Lahiri' fullname='Parantap Lahiri'>
    <organization />
</author>

<date month='September' day='5' year='2016' />

</front>

<seriesInfo name='Work in Progress,' value='draft-farinacci-lisp-te-11' />

</reference>


<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.smith-lisp-layer2.xml'?>; Expired-->


<reference anchor='LISP-L2'>
<front>
<title>Layer 2 (L2) LISP Encapsulation Format</title>

<author initials='M' surname='Smith' fullname='Michael Smith'>
    <organization />
</author>

<author initials='D' surname='Dutt' fullname='Dinesh Dutt'>
    <organization />
</author>

<author initials='D' surname='Farinacci' fullname='Dino Farinacci'>
    <organization />
</author>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

<date month='September' day='6' year='2013' />

<abstract><t>This memo describes an encapsulation method for carrying Ethernet and IEEE 802 media access control (MAC) frames within the Locator/ID Separation Protocol (LISP).</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-smith-lisp-layer2-03' />

</reference>



<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.quinn-vxlan-gpe.xml'?>; replaced by draft-ietf-nvo3-vxlan-gpe which is in I-D exists-->



<reference anchor='GPE-VXLAN'>

<front>
<title>Generic Protocol Extension for VXLAN</title>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

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

<author initials='U' surname='Elzur' fullname='Uri Elzur'>
    <organization />
</author>

<date month='October' day='27' year='2016' />

<abstract><t>This draft describes extending Virtual eXtensible Local Area Network (VXLAN), via changes to the VXLAN header, with three new capabilities: support for multi-protocol encapsulation, operations, administration and management (OAM) signaling and explicit versioning.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-ietf-nvo3-vxlan-gpe-03' />

</reference>








<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.gross-geneve.xml'?>; replaced by draft-ietf-nvo3-geneve in I-D Exists-->



<reference anchor='GENEVE'>



<front>
<title>Geneve: Generic Network Virtualization Encapsulation</title>

<author initials='J' surname='Gross' fullname='Jesse Gross'>
    <organization />
</author>

<author initials='I' surname='Ganga' fullname='Ilango Ganga'>
    <organization />
</author>

<author initials='T' surname='Sridhar' fullname='T. Sridhar'>
    <organization />
</author>

<date month='September' day='20' year='2016' />

<abstract><t>Network virtualization involves the cooperation of devices with a wide variety of capabilities such as software and hardware tunnel endpoints, transit fabrics, and centralized control clusters.  As a result of their role in tying together different elements in the system, the requirements on tunnels are influenced by all of these components.  Flexibility is therefore the most important aspect of a tunnel protocol if it is to keep pace with the evolution of the system.  This draft describes Geneve, a protocol designed to recognize and accommodate these changing capabilities and needs.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-ietf-nvo3-geneve-03' />

</reference>








<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.herbert-gue.xml'?>; replaced by draft-ietf-nvo3-gue in I-D Exists-->





<reference anchor='GUE'>

<front>
<title>Generic UDP Encapsulation</title>

<author initials='T' surname='Herbert' fullname='Tom Herbert'>
    <organization />
</author>

<author initials='L' surname='Yong' fullname='Lucy Yong'>
    <organization />
</author>

<author initials='O' surname='Zia' fullname='Osama Zia'>
    <organization />
</author>

<date month='October' day='28' year='2016' />

<abstract><t>This specification describes Generic UDP Encapsulation (GUE), which is a scheme for using UDP to encapsulate packets of different IP protocols for transport across layer 3 networks. By encapsulating packets in UDP, specialized capabilities in networking hardware for efficient handling of UDP packets can be leveraged. GUE specifies basic encapsulation methods upon which higher level constructs, such tunnels and overlay networks for network virtualization, can be constructed. GUE is extensible by allowing optional data fields as part of the encapsulation, and is generic in that it can encapsulate packets of various IP protocols.</t></abstract>

</front>

<seriesInfo name='Work in Progress,' value='draft-ietf-nvo3-gue-05' />

</reference>



<!--    <?rfc include='http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-lisp-sec.xml'?>; I-D Exists-->



<reference anchor='LISP-SEC'>
<front>
<title>LISP-Security (LISP-SEC)</title>

<author initials='F' surname='Maino' fullname='Fabio Maino'>
    <organization />
</author>

<author initials='V' surname='Ermagan' fullname='Vina Ermagan'>
    <organization />
</author>

<author initials='A' surname='Cabellos' fullname='Albert Cabellos'>
    <organization />
</author>

<author initials='D' surname='Saucez' fullname='Damien Saucez'>
    <organization />
</author>

<date month='November' year='2016' />


</front>

<seriesInfo name='Work in Progress,' value='draft-ietf-lisp-sec-12' />

</reference>


    <reference anchor="WGS-84" target="http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf">
     <front>
       <title>
         Department of Defense World Geodetic System 1984
       </title>
       <author fullname="">
         <organization>National Imagery and Mapping Agency</organization>
       </author>
       <date day="3" month="January" year="2000"/>
     </front>
     <seriesInfo name="NIMA" value="TR8350.2"/>
    </reference>
    
    <reference anchor="JSON-BINARY" target="http://ubjson.org">
      <front>
        <title>Universal Binary JSON Specification</title>
    	<author></author>
    	<date />
      </front>
    </reference>
  </references>

  <section title="Acknowledgments" numbered="no">
    <t>The authors would like to thank Vince Fuller, Gregg Schudel,
    Jesper Skriver, Luigi Iannone, Isidor Kouvelas, and Sander
    Steffann for their technical and editorial commentary.</t>

    <t>The authors would like to thank Victor Moreno for discussions
    that led to the definition of the Multicast Info LCAF Type.</t>

    <t>The authors would like to thank Parantap Lahiri and Michael
    Kowal for discussions that led to the definition of the Explicit
    Locator Path (ELP) LCAF Type.</t>

    <t>The authors would like to thank Fabio Maino and Vina Ermagan
    for discussions that led to the definition of the Security Key
    LCAF Type.</t>

    <t>The authors would like to thank Albert Cabellos-Aparicio and
    Florin Coras for discussions that led to the definition of the
    Replication List Entry LCAF Type.</t>

    <t>Thanks goes to Michiel Blokzijl and Alberto Rodriguez-Natal for
    suggesting new LCAF Types.</t>

    <t>Thanks also goes to Terry Manderson for assistance obtaining a
    LISP AFI value from IANA.</t>

    <t>And finally, the authors thank Stephen Farrell (Security Area
    Director) and Deborah Brungard (Routing Area Director) for their
    suggested text to get the document through IESG review.</t>
  </section>



</back>

</rfc>
