<?xml version="1.0" encoding="US-ASCII" ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 PUBLIC '' 'reference.RFC.2119.xml'>
<!ENTITY RFC4291 PUBLIC '' 'reference.RFC.4291.xml' >
<!ENTITY RFC3552 PUBLIC '' 'reference.RFC.3552.xml' >
<!ENTITY RFC4225 PUBLIC '' 'reference.RFC.4225.xml' >
<!ENTITY RFC5206 PUBLIC '' 'reference.RFC.5206.xml' >
<!ENTITY RFC5207 PUBLIC '' 'reference.RFC.5207.xml' >
<!ENTITY RFC7401 PUBLIC '' 'reference.RFC.7401.xml' >
<!ENTITY RFC7402 PUBLIC '' 'reference.RFC.7402.xml' >
<!ENTITY RFC8003 PUBLIC '' 'reference.RFC.8003.xml' >
<!ENTITY RFC8004 PUBLIC '' 'reference.RFC.8004.xml' >

]>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes" ?>

<rfc number="8046" category="std" obsoletes="5206" ipr="trust200902" submissionType="IETF" consensus="yes">

<front>
  <title abbrev="HIP Host Mobility">
    Host Mobility with the Host Identity Protocol
  </title>

  <author initials="T." surname="Henderson"
    fullname="Thomas R. Henderson" role="editor">
     <organization>University of Washington</organization>
     <address>
       <postal>
         <street>Campus Box 352500</street>
         <city>Seattle</city>
         <region>WA</region>
         <country>United States of America</country>
       </postal>
       <email>tomhend@u.washington.edu</email>
     </address>
  </author>

  <author initials="C." surname="Vogt"
    fullname="Christian Vogt">
    <organization>Independent</organization>
    <address>
      <postal>
        <street>3473 North First Street </street>
        <city>San Jose</city>
        <region>CA</region>
        <code>95134</code>
        <country>United States of America</country>
      </postal>
      <phone />
      <email>mail@christianvogt.net</email>
    </address>
  </author>

  <author initials="J." surname="Arkko"
    fullname="Jari Arkko">
    <organization>Ericsson</organization>
    <address>
      <postal>
        <street />
        <city>Jorvas,</city>
        <code>FIN-02420</code>
        <country>Finland</country>
      </postal>
      <phone>+358 40 5079256</phone>
      <email>jari.arkko@piuha.net</email>
    </address>
  </author>

    <date month="February" year="2017"/>

    <abstract>
      <t> This document defines a mobility extension to
          the Host Identity Protocol (HIP).  Specifically, this document 
          defines a "LOCATOR_SET" parameter for HIP messages that
          allows for a HIP host to notify peers about alternate addresses
          at which it may be reached.  This document also defines how the
          parameter can be used to preserve communications across a
          change to the IP address used by one or both peer hosts.
          The same LOCATOR_SET parameter can also be used to support 
          end-host multihoming (as specified in RFC 8047).  This document 
          obsoletes RFC 5206.  
      </t>
    </abstract>

  </front>

  <middle>

    <section title="Introduction and Scope">

      <t> The <xref target="RFC7401">Host Identity
      Protocol (HIP)</xref> supports an architecture that decouples the
      transport layer (TCP, UDP, etc.) from the internetworking layer
      (IPv4 and IPv6) by using public/private 
      key pairs, instead of IP addresses, as host identities.  When a host 
      uses HIP, the overlying protocol sublayers
      (e.g., transport-layer sockets and Encapsulating Security
      Payload (ESP) Security Associations (SAs)) are 
      instead bound to representations of these host identities, and the 
      IP addresses are only used for packet forwarding.  However, each host 
      needs to also know at least one IP address at which its peers are reachable.
      Initially, these IP addresses are the ones used during the HIP
      base exchange.</t>

      <t> One consequence of such a decoupling is that new solutions to
      network-layer mobility and host multihoming are possible.  
      There are potentially many variations of mobility and multihoming 
      possible.  The scope of this document encompasses messaging
      and elements of procedure for basic network-level host mobility,
      leaving more complicated mobility scenarios, multihoming,
      and other variations for further study.  More specifically, the
      following are in scope:
      </t>
      <t>
        <list style="hanging">

	      <t hangText=""> 
      This document defines a LOCATOR_SET parameter for
      use in HIP messages.  The LOCATOR_SET parameter allows a HIP host
      to notify a peer about alternate locators at which it is 
      reachable.  The locators may be merely IP addresses, or they
      may have additional multiplexing and demultiplexing context to
      aid with the packet handling in the lower layers.  For instance, 
      an IP address may need to be paired with an ESP Security
      Parameter Index (SPI) so that
      packets are sent on the correct SA for a given address. </t>

      <t hangText=""> 
      This document also specifies the messaging and elements of 
      procedure for end-host mobility of a HIP host.  In particular, 
      message flows to enable successful host mobility, including
      address verification methods, are defined herein.</t>  

      <t hangText=""> 
      The 
      <xref target="RFC8004">HIP rendezvous server (RVS)</xref>
      can be used to manage simultaneous mobility of both hosts, initial 
      reachability of a mobile host, location privacy, and some modes of
      NAT traversal.  
      Use of the HIP RVS to manage the simultaneous mobility
      of both hosts is specified herein. </t>

	       </list>
      </t>

      <t> The following topics are out of scope:
      </t>
      <t>
        <list style="hanging">

      <t hangText="">
      While the same LOCATOR_SET parameter supports
      host multihoming
      (simultaneous use of a number of addresses), 
      procedures for host multihoming are out of scope and are
      specified in <xref target="RFC8047" />.
      </t>

      <t hangText="">
      While HIP can potentially be used with transports other than
      the <xref target="RFC7402">ESP transport format</xref>,
      this document largely assumes the use of ESP and leaves other
      transport formats for further study.</t>

      <t hangText="">
      We do not consider localized mobility
      management extensions (i.e., mobility management techniques that do 
      not involve directly signaling the correspondent node); this 
      document is concerned with end-to-end
      mobility.   </t>
      <t hangText="">
      Finally, making underlying IP mobility transparent to 
      the transport layer has implications on the proper response of
      transport congestion control, path MTU selection, and Quality of
      Service (QoS).
      Transport-layer mobility triggers, and the proper transport
      response to a HIP mobility or multihoming address change,
      are outside the scope of this document.</t>
	       </list>
      </t>

    <t>
      The main sections of this document are organized as follows.  
      <xref target="sec.protocol.model" /> provides a summary overview of 
      operations, scenarios, and other considerations.
      <xref target="sec.locator.format" /> specifies the messaging parameter
      syntax.  <xref target="sec.processing.rules" /> specifies the
      processing rules for messages. 
      <xref target="sec.security.considerations" /> describes security
      considerations for this specification.
    </t>

    </section>

    <section title="Terminology and Conventions">

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described
      in <xref target="RFC2119"></xref>.</t>

      <t>
        <list style="hanging">

	      <t hangText="LOCATOR_SET."> 
           A HIP parameter containing zero or more Locator
           fields.  
         </t>

              <t hangText="locator."> 
            A name that controls how the packet is routed through the
            network and demultiplexed by the end host.  It may include a
            concatenation of traditional network addresses such as an IPv6
            address and end-to-end identifiers such as an ESP SPI.  It may
            also include transport port numbers or IPv6 Flow Labels as
            demultiplexing context, or it may simply be a network address.
	      </t>

             <t hangText="Locator."> 
           When capitalized in the middle of a sentence, this term
           refers to the encoding of a locator within the LOCATOR_SET
           parameter (i.e., the 'Locator' field of the parameter).
	     </t>

         <t hangText="Address."> 
           A name that denotes a point of attachment 
           to the network.  The two most common examples are an IPv4 address 
           and an IPv6 address.  The set of possible addresses is a subset of 
           the set of possible locators.
         </t>

	       <t hangText="Preferred locator.">
           A locator on which a host prefers to receive data.  Certain
           locators are labeled as preferred when a host advertises
           its locator set to its peer.  By default, 
           the locators used in the HIP base exchange are the preferred 
           locators.  The use of preferred locators, including the
           scenario where multiple address scopes and families may be in
           use, is defined more in
           <xref target="RFC8047" /> than in this document.
         </t>

	       <t hangText="Credit-Based Authorization (CBA).">
           A mechanism allowing a host to send a certain amount of data
           to a peer's newly announced locator before the result of 
           mandatory address verification is known.
         </t>

	       </list>
      </t>

    </section>

    <section anchor="sec.protocol.model" title="Protocol Model">
      <t> This section is an overview; a more detailed specification follows
      this section. </t>
    
      <section anchor="sec.operating.environment" title="Operating Environment">

      <t>
      <xref target="RFC7401">HIP </xref>
      is a key establishment and parameter negotiation protocol.
      Its primary applications are for authenticating
      host messages based on host identities and establishing 
      SAs for the 
      <xref target="RFC7402">ESP transport format</xref>
      and possibly other protocols in
      the future.  
      </t>

      <figure anchor="fig.hip.operating.environment" title="HIP Deployment
      Model">
      <artwork><![CDATA[
 +--------------------+                       +--------------------+
 |                    |                       |                    |
 |   +------------+   |                       |   +------------+   |
 |   |    Key     |   |         HIP           |   |    Key     |   |
 |   | Management | <-+-----------------------+-> | Management |   |
 |   |  Process   |   |                       |   |  Process   |   |
 |   +------------+   |                       |   +------------+   |
 |         ^          |                       |         ^          |
 |         |          |                       |         |          |
 |         v          |                       |         v          |
 |   +------------+   |                       |   +------------+   |
 |   |   IPsec    |   |        ESP            |   |   IPsec    |   |
 |   |   Stack    | <-+-----------------------+-> |   Stack    |   |
 |   |            |   |                       |   |            |   |
 |   +------------+   |                       |   +------------+   |
 |                    |                       |                    |
 |                    |                       |                    |
 |     Initiator      |                       |     Responder      |
 +--------------------+                       +--------------------+
      ]]></artwork>
     </figure> 

   <t>

   The general deployment model for HIP is shown above, assuming operation
   in an end-to-end fashion.  This document
   specifies an extension to HIP to enable end-host mobility.
   In summary, these extensions to the HIP base 
   protocol enable the signaling of 
   new addressing information to the peer in HIP messages.  The messages
   are authenticated 
   via a signature or keyed Hash Message Authentication Code
   (HMAC) based on its Host Identity (HI).  This document
   specifies the format of this new addressing (LOCATOR_SET) parameter, the
   procedures for sending and processing this parameter to enable basic
   host mobility, and procedures for a concurrent address verification 
   mechanism.
   </t>

      <figure anchor="fig.hip.architecture" title="Architecture for
      HIP Host Mobility and Multihoming">
      <artwork><![CDATA[
         ---------
         | TCP   |  (sockets bound to HITs)
         ---------
            |
         ---------
   ----> | ESP   |  {HIT_s, HIT_d} <-> SPI
   |     ---------
   |         |
 ----    ---------
| MH |-> | HIP   |  {HIT_s, HIT_d, SPI} <-> {IP_s, IP_d, SPI}
 ----    ---------
            |
         ---------
         |  IP   |
         ---------
      ]]></artwork>
     </figure> 


      <t> <xref target="fig.hip.architecture" /> depicts a layered 
      architectural view of
      a HIP-enabled stack using the ESP transport format.  In HIP, 
      upper-layer protocols (including TCP and ESP in this figure) are 
      bound to Host Identity Tags (HITs) and not IP addresses.  The HIP sublayer is 
      responsible for maintaining the binding between HITs and IP
      addresses.  The SPI is used to associate
      an incoming packet with the right HITs.  The block labeled "MH"
      corresponds to the function that manages the bindings at the ESP and
      HIP sublayers for mobility (specified in this document) and multihoming
      (specified in <xref target="RFC8047" />).</t>
  
      <t> Consider first the case in which there is no mobility or
      multihoming, as specified in the 
      <xref target="RFC7401">base protocol specification</xref>.
      The HIP base exchange establishes the HITs in use between the hosts,
      the SPIs to use for ESP, and the IP addresses (used in both the HIP
      signaling packets and ESP data packets).  
      Note that there can only be one such set of bindings
      in the outbound direction for any given packet, and the only 
      fields used for the binding at the HIP layer are the fields 
      exposed by ESP (the SPI and HITs).  For the inbound direction, 
      the SPI is all that is required to find the right host context.  
      ESP rekeying events change the mapping between
      the HIT pair and SPI, but do not change the IP addresses.</t>

      <t> Consider next a mobility event, in which a host 
      moves to another IP address.  Two things need to occur in this 
      case.  First, the peer needs to be notified of the
      address change using a HIP UPDATE message.  Second, each host 
      needs to change its local bindings at the HIP sublayer (new IP 
      addresses).  It may be that both the SPIs and IP addresses are 
      changed simultaneously in a single UPDATE; the protocol described
      herein supports this.  Although internal notification of transport-layer
      protocols regarding the path change (e.g., to reset congestion
      control variables) may be desired, this specification does not address
      such internal notification.  In addition, elements
      of procedure for traversing network address translators (NATs) 
      and firewalls, including NATs and firewalls that may understand 
      HIP, may complicate the above basic scenario and are not 
      covered by this document. </t>

      <section anchor="sec.model.locator" title="Locator">
      <t> This document defines a generalization of an address called a 
      "locator".  A locator specifies a point of attachment to the network 
      but may also include additional end-to-end tunneling or a per-host 
      demultiplexing context that affects how packets are handled below 
      the logical HIP sublayer of the stack.  This
      generalization is useful because IP addresses alone may not be 
      sufficient to describe how packets should be handled below HIP.  
      For example, in a host multihoming context, certain IP addresses 
      may need to be associated with certain ESP SPIs to avoid violating the 
      ESP anti-replay window.
      Addresses may also be affiliated with transport ports in certain 
      tunneling scenarios.  Locators may simply be traditional network 
      addresses.  The format of the Locator fields in the LOCATOR_SET
      parameter is defined in 
      <xref target="sec.locator.format" />. 
