<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dhc-addr-notification-13" number="9686" updates="" obsoletes="" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3" xml:lang="en">

  <front>
    <title abbrev="Registering Self-Generated Addresses Using DHCPv6">Registering Self-Generated IPv6 Addresses Using DHCPv6</title>
    <seriesInfo name="RFC" value="9686"/>
    <author initials="W." surname="Kumari" fullname="Warren Kumari">
      <organization>Google, LLC</organization>
      <address>
        <email>warren@kumari.net</email>
      </address>
    </author>
    <author initials="S." surname="Krishnan" fullname="Suresh Krishnan">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <email>suresh.krishnan@gmail.com</email>
      </address>
    </author>
    <author initials="R." surname="Asati" fullname="Rajiv Asati">
      <organization>Independent</organization>
      <address>
        <email>rajiv.asati@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Colitti" fullname="Lorenzo Colitti">
      <organization>Google, LLC</organization>
      <address>
        <postal>
          <street>Shibuya 3-21-3</street>
          <country>Japan</country>
        </postal>
        <email>lorenzo@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Linkova" fullname="Jen Linkova">
      <organization>Google, LLC</organization>
      <address>
        <postal>
          <street>1 Darling Island Rd</street>
          <city>Pyrmont</city>
          <code>2009</code>
          <country>Australia</country>
        </postal>
        <email>furry13@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Jiang" fullname="Sheng Jiang">
      <organization abbrev="BUPT">Beijing University of Posts and Telecommunications</organization>
      <address>
        <postal>
          <street>No. 10 Xitucheng Road</street>
          <city>Beijing</city>
          <region>Haidian District</region>
          <code>100083</code>
          <country>China</country>
        </postal>
        <email>shengjiang@bupt.edu.cn</email>
      </address>
    </author>
    <date year="2024" month="December"/>
    <area>INT</area>
    <workgroup>dhc</workgroup>
<keyword>DHCPv6</keyword>
<keyword>IPv6</keyword>
<keyword>SLAAC</keyword>

    <abstract>
      <t>This document defines a method to inform a DHCPv6 server that a
      device has one or more self-generated or statically configured
      addresses.</t>
    </abstract>
  </front>
  <middle>

<section anchor="introduction">
      <name>Introduction</name>
      <t>It is very common operational practice, especially in enterprise
      networks, to use IPv4 DHCP logs for troubleshooting or forensics
      purposes. An example of this includes a help desk dealing with a ticket
      such as "The CEO's laptop cannot connect to the printer"; if the Media Access Control (MAC)
      address of the printer is known (for example, from an inventory system),
      the printer's IPv4 address can be retrieved from the DHCP log or lease
      table and the printer can be pinged to determine if it is
      reachable. Another common example is a security operations team
      discovering suspicious events in outbound firewall logs and then
      consulting DHCP logs to determine which employee's laptop had that IPv4
      address at that time so that they can quarantine it and remove the
      malware.</t>

      <t>This operational practice relies on the DHCP server knowing the IP
      address assignments.  This works quite well for IPv4 addresses, as most
      addresses are either assigned by DHCP <xref target="RFC2131"/> or
      statically configured by the network operator. For IPv6, however, this
      practice is much harder to implement, as devices often self-configure
      IPv6 addresses via Stateless Address Autoconfiguration (SLAAC) <xref target="RFC4862"/>.</t>

      <t>This document provides a mechanism for a device to inform the DHCPv6
      server that the device has a self-configured IPv6 address (or has a
      statically configured address), and thus provides parity with IPv4 by
      making DHCPv6 infrastructure aware of self-assigned IPv6 addresses.</t>
    </section>

    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
        <t>
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>
    </section>

    <section anchor="registration-mechanism-overview">
      <name>Registration Mechanism Overview</name>
      <t>The DHCPv6 protocol is used as the address registration protocol and
      a DHCPv6 server performs the role of an address registration server.
      This document introduces a new Address Registration
      (OPTION_ADDR_REG_ENABLE) option, which indicates that the server
      supports the registration mechanism.  Before registering any addresses,
      the client <bcp14>MUST</bcp14> determine whether the network supports
      address registration. It can do this by including the Address
      Registration option code in the Option Request option (see <xref
      target="RFC8415" sectionFormat="of" section="21.7"/>) of the
      Information-Request, Solicit, Request, Renew, or Rebind messages it
      sends to the server as part of the regular stateless or stateful DHCPv6
      configuration process. If the server supports address registration, it
      includes an Address Registration option in its Advertise or Reply
      messages.  To avoid undesired multicast traffic, if the DHCPv6
      infrastructure does not support (or is not willing to receive) any
      address registration information, the client <bcp14>MUST NOT</bcp14>
      register any addresses using the mechanism in this
      specification. Otherwise, the client registers addresses as described
      below.</t>
      
      <t>After successfully assigning a self-generated or statically
      configured valid IPv6 address <xref target="RFC4862"/> on one of its
      interfaces, a client implementing this specification multicasts an
      ADDR-REG-INFORM message (see <xref
      target="dhcpv6-address-registration-request-message"/>) in order to
      inform the DHCPv6 server that this self-generated address is in
      use. Each ADDR-REG-INFORM message contains a DHCPv6 Identity Association
      (IA) Address option <xref target="RFC8415"/> to specify the address
      being registered.</t>

      <t>The address registration mechanism overview is shown in <xref
      target="Fig.1"/>.</t>

