<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="std"
  docName="draft-ietf-6man-pio-pflag-09"
  ipr="trust200902"
  obsoletes=""
  updates="4862"
  submissionType="IETF"
  xml:lang="en"
  version="3">
  <front>
<title abbrev="pio-p-flag">Signalling DHCPv6 Prefix per Client Availability to Hosts</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-6man-pio-pflag-09"/>

 <author initials="L." surname="Colitti" fullname="Lorenzo Colitti">
      <organization>Google</organization>
      <address>
        <postal>
          <street>Shibuya 3-21-3</street>
          <country>Japan</country>
        </postal>
        <email>lorenzo@google.com</email>
      </address>
    </author>
    <author fullname="Jen Linkova" initials="J" surname="Linkova">
      <organization>Google</organization>
      <address>
        <postal>
          <!-- Reorder these if your country does things differently -->
          <street>1 Darling Island Rd</street>
          <city>Pyrmont</city>
          <region>NSW</region>
          <code>2009</code>
          <country>AU</country>
        </postal>        
        <email>furry13@gmail.com</email>  
        <email>furry@google.com</email>  
      </address>
    </author>
<author fullname="Xiao Ma" initials="X" role="editor" surname="Ma">
      <organization>Google</organization>
      <address>
        <postal>
          <street>Shibuya 3-21-3</street>
          <country>Japan</country>
        </postal>        
        <email>xiaom@google.com</email>  
      </address>
    </author>
<author fullname="David 'equinox' Lamparter" initials="D" surname="Lamparter">
      <organization>NetDEF, Inc.</organization>
      <address>
        <postal>
          <city>San Jose</city>
          <country>USA</country>
        </postal>
        <email>equinox@diac24.net</email>
        <email>equinox@opensourcerouting.org</email>
      </address>
    </author>

   
    <date year="2024"/>
<area>Internet</area>
    <workgroup>IPv6 Maintenance</workgroup>
    <keyword>ipv6</keyword>
    <keyword>slaac</keyword>
    <keyword>pio</keyword>
    <keyword>dhcpv6-pd</keyword>


    <abstract>
 <t>
This document defines a "P" flag in the Prefix Information Option (PIO) of IPv6 Router Advertisements (RAs).
The flag is used to indicate that the network prefers that clients use the draft-ietf-v6ops-dhcp-pd-per-device deployment model instead of using individual adresses in the on-link prefix assigned using SLAAC or DHCPv6 IA_NA.
</t>

    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
<t>
<xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/> documents an IPv6 address assignment model where IPv6 devices obtain dedicated prefixes from the network via DHCPv6 Prefix Delegation <xref target="RFC8415"/>.
</t>
<t>This model provides devices with large amounts of address space that they can use to individually number VMs or containers or extend the network to downstream devices. It also provides scalability benefits on large networks because network infrastructure devices do not need to maintain state per address: IPv6 neighbor cache, SAVI mappings (<xref target="RFC7039"/>), VXLAN routes, etc.
On smaller networks, scaling to support multiple individual IPv6 addresses is less of a concern, because many home routers support hundreds of neighbor cache entries. Also, many smaller networks currently offer prefix delegation but assume that a limited number of specialized devices and/or applications will require delegated prefixes, and thus do not allocate enough address space to offer prefixes to every device that connects to the network. For example, if hosts enable <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/> on a home network that only provides a /60, and each host obtains a /64 prefix, then the network will run out of prefixes after 15 devices connect.
</t>
<t>
Therefore, to safely roll out <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/> implementations on the client side, it is necessary to have a mechanism for the network to signal to the host which address assignment method is preferred.
</t>

<t>
</t>

    </section>
      
      <section>
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
          "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
          RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
          interpreted as described in BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>


    <section anchor="rationale">
<name>Rationale</name>
<t>
The network administrator might want to indicate to hosts that requesting a prefix via DHCPv6-PD and using that prefix for address assignment (see <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/>) should be preferred over using individual addresses from the on-link prefix.
The information is passed to the host via a P flag in the Prefix Information Option (PIO). The reason for it being a PIO flag is as follows:
</t>
<ul>
<li>
The information must be contained in the Router Advertisement because it must be available to the host before it decides to form IPv6 addresses from the PIO prefix using SLAAC. Otherwise, the host might use SLAAC to form IPv6 addresses from the PIO provided and start using them, even if a unique per-host prefix is available via DHCPv6-PD.
Forming addresses via SLAAC is suboptimal because if the host later acquires a prefix using DHCPv6-PD, it can either use both the prefix and SLAAC addresses, reducing the scalability benefits of using DHCPv6-PD, or can remove the SLAAC addresses, which would be disruptive for applications that are using them.