</t>
      </section>

      <section anchor="sec.model.mobility." title="Mobility Overview">

      <t> When a host moves to another address, it notifies its peer of the
      new address by sending a HIP UPDATE packet containing a single
      LOCATOR_SET parameter and a single ESP_INFO parameter.  
      This UPDATE packet is acknowledged by the peer.  For
      reliability in the presence of packet loss, the UPDATE packet is
      retransmitted as defined in the HIP specification
      <xref target="RFC7401" />.
      The peer can authenticate the contents
      of the UPDATE packet based on the signature and keyed hash of the
      packet.  
      </t>

      <t> When using the
      <xref target="RFC7402">ESP transport format</xref>,
      the host may, at the same time,
      decide to rekey its security association and possibly generate a new 
      Diffie-Hellman key; all of these actions are triggered by including
      additional parameters in the UPDATE packet, as defined in the
      <xref target="RFC7401">base protocol specification </xref>
      and <xref target="RFC7402">ESP extension</xref>.
      </t>

      <t> When using ESP (and possibly other transport modes in the
      future), the host is
      able to receive packets that are protected using a HIP-created ESP
      SA from any address.  Thus, a host can change its IP address and
      continue to send packets to its peers without necessarily rekeying.  
      However, the peers are not able to send packets to these new addresses 
      before
      they can reliably and securely update the set of addresses that
      they associate with the sending host.  Furthermore, mobility
      may change the path characteristics in such a manner that 
      reordering occurs and packets fall outside the ESP anti-replay
      window for the SA, thereby requiring rekeying.</t>
      </section>

      </section>

      <section anchor="sec.protocol.overview" title="Protocol Overview"> 

      <t>In this section, we briefly introduce a number of usage
      scenarios for HIP host mobility.
      These scenarios assume that HIP is being used with the 
      <xref target="RFC7402">ESP transform</xref>,
      although other scenarios may be defined in the
      future.  To understand these usage scenarios, the reader should
      be at least minimally familiar with the <xref
      target="RFC7401">HIP specification</xref> and with the
      <xref target="RFC7402">use of ESP with HIP</xref>.
      According to these specifications, the data traffic in a HIP session
      is protected with ESP, and the ESP SPI acts as an index to
      the right host-to-host context.  More specification details are
      found later in Sections <xref target="sec.locator.format" format="counter"/> and 
      <xref target="sec.processing.rules" format="counter"/>.  </t>

      <t> The scenarios below assume that the two hosts have 
      completed a single HIP base exchange with each other.
      Therefore, both of the hosts have one incoming and one outgoing
      SA.  Further, each SA uses the same pair of IP addresses, which
      are the ones used in the base exchange.  </t>

      <t>The readdressing protocol is an asymmetric protocol where a
      mobile host informs a peer host
      about changes of IP addresses on affected SPIs.  
      The readdressing exchange is designed to be piggybacked 
      on existing HIP exchanges.  In support of mobility, 
      the LOCATOR_SET parameter is carried in UPDATE
      packets.</t>
     
      <t> The scenarios below at times describe addresses as being in either
      an ACTIVE, UNVERIFIED, or DEPRECATED state.  From the perspective of
      a host, newly learned addresses of the peer need to be verified
      before put into active service, and addresses removed by the peer
      are put into a deprecated state.  Under limited conditions described
      below (<xref target="anchor.CBA.proc" />), an UNVERIFIED address 
      may be used.  
      The addressing states are defined more formally in 
      <xref target="sec.loc.data.struct.status" />. </t>
                    
      <t> Hosts that use link-local addresses as source addresses
      in their HIP handshakes may not be reachable by a mobile peer.
      Such hosts SHOULD provide a globally routable address either in
      the initial handshake or via the LOCATOR_SET parameter.
      </t>

      <section title="Mobility with a Single SA Pair (No Rekeying)">
	    <t> A mobile host sometimes needs to change an IP address bound
        to an interface.  The change of an IP address might be needed due
        to a change in the advertised IPv6 prefixes on the link, a
        reconnected PPP link, a new DHCP lease, or an actual movement
        to another subnet.  In order to maintain its communication
        context, the host needs to inform its peers about the new IP
        address.  This first example considers the case in which the
        mobile host has only one interface, one IP address in use within
        the HIP session, a single
        pair of SAs (one inbound, one outbound), and no rekeying
        occurring on the SAs.  We also assume that the new IP addresses 
        are within the same address family (IPv4 or IPv6) as the previous
        address.  This is the simplest scenario, depicted
        in <xref target="single-homed-mobility1" />.   Note that the 
        conventions for message parameter notations in figures (use
        of parentheses and brackets) is defined in Section 2.2 of
        <xref target="RFC7401" />.
        </t>

      <figure anchor="single-homed-mobility1" title="Readdress without Rekeying but with Address Check">
	<artwork>
  Mobile Host                         Peer Host

          UPDATE(ESP_INFO, LOCATOR_SET, SEQ)
     -----------------------------------&gt;
          UPDATE(ESP_INFO, SEQ, ACK, ECHO_REQUEST)  
     &lt;-----------------------------------
          UPDATE(ACK, ECHO_RESPONSE)
     -----------------------------------&gt;
        </artwork>
      </figure>

	      <t>
         The steps of the packet processing are as follows:
        <list style="numbers">

	        <t>The mobile host may be disconnected from the peer host for
          a brief period of time while it switches from one IP address
          to another; this case is sometimes referred to in the literature
          as a "break-before-make" case.  The host may also obtain its
          new IP address before losing the old one ("make-before-break"
          case).  In either case, upon obtaining a new IP address, the mobile 
	  host sends a LOCATOR_SET parameter to the peer host in an UPDATE 
          message.  The UPDATE message also contains an ESP_INFO
          parameter containing the values of the old and new SPIs for
          a security association.  In this case, both the OLD SPI and 
          NEW SPI parameters are
          set to the value of the preexisting incoming SPI; this
          ESP_INFO does not trigger a rekeying event but is instead
          included for possible parameter-inspecting firewalls on
          the path (<xref target="RFC5207" /> specifies some such
          firewall scenarios in which the HIP-aware firewall may want to
          associate ESP flows to host identities). 
          The LOCATOR_SET parameter contains
          the new IP address (embedded in a Locator Type of "1", defined below)
          and a lifetime associated with the locator.
          The mobile host waits for this UPDATE to be acknowledged,
          and retransmits if necessary, as specified in the 
          <xref target="RFC7401"> base specification</xref>.
	        </t>

	        <t>The peer host receives the UPDATE, validates it, and
          updates any local bindings between the HIP association and
          the mobile host's destination address.  The peer host MUST
          perform an address verification by placing a nonce in the
          ECHO_REQUEST parameter of the UPDATE message sent back to
          the mobile host.  It also includes
          an ESP_INFO parameter with both the OLD SPI and NEW SPI
          parameters set to the value of the preexisting
          incoming SPI and sends this UPDATE (with piggybacked
          acknowledgment) to the mobile host at its new address. 
          This UPDATE also acknowledges the mobile host's UPDATE that
          triggered the exchange.
          The peer host waits for its UPDATE to be acknowledged,
          and retransmits if necessary, as specified in the 
          <xref target="RFC7401"> base specification</xref>.
          The peer MAY use the new address immediately, but
          it MUST limit the amount of data it sends to the address
          until address verification completes.</t>

          <t> The mobile host completes the readdress by processing
          the UPDATE ACK and echoing the nonce in an ECHO_RESPONSE,
          containing the ACK of the peer's UPDATE.  This UPDATE is not
          protected by a retransmission timer because it does not contain
          a SEQ parameter requesting acknowledgment.
          Once the peer host receives this ECHO_RESPONSE, it considers
          the new address to be verified and can put the address into full use.
          </t>
	    </list>
	    </t>
 
	  <t>While the peer host is verifying the new address, the new address
	  is marked as UNVERIFIED (in the interim), and the old address is
          DEPRECATED.   Once the peer host has 
	  received a correct reply to its UPDATE challenge,
	  it marks the new address as
	  ACTIVE and removes the old address.
	  </t>

      </section>

      <section title="Mobility with a Single SA Pair (Mobile-Initiated Rekey)">
	    <t> The mobile host may decide to rekey the SAs at the same time
      that it notifies the peer of the new address.  In this
      case, the above procedure described in 
      <xref target="single-homed-mobility1" /> is slightly modified.
      The UPDATE message sent from the mobile host includes an 
      ESP_INFO with the OLD SPI set to the previous SPI, the
      NEW SPI set to the desired new SPI value for the incoming SA,
      and the KEYMAT Index desired.  Optionally, the host may include
      a DIFFIE_HELLMAN parameter for a new Diffie-Hellman key.  The
      peer completes the request for a rekey as is normally done
      for HIP rekeying, except that the new address is kept as 
      UNVERIFIED until the UPDATE nonce challenge is received as
      described above.  <xref target="single-homed-mobility2" /> 
      illustrates this scenario.</t>

      <figure anchor="single-homed-mobility2" title="Readdress with Mobile-Initiated Rekey">
	<artwork>
  Mobile Host                         Peer Host

          UPDATE(ESP_INFO, LOCATOR_SET, SEQ, [DIFFIE_HELLMAN])
     -----------------------------------&gt;
          UPDATE(ESP_INFO, SEQ, ACK, [DIFFIE_HELLMAN,] ECHO_REQUEST)  
     &lt;-----------------------------------
          UPDATE(ACK, ECHO_RESPONSE)
     -----------------------------------&gt;
        </artwork>
      </figure>
      </section>

      <section title="Mobility Messaging through the Rendezvous Server">
	    <t> Section 6.11 of <xref target="RFC7401" />
      specifies procedures for sending
      HIP UPDATE packets.  The UPDATE packets are protected by a timer
      subject to exponential backoff and resent UPDATE_RETRY_MAX times.  
      It may be, however, that the peer is itself in the process of 
      moving when the local host is trying to update the IP address
      bindings of the HIP association.  This is sometimes called the
      "double-jump" mobility problem; each host's UPDATE packets
      are simultaneously sent to a stale address of the peer, and
      the hosts are no longer reachable from one another.  </t>

      <t> <xref target="RFC8004">The HIP Rendezvous
      Extension</xref> specifies a rendezvous service that permits the
      I1 packet from the base exchange to be relayed from a stable
      or well-known public IP address location to the current IP
      address of the host.  It is possible to support double-jump
      mobility with this rendezvous service if the following 
      extensions to the specifications of 
      <xref target="RFC8004" /> and 
      <xref target="RFC7401"/> are followed. </t>
      <t>
        <list style="numbers">
          <t> The mobile host sending an UPDATE to the peer,
          and not receiving an ACK, MAY resend the UPDATE to an 
          RVS of the peer, if such a server is 
          known.  The host MAY try the RVS of the peer up to 
          UPDATE_RETRY_MAX times as specified in 
          <xref target="RFC7401" />.  The host 
          MAY try to use the peer's RVS before it has tried 
          UPDATE_RETRY_MAX times to the last working address (i.e., the
          RVS MAY be tried in parallel with retries to the
          last working address).  The aggressiveness of a host
          replicating its UPDATEs to multiple destinations, to try
          candidates in parallel instead of serially, is a policy choice
          outside of this specification.
          </t>
          <t> An RVS supporting the UPDATE forwarding
          extensions specified herein MUST modify the UPDATE in the
          same manner as it modifies the I1 packet before forwarding.
          Specifically, it MUST rewrite the IP header source and
          destination addresses, recompute the IP header checksum,
          and include the FROM and RVS_HMAC parameters.
          </t>
          <t> A host receiving an UPDATE packet MUST be prepared to
          process the FROM and RVS_HMAC parameters and MUST include
          a VIA_RVS parameter in the UPDATE reply that contains the 
          ACK of the UPDATE SEQ.  
          </t>
          <t> An Initiator receiving a VIA_RVS in the UPDATE reply should 
          initiate address reachability tests (described later in this
          document) towards the end host's address and not towards the 
          address included in the VIA_RVS.
          </t>
      </list>
     </t>
          <t> This scenario requires that hosts using RVSs
          also take steps to update their current address bindings with 
          their RVS upon a mobility event.  
          <xref target="RFC8004" />
          does not specify how to update
          the RVS with a client host's new address.  
          Section 3.2 of <xref target="RFC8003" />
          describes how a host may send a REG_REQUEST
          in either an I2 packet (if there is no active association)
          or an UPDATE packet (if such association exists).  According to
          procedures described in 
          <xref target="RFC8003" />, if a mobile host
          has an active registration, it may use mobility updates specified
          herein, within the context of that association, to readdress the
          association.
          </t>
      </section>

      <section title="Network Renumbering">

        <t>It is expected that IPv6 networks will be renumbered much
        more often than most IPv4 networks.  From an end-host
        point of view, network renumbering is similar to mobility, and
        procedures described herein also apply to notify a peer of
        a changed address.</t>

      </section>

     </section>

      <section anchor="sec.other.considerations" title="Other Considerations"> 

        <section anchor="sec.model.verification" title="Address Verification">
      
	      <t>When a HIP host receives a set of locators from
        another HIP host in a LOCATOR_SET, it does not necessarily know
        whether the other host is actually reachable at the claimed
        addresses.  In fact, a malicious peer host may be
        intentionally giving bogus addresses in order to cause a
        packet flood towards the target addresses <xref
        target="RFC4225" />.  Therefore, the HIP host
        needs to first check that
        the peer is reachable at the new address.</t>

      <t> Address verification is implemented by the challenger sending 
      some piece of unguessable information to the new address and waiting 
      for some acknowledgment from the Responder that indicates reception 
      of the information at the new address.  This may include the exchange 
      of a nonce or the generation of a new SPI and observation of data 
      arriving on the new SPI.  More details are found in 
      <xref target="sec-reach" /> of this document.
      </t>

	    <t> An additional potential benefit of performing address 
      verification is to allow NATs and firewalls in the network along the 
      new path to obtain the peer host's inbound SPI.</t>

        </section>
      <section anchor="anchor.CBA" title="Credit-Based Authorization">
      
      <t>CBA allows a host to securely use a new 
      locator even though the peer's reachability at the address embedded 
      in the locator has not yet been verified.  This is accomplished 
      based on the following three hypotheses:

      <list style="numbers">
        <t> A flooding attacker typically seeks to somehow multiply the 
            packets it generates for the purpose of its attack 
            because bandwidth is an ample resource for many victims.
        </t>
        <t> An attacker can often cause unamplified flooding by sending
            packets to its victim, either by directly addressing the
            victim in the packets or by guiding the packets along a specific
            path by means of an IPv6 Routing header, if Routing headers are
            not filtered by firewalls.
        </t>
        <t> Consequently, the additional effort required to set up a 
            redirection-based flooding attack (without CBA and return 
            routability checks) would pay off for the 
            attacker only if amplification could be obtained this way.
        </t>
      </list>
      </t>

      <t> On this basis, rather than eliminating malicious packet 
      redirection in the first place, CBA prevents 
      amplifications.  This is 
      accomplished by limiting the data a host can send to an unverified 
      address of a peer by the data recently received from that peer.  
      Redirection-based flooding attacks thus become less attractive than, 
      for example, pure direct flooding, where the attacker itself sends bogus 
      packets to the victim.
      </t>

      <t><xref target="figure-readdressing-scenario"/> illustrates 
      CBA:  Host B measures the amount of data
      recently 
      received from peer A and, when A readdresses, sends packets to A's 
      new, unverified address as long as the sum of the packet sizes does not 
      exceed the measured, received data volume.  When insufficient credit 
      is left, B stops sending further packets to A until A's address 
      becomes ACTIVE.  The address changes may be due to mobility,
      multihoming, or any other reason.  Not shown in 
      <xref target="figure-readdressing-scenario"/> are the results of 
      <xref target="sec-credit-aging">credit aging</xref>, 
      a mechanism used to dampen possible time-shifting attacks.</t>

      <figure title="Readdressing Scenario" 
       anchor="figure-readdressing-scenario">
      <artwork><![CDATA[
        +-------+                        +-------+
        |   A   |                        |   B   |
        +-------+                        +-------+
            |                                |
    address |------------------------------->| credit += size(packet)
     ACTIVE |                                |
            |------------------------------->| credit += size(packet)
            |<-------------------------------| do not change credit
            |                                |
            + address change                 |
            + address verification starts    |
    address |<-------------------------------| credit -= size(packet)
 UNVERIFIED |------------------------------->| credit += size(packet)
            |<-------------------------------| credit -= size(packet)
            |                                |
            |<-------------------------------| credit -= size(packet)
            |                                X credit < size(packet)
            |                                | => do not send packet!
            + address verification concludes |
    address |                                |
     ACTIVE |<-------------------------------| do not change credit
            |                                |
]]></artwork>
      </figure>

      <t> This document does not specify how to set the credit limit value,
        but the goal is to allow data transfers to proceed without much
        interruption while the new address is verified.  A simple heuristic
        to accomplish this, if the sender knows roughly its round-trip time
        (RTT) and current sending rate to the host, is to allow enough 
        credit to support maintaining the sending rate for a duration 
        corresponding to two or three RTTs. 
      </t>
        
      </section>

      <section title="Preferred Locator">

        <t>When a host has multiple locators, the peer host
        needs to decide which to use for outbound packets.
	It may be that a host would
        prefer to receive data on a particular inbound interface.  
	HIP allows a particular locator to be designated as
        a preferred locator and communicated to the peer  
        (see <xref target="sec.locator.format" />).
	</t>

      </section>

      </section>


    </section>

    <section anchor="sec.locator.format"
      title="LOCATOR_SET Parameter Format">

     <t> The LOCATOR_SET parameter has a type number value that is 
      considered to be a "critical parameter" as per the definition in
      <xref target="RFC7401" />; such parameter types MUST be 
      recognized and processed by the recipient.  The parameter 
      consists of the standard HIP parameter
       Type and Length fields, plus zero or more Locator sub-parameters.
       Each Locator sub-parameter contains a Traffic Type, Locator Type,
       Locator Length, preferred locator bit ("P" bit), Locator Lifetime, and a 
       Locator encoding.  A LOCATOR_SET containing zero Locator fields 
       is permitted but has the effect of deprecating all addresses.
       </t>