<figure anchor="Fig.1">
<name>Address Registration Procedure Overview</name>
      <artwork><![CDATA[
+--------+        +------------------+       +---------------+
| CLIENT |        | FIRST-HOP ROUTER |       | DHCPv6 SERVER |
+--------+        +---------+--------+       +-------+-------+
    |      SLAAC            |                        |
    |<--------------------> |                        |
    |                       |                        |
    |                                                |
    |  src: link-local address                       |
    | -------------------------------------------->  |
    |    INFORMATION-REQUEST or SOLICIT/...          |
    |       - OPTION REQUEST OPTION                  |
    |          -- OPTION_ADDR_REG_ENABLE             |
    |                                                |
    |    ...                                         |
    |                                                |
    |                                                |
    |<---------------------------------------------  |
    |     REPLY or ADVERTISE MESSAGE                 |
    |       - OPTION_ADDR_REG_ENABLE                 |
    |                                                |
    |                                                |
    |  src: address being registered                 |
    | -------------------------------------------->  |
    |    ADDR-REG-INFORM MESSAGE                     |Register/
    |                                                |log addresses
    |                                                |
    |                                                |
    | <--------------------------------------------  |
    |        ADDR-REG-REPLY MESSAGE                  |
    |                                                |
]]></artwork>
</figure>
    </section>

    <section anchor="dhcpv6-address-registration-procedure">
      <name>DHCPv6 Address Registration Procedure</name>
      <section anchor="dhcpv6-address-registration-option">
        <name>DHCPv6 Address Registration Option</name>
        <t>The Address Registration option (OPTION_ADDR_REG_ENABLE) indicates
        that the server supports the mechanism described in this document. The
        format of the Address Registration option is described as follows:</t>
	<figure anchor="Fig.2">
	  <name>DHCPv6 Address Registration Option</name>
	  <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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          option-code          |           option-len          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
]]></artwork>
	</figure>
	<dl>
	  <dt>option-code:</dt><dd>OPTION_ADDR_REG_ENABLE (148)</dd>
	  <dt>option-len:</dt><dd>0</dd>
	</dl>
        <t>If a client has the address registration mechanism enabled, it <bcp14>MUST</bcp14> include this option in all Option Request options that it sends.</t>
        <t>A server that is configured to support the address registration mechanism <bcp14>MUST</bcp14> include this option in Advertise and Reply messages if the client message it is replying to contained this option in the Option Request option.</t>
      </section>
      <section anchor="dhcpv6-address-registration-request-message">
        <name>DHCPv6 Address Registration Request Message</name>
        <t>The DHCPv6 client sends an ADDR-REG-INFORM message to inform that an IPv6 address is assigned to the client's interface.
The format of the ADDR-REG-INFORM message is described as follows:</t>

<figure anchor="Fig.3">
  <name>DHCPv6 ADDR-REG-INFORM Message</name>
  <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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |    msg-type   |               transaction-id                  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 .                            options                            .
 .                           (variable)                          .
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<dl>
  <dt>msg-type:</dt><dd>Identifies the DHCPv6 message type; set to ADDR-REG-INFORM (36).</dd>
  <dt>transaction-id:</dt><dd>The transaction ID for this message exchange.</dd>
  <dt>options:</dt><dd>The options carried in this message.</dd>