</li>
<li>
This information is specific to the particular prefix being announced. For example, a network administrator might want hosts to assign global addresses from delegated prefixes, but use the PIO prefix to form ULA addresses.
Also, in a multihoming situation, one upstream network might choose to assign prefixes via prefix delegation, and another via PIOs.

</li>
</ul>

<t>
Note that setting the 'P' flag in a PIO option expresses the operator's preference as to whether hosts should attempt using DHCPv6-PD instead of performing individual address configuration on the prefix.
For hosts that honor this preference by requesting prefix delegation, the actual delegated prefix will necessarily be a prefix different from the one from the PIO.
</t>

    </section>

<section anchor="flag-over">
<name>P Flag Overview</name>
<t>
The P flag (also called DHCPv6-PD preferred flag) is a 1-bit PIO flag, located after the R flag (<xref target="RFC6275"/>).

The presence of a PIO with the P flag set indicates that that the network prefers that hosts use Prefix Delegation instead of acquiring individual addresses via SLAAC or DHCPv6 address assignment. This implies that the network has a DHCPv6 server capable of making DHCPv6 Prefix Delegations to every device on the network, as described in <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/>.</t>

<t>
Adding the P flag reduces the PIO Reserved1 field (<xref target="RFC4861"/>, <xref target="RFC8425"/>) from 5 bits to 4 bits.
The resulting format of the Prefix Information Option is as follows:
</t>