<figure anchor="locator" title="LOCATOR_SET Parameter Format">
            <artwork>
     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             |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Traffic Type   | Locator Type | Locator Length | Reserved   |P|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                       Locator Lifetime                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Locator                            |
    |                                                               |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    .                                                               .
    .                                                               .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Traffic Type   | Locator Type | Locator Length | Reserved   |P|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                       Locator Lifetime                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Locator                            |
    |                                                               |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            </artwork>
          </figure>
     <t>
    <list style="hanging">
      <t hangText="Type:">
        193</t>
      <t hangText="Length:">
        Length in octets, excluding Type and Length fields, and excluding padding.</t>
      <t hangText="Traffic Type:">
              Defines whether the locator pertains to HIP signaling, user data, or both.
      </t>
      <t hangText="Locator Type:">
              Defines the semantics of the Locator field.  </t>
      <t hangText="Locator Length:">
              Defines the length of the Locator field, in units of 4-byte words 
              (Locators up to a maximum of 4*255 octets are supported). </t>
      <t hangText="Reserved:">
        Zero when sent, ignored when received.</t>
      <t hangText="P:">
        Preferred locator.  Set to one if the locator is preferred for that Traffic
        Type; otherwise, set to zero.</t>   
      <t hangText="Locator Lifetime:">
        Lifetime of the locator, in seconds.  </t>
      <t hangText="Locator:">
        The locator whose semantics and encoding are indicated by the 
        Locator Type field.  All sub-fields of the Locator field
        are integral multiples of four octets in length.
        </t>
    </list>
        </t>

	<t>The Locator Lifetime (lifetime) indicates how long the following locator
	is expected to be valid.  The lifetime is expressed in seconds.
	Each locator MUST have a non-zero lifetime.  The address is
	expected to become deprecated when the specified number of
	seconds has passed since the reception of the message.  A
	deprecated address SHOULD NOT be used as a destination address
	if an alternate (non-deprecated) is available and has sufficient
	address scope.  </t>


    <section title="Traffic Type and Preferred Locator"> 
        <t>
        The following Traffic Type values are defined:
   <vspace blankLines="1" />
    <list style="hanging">
      <t hangText="0: "> Both signaling (HIP control packets) and user data. </t>
      <t hangText="1: "> Signaling packets only. </t>
      <t hangText="2: "> Data packets only. </t>
    </list>
    </t>
    
    <t> The "P" bit, when set, has scope over the corresponding Traffic 
    Type.  That is, when a "P" bit is set for Traffic Type "2", for example,
    it means that the locator is preferred for data packets.  If there is
    a conflict (for example, if the "P" bit is set for an address of Type "0" and a
    different address of Type "2"), the more
    specific Traffic Type rule applies (in this case, "2").  By default, 
    the IP addresses used in
    the base exchange are preferred locators for both signaling and 
    user data, unless a new preferred locator supersedes them.  If no 
    locators are indicated
    as preferred for a given Traffic Type, the implementation may use an
    arbitrary destination locator from the set of active locators.
    </t>

    </section>

    <section title="Locator Type and Locator"> 
        <t>
        The following Locator Type values are defined, along with the
        associated semantics of the Locator field:
    <list style="hanging" hangIndent="4">
      <t hangText="0: ">
        An IPv6 address or an IPv4-in-IPv6 format IPv4 address
        <xref target="RFC4291" /> (128 bits long).  This Locator Type is
        defined primarily for non&nbhy;ESP&nbhy;based usage.</t>
      <t hangText="1: ">
        The concatenation of an ESP SPI (first 32 bits) followed by an IPv6 address 
        or an IPv4-in-IPv6 format IPv4 address (an additional 128 bits).
        This IP address is defined primarily for ESP-based usage.
        </t>
    </list>
    </t>
    </section>

      <section title="UPDATE Packet with Included LOCATOR_SET">

	<t>A number of combinations of parameters in an UPDATE packet
	are possible (e.g., see <xref target="sec.protocol.overview" />).
        In this document, procedures are defined only for the case in which
        one LOCATOR_SET and one ESP_INFO parameter are used in any HIP packet.
	Any UPDATE packet that includes a LOCATOR_SET parameter SHOULD
        include both an HMAC and a HIP_SIGNATURE parameter.  
        </t>
        <t>
        The UPDATE MAY also include a HOST_ID parameter (which may be useful
        for HIP-aware firewalls inspecting the HIP messages for 
        the first time).  If
        the UPDATE includes the HOST_ID parameter, the receiving host MUST
        verify that the HOST_ID corresponds to the HOST_ID that was used
        to establish the HIP association, and the HIP_SIGNATURE MUST verify
        with the public key associated with this HOST_ID parameter.  
        </t>
        <t>
        The relationship between the announced Locators and any ESP_INFO
        parameters present in the packet is defined in 
        <xref target="sending-locators" />.
        This document does not support any elements of procedure for sending
        more than one LOCATOR_SET or ESP_INFO parameter in a single UPDATE.
	</t>
      </section>


    </section>

    <section anchor="sec.processing.rules" title="Processing Rules">
 
      <t> This section describes rules for sending and receiving
      the LOCATOR_SET parameter, testing address reachability, and
      using CBA on UNVERIFIED locators.</t> 

      <section anchor="sec.loc.data.struct.status" title="Locator Data Structure and Status">

	<t>Each locator announced in a
        LOCATOR_SET parameter is
        represented by a piece of state that contains the following
        data: 
          <list style="symbols">
	    <t>the actual bit pattern representing the locator,</t>
	    <t>the lifetime (seconds),</t>
	    <t>the status (UNVERIFIED, ACTIVE, DEPRECATED),</t>
	    <t>the Traffic Type scope of the locator, and </t>
	    <t>whether the locator is preferred for any particular scope.</t>
          </list>
	The status is used to track the reachability of the
	address embedded within the LOCATOR_SET parameter:
          <list style="hanging">

	    <t hangText="UNVERIFIED:">indicates that the reachability of the
	    address has not been verified yet,</t>

	    <t hangText="ACTIVE:">indicates that the reachability of
	    the address has been verified and the address has not been
	    deprecated, and</t>

	    <t hangText="DEPRECATED:">indicates that the locator's
	    lifetime has expired.</t>

	  </list>
        </t>

	<t>The following state changes are allowed:
  	  <list style="hanging">

	    <t hangText="UNVERIFIED to ACTIVE:">
              The reachability procedure completes successfully.</t>

	    <t hangText="UNVERIFIED to DEPRECATED:">
              The locator's lifetime expires while the locator is 
              UNVERIFIED.</t>

	    <t hangText="ACTIVE to DEPRECATED:">
              The locator's lifetime expires while the locator is 
              ACTIVE.</t>
 
	    <t hangText="ACTIVE to UNVERIFIED:">
              There has been no traffic on the address for some time,
              and the local policy mandates that the address
              reachability needs to be verified again before starting to
              use it again.</t>

	    <t hangText="DEPRECATED to UNVERIFIED:">
              The host receives a new lifetime for the locator.</t>
	  </list>

        A DEPRECATED address MUST NOT be changed to ACTIVE without first
        verifying its reachability.  
        </t>
 
        <t> Note that the state of whether or not a locator is preferred
            is not necessarily the same as the value of the
            preferred bit in the Locator sub-parameter received from 
            the peer.  Peers may recommend certain locators to be
            preferred, but the decision on whether to actually use
            a locator as a preferred locator is a local decision,
            possibly influenced by local policy.</t>

        <t> In addition to state maintained about status and remaining 
            lifetime for each locator learned from the peer, an 
            implementation would typically maintain similar state about 
            its own locators that have been offered to the peer.
        </t>
        <t>
            A locator lifetime that is unbounded (does not expire) can 
            be signified by setting
            the value of the lifetime field to the maximum (unsigned)
            value.
        </t>
        <t>
            Finally, the locators used to establish the HIP association
            are by default assumed to be the initial preferred locators
            in ACTIVE state, with an unbounded lifetime.
        </t>

      </section>

      <section anchor="sending-locators" title="Sending the LOCATOR_SET">

	<t>The decision of when to send the LOCATOR_SET is a local policy
	issue.  However, it is RECOMMENDED that a host send a LOCATOR_SET
	whenever it recognizes a change of its IP addresses in use on 
        an active HIP association and assumes
	that the change is going to last at least for a few seconds.
	Rapidly sending LOCATOR_SETs that force the peer to change the preferred
        address SHOULD be avoided.</t>

        <t> The sending of a new LOCATOR_SET parameter replaces the locator
        information from any previously sent LOCATOR_SET parameter; 
        therefore, if a host sends a new LOCATOR_SET parameter, it 
        needs to continue to include all active locators.  Hosts MUST NOT 
        announce broadcast or multicast addresses in LOCATOR_SETs.</t>

	<t> We now describe a few cases introduced in 
  <xref target="sec.protocol.overview" />.  We assume that the
  Traffic Type for each locator is set to "0" (other values for Traffic
  Type may be specified in documents that separate the HIP control plane from
  data-plane traffic).  Other mobility
  cases are possible but are left for further study.
	  <list style="numbers">
    <t>Host mobility with no multihoming and no rekeying.  The mobile 
       host creates a single UPDATE containing a single ESP_INFO 
       with a single LOCATOR_SET parameter.  The ESP_INFO contains 
       the current value of the SPI in both the OLD SPI and NEW SPI
       fields.  The LOCATOR_SET contains a single Locator with a
       Locator Type of "1"; the SPI MUST match
       that of the ESP_INFO.  The preferred bit SHOULD be set and the
       "Locator Lifetime" is set according to local policy.  The
       UPDATE also contains a SEQ parameter as usual.  This packet is
       retransmitted as defined in the HIP specification
       <xref target="RFC7401" />.
       The UPDATE should be sent to the peer's
       preferred IP address with an IP source address corresponding to
       the address in the LOCATOR_SET parameter.</t>

    <t>Host mobility with no multihoming but with rekeying.  The mobile 
       host creates a single UPDATE containing a single ESP_INFO 
       with a single LOCATOR_SET parameter (with a single address).  
       The ESP_INFO contains 
       the current value of the SPI in the OLD SPI, the new
       value of the SPI in the NEW SPI, and a KEYMAT Index 
       as selected by local policy.  Optionally, the host may choose to
       initiate a Diffie-Hellman rekey by including a DIFFIE_HELLMAN
       parameter.  The LOCATOR_SET contains a single Locator with a
       Locator Type of "1"; the SPI MUST match
       that of the NEW SPI in the ESP_INFO.  Otherwise, the steps
       are identical to the case in which no rekeying is initiated.  </t>

    </list>
  </t>

      </section>  

      <section anchor="receiving-locators" title="Handling Received LOCATOR_SETs"> 

	<t>A host SHOULD be prepared to receive a single LOCATOR_SET 
        parameter in a HIP UPDATE packet.  Reception of multiple LOCATOR_SET
        parameters in a single packet, or in HIP packets other than UPDATE,
        is outside of the scope of this specification.</t>
 
        <t>Because a host sending the LOCATOR_SET may send the same parameter
        in different UPDATE messages to different destination addresses,
        including possibly the RVS of the host, the host
        receiving the LOCATOR_SET MUST be prepared to handle the possibility
        of duplicate LOCATOR_SETs sent to more than one of the host's
        addresses.  As a result, the host MUST detect and avoid 
        reprocessing a LOCATOR_SET parameter that is redundant with a 
        LOCATOR_SET parameter that has been recently received and processed.
        </t>

  <t>  This document describes sending both ESP_INFO and LOCATOR_SET parameters
       in an UPDATE.  The ESP_INFO parameter is included when there is a
       need to rekey or key a new SPI, and is otherwise included for the
       possible benefit of HIP-aware NATs and firewalls.  The LOCATOR_SET 
       parameter
       contains a complete listing of the locators that the host wishes to
       make or keep active for the HIP association. </t>

	<t> In general, the processing of a LOCATOR_SET depends upon the 
         packet type in which it is included.
         Here, we describe only the case in which ESP_INFO is present and a 
         single LOCATOR_SET and ESP_INFO are sent in an UPDATE message; other
         cases are for further study.  The steps below cover each of the
         cases described in <xref target="sending-locators" />.
         </t>

      <t> The processing of ESP_INFO and LOCATOR_SET parameters is intended to be
          modular and support future generalization to the inclusion of
          multiple ESP_INFO and/or multiple LOCATOR_SET parameters.  A host
          SHOULD first process the ESP_INFO before the LOCATOR_SET, since the
          ESP_INFO may contain a new SPI value mapped to an existing SPI,
          while a Locator Type of "1" will only contain a reference to the new SPI.
      </t>

	<t> When a host receives a validated HIP UPDATE with a LOCATOR_SET
        and ESP_INFO parameter, it processes the ESP_INFO as follows.
	 The ESP_INFO parameter indicates whether an SA is being
            rekeyed, created, deprecated, or just identified for the
            benefit of HIP-aware NATs and firewalls.  The host examines the  
            OLD SPI and NEW SPI values in the ESP_INFO parameter:

	  <list style="numbers">

         <t> (no rekeying) If the 
             OLD SPI is equal to the NEW SPI and both correspond to an
             existing SPI, the ESP_INFO is gratuitous (provided for 
             HIP-aware NATs and firewalls) and no rekeying is necessary.  </t>
         <t> (rekeying) If the OLD SPI indicates an existing SPI and 
             the NEW SPI is
             a different non-zero value, the existing SA is being rekeyed
             and the host follows HIP ESP rekeying procedures by
             creating a new outbound SA with an SPI corresponding to the
             NEW SPI, with no addresses bound to this SPI.  Note that
             locators in the LOCATOR_SET parameter will reference this 
             new SPI instead of the old SPI.</t>
         <t> (new SA) If the OLD SPI value is zero and the 
             NEW SPI is a new non-zero
             value, then a new SA is being requested by the peer.  This case
             is also treated like a rekeying event; the receiving host
             MUST create a new SA and respond with an UPDATE ACK. </t>
         <t> (deprecating the SA) 
             If the OLD SPI indicates an existing SPI and the NEW SPI is
             zero, the SA is being deprecated and all locators uniquely
             bound to the SPI are put into the DEPRECATED state. </t>
         </list>
         </t>
         <t> If none of the above cases apply, a protocol error has 
             occurred and the processing of the UPDATE is stopped.</t>

	    <t>Next, the locators in the LOCATOR_SET parameter are processed.
            For each locator listed in the LOCATOR_SET parameter, check
	    that the address therein is a legal unicast or anycast address.
	    That is, the address MUST NOT be a broadcast or multicast
	    address.  Note that some implementations MAY accept
	    addresses that indicate the local host, since it may be
	    allowed that the host runs HIP with itself.</t>

            <t> The below assumes that all Locators are of Type "1" with
            a Traffic Type of "0"; other cases are for further study.</t>

            <t>For each Type "1" address listed in the LOCATOR_SET parameter, 
            the host checks whether the address is already bound 
            to the SPI indicated.  
            If the address is already bound, its lifetime is updated.  If the
            status of the address is DEPRECATED, the status is changed
            to UNVERIFIED.  If the address is not already bound, the address
            is added, and its status is set to UNVERIFIED.
            Mark all addresses corresponding to the SPI that were NOT
            listed in the LOCATOR_SET parameter as DEPRECATED.
            </t>
            <t>
            As a result, at the end of processing, the addresses listed 
            in the LOCATOR_SET parameter have a state of either UNVERIFIED 
            or ACTIVE, and any old addresses on the old SA not listed in the
            LOCATOR_SET parameter have a state of DEPRECATED.</t>


	<t>Once the host has processed the locators, if the LOCATOR_SET
	parameter contains a new preferred locator, the host SHOULD
	initiate a change of the preferred locator.  This
	requires that the host first verify reachability of the associated
	address, and only then change the preferred locator; see
        <xref target="sec-change" />.</t>

            <t> If a host receives a locator with an unsupported Locator
            Type, and when such a locator is also declared to be the preferred
            locator for the peer, the host SHOULD send a NOTIFY error
            with a Notify Message Type of LOCATOR_TYPE_UNSUPPORTED,
            with the Notification Data field containing the locator(s)
            that the receiver failed to process.  Otherwise, a host
            MAY send a NOTIFY error if a (non-preferred) locator with
            an unsupported Locator Type is received in a LOCATOR_SET parameter.
            </t>

        <t>A host MAY add the source IP address of a received HIP packet as
        a candidate locator for the peer even if it is not listed in the 
        peer's LOCATOR_SET, but it SHOULD prefer locators explicitly
        listed in the LOCATOR_SET.</t>

      </section>  

      <section anchor="sec-reach" title="Verifying Address Reachability">

	<t>A host MUST verify the reachability of an UNVERIFIED address.  The 
  status of a newly learned address MUST initially be set to UNVERIFIED
  unless the new address is advertised in an R1 packet as a new preferred
  locator.  A host MAY also want to verify the reachability of an 
  ACTIVE address again after some time, in which case it would set the
  status of the address to UNVERIFIED and reinitiate address verification.
  A typical verification that is protected by retransmission timers is 
  to include an ECHO REQUEST within an UPDATE sent to the new address.
  </t>
  
  <t> 
        A host typically starts the address-verification procedure
        by sending a nonce to the new address.  A host MAY choose from 
        different message exchanges or different nonce values so long as
        it establishes that the peer has received and replied to the nonce
        at the new address.  For example, when the host is changing its
        SPI and sending an ESP_INFO to the peer, the NEW SPI value SHOULD
	be random and the random value MAY be copied into an ECHO_REQUEST
	sent in the rekeying UPDATE.  However, if the host is not changing
        its SPI, it MAY still use the ECHO_REQUEST parameter for
        verification but with some other random value.  A host MAY also 
        use other
	message exchanges as confirmation of the address reachability.
  </t>

	<t>In some cases, it MAY be sufficient to use the arrival
	of data on a newly advertised SA as implicit address
	reachability verification as depicted in
        <xref target="activation" />, instead of waiting for the 
	confirmation via a HIP packet. 
	In this case, a host advertising a new SPI as part of its
	address reachability check SHOULD be prepared to receive 
	traffic on the new SA.  </t>

        <figure anchor="activation" title="Address Activation via Use of a New SA">
          <artwork>
  Mobile Host                                   Peer Host

               UPDATE(ESP_INFO, LOCATOR_SET, ...)
             ----------------------------------&gt;

                                                prepare incoming SA
               UPDATE(ESP_INFO, ...) with new SPI
             &lt;-----------------------------------
