<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" []>

<rfc category="exp"
     docName="draft-kouvelas-lisp-map-server-reliable-transport-00.txt">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>

<front>
  <title>LISP Map Server Reliable Transport</title>
  <author initials='C.' surname='Cassar' fullname='Chris Cassar'>
    <organization>Cisco Systems</organization>
    <address><postal>
      <street>10 New Square Park</street>
      <city>Bedfont Lakes</city> <region>Feltham</region>
      <code>TW14 8HA</code>
      <country>United Kingdom</country>
    </postal>
    <email>ccassar@cisco.com</email></address>
  </author>
  <author initials='I.' surname='Kouvelas' fullname='Isidor Kouvelas'>
    <organization>Arista Networks Inc.</organization>
    <address><postal>
      <street>5453 Great America Parkway</street>
      <city>Santa Clara</city>
      <region>CA</region>
      <code>95054</code>
      <country>USA</country>
      </postal>
      <email>kouvelas@cisco.com</email></address>
  </author>
  <author initials='D.' surname='Lewis' fullname='Darrel Lewis'>
    <organization>Cisco Systems</organization>
    <address><postal>
      <street>Tasman Drive</street>
      <city>San Jose</city> <region>CA</region>
      <code>95134</code>
      <country>USA</country>
    </postal>
    <email>darlewis@cisco.com</email></address>
  </author>
  <author initials='J.' surname='Arango' fullname='Jesus Arango'>
    <organization>Cisco Systems</organization>
    <address><postal>
      <street>Tasman Drive</street>
      <city>San Jose</city> <region>CA</region>
      <code>95134</code>
      <country>USA</country>
    </postal>
    <email>jearango@cisco.com</email></address>
  </author>
  <author initials='J.' surname='Leong' fullname='Johnson Leong'>
    <organization>Cisco Systems</organization>
    <address><postal>
      <street>Tasman Drive</street>
      <city>San Jose</city> <region>CA</region>
      <code>95134</code>
      <country>USA</country>
    </postal>
    <email>joleong@cisco.com</email></address>
  </author>
  <date/>
  <abstract>
    <t>
      The communication between LISP ETRs and Map-Servers is based on
      unreliable UDP message exchange coupled with periodic message
      transmission in order to maintain soft state. The drawback of
      periodic messaging is the constant load imposed on both the ETR
      and the Map-Server. New use cases for LISP have increased the
      amount of state that needs to be communicated with requirements
      that are not satisfied by the current mechanism. This document
      introduces the use of a reliable transport for ETR to Map-Server
      communication in order to eliminate the periodic messaging
      overhead, while providing reliability, flow-control and endpoint
      liveness detection.
    </t>
    <t>
      This document has been renamed to avoid ambiguity. It is an
      update to <xref target="I-D.kouvelas-lisp-reliable-transport"/>.
    </t>
  </abstract>
</front>