<figure align="center" anchor="fig_pio_new">
<artwork align="center"><![CDATA[
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |    Length     | Prefix Length |L|A|R|P| Rsvd1 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Valid Lifetime                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Preferred Lifetime                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Reserved2                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                            Prefix                             +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
                      </figure>


<t>
The P flag is independent from the value of the M and O flags in the Router Advertisement.
If the network desires to delegate prefixes to devices that support DHCPv6 Prefix Delegation but do not support the P flag, it SHOULD also set the M or O bits in the RA to 1, because some devices, such as <xref target="RFC7084"/> CE routers, might not initiate DHCPv6 Prefix Delegation if both the M and O bits are set to zero.
</t>
</section>

<section anchor="Router">
<name>Router Behaviour</name>
<t>
Routers SHOULD set the P flag to zero by default, unless explicitly configured by the administrator, and SHOULD allow the operator to set the P flag value for any given prefix.
</t>
</section>
<section anchor="host">
<name>Host Behaviour</name>

<t>
This section uses the term host to refer to any node that processes Router Advertisements. This includes both hosts and nodes such as CE Routers <xref target="RFC7084"/> which forward packets but also listen to Router Advertisements.
</t>

<section>
<name>Processing the P Flag</name>
<t>
This specification only applies to hosts which support acting as DHCPv6 Prefix Delegation clients.
Hosts which do not support DHCPv6 prefix delegation MUST ignore the P flag.
The P flag is meaningless for link-local prefixes and any Prefix Information Option containing
the link-local prefix MUST be ignored as specified in <xref target="RFC4862" section="5.5.3"/>.
In the following text, all prefixes are assumed not to be link-local.
</t>

<t>
For each interface, the host MUST keep a list of every prefix that was received
from a PIO with the P flag set and currently has a non-zero Preferred Lifetime.
The list affects the behaviour of the DHCPv6 client as follows:
</t>
<ul>
<li>When a prefix's Preferred Lifetime becomes zero, either due to expiration
or due to the receipt of a PIO with a Preferred Lifetime of zero, the prefix MUST
be removed from the list.
</li>
<li>When the length of the list increases to one, the host SHOULD start requesting
prefixes via DHCPv6 prefix delegation unless it is already doing so.</li>
<li>When the length of the list decreases to zero, the host SHOULD stop requesting
or renewing prefixes via DHCPv6 prefix delegation if it has no other reason to do so.
The lifetimes of any prefixes already obtained via DHCPv6 are unaffected.</li>
<li>
If the host has already received delegated prefix(es) from one or more
servers, then any time a prefix is added to or removed from the list, the host MUST
consider this to be a change in configuration information as
described in <xref target="RFC8415" section="18.2.12"/>, and it MUST perform
a REBIND, unless it is going to stop the DHCPv6 client because the list became empty.
This is in addition to performing a REBIND in the other cases required by that
section. Issuing a REBIND allows the host to obtain new prefixes if necessary, e.g.,
when the network is being renumbered. It also refreshes state related to the
delegated prefix(es).
</li>
</ul>
<t>
When a host requests a prefix via DHCPv6-PD, it MUST use the prefix length hint <xref target="RFC8415" section="18.2.4"/> to request a prefix that is short enough to form addresses via SLAAC.</t>

<t>In order to achieve the scalability benefits of using DHCPv6-PD, the host SHOULD prefer
to form addresses from the delegated prefix instead of using individual addresses in the
on-link prefix(es). Therefore, when the host requests a prefix using DHCPv6-PD, the host
SHOULD NOT use SLAAC to obtain IPv6 addresses from PIOs with the P and A bits set.
Similarly, if all PIOs processed by the host have the P bit set, the host SHOULD NOT request individual IPv6 addresses from DHCPv6, i.e., it SHOULD NOT include any IA_NA options in SOLICIT messages.
The host MAY continue to use addresses that are already configured.
</t>

<t>If the host does not obtain any suitable prefixes via DHCPv6-PD that are suitable for SLAAC, it MAY choose to disable further processing of the P flag on that interface, allowing the host to fall back to other address assignment mechanisms, such as forming addresses via SLAAC (if the PIO has the A flag set to 1) and/or requesting individual addresses via DHCPv6.</t>
   </section>

<section anchor="received">
<name>
Using Delegated Prefix(es)
</name>

	<t>
		If the delegated prefix is too long to be used for SLAAC, the host MUST ignore it.
	If the prefix is shorter than required for SLAAC, the host SHOULD accept it, allocate one or more longer prefix suitable for SLAAC and use the prefixes as described below.
	</t>
<t>
For every accepted prefix:
</t>

<ul>
<li>
The host MAY form as many IPv6 addresses from the prefix as it chooses.
</li>
<li>
The host MAY use the prefix to provide IPv6 addresses to internal components such as virtual machines or containers.
</li>
<li>
The host MAY use the prefix to allow devices directly connected to it to obtain IPv6 addresses, e.g., by routing traffic for that prefix to the interface and sending a Router Advertisement containing the prefix on the interface. If the host does so, and it has has formed addresses from the prefix, then it MUST act as though the addresses were assigned to that interface for the purposes of Neighbour Discovery and Duplicate Address Detection.
</li>
</ul>

<t>The host MUST NOT forward packets with destination addresses within a delegated prefix to the interface that it obtained the prefix on, as this will cause a routing loop. This problem will not occur if the host has assigned the prefix to a downstream interface. If the host has not assigned the prefix to a downstream interface, then one way to prevent this problem this is to add to its routing table a high-metric discard route for the delegated prefix. Similarly, the host MUST NOT send packets with destination addresses in the delegated prefix to the interface that it obtained the prefix on.</t>
	
</section>

<section anchor="p0">
<name>Absence of PIOs with P bit set</name>
<t>
The P bit is purely a positive indicator, telling nodes that DHCPv6
Prefix Delegation is available and the network prefers that nodes use it,
even if they do not have any other reason to run a Prefix Delegation client.
The absence of any PIOs with the P bit does not carry any kind of signal to
the opposite, and MUST NOT be processed to mean that DHCPv6-PD is absent. In
particular, nodes that run DHCPv6-PD due to explicit configuration or by default
(e.g., to extend the network) MUST NOT disable DHCPv6-PD on the absence of PIOs
with the P bit set. A very common example of this are CE routers as described
by <xref target="RFC7084"/>.
</t>
</section>

<section anchor="onlink">
<name>On-link Communication</name>
<t>
When the network delegates unique prefixes to clients, each client will consider other client's destination addresses to be off-link, because those addresses are from the delegated prefixes and are not within any on-link prefix. When a client sends traffic to another client, packets will initially be sent to the default router. The router may respond with an ICMPv6 redirect message (Section 4.5 of [RFC4861]). If the client receives and accepts the redirect, then traffic can flow directly from device to device. Therefore, hosts supporting the P flag SHOULD process redirects unless configured otherwise.
</t>
</section>

<section anchor="addrselect">
<name>Source Address Selection</name>
<t>
For the purpose of source address selection <xref target="RFC6724"/>, if the host forms addresses from a delegated prefix, it SHOULD treat those addresses as if they were assigned to the interface on which the prefix was received. This includes placing them in the candidate set, and associating them with the outgoing interface when implementing rule 5.
</t>
</section>

</section>

<section anchor="mhoming">
<name>
Multihoming
</name>

<t>
In multi-prefix multihoming, the host generally needs to associate the prefix with the router that advertised it (see for example, <xref target="RFC6724"/> Rule 5.5). If the host supports Rule 5.5, then it SHOULD associate each prefix with the link-local address of the DHCPv6 relay from which it received the REPLY packet.
When receiving multiple REPLYs carrying the same prefix from distinct
link-local addresses, the host SHOULD associate that prefix with all of these
addresses.  This can commonly happen in networks with redundant routers and
DHCPv6 relays.


</t>

</section>

<section anchor="rfcchanges">
<name>
Modifications to RFC-Mandated Behavior 
</name>

<section>
<name>
Changes to RFC4862
</name>
<t>
This document makes the following changes to Section 5.5.3 of <xref target="RFC4862"/>:
</t>


<t>
OLD TEXT
</t>
<t>
===
</t>

<t>

For each Prefix-Information option in the Router Advertisement:
</t>

<t>

    a)  If the Autonomous flag is not set, silently ignore the Prefix
      Information option.
</t>

<t>
===
</t>
<t>
NEW TEXT:
	Insert the following text after "For each Prefix-Information option in the Router Advertisement:" but before "If the Autonomous flag is not set, silently ignore the Prefix Information option.":
</t>
<t>
===
</t>
<t>
a) If the P flag is set, the node SHOULD treat the Autonomous flag as if it was unset, and use prefix delegation to obtain addresses as described in draft-ietf-6man-pio-pflag.
</t>
<t>
===
</t>