switch to new outgoing SA
                        data on new SA
             -----------------------------------&gt;
                                                mark address ACTIVE
               UPDATE(ACK, ECHO_RESPONSE) later arrives
             -----------------------------------&gt;
          </artwork>
        </figure>

<t>
When address verification is in progress for a new preferred locator,
the host SHOULD select a different locator listed as ACTIVE, if one such
locator is available, to continue communications until address
verification completes.  Alternatively, the host MAY use the new
preferred locator while in UNVERIFIED status to the extent CBA permits.  CBA is explained in
<xref target="anchor.CBA.proc" />.
Once address verification succeeds, the status of the new
preferred locator changes to ACTIVE.
</t>

      </section>

      <section anchor="sec-change" title="Changing the Preferred Locator">

	<t>A host MAY want to change the preferred outgoing locator
	for different reasons, e.g., because traffic information or ICMP
	error messages indicate that the currently used preferred
	address may have become unreachable.  Another reason may be due to 
	receiving a LOCATOR_SET parameter that has the "P" bit set.</t>

	<t>To change the preferred locator, the host initiates the
	following procedure:

	  <list style="numbers">

	    <t>If the new preferred locator has an ACTIVE status, the
	    preferred locator is changed and the procedure succeeds.</t>

      <t>If the new preferred locator has an UNVERIFIED status, the host
        starts to verify its reachability.  The host SHOULD use a
        different locator listed as ACTIVE until address verification
        completes if one such locator is available.  Alternatively, the
        host MAY use the new preferred locator, even though in UNVERIFIED
        status, to the extent CBA permits.  Once
        address verification succeeds, the status of the new preferred
        locator changes to ACTIVE, and its use is no longer governed by
        CBA. </t>

	    <t>If the peer host has not indicated a preference for any
	    address, then the host picks one of the peer's ACTIVE 
	    addresses randomly or according to local policy.  This case may
	    arise if, for example, ICMP error messages that deprecate
	    the preferred locator arrive, but the peer has not yet indicated
	    a new preferred locator. </t>

      <t>  If the new preferred locator has a DEPRECATED status and there is
        at least one non-deprecated address, the host selects one of the
        non-deprecated addresses as a new preferred locator and
        continues.  If the selected address is UNVERIFIED, the address