<middle>
  <section title="Introduction">
    <t>
      The communication channel between LISP ETRs and Map-Servers is
      based on unreliable UDP message exchange <xref
      target="RFC6833"/>.  Where required, reliability is pursued
      through periodic retransmissions that maintain soft state on
      the peer.  Map-Register messages are retransmitted every minute
      by an ETR and the Map-Server times out its state if the state is
      not refreshed for three successive periods. When registering
      multiple EID-Prefixes, the ETR includes multiple mapping records
      in the Map-Register message. Packet size limitations provide an
      upper bound to the number of mapping records that can be placed
      in each Map-Register message. When the ETR has more EID-Prefixes
      to register than can be packed in a single Map-Register message,
      the mapping records for the EID-Prefixes are split across
      multiple Map-Register messages.
    </t>
    <t>
      The drawback of the periodic registration is the constant load
      that it introduces on both the ETR and the Map-Server. The ETR
      uses resources to periodically build and transmit the
      Map-Register messages, and to process the resulting Map-Notify
      messages issued by the Map-Server. The Map-Server uses resources
      to process the received Map-Register messages, update the
      corresponding registration state, and build and transmit the
      matching Map-Notify messages. When the number of EID-Prefixes to
      be registered by an ETR is small, the resulting load imposed by
      periodic registrations may not be significant. The ETR will only
      transmit a single Map-Register message each period that contains
      a small number of mapping records.
    </t>
    <t>
      In some LISP deployments, a large set of EID-Prefixes must be
      registered by each ETR (e.g. mobility, database
      redistribution). Use cases with a large set of EID-Prefixes
      behind an ETR will result in a much higher load. An example is
      LISP mobility deployments where EID-Prefixes are limited to host
      entries. ETRs may have thousands of hosts to register resulting
      in hundreds of Map-Register and Map-Notify messages per
      registration period.
    </t>
    <t>
      A transport is required for the ETR to Map-Server communication
      that provides reliability, flow-control and endpoint liveness
      notifications. This document describes the use of TCP or SCTP as
      a LISP reliable transport. The initial application for the LISP
      reliable transport session is the support of scalable EID prefix
      registration. The reliable session mechanism is defined to be
      extensible so that it can support additional LISP communication
      requirements as they arise using a single reliable transport
      session between an ETR and a Map-Server.  The use of the
      reliable transport session for EID prefix registration is an
      alternative and does not replace the existing UDP based
      mechanism.
    </t>
  </section>

  <section title="Requirements Notation">
    <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="Message Format">
    <t>
      A single LISP reliable transport session may carry information
      for multiple LISP applications. One such application is the
      registration of EID to RLOC mappings that operates over a
      session between an ETR and a Map-Server. Communication over a
      session is based on the exchange of messages. This document
      defines a base set of messages to support session establishment
      and management. It also defines the messages for the EID to RLOC
      mapping registration application.
    </t>
    <t>
      To support protocol extensibility when new applications, or
      extensions to existing applications are introduced, the messages
      are based on a TLV format.

      <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Message Data                       ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <postamble>Reliable transport message format</postamble></figure>

      <list style="symbols">
	<t>Type: 16 bit type field identifying the message type.</t>
	<t>
	  Length: 16 bit field that provides the total size of the
	  message in octets including the length, type and end marker
	  fields. The length allows the receiver to locate the next
	  message in the TCP stream. The minimum value of the length
	  field is 8.
	</t>
	<t>
	  ID: A 32-bit value that identifies the
	  message. May be used by the receiver to identify the message
	  in replies or notification messages.
	</t>
	<t>Data: Type specific message contents.</t>
	<t>
	  End Marker: A 32-bit message end marker that must be set to
	  0x9FACADE9. The End Marker is used by the receiver to
	  validate that it has correctly parsed or skipped a message
	  and provides a method to detect formatting errors. Note that
	  message data may also contain this marker, and that the
	  marker itself is not sufficient for parsing the message.
	</t>
      </list>
    </t>
    <t>
      The base message format does not indicate how the peer should
      deal with the message in cases where the message type is not
      supported/understood. This is best dealt with by the
      application. For example, in case an error notification is
      returned, or an expected acknowledgement message is not
      received, the application might choose various courses of
      action; from simply logging that the feature is not supported,
      all the way to tearing the relationship with the peer down for
      the feature, or for all LISP features.
    </t>
  </section>

  <section title="Session Establishment">

    <t>
      To ensure backwards compatibility, the map server and ETR MUST communicate
      via unreliable UDP messages until a TCP session between the two is
      sucessfully established.
    </t>
    <t>
      The map server authenticates the ETR with the authentication data
      contained in the first UDP map-register message it receives from the ETR.
      Once the ETR is authenticated, the map server performs a passive open by
      listening on TCP port 4342, and does not qualify the remote port. As a
      security measure, the map server accepts TCP connections only from those
      ETRs that have been authenticated via UDP map-register messages.
     </t>
     <t>
       The ETR assumes the active role of the TCP session establishment by
       connecting to the map server once it has received a UDP map-notify
       message.
    </t>
    <t>
      When a TCP session goes down, UDP authentication must take place before
      a new TCP session is established. The map-server will not accept a
      connection from the ETR until a UDP map-register has been received.
      Similarly, the ETR will not attempt to establish a session with the map
      server until an UDP map-notify message has been received.
    </t>
    <t>
      A single reliable transport session is established between the map server
      and the ETR to cover all communication needs. For example, an ETR that has
      EID prefix registrations for multiple EID instances and EID address
      families will only establish a single session with the map server.
    </t>
  </section>

  <section title="Error Notifications">
    <t>
      The error notification message is used to communicate base
      reliable transport session communication errors. LISP
      applications making use of the reliable transport session and
      having to communicate application specific errors must define
      their own messages to do so. An error notification is issued
      when the receiver of a message does not recognize the message
      type or cannot parse the message contents. The notification
      includes the offending message type and ID and as much of
      the offending message data as the notification sender wishes to.

      <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 16           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Error Code    |                   Reserved                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Offending Message Type     |    Offending Message Length   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Offending Message ID                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Offending Message Data                   ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      <postamble>Error notification message format</postamble></figure>

      <list style="symbols">
	<t>
	  Error Code: An 8 bit field identifying the type of error
	  that occurred. Defined errors are:
	  <list style="symbols">
	    <t>Unrecognized message type.</t>
	    <t>Message format error.</t>
	  </list>
	</t>
	<t>
	  Reserved: Set to zero by the sender and ignored by the
	  receiver.
	</t>
	<t>
	  Offending Message Type: 16 bit type field identifying the
	  message type of the offending message that triggered this
	  error notification. This is copied from the Type field of
	  the offending message.
	</t>
	<t>
	  Offending Message Length: 16 bit field that provides the
	  total size of the offending message in octets. This is
	  copied from the Length field of the offending message.
	</t>
	<t>
	  Offending Message ID: A 32-bit field that is set to the
	  Message ID field of the offending message.
	</t>
	<t>
	  Offending Message Data: The Data from the offending message
	  that triggered this error notification. The sender of the
	  notification may include as much of the original data as is
	  deemed necessary. The length of the Offending Message Data
	  field is not provided by the Offending Message Length field
	  and is determined by subtracting the size of the other
	  fields in the message from the Length field. It is valid to
	  not include any of the offending message data when sending
	  an error notification.
	</t>
	<t>
	  End Marker: A 32-bit message end marker that must be set to
	  0x9FACADE9. The End Marker is used by the receiver to
	  validate that it has correctly parsed or skipped a message
	  and provides a method to detect formatting errors.  Note that
	  message data may also contain this marker, and that the
	  marker itself is not sufficient for parsing the message.
	</t>
      </list>
    </t>
    <t>
      An error notification cannot be the offending message in another
      error notification and MUST NOT trigger such a message.
    </t>
  </section>

  <section title="EID Prefix Registration">
    <t>
      EID prefix registration uses the reliable transport session
      between an ETR and a Map-Server to communicate the ETR local EID
      database EID to RLOC mappings to the Map-Server. In contrast to
      the UDP based periodic registration, mapping information over
      the reliable transport session is only sent when there is new
      information available for the Map-Server. The Map-Server does
      not maintain a timer to expire registrations communicated over
      the reliable transport session. Instead an explicit
      de-registration (a registration carrying a zero TTL) is needed
      to delete the state maintained by the Map-Server.
    </t>
    <t>
      The key used to identify registration mapping records in the ETR
      to Map-Server communication is the EID prefix. The prefix may be
      specified using an LCAF encoding that includes an EID instance
      ID.
    </t>
    <t>
      When the reliable transport session goes down, registration
      mappings learned by the Map-Server are treated as periodic UDP
      registrations and a timer is used to expire them after 3
      minutes. During this period UDP based registrations or the
      re-establishment of the reliable transport session and
      subsequent communication of a new mapping can update the EID
      prefix mapping state.
    </t>
    <section title="Reliable Mapping Registration Messages">
      <t>
	This section defines the LISP reliable transport session
	messages used to communicate local EID database registrations
	between the ETR and the Map-Server.
      </t>
      <section title="Registration Message">
	<t>
	  The reliable transport Registration message is used to
	  communicate EID to RLOC mapping registrations from the ETR
	  to the Map-Server. The Registration message uses exactly the
	  same format as the UDP Map-Register message but instead of
	  the IP/UDP header, the Map-Register is placed within the
	  value section of the reliable transport TLV. A common
	  message format is proposed to leverage the authentication
	  features built into the UDP Map-Register message and
	  increase code reuse.

	  <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 17           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Map-Register message                   ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...                    Map-Register message                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
	  <postamble>Registration message format</postamble></figure>
	</t>
      </section>
      <section title="Registration Acknowledgement Message">
	<t>
	  The Acknowledgement message is sent from the Map-Server to
	  the ETR to confirm successful registration of an EID prefix
	  previously communicated by a reliable transport session
	  Registration message. The Registration Acknowledgement
	  message does not carry a mapping record (the map servers
	  view of the mapping). This is accomplished by the LISP
	  reliable transport Map Notification message.

	  <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 18           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        EID-Prefix-AFI         |           EID-Prefix        ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
	  <postamble>Registration Acknowledgement message format</postamble>
	  </figure>

	  <list style="symbols">
	    <t>
	      EID-Prefix AFI: Address family identifier for the EID
	      prefix in the following field.
	    </t>
	    <t>
	      EID-Prefix: The EID prefix from the received Registration.
	    </t>
	  </list>
	</t>
      </section>
      <section title="Registration Rejected Message">
	<t>
	  Negative acknowledgement sent from the Map-Server to the ETR
	  to indicate that the registration of a specific EID prefix
	  was rejected. The ETR must keep track of the fact that the
	  registration of the EID prefix was rejected by the
	  Map-Server and be prepared to re-register the mapping when
	  requested through a failed Registration Refresh request.


	  <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 19           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Rejection code         |        EID-Prefix-AFI         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          EID-Prefix                         ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
	  <postamble>Registration Rejected message format</postamble>
	  </figure>

	  <list style="symbols">
	    <t>
	      Rejection code: Code identifying the reason for which
	      the Map-Server rejected the registration. Codes:
	      <list style="symbols">
		<t>
		  1 - Not a valid site EID prefix.
		</t>
		<t>
		  2 - Authentication failure.
		</t>
		<t>
		  3 - Locator set not allowed.
		</t>
	      </list>
	    </t>
	    <t>
	      EID-Prefix AFI: Address family identifier for the EID
	      prefix in the following field.
	    </t>
	    <t>
	      EID-Prefix: The EID prefix from the received Registration.
	    </t>
	  </list>
	</t>
      </section>
      <section title="Registration Refresh Message">
	<t>
	  Sent by the Map-Server to the ETR to request the
	  re-transmission of EID prefix database mapping Registration
	  messages.

	  <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 20           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|          Reserved           |        EID-Prefix-AFI         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          EID-Prefix                         ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
	  <postamble>Registration Refresh message format</postamble>
	  </figure>

	  <list style="symbols">
	    <t>
	      R: Request from the ETR to only refresh registrations
	      that have been previously rejected by the Map-Server.
	    </t>
	    <t>
	      EID prefix, and its more specifics, to refresh. The
	      prefix can be in LCAF format allowing specification of a
	      complete refresh (unspecified prefix), refresh of all
	      the prefixes under an EID instance or even of more
	      specific registrations under a specific EID prefix.
	    </t>
	  </list>
	</t>
      </section>

      <section title="Mapping Notification Message">
	<t>
	  Mapping Notification messages communicate the Map-Server
	  view of the mapping for an EID prefix and no longer serve as
	  a registration acknowledgement. Mapping Notifications do not
	  need message level authentication as they are received over
	  a reliable transport session to a known Map-Server. Note
	  that reliable transport Mapping Notification messages do not
	  reuse the UDP Map-Notify message format.

	  <figure align="center"><preamble></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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Type = 21           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Message ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Mapping Record                      ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...                       Mapping Record                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Message End Marker                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
	  <postamble>Mapping Notification message format</postamble></figure>

	</t>
      </section>
    </section>
    <section title="ETR Behavior">
      <t>
	The ETR operates the following per EID prefix, per MS state
	machine that defines the reliable transport EID prefix
	registration behavior.
      </t>
      <t>
	There are five states:
	<list style="symbols">
	  <t>
	    No state: The local EID database prefix does not exist.
	  </t>
	  <t>
	    Periodic: The local EID database prefix is being
	    periodically registered through UDP Map-Register messages
	    as specified in [].
	  </t>
	  <t>
	    Stable: From the ETR's perspective, no registrations are
	    due to be sent to the peer. The session to the peer is up,
	    and the peer has either acknowledged the registration, or
	    is expected to request a refresh in the future.
	  </t>
	  <t>
	    AckWait: A Registration message for the prefix has been
	    transmitted to the Map-Server and the ETR is waiting for
	    either a Registration Acknowledge or Registration Rejected
	    reply from the Map-Server.
	  </t>
	  <t>
	    Reject: The reliable transport registration for the local
	    EID database prefix was rejected by the Map-Server. From
	    the ETR's perspective, no registration is due to the peer
	    AND the peer is known to have rejected the registration.
	  </t>
	</list>
      </t>
      <t>
	The following events drive the state transitions:
	<list style="symbols">
	  <t>
	    DB creation: The local EID database entry for the EID
	    prefix is created.
	  </t>
	  <t>
	    DB deletion: The local EID database entry for the EID
	    prefix is deleted.
	  </t>
	  <t>
	    DB change: The mapping contents or authentication
	    information for the local EID database entry changes.
	  </t>
	  <t>
	    Session up: The reliable transport session to the
	    Map-Server is established.
	  </t>
	  <t>
	    Session down: The reliable transport session the
	    Map-Server goes down.
	  </t>
	  <t>
	    Recv Refresh: A Registration refresh message is received
	    from the Map-Server.
	  </t>
	  <t>
	    Recv ACK: A Registration Acknowledge message is received
	    from the Map-Server.
	  </t>
	  <t>
	    Recv Rejected: A Registration Rejected message is received
	    from the Map-Server.
	  </t>
	  <t>
	    Periodic timer: The timer that drives generation of
	    periodic UDP Map-Register messages fires.
	  </t>
	</list>
      </t>
      <t>
	The state machine is:

	<figure align="center"><preamble></preamble><artwork><![CDATA[
+--------------------+--------------------------------------+
|                    |              Prev State              |
|  Event             +-------------------+------------------+
|                    |   No state        |    Periodic      |
+--------------------+-------------------+------------------+
|  DB creation       |   -> Periodic     |    N/A           |
|  [session down]    |   A1              |                  |
+--------------------+-------------------+------------------+
|  DB creation       |   -> AckWait      |    N/A           |
|  [session up]      |   A2              |                  |
+--------------------+-------------------+------------------+
|  DB deletion       |   N/A             |    -> No state   |
|                    |                   |    A3            |
+--------------------+-------------------+------------------+
|  DB change         |   N/A             |    -             |
|                    |                   |    A1            |
+--------------------+-------------------+------------------+
|  Session up        |   -               |    -> Stable     |
|                    |                   |    A4            |
+--------------------+-------------------+------------------+
|  Session down      |   -               |    N/A           |
|                    |                   |                  |
+--------------------+-------------------+------------------+
|  Recv Refresh      |   -               |    N/A           |
|                    |                   |                  |
+--------------------+-------------------+------------------+
|  Recv Refresh      |   -               |    N/A           |
|  [rejected]        |                   |                  |
+--------------------+-------------------+------------------+
|  Recv ACK          |   -               |    N/A           |
|                    |                   |                  |
+--------------------+-------------------+------------------+
|  Recv Rejection    |   -               |    N/A           |
|                    |                   |                  |
+--------------------+-------------------+------------------+
|  Timer             |   N/A             |    -             |
|                    |                   |    A5            |
+--------------------+-------------------+------------------+
]]></artwork>
	<postamble>xTR per EID prefix per MS state machine</postamble>
	</figure>

	<figure align="center"><preamble></preamble><artwork><![CDATA[
+-----------------+-----------------------------------------------+
|                 |                   Prev State                  |
| Event           +---------------+---------------+---------------+
|                 |    Stable     |   AckWait     |   Rejected    |
+-----------------+---------------+---------------+---------------+
| DB creation     | N/A           | N/A           | N/A           |
|                 |               |               |               |
+-----------------+---------------+---------------+---------------+
| DB deletion     | -> No state   | -> No state   | -> No state   |
|                 | A6            | A6            |               |
+-----------------+---------------+---------------+---------------+
| DB change       | -> AckWait    | -             | -> AckWait    |
|                 | A2            | A2            | A2            |
+-----------------+---------------+---------------+---------------+
| Session up      | N/A           | N/A           | N/A           |
|                 |               |               |               |
+-----------------+---------------+---------------+---------------+
| Session down    | -> Periodic   | -> Periodic   | -> Periodic   |
|                 | A7            | A7            | A7            |
+-----------------+---------------+---------------+---------------+
| Recv Refresh    | -> AckWait    | -             | -> AckWait    |
|                 | A2            | A2            | A2            |
+-----------------+---------------+---------------+---------------+
| Recv Refresh    | -             | -             | -> AckWait    |
| [rejected]      |               | A2            | A2            |
+-----------------+---------------+---------------+---------------+
| Recv ACK        | -             | -> Stable     | -> AckWait    |
|                 |               |               | A2            |
+-----------------+---------------+---------------+---------------+
| Recv Rejection  | -> Rejected   | -> Rejected   | -             |
|                 |               |               |               |
+-----------------+---------------+---------------+---------------+
| Timer           | N/A           | N/A           | N/A           |
|                 |               |               |               |
+-----------------+---------------+---------------+---------------+
]]></artwork>
	<postamble>xTR per EID prefix per MS state machine</postamble>
	</figure>
      </t>
      <t>
	Action descriptions:
	<list style="symbols">
	  <t>
	    A1: Start periodic registration timer with zero delay.
	  </t>
	  <t>
	    A2: Send Registration over reliable transport session.
	  </t>
	  <t>
	    A3: Send UDP registration with zero TTL.
	  </t>
	  <t>
	    A4: Stop periodic registration timer.
	  </t>
	  <t>
	    A7: Send UDP registration and start periodic registration
	    timer with registration period.
	  </t>
	  <t>
	    A6: Send Registration with TTL zero over reliable transport session.
	  </t>
	  <t>
	    A7: Start periodic registration timer with registration period.
	  </t>
	</list>
	All timer start actions must be jittered.
      </t>
      <t>
	When the reliable transport session is established the state
	machine moves into the Stable state without first registering
	the EID prefix over the reliable transport session. The
	subsequent refresh issued by the Map-Server will trigger the
	registration message to be sent. This model will allow future
	optimisations where the Map-Server may retain registration
	state from a previous instantiation of the reliable transport
	session with the ETR and only request the refresh of EID
	prefix state beyond some negotiated session progress marker.
      </t>
      <t>
	Aa Map-Server authentication key change is treated as a DB
	change event and will result in triggering a new
	Registration message to be transmitted.
      </t>
    </section>

    <section title="Map-Server Behavior">
      <t>
	Received registrations create/update or delete mapping state.
      </t>
      <t>
	A refresh for an unspecified prefix is sent when a session is
	first established to obtain the complete database contents
	from the ETR.
      </t>
      <t>
	Refresh for rejected registrations sent (R bit set) when a new
	EID prefix is configured on the Map-Server.
      </t>
      <t>
	Rejection sent to the ETR when an EID prefix that is
	registered is deconfigured.
      </t>
      <t>
	Rejected Refresh (R bit set) sent when authentication for an
	EID prefix changes followed by a Rejection for existing
	registrations which fail authentication following change.
      </t>
      <t>
	Mapping Notification message sent whenever the mapping for a
	registered or more specific prefix for which notifications are
	requested changes. ETR acknowledgement or rejection messaging
	for Mapping Notification is not required because the ETR
	decides how to process the message based on the registered
	mapping information. If the mapping information changes the
	resulting registration will trigger a new Mapping Notification
	message from the Map-Server.
      </t>
    </section>
  </section>

  <section title="Security Considerations">
    <t>
      The LISP reliable transport session SHOULD be authenticated. On
      controlled RLOC networks that can guarantee that the source RLOC
      address of data packets cannot be spoofed, the authentication
      check can be a source address validation on the reliable
      transport packets. When the RLOC network does not provide such
      guarantees, reliable transport authentication SHOULD be
      used. Implementations SHOULD support the TCP Authentication
      Option (TCP-AO) [RFC5925] and SCTP Authenticated Chunks
      [RFC4895].
    </t>
  </section>

  <section title="IANA Considerations">
    <section title="LISP Reliable Transport Message Types">
      <t>
	Assignment of new LISP reliable transport message types is
	done according to the "IETF Review" model defined in <xref
	target="RFC5266"/>.
      </t>
      <t>
	The initial content of the registry should be as follows.

	<figure align="center"><preamble></preamble><artwork><![CDATA[
Type         Name                                      Reference
-----------  ----------------------------------------  --------------
0-15         Reserved                                  This document
16           Error Notification                        This document
17           Registration Message                      This document
18           Registration Acknowledgement Message      This document
19           Registration Rejected Message             This document
20           Registration Refresh Message              This document
21           Mapping Notification Message              This document
22-30        Reserved for EID membership distribution  TBD
31-64999     Unassigned
65000-65535  Reserved for Experimental Use
]]></artwork>
	</figure>
      </t>
    </section>
    <section title="Transport Protocol Port Numbers">
      <t>
	TCP port 4342 already reserved for LISP CONS that is now obsolete. Repurpose for reliable transport over TCP.
	Reserve an SCTP port.
      </t>
    </section>
  </section>
  <section title="Acknowledgments">
    <t>
      The authors would like to thank Noel Chiappa, Dino Farinacci,
      Jesper Skriver, Johnson Leong, Andre Pelletier and Les Ginsberg
      for their contributions to this document.
    </t>
  </section>
</middle>
<back>
  <references title='Normative References'>
    <?rfc include="reference.I-D.kouvelas-lisp-reliable-transport.xml"?>
    <?rfc include='reference.RFC.2119' ?>
    <?rfc include='reference.RFC.5266' ?>
    <?rfc include='reference.RFC.6830' ?>
    <?rfc include='reference.RFC.6833' ?>
    <?rfc include="reference.I-D.ietf-lisp-lcaf.xml"?>
  </references>
</back>
</rfc>