</dl>
       <t>The client <bcp14>MUST</bcp14> generate a transaction ID as
       described in <xref target="RFC8415"/> and insert this value in the
       transaction-id field.</t>
       
       <t>The client <bcp14>MUST</bcp14> include the Client Identifier option
       <xref target="RFC8415"/> in the ADDR-REG-INFORM message.</t>

       <t>The ADDR-REG-INFORM message <bcp14>MUST NOT</bcp14> contain the
       Server Identifier option and <bcp14>MUST</bcp14> contain exactly one IA
       Address option containing the address being registered. The
       valid-lifetime and preferred-lifetime fields in the option
       <bcp14>MUST</bcp14> match the current Valid Lifetime and Preferred
       Lifetime of the address being registered.</t>

        <t>The ADDR-REG-INFORM message is dedicated for clients to initiate an
        address registration request toward an address registration server.
        Consequently, clients <bcp14>MUST NOT</bcp14> put any Option Request
        option(s) in the ADDR-REG-INFORM message. Clients <bcp14>MAY</bcp14>
        include other options, such as the Client FQDN option <xref
        target="RFC4704"/>.</t>
	
	<t>The client sends the DHCPv6 ADDR-REG-INFORM message to the
	All_DHCP_Relay_Agents_and_Servers multicast address (ff02::1:2). The
	client <bcp14>MUST</bcp14> send separate messages for each address
	being registered.</t>
        
	<t>Unlike other types of messages, which are sent from the link-local
	address of the client, the ADDR-REG-INFORM message <bcp14>MUST</bcp14>
	be sent from the address being registered. This is primarily for "fate
	sharing" purposes; for example, if the network implements some form
	of Layer 2 security to prevent a client from spoofing other clients'
	MAC addresses, this prevents an attacker from spoofing ADDR-REG-INFORM
	messages.</t>

       <t>On clients with multiple interfaces, the client <bcp14>MUST</bcp14>
       only send the packet on the network interface that has the address
       being registered, even if it has multiple interfaces with different
       addresses. If the same address is configured on multiple interfaces,
       then the client <bcp14>MUST</bcp14> send the ADDR-REG-INFORM message
       each time the address is configured on an interface that did not
       previously have it and refresh each registration independently
       from the others.</t>

        <t>The client <bcp14>MUST</bcp14> only send the ADDR-REG-INFORM
        message for valid addresses <xref target="RFC4862"/> of global scope
        <xref target="RFC4007"/>. This includes Unique Local Addresses (ULAs), which are
        defined in <xref target="RFC4193"/> to have global scope. This also
        includes statically assigned addresses of global scope (such addresses
        are considered to be valid indefinitely).  The client <bcp14>MUST
        NOT</bcp14> send the ADDR-REG-INFORM message for addresses configured
        by DHCPv6.</t>

        <t>The client <bcp14>SHOULD NOT</bcp14> send the ADDR-REG-INFORM
        message unless it has received a Router Advertisement (RA) message with
        either the M or O flags set to 1.</t>

        <t>Clients <bcp14>MUST</bcp14> discard any received ADDR-REG-INFORM messages.</t>

        <section anchor="server-message-processing">
          <name>Server Message Processing</name>
          
	  <t>Servers <bcp14>MUST</bcp14> discard any ADDR-REG-INFORM messages
	  that meet any of the following conditions:</t>

          <ul spacing="normal">
            <li>
              <t>the message does not include a Client Identifier option;</t>
            </li>
            <li>
              <t>the message includes a Server Identifier option;</t>
            </li>
            <li>
              <t>the message does not include the IA Address option, or the IP
              address in the IA Address option does not match the source
              address of the original ADDR-REG-INFORM message sent by the
              client. The source address of the original message is the source
              IP address of the packet if it is not relayed or is the
              peer-address field of the innermost Relay-forward message if it
              is relayed; or</t>
            </li>
            <li>
              <t>the message includes an Option Request option.</t>
            </li>
          </ul>

          <t>If the message is not discarded, the address registration server
          <bcp14>SHOULD</bcp14> verify that the address being registered is
          "appropriate to the link" as defined by <xref target="RFC8415"/> or
          within a prefix delegated to the client via DHCPv6 for Prefix
          Delegation (DHCPv6-PD) (see <xref target="RFC8415"
          sectionFormat="of" section="6.3"/>). If the address being registered
          fails this verification, the server <bcp14>MUST</bcp14> drop the
          message and <bcp14>SHOULD</bcp14> log this fact. If the message
          passes the verification, the server:</t>

          <ul spacing="normal">
            <li>
              <t><bcp14>MUST</bcp14> log the address registration information
              (as is done normally for clients to which it has assigned an
              address), unless it is configured not to do so. The server
              <bcp14>SHOULD</bcp14> log the client DHCP Unique Identifier
              (DUID) and the link-layer address, if available. The server
              <bcp14>MAY</bcp14> log any other information.</t>
            </li>
            <li>
              <t><bcp14>SHOULD</bcp14> register a binding between the provided
              Client Identifier and IPv6 address in its database, if no
              binding exists. The lifetime of the binding is equal to the
              Valid Lifetime of the address reported by the client. If there
              is already a binding between the registered address and the same
              client, the server <bcp14>MUST</bcp14> update its lifetime. If
              there is already a binding between the registered address and
              another client, the server <bcp14>SHOULD</bcp14> log the fact
              and update the binding.</t>
            </li>
            <li>
              <t><bcp14>SHOULD</bcp14> mark the address as unavailable for use
              and not include it in future Advertise messages.</t>
            </li>
            <li>
              <t><bcp14>MUST</bcp14> send back an ADDR-REG-REPLY message to
              ensure the client does not retransmit.</t>
            </li>
          </ul>
          <t>If a client is multihomed (i.e., connected to multiple administrative
          domains, each operating its own DHCPv6 infrastructure), the
          requirement to verify that the registered address is appropriate for
          the link or belongs to a delegated prefix ensures that each DHCPv6
          server only registers bindings for addresses from the given
          administrative domain.</t>
          <t>As mentioned in <xref
          target="dhcpv6-address-registration-request-message"/>, although a
          client "<bcp14>MUST NOT</bcp14> send the ADDR-REG-INFORM message for
          addresses configured by DHCPv6", if a server does receive such a
          message, it <bcp14>SHOULD</bcp14> log and discard it.</t>

          <t>DHCPv6 relay agents and switches that relay address registration
          messages directly from clients <bcp14>MUST</bcp14> include the
          client's link-layer address in the relayed message using the Client
          Link-Layer Address option <xref target="RFC6939"/> if they would
          do so for other DHCPv6 client messages such as Solicit, Request, and
          Rebind.</t>
        </section>
      </section>

      <section anchor="dhcpv6-address-registration-acknowledgement">
        <name>DHCPv6 Address Registration Acknowledgement</name>

        <t>The server <bcp14>MUST</bcp14> acknowledge receipt of a valid
        ADDR-REG-INFORM message by sending back an ADDR-REG-REPLY message. The
        format of the ADDR-REG-REPLY message is described as follows:</t>