verification procedure described above will apply.
      </t>

	  </list>
	</t>

      </section>

      <section anchor="anchor.CBA.proc" title="Credit-Based Authorization">

      <t> To prevent redirection-based flooding attacks, the use of
         a CBA approach MUST be used when a host
         sends data to an UNVERIFIED locator.  The following algorithm 
         addresses
         the security considerations for prevention of amplification and
         time-shifting attacks.  Other forms of credit aging, and other values
         for the CreditAgingFactor and CreditAgingInterval parameters in
         particular, are for further study, and so are the advanced CBA
         techniques specified in 
         <xref target="CBA-MIPv6" />.</t>

        <section anchor="sec-handling" title="Handling Payload Packets">

      <t> A host maintains a "credit counter" for each of its peers.  
      Whenever a packet arrives from a peer, the host SHOULD increase that 
      peer's credit counter by the size of the received packet.  When the 
      host has a packet to be sent to the peer, and when the peer's preferred 
      locator is listed as UNVERIFIED and no alternative locator with status 
      ACTIVE is available, the host checks whether it can send the packet 
      to the UNVERIFIED locator.  The packet SHOULD be sent if the value 
      of the credit counter is higher than the size of the outbound 
      packet.  If the credit counter is too low, the packet MUST be 
      discarded or buffered until address verification succeeds. When a 
      packet is sent to a peer at an UNVERIFIED locator, the peer's credit 
      counter MUST be reduced by the size of the packet.  The peer's 
      credit counter is not affected by packets that the host sends to an 
      ACTIVE locator of that peer.</t>

      <t> <xref target="figure-receiving-packets-with-cba"/> depicts the 
      actions taken by the host when a packet is received.  
      <xref target="figure-sending-packets-with-cba"/> shows the decision 
      chain in the event a packet is sent.</t>

      <figure title="Receiving Packets with Credit-Based Authorization"
      anchor="figure-receiving-packets-with-cba">
      <artwork><![CDATA[
    Inbound
    Packet
       |
       |       +----------------+               +---------------+
       |       |    Increase    |               |    Deliver    |
       +-----> | credit counter |-------------> |   packet to   |
               | by packet size |               |  application  |
               +----------------+               +---------------+
      ]]></artwork>
      </figure>

      <figure title="Sending Packets with Credit-Based Authorization"
      anchor="figure-sending-packets-with-cba">
      <artwork><![CDATA[
 Outbound
  Packet
     |          _________________ 
     |         /                 \                 +---------------+
     |        /  Is the preferred \       No       |  Send packet  |
     +-----> | destination address |-------------> |  to preferred |
              \    UNVERIFIED?    /                |    address    |
               \_________________/                 +---------------+ 
                        |
                        | Yes
                        |
                        v
                _________________  
               /                 \                 +---------------+
              /   Does an ACTIVE  \      Yes       |  Send packet  |
             | destination address |-------------> |   to ACTIVE   |
              \       exist?      /                |    address    |
               \_________________/                 +---------------+
                        |
                        | No
                        |
                        v
                _________________
               /                 \                 +---------------+
              / Is credit counter \       No       |               |
             |          >=         |-------------> | Drop or       |
              \    packet size?   /                | buffer packet |
               \_________________/                 +---------------+ 
                        |
                        | Yes
                        |
                        v
                +---------------+                  +---------------+
                | Reduce credit |                  |  Send packet  |
                |  counter by   |----------------> | to preferred  |
                |  packet size  |                  |    address    |
                +---------------+                  +---------------+
      ]]></artwork>
      </figure>

      </section>

      <section anchor="sec-credit-aging" title="Credit Aging">

      <t> A host ensures that the credit counters it maintains for its peers 
      gradually decrease over time.  Such "credit aging" prevents a 
      malicious peer from building up credit at a very slow speed and using 
      this, all at once, for a severe burst of redirected packets.</t>

      <t> Credit aging may be implemented by multiplying credit counters 
      with a factor, CreditAgingFactor (a fractional value less than one),
      in fixed-time intervals 
      of CreditAgingInterval length.  Choosing appropriate values for 
      CreditAgingFactor and CreditAgingInterval is important to ensure that 
      a host can send packets to an address in state UNVERIFIED even when 
      the peer sends at a lower rate than the host itself.  When 
      CreditAgingFactor or CreditAgingInterval are too small, the peer's 
      credit counter might be too low to continue sending packets until 
      address verification concludes.</t>

      <t>The parameter values proposed in this document are as follows:</t>

      <figure>
      <artwork><![CDATA[
   CreditAgingFactor        7/8
   CreditAgingInterval      5 seconds
      ]]></artwork>
      </figure>

      <t> These parameter values work well when the host transfers a file to 
      the peer via a TCP connection, and the end-to-end round-trip time does 
      not exceed 500 milliseconds.  Alternative credit-aging algorithms may 
      use other parameter values or different parameters, which may even be 
      dynamically established.</t>

        </section>

      </section>
    </section>

    <section anchor="sec.security.considerations" title="Security Considerations">

       <t>
       The HIP mobility mechanism provides a secure means of updating a host's 
       IP address via HIP UPDATE packets. Upon receipt, a HIP host 
       cryptographically verifies the sender of an UPDATE, so forging or 
       replaying a HIP UPDATE packet is very difficult 
       (see <xref target="RFC7401" />).
       Therefore, security issues reside in other attack domains.  The two we 
       consider are malicious redirection of legitimate connections as well as 
       redirection-based flooding attacks using this protocol.  This can be 
       broken down into the following:
       <list style="hanging">
       <t> 1) Impersonation attacks 
          <list style="hanging">
          <t>- direct conversation with the misled victim </t>
          <t>- man-in-the-middle (MitM) attack </t>
          </list>
       </t>
       <t> 2) Denial-of-service (DoS) attacks 
          <list style="hanging">
          <t> - flooding attacks (== bandwidth-exhaustion attacks) 
            <list style="hanging">
            <t> * tool 1: direct flooding </t>
            <t> * tool 2: flooding by botnets </t>
            <t> * tool 3: redirection-based flooding </t>
            </list>
          </t>
          <t> - memory-exhaustion attacks </t>
          <t> - computational-exhaustion attacks </t>
          </list>
        </t>
        <t> 3) Privacy concerns </t>
        </list>
       We consider these in more detail in the following sections.
       </t>
       
       <t>
       In Sections <xref target="sec.impersonate" format="counter"/> and <xref target="sec.denial" format="counter"/>, 
       we assume that all users are using HIP.  
       In <xref target="sec.mixed" />, we consider the security 
       ramifications when we have both HIP and non-HIP hosts.
       </t>
       
      <section anchor="sec.impersonate" title="Impersonation Attacks">

       <t>
       An attacker wishing to impersonate another host will try to mislead its victim 
       into directly communicating with them or carry out a
       MitM attack between the victim and the victim's desired  
       communication peer.  Without mobility support, such attacks are 
       possible only if the attacker resides on the routing path 
       between its victim and the victim's desired communication peer or 
       if the attacker tricks its victim into initiating the connection over 
       an incorrect routing path (e.g., by acting as a router or using 
       spoofed DNS entries).
       </t>
       <t>
       The HIP extensions defined in this specification change the 
       situation in that they introduce an ability to redirect a 
       connection, both before and after establishment.  If no 
       precautionary measures are taken, an attacker could potentially
       misuse the redirection 
       feature to impersonate a victim's peer from any arbitrary location.  
       However, the authentication and authorization mechanisms of the HIP base 
       exchange <xref target="RFC7401" /> and the signatures in the  
       UPDATE message prevent this attack.  Furthermore, ownership of a 
       HIP association is securely linked to a HIP HI/HIT.  If an attacker 
       somehow uses a bug in the implementation 
       to redirect a HIP connection, the original owner can always 
       reclaim their connection (they can always prove ownership of the 
       private key associated with their public HI).
       </t>

       <t>
       MitM attacks are possible if an on-path attacker is present 
       during the initial HIP base exchange and if the hosts do not 
       authenticate each other's identities.  However, once such an 
       opportunistic base exchange has taken place, a MitM attacker that 
       comes later to the path cannot steal the HIP connection because 
       it is very difficult for an attacker to create an UPDATE 
       packet (or any HIP packet) that will be accepted as a legitimate 
       update. UPDATE packets use HMAC and are signed.  Even when an 
       attacker can snoop packets to obtain the SPI and HIT/HI, they still 
       cannot forge an UPDATE packet without knowledge of the secret keys.
       Also, replay attacks on the UPDATE packet are prevented as
       described in <xref target="RFC7401" />.
       </t>

      </section>

      <section anchor="sec.denial" title="Denial-of-Service Attacks">

        <section anchor="sec.flooding" title="Flooding Attacks">

         <t>
         The purpose of a DoS attack is to exhaust some 
         resource of the victim such that the victim ceases to operate 
         correctly.  A DoS attack can aim at the victim's  
         network attachment (flooding attack), its memory, or its processing 
         capacity.  In a flooding attack, the attacker causes an excessive 
         number of bogus or unwanted packets to be sent to the victim, 
         which fills their available bandwidth.  Note that the victim does 
         not necessarily need to be a node; it can also be an entire 
         network.  The attack functions the same way in either case.
         </t>
          
         <t>
         An effective DoS strategy is distributed denial of service 
         (DDoS).  Here, the attacker conventionally distributes some viral 
         software to as many nodes as possible.  Under the control of the 
         attacker, the infected nodes (e.g., nodes in a botnet) jointly send packets 
         to the victim.  With such an "army", an attacker can take down 
         even very high bandwidth networks/victims.
         </t>
         
         <t>
         With the ability to redirect connections, an attacker could 
         realize a DDoS attack without having to distribute viral code.  
         Here, the attacker initiates a large download from a server and 
         subsequently uses the HIP mobility mechanism to redirect this
         download to its victim.  The attacker 
         can repeat this with multiple servers.  This threat is mitigated 
         through reachability checks and CBA.  
         When conducted using HIP, reachability checks can leverage
         the built-in authentication properties of HIP. They can also prevent
         redirection-based flooding attacks.  However, the delay of such
         a check can have a noticeable impact on application performance.
         To reduce the impact of the delay, CBA
         can be used to send a limited number of packets to the new
         address while the validity of the IP address is still in question.
         Both strategies do not eliminate flooding attacks per se, but 
         they preclude: (i) their use from a location off the path 
         towards the flooded victim; and (ii) any amplification in the 
         number and size of the redirected packets.  As a result, the 
         combination of a reachability check and CBA 
         lowers a HIP redirection-based flooding attack to the level of
         a direct flooding attack in which the 
         attacker itself sends the flooding traffic to the victim.
         </t>
        </section>

        <section anchor="sec.memory" title="Memory/Computational-Exhaustion DoS Attacks">
  
         <t>
         We now consider whether or not the proposed extensions to HIP add 
         any new DoS attacks (consideration of DoS attacks using the base 
         HIP exchange and updates is discussed in 
         <xref target="RFC7401" />).  A simple attack is 
         to send many UPDATE packets containing many IP addresses that 
         are not flagged as preferred.  The attacker continues to send such 
         packets until the number of IP addresses associated with the 
         attacker's HI crashes the system.  Therefore, a HIP association 
         SHOULD limit  
         the number of IP addresses that can be associated with any HI.  
         Other forms of memory/computationally exhausting attacks via the HIP 
         UPDATE packet are handled in the base HIP document
         <xref target="RFC7401" />. 
         </t>

         <t>
         A central server that has to deal with a large number of mobile
         clients MAY consider increasing the SA lifetimes to try to slow
         down the rate of rekeying UPDATEs or increasing the cookie
         difficulty to slow down the rate of attack-oriented connections.
         </t>

        </section>

       </section>

       <section anchor="sec.mixed" title="Mixed Deployment Environment">

        <t>
         We now assume an environment with hosts that are both HIP and non-HIP aware.  
         Four cases exist: 
	  <list style="numbers">
           <t> A HIP host redirects its connection onto a non-HIP host.  
               The non-HIP host will drop the reachability packet, so this 
               is not a threat unless the HIP host is a MitM that could
               somehow respond successfully to the reachability check.
           </t>
           <t> A non-HIP host attempts to redirect their connection onto 
               a HIP host.  This falls into IPv4 and IPv6 security 
               concerns, which are outside the scope of this document.
           </t>
           <t>
               A non-HIP host attempts to steal a HIP host's session  
               (assume that Secure Neighbor Discovery is not active for the 
               following).  The 
               non-HIP host contacts the service that a HIP host has a 
               connection with and then attempts to change its IP 
               address to steal the HIP host's connection.  What 
               will happen in this case is implementation dependent, but 
               such a request should fail by being ignored or dropped.  
               Even if the 
               attack were successful, the HIP host could reclaim its 
               connection via HIP.
           </t>
           <t> A HIP host attempts to steal a non-HIP host's session.  
               A HIP host could spoof the non-HIP host's IP address 
               during the base exchange or set the non-HIP host's IP address 
               as its preferred address via an UPDATE.  Other 
               possibilities exist, but a solution is to prevent the
               local redirection of sessions that were previously using
               an unverified address, but outside of the existing HIP 
               context, into the HIP SAs until the address change can be
               verified.
           </t>
         </list>
        </t>
       
        </section>
      <section anchor="sec.privacy" title="Privacy Concerns">

        <t> The exposure of a host's IP addresses through HIP
        mobility extensions may raise privacy concerns.  The administrator
        of a host may be trying to hide its location in some context
        through the use of a VPN or other virtual interfaces.  Similar
        privacy issues also arise in other frameworks such as WebRTC
        and are not specific to HIP.  Implementations SHOULD provide
        a mechanism to allow the host administrator to block the
        exposure of selected addresses or address ranges.  While this
        issue may be more relevant in a host multihoming scenario
        in which multiple IP addresses might be exposed
        <xref target="RFC8047" />, it is worth noting 
        also here that
        mobility events might cause an implementation to try to
        inadvertently use a locator that the administrator would rather
        avoid exposing to the peer host.</t>
      </section>

     </section>

     <section title="IANA Considerations">

      <t> <xref target="RFC5206" />, obsoleted by this document, specified an allocation 
          for a LOCATOR parameter in the "Parameter Types" subregistry of the "Host Identity Protocol (HIP) Parameters" registry, with
          a type value of 193.  
          IANA has renamed the parameter to 
          "LOCATOR_SET" and has updated the reference from <xref target="RFC5206" /> to 
           this specification.
      </t>

      <t> <xref target="RFC5206" />, obsoleted by this document, specified an allocation
          for a LOCATOR_TYPE_UNSUPPORTED type in the "Notify Message Types" 
          registry, with a type value of 46.  IANA has updated the reference from <xref target="RFC5206" /> to this specification.
      </t>

     </section>

     <section title="Differences from RFC 5206">
      <t>
        This section summarizes the technical changes made from <xref
        target="RFC5206" />.  This section is informational, intended
        to help implementors of the previous protocol version.  If any
        text in this section contradicts text in other portions of this
        specification, the text found outside of this section should
        be considered normative. </t>
      <t>
        This document specifies extensions to the HIP Version 2 protocol, 
        while <xref target="RFC5206" /> specifies extensions to the HIP
        Version 1 protocol.  <xref target="RFC7401" /> documents the
        differences between these two protocol versions.
      </t>
      <t>
        <xref target="RFC5206" /> included procedures for both HIP 
        host mobility and basic host multihoming.  In this document,
        only host mobility procedures are included; host multihoming
        procedures are now specified in 
        <xref target="RFC8047" />.
        In particular, multihoming-related procedures related to the
        exposure of multiple locators in the base exchange packets;
        the transmission, reception, and processing of multiple locators 
        in a single UPDATE packet; handovers across IP address families;
        and other multihoming-related specifications have been removed.
      </t>
      <t>
        The following additional changes have been made:
      </t>
      <t>
        <list style="symbols">
          <t>
            The LOCATOR parameter in <xref target="RFC5206" /> has been
            renamed to LOCATOR_SET.
          </t>
          <t>
            Specification text regarding the handling of mobility when
            both hosts change IP addresses at nearly the same time
            (a "double-jump" mobility scenario) has been added.
          </t>
          <t>
            Specification text regarding the mobility event in which 
            the host briefly has an active new locator and old locator
            at the same time (a "make-before-break" mobility scenario)
            has been added.
          </t>
          <t>
            Specification text has been added to note that a host may add 
            the source IP address of a received HIP packet as a candidate 
            locator for the peer even if it is not listed in the
            peer's LOCATOR_SET, but that it should prefer locators explicitly
            listed in the LOCATOR_SET.
          </t>
          <t>
            This document clarifies that the HOST_ID parameter may be 
            included in UPDATE messages containing LOCATOR_SET parameters,
            for the possible benefit of HIP-aware firewalls.
          </t>
          <t>
            The previous specification mentioned that it may be possible to
            include multiple LOCATOR_SET and ESP_INFO parameters in an UPDATE.
            This document only specifies the case of a single LOCATOR_SET
            and ESP_INFO parameter in an UPDATE.
          </t>
          <t>
            The previous specification mentioned that it may be possible to
            send LOCATOR_SET parameters in packets other than the UPDATE.  
            This document only specifies the use of the UPDATE packet.
          </t>
          <t>
            This document describes a simple heuristic for setting the credit
            value for CBA.
          </t>
          <t>
             This specification mandates that a host must be able to receive 
             and avoid reprocessing redundant LOCATOR_SET parameters that 
             may have been sent in parallel to multiple addresses of the host. 
          </t>
        </list>
      </t>

     </section>

    </middle>
    <back>

     <references title="Normative references">

      &RFC8003;
      &RFC8004;
      &RFC7401;
      &RFC7402;
      &RFC2119; 
      &RFC4291; 
     </references>

     <references title="Informative references">

      &RFC5206;
      &RFC5207;
      &RFC4225;