</section>


</section>

    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
<t>
	The mechanism described in this document relies on the information provided in the Router Advertisement and therefore shares the same security model as SLAAC.
	If the network doesn't implement RA Guard <xref target="RFC6105"/>, an attacker might send RAs containing the PIO used by the network, set the P flag to 1 and force hosts to ignore the A flag. 
	In the absence of DHCPv6-PD infrastructure, hosts would either obtain no IPv6 addresses or, if they fall back to other IPv6 address assignment mechanisms such as SLAAC and IA_NA, would experience delays in obtaining IPv6 addresses. If the network does not support DHCPv6-Shield <xref target="RFC7610"/>, the attacker could also run a rogue DHCPv6 server, providing the host with invalid prefixes or other invalid configuration information.
</t>
	    <t>
		    The attacker might force hosts to oscillate between DHCPv6-PD and PIO-based SLAAC by sending the same set of PIOs with and then w/o P flag set.
		    That would cause the clients to issue REBIND requests, increasing the load on the DHCP infrastructure. 
		    However Section 14.1 of <xref target="RFC8415"/> requires that DHCPv6-PD clients rate limit transmitted DHCPv6 messages.
</t>
		    
	    <t>
		    It should be noted that if the network allows rogue RAs to be sent, the attacker would be able to disrupt hosts connectivity anyway, so this document doesn't introduce any fundamentally new security considerations.
	    </t>
        <t>
            Security considerations inherent to the PD-per-device model are documented in Section 15 of <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/>.
        </t>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
<t>
The privacy implications of implementing the P flag and using DHCPv6-PD to assign prefixes to hosts are similar to privacy implications of using DHCPv6 for assigning individual addresses. 
If the DHCPv6 infrastructure assigns the same prefix to the same client, then an observer might be able to identify clients based on the highest 64 bits of the client's address. Those implications and recommended countermeasures are discussed in Section 13 of <xref target="I-D.ietf-v6ops-dhcp-pd-per-device"/>.</t>
      <t>
        Implementing the P flag support on a host / receiving side enables DHCPv6 on that host.
Sending DHCPv6 packets  may reveal some minor additional information about the host,
        most prominently the hostname. This is not a new concern and would apply for any network which uses DHCPv6 and sets 'M' flag in Router Advertisements.
      </t>
      <t>
        No privacy considerations result from supporting the P flag on the sender side.
      </t>
    </section>
    
    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <t>This memo requests that IANA allocate bit 3 from the "IPv6 Neighbor
        Discovery Prefix Information Option Flags" registry created by
        <xref target="RFC8425"/> for use as the P flag as described in this
        document.  The following entry should be appended:</t>
      <table>
        <thead>
          <tr><th>PIO Option Bit</th><th>Description</th><th>Reference</th></tr>
        </thead>
        <tbody>
          <tr><td>3</td><td>P - DHCPv6-PD preferred flag</td><td>[THIS DOCUMENT]</td></tr>
        </tbody>
      </table>
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4861.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4862.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6724.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8415.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8425.xml"/>
        <!-- The recommended and simplest way to include a well known reference -->
        
      </references>
 
      <references>
	      <name>Informative References</name>
	      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6105.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-v6ops-dhcp-pd-per-device.xml"/>
	      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6275.xml"/>
	      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7084.xml"/>
	      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7039.xml"/>
	      <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7610.xml"/>
      </references>
    </references>
    
    <section anchor="Acknowledgements" numbered="false">
      <name>Acknowledgements</name>
<t>
Thanks to Nick Buraglio, Brian Carpenter, Tim Chown, David Farmer, Fernando Gont, Suresh Krishnan, Ted Lemon, Andrew McGregor, Tomek Mrugalski, Michael Richardson, Ole Trøan, Timothy Winters for the discussions, the input and all contributions.
</t>
    </section>
    
 </back>
</rfc>