<figure anchor="Fig.4">
  <name>DHCPv6 ADDR-REG-REPLY Message</name>
  <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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |    msg-type   |               transaction-id                  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               |
 .                            options                            .
 .                           (variable)                          .
 |                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<dl>
  <dt>msg-type:</dt><dd>Identifies the DHCPv6 message type; set to ADDR-REG-REPLY (37).</dd>
  <dt>transaction-id:</dt><dd>The transaction ID for this message exchange.</dd>
  <dt>options:</dt><dd>The options carried in this message.</dd>
</dl>

        <t>If the ADDR-REG-INFORM message that the server is replying to was
        not relayed, then the IPv6 destination address of the message
        <bcp14>MUST</bcp14> be the address being registered. If the
        ADDR-REG-INFORM message was relayed, then the server
        <bcp14>MUST</bcp14> construct the Relay-reply message as specified in
        <xref target="RFC8415" sectionFormat="of" section="19.3"/>.</t>
        
	<t>The server <bcp14>MUST</bcp14> copy the transaction-id from the
	ADDR-REG-INFORM message to the transaction-id field of the
	ADDR-REG-REPLY.</t>
        
	<t>The ADDR-REG-REPLY message <bcp14>MUST</bcp14> contain an IA
	Address option for the address being registered. The option
	<bcp14>MUST</bcp14> be identical to the one in the ADDR-REG-INFORM
	message that the server is replying to.</t>
        
	<t>Servers <bcp14>MUST</bcp14> ignore any received ADDR-REG-REPLY
	messages.</t>

        <t>Clients <bcp14>MUST</bcp14> discard any ADDR-REG-REPLY messages
        that meet any of the following conditions:</t>

        <ul spacing="normal">
          <li>
            <t>the IPv6 destination address does not match the address being registered;</t>
          </li>
          <li>
            <t>the IA Address option does not match the address being registered;</t>
          </li>
          <li>
            <t>the address being registered is not assigned to the interface receiving the message; or</t>
          </li>
          <li>
            <t>the transaction-id does not match the transaction-id the client used in the corresponding ADDR-REG-INFORM message.</t>
          </li>
        </ul>

        <t>The ADDR-REG-REPLY message only indicates that the ADDR-REG-INFORM
        message has been received and that the client should not retransmit
        it. The ADDR-REG-REPLY message <bcp14>MUST NOT</bcp14> be considered
        to be any indication of the address validity and <bcp14>MUST NOT</bcp14>
        be required for the address to be usable. DHCPv6 relays, or other
        devices that snoop ADDR-REG-REPLY messages, <bcp14>MUST NOT</bcp14>
        add or alter any forwarding or security state based on the
        ADDR-REG-REPLY message.</t>
      </section>

      <section anchor="signaling-address-registration-support">
        <name>Signaling Address Registration Support</name>

        <t>To avoid undesired multicast traffic, the client <bcp14>MUST
        NOT</bcp14> register addresses using this mechanism unless the DHCPv6
        infrastructure supports address registration. The client can discover
        this by including the OPTION_ADDR_REG_ENABLE option in the
        Option Request options that it sends. If the client receives and
        processes an Advertise or Reply message with the
        OPTION_ADDR_REG_ENABLE option, it concludes that the DHCPv6
        infrastructure supports address registration. When the client detects
        address registration support, it <bcp14>MUST</bcp14> start the
        registration process (unless configured not to do so) and
        <bcp14>MUST</bcp14> immediately register any addresses that are
        already in use. Once the client starts the registration process, it
        <bcp14>MUST NOT</bcp14> stop registering addresses until it
        disconnects from the link, even if subsequent Advertise or Reply
        messages do not contain the OPTION_ADDR_REG_ENABLE option.</t>

        <t>The client <bcp14>MUST</bcp14> discover whether the DHCPv6
        infrastructure supports address registration every time it connects to
        a network or when it detects it has moved to a new link, without
        utilizing any prior knowledge about address registration support on
        that network or link. This client behavior allows networks to
        progressively roll out support for the Address Registration option
        across the DHCPv6 infrastructure without causing clients to frequently
        stop and restart address registration if some of the network's DHCPv6
        servers support it and some do not.</t>
        
	<t>A client with multiple interfaces <bcp14>MUST</bcp14> discover
	address registration support for each interface independently. The
	client <bcp14>MUST NOT</bcp14> send address registration messages on
	a given interface unless the client has discovered that the interface
	is connected to a network that supports address registration.</t>
      </section>
      <section anchor="retransmission">
        <name>Retransmission</name>
        <t>To reduce the effects of packet loss on registration, the client <bcp14>MUST</bcp14> retransmit the registration message. Retransmissions <bcp14>SHOULD</bcp14> follow the standard retransmission logic specified by <xref target="RFC8415" sectionFormat="of" section="15"/> with the following default parameters for the  initial retransmission time (IRT) and maximum retransmission count (MRC):</t>
        <ul spacing="normal">
          <li>
            <t>IRT 1 sec</t>
          </li>
          <li>
            <t>MRC 3</t>
          </li>
        </ul>

        <t>The client <bcp14>SHOULD</bcp14> allow these parameters to be configured by the administrator.</t>
        <t>To comply with <xref target="RFC8415" sectionFormat="of" section="16.1"/>, the client <bcp14>MUST</bcp14> leave the transaction ID unchanged in retransmissions of an ADDR-REG-INFORM message. When the client retransmits the registration message, the lifetimes in the packet <bcp14>MUST</bcp14> be updated so that they match the current lifetimes of the address.</t>
        <t>If an ADDR-REG-REPLY message is received for the address being registered, the client <bcp14>MUST</bcp14> stop retransmission.</t>
      </section>

      <section anchor="registration-expiry-and-refresh">
        <name>Registration Expiry and Refresh</name>
        <t>The client <bcp14>MUST</bcp14> refresh registrations to ensure that the server is always aware of which addresses are still valid. The client <bcp14>SHOULD</bcp14> perform refreshes as described below.</t>

        <section anchor="slaac-addresses">
          <name>SLAAC Addresses</name>

          <t>For an address configured using SLAAC, a function
          AddrRegRefreshInterval(address) is defined as 80% of the address's
          current Valid Lifetime. When calculating this value, the client
          applies a multiplier of AddrRegDesyncMultiplier to avoid
          synchronization with other clients, which could cause a large
	  number of registration messages to reach the server 
          at the same time. AddrRegDesyncMultiplier is
          a random value uniformly distributed between 0.9 and 1.1 (inclusive)
          and is chosen by the client when it starts the registration process,
          to ensure that refreshes for addresses with the same lifetime are
          coalesced (see below).</t>

          <t>Whenever the client registers or refreshes an address, it
          calculates a NextAddrRegRefreshTime for that address as
          AddrRegRefreshInterval seconds in the future but does not schedule
          any refreshes.</t>

          <t>Whenever the network changes the Valid Lifetime of an existing
          address by more than 1%, for example, by sending a Prefix
          Information Option (PIO) <xref target="RFC4861"/> with a new Valid
          Lifetime, the client calculates a new AddrRegRefreshInterval. The
          client schedules a refresh for min(now + AddrRegRefreshInterval,
          NextAddrRegRefreshTime). If the refresh would be scheduled in the
          past, then the refresh occurs immediately.</t>

          <t>Justification: This algorithm ensures that refreshes
          are not sent too frequently while ensuring that the server never
          believes that the address has expired when it has not. Specifically,
          after every registration:</t>

          <ul spacing="normal">
            <li>
              <t>If the network never changes the lifetime of an address
              (e.g., if no further PIOs are received, or if all PIO lifetimes
              decrease in step with the passage of time), then no refreshes
              occur. Refreshes are not necessary, because the address expires
              at the time the server expects it to expire.</t>
            </li>
            <li>
              <t>Any time the network changes the lifetime of an address
              (i.e., changes the time at which the address will expire), the
              client ensures that a refresh is scheduled, so that server will
              be informed of the new expiry.</t>
            </li>
            <li>
              <t>Because AddrRegDesyncMultiplier is at most 1.1, the refresh
              never occurs later than a point 88% between the time when the
              address was registered and the time when the address will
              expire. This allows the client to retransmit the registration
              for up to 12% of the original interval before it expires. This
              may not be possible if the network sends a Router Advertisement
              (RA) <xref target="RFC4861"/> very close to the time when the
              address would have expired. In this case, the client refreshes
              immediately, which is the best it can do.</t>
            </li>
            <li>
              <t>The 1% tolerance ensures that the client will not refresh or
              reschedule refreshes if the Valid Lifetime experiences minor
              changes due to transmission delays or clock skew between the
              client and the router(s) sending the RA.</t>
            </li>
            <li>
              <t>AddrRegRefreshCoalesce (<xref
              target="transmitting-refreshes"/>) allows battery-powered
              clients to wake up less often. In particular, it allows the
              client to coalesce refreshes for multiple addresses formed from
              the same prefix, such as the stable and privacy
              addresses. Higher values will result in fewer wakeups but may
              result in more network traffic, because if a refresh is sent
              early, then the next RA received will cause the client to
              immediately send a refresh message.</t>
            </li>
            <li>
              <t>In typical networks, the lifetimes in periodic RAs either contain constant values or values that
              decrease over time to match another lifetime, such as the
              lifetime of a prefix delegated to the network. In both these
              cases, this algorithm will refresh on the order of once per
              address lifetime, which is similar to the number of refreshes
              that are necessary using stateful DHCPv6.</t>
            </li>
            <li>
              <t>Because refreshes occur at least once per address lifetime,
              the network administrator can control the address refresh
              frequency by appropriately setting the Valid Lifetime in the
              PIO.</t>
            </li>
          </ul>
        </section>

        <section anchor="statically-assigned-addresses">
          <name>Statically Assigned Addresses</name>
          <t>A statically assigned address has an infinite Valid Lifetime
          that is not affected by RAs. Therefore, whenever
          the client registers or refreshes a statically assigned address, the
          next refresh is scheduled for StaticAddrRegRefreshInterval seconds
          in the future. The default value of StaticAddrRegRefreshInterval is
          4 hours. This ensures static addresses are still refreshed
          periodically, but refreshes for static addresses do not cause
          excessive multicast traffic. The StaticAddrRegRefreshInterval
          interval <bcp14>SHOULD</bcp14> be configurable.</t>
        </section>

        <section anchor="transmitting-refreshes">
          <name>Transmitting Refreshes</name>
          <t>When a refresh is performed, the client <bcp14>MAY</bcp14>
          refresh all addresses assigned to the interface that are scheduled
          to be refreshed within the next AddrRegRefreshCoalesce seconds. The
          value of AddrRegRefreshCoalesce is implementation dependent, and a
          suggested default is 60 seconds.</t>

          <t>Registration refresh packets <bcp14>MUST</bcp14> be retransmitted
          using the same logic as used for initial registrations (see <xref
          target="retransmission"/>).</t>

          <t>The client <bcp14>MUST</bcp14> generate a new transaction ID when
          refreshing the registration.</t>

          <t>When a Client-Identifier-to-IPv6-address binding expires, the
          server <bcp14>MUST</bcp14> remove it and consider the address as
          available for use.</t>

          <t>The client <bcp14>MAY</bcp14> choose to notify the server when an
          address is no longer being used (e.g., if the client is
          disconnecting from the network, the address lifetime expired, or the
          address is being removed from the interface). To indicate that the
          address is not being used anymore, the client <bcp14>MUST</bcp14> set
          the preferred-lifetime and valid-lifetime fields of the IA Address
          option in the ADDR-REG-INFORM message to zero. If the server
          receives a message with a valid-lifetime of zero, it
          <bcp14>MUST</bcp14> act as if the address has expired.</t>
        </section>
      </section>
    </section>

    <section anchor="client-configuration">
      <name>Client Configuration</name>
      <t>DHCP clients <bcp14>SHOULD</bcp14> allow the administrator to disable
      sending ADDR-REG-INFORM messages. Sending the messages <bcp14>SHOULD</bcp14> be
      enabled by default.</t>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>An attacker may attempt to register a large number of addresses in
      quick succession in order to overwhelm the address registration server
      and/or fill up log files. Similar attack vectors exist today, e.g., an
      attacker can DoS the server with messages containing spoofed DHCP Unique
      Identifiers (DUIDs) <xref target="RFC8415"/>.</t>

      <t>If a network is using First-Come, First-Served Source Address
      Validation Improvement (FCFS SAVI) <xref target="RFC6620"/>, then the
      DHCPv6 server can trust that the ADDR-REG-INFORM message was sent by the
      legitimate holder of the address. This prevents a client from
      registering an address configured on another client.</t>

      <t>One of the use cases for the mechanism described in this document is
      to identify sources of malicious traffic after the fact. Note, however,
      that as the device itself is responsible for informing the DHCPv6 server
      that it is using an address, a malicious or compromised device can simply choose to not
      send the ADDR-REG-INFORM message. This is an informational,
      optional mechanism and is designed to aid in troubleshooting and
      forensics. On its own, it is not intended to be a strong security access
      mechanism.  In particular, the ADDR-REG-INFORM message <bcp14>MUST
      NOT</bcp14> be used for authentication and authorization purposes,
      because in addition to the reasons above, the packets containing the
      message may be dropped.</t>
    </section>

    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>If the network doesn't have Multicast Listener Discovery (MLD) snooping enabled, then IPv6
      link-local multicast traffic is effectively transmitted as broadcast.
      In such networks, an on-link attacker listening to DHCPv6 messages might
      obtain information about IPv6 addresses assigned to the client.  As
      ADDR-REG-INFORM messages contain unique identifiers such as the client's
      DUID, the attacker may be able to track addresses being registered and
      map them to the same client, even if the client uses randomized MAC
      addresses.  This privacy consideration is not specific to the proposed
      mechanism. <xref target="RFC7844" sectionFormat="of" section="4.3"/>
      discusses using the DUID for device tracking in DHCPv6 environments and
      provides mitigation recommendations.</t>

      <t>In general, hiding information about the specific IPv6 address from
      on-link observers should not be considered a security measure, as such
      information is usually disclosed via Duplicate Address Detection <xref
      target="RFC4862"/> to all nodes anyway, if MLD snooping is not
      enabled.</t>

      <t>If MLD snooping is enabled, an attacker might be able to join the
      All_DHCP_Relay_Agents_and_Servers multicast address (ff02::1:2) group to
      listen for address registration messages.  However, the same result can
      be achieved by joining the All Routers Address (ff02::2) group and
      listen to gratuitous neighbor advertisement messages <xref
      target="RFC9131"/>. It should be noted that this particular scenario
      shares the fate with DHCPv6 address assignment: if an attacker can join
      the All_DHCP_Relay_Agents_and_Servers multicast group, they would be
      able to monitor all DHCPv6 messages sent from the client to DHCPv6
      servers and relays and therefore obtain the information about addresses
      being assigned via DHCPv6.  Layer 2 isolation allows mitigating this
      threat by blocking on-link peer-to-peer communication between nodes.</t>
    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>      
      <t>This document introduces the following entities, which have been
      allocated in the "Dynamic Host Configuration Protocol for IPv6
      (DHCPv6)" registry group defined at
      <eref target="http://www.iana.org/assignments/dhcpv6-parameters" brackets="angle"/>. These include:</t>

      <ul spacing="normal">
        <li>
          <t>One new DHCPv6 option, described in <xref
          target="dhcpv6-address-registration-option"/>, which has been 
          allocated in the "Option Codes" registry:
          </t>
          <dl newline="false" spacing="compact">
            <dt>Value:</dt> <dd>148</dd>
            <dt>Description:</dt> <dd>OPTION_ADDR_REG_ENABLE</dd>
            <dt>Client ORO:</dt> <dd>Yes</dd>
            <dt>Singleton Option:</dt> <dd>Yes</dd>
            <dt>Reference:</dt> <dd>RFC 9686</dd>
          </dl>
        </li>

        <li>
          <t>Two new DHCPv6 messages, which have been allocated in the "Message Types" registry (for more information, see Sections <xref target="dhcpv6-address-registration-request-message" format="counter"/> and  <xref target="dhcpv6-address-registration-acknowledgement" format="counter"/>, respectively, for each DHCPv6 message):
          </t>
          <dl newline="false" spacing="compact">
	    <dt>Value:</dt><dd>36</dd>
	    <dt>Description:</dt><dd>ADDR-REG-INFORM</dd>
	    <dt>Reference:</dt><dd>RFC 9686</dd>
	  </dl>
	  <dl newline="false" spacing="compact">
	    <dt>Value:</dt><dd>37</dd>
	    <dt>Description:</dt><dd>ADDR-REG-REPLY</dd>
	    <dt>Reference:</dt><dd>RFC 9686</dd>
	  </dl>
        </li>
      </ul>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4007.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4193.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4862.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6939.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8415.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2131.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4704.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7844.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9131.xml"/>

      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>

	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6620.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml"/>

      </references>
    </references>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to <contact fullname="Bernie Volz"/> for the significant
      review and feedback, as well as <contact fullname="Hermin
      Anggawijaya"/>, <contact fullname="Carlos Jesus Bernardos"/>, <contact
      fullname="Brian Carpenter"/>, <contact fullname="Stuart Cheshire"/>,
      <contact fullname="Roman Danyliw"/>, <contact fullname="Alan DeKok"/>,
      <contact fullname="James Guichard"/>, <contact fullname="James
      Guichard"/>, <contact fullname="Erik Kline"/>, <contact
      fullname="Mallory Knodel"/>, <contact fullname="Murray Kucherawy"/>,
      <contact fullname="David Lamparter"/>, <contact fullname="Ted Lemon"/>,
      <contact fullname="Eric Levy-Abegnoli"/>, <contact fullname="Aditi
      Patange"/>, <contact fullname="Jim Reid"/>, <contact fullname="Michael
      Richardson"/>, <contact fullname="Patrick Rohr"/>, <contact
      fullname="John Scudder"/>, <contact fullname="Mark Smith"/>, <contact
      fullname="Gunter Van de Velde"/>, <contact fullname="Eric Vyncke"/>,
      <contact fullname="Timothy Winters"/>, and <contact fullname="Peter Yee"/>
      for their feedback, comments, and guidance. We apologize if we
      inadvertently forgot to acknowledge anyone's contributions.</t>
    </section>

    <section anchor="contributors" numbered="false" toc="include">
      <name>Contributors</name>

      <contact initials="G." surname="Chen" fullname="Gang Chen">
        <organization>China Mobile</organization>
        <address>
          <postal>
            <street>53A, Xibianmennei Ave.</street>
            <street>Xuanwu District</street>
            <city>Beijing</city>
            <country>China</country>
          </postal>
          <email>phdgang@gmail.com</email>
        </address>
      </contact>

    </section>
  </back>
</rfc>