<reference anchor='RFC8047' target="http://www.rfc-editor.org/info/rfc8047">
<front>
<title>Host Multihoming with the Host Identity Protocol</title>
<author initials='T' surname='Henderson' fullname='Thomas Henderson'>
    <organization />
</author>
<author initials='C' surname='Vogt' fullname='Christian Vogt'>
    <organization />
</author>
<author initials='J' surname='Arkko' fullname='Jari Arkko'>
    <organization />
</author>
<date month='February' year='2017' />
</front>
<seriesInfo name='RFC' value='8047' />
<seriesInfo name='DOI' value='10.17487/RFC8047' />
</reference>

<!--draft-vogt-mobopts-credit-based-authorization-00; Expired-->
<reference anchor='CBA-MIPv6'>
<front>
<title>Credit-Based Authorization for Mobile IPv6 Early Binding
Updates</title>
<author initials='C' surname='Vogt' fullname='Christian  Vogt'>
    <organization />
</author>
<author initials='J' surname='Arkko' fullname='Jari Arkko'>
    <organization />
</author>
<date month='February' year='2005' />
</front>
<seriesInfo name='Work in Progress,' value='draft-vogt-mobopts-credit-based-authorization-00' />
</reference>

<!--draft-vogt-mobopts-simple-cba-00; Expired-->
<reference anchor='SIMPLE-CBA'>
<front>
<title>Credit-Based Authorization for Concurrent Reachability
Verification</title>
<author initials='C' surname='Vogt' fullname='Christian Vogt'>
    <organization />
</author>
<author initials='J' surname='Arkko' fullname='Jari Arkko'>
    <organization />
</author> 
<date month='February' year='2006' />
</front>
<seriesInfo name='Work in Progress,' value='draft-vogt-mobopts-simple-cba-00' />
</reference>
     </references>

 <section anchor="sec.authors" title="Acknowledgments" numbered="no">
     <t>
     Pekka Nikander and Jari Arkko originated this document; Christian
     Vogt and Thomas Henderson (editor) later joined as coauthors. Greg Perkins
     contributed the initial text of the security section.  Petri Jokela
     was a coauthor of the initial individual submission.
     </t>
     <t> CBA was originally introduced in 
     <xref target="SIMPLE-CBA" />, and portions of this document have been
     adopted from that earlier document.  
     </t>
     <t>
     The authors thank Jeff Ahrenholz, Baris Boyvat, Rene Hummen, Miika Komu, 
     Mika Kousa, Jan Melen, and Samu Varjonen for improvements to 
     the document.
     </t>     
     </section>

  </back>
</rfc>
