<?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="bcp"
  docName="draft-linkova-v6ops-ipmaclimi-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
  <front>
    <title abbrev="MultAddrr">Minimizing Damage of Limiting Number of IPv6 Addresses per Host</title>

    <seriesInfo name="Internet-Draft" value="draft-linkova-v6ops-ipmaclim"/>
   
    <author fullname="Jen Linkova" initials="J" role="editor" 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>
   
    <date year="2022"/>
    <area>OPS Area</area>
    <workgroup>v6ops Working Group</workgroup>
    <keyword>IPv6</keyword>
    <keyword>SLAAC</keyword>
    <abstract>
      <t>This document provides recommendations to network infrastructure vendors on how to deal with multiple IPv6 addresses per host.</t>
    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
      <t>One of the fundamental differences between IPv4 and IPv6 is that an IPv6 host can, and almost always does have multiple IPv6 addresses.
	      RFC7934 discusses this aspect and explicitly states that IPv6 deployments SHOULD NOT limit number of IPv6 addresses a host can have.
      RFC7934 is mostly focuses on various methods of address assignment and how those methods should provide multiple addresses per host.
      However network devices, especially wireless ones performing Neighbor Discovery proxy, often have hardcoded limits on how many IPv6 addresses are allowed per a single MAC.
      When that limit is exceeded, traffic to/from the affected IPv6 addresses is blocked.
      Such failure mode is rather hard to diagnoze (as IPv6 addresses on a device may obtain and lose connectivity randomly) and leads to poor user experience.
      This document provides recommendations to network infrastructure device vendors on how to deal with multiple IPv6 addresses per device.  
	      </t>
      
      <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>
    
    <section>
	    <name>Impact of Limiting Number of IPv6 Addresses per Host</name>
	    <t>
		    The most common scenario of network-imposed limitations is Neighbor Discovery (ND) proxy. Many enterprise-scale wireless solutions implement ND proxy to reduce amount of broadcast and multicast downstream (AP to clients) traffic.
		    To perform ND proxy a device usually maintains a table, containing IPv6 and MAC addresses of connected clients. 
		    At least some implementations have hardcoded limits on how many IPv6 addresses per a single MAC such a table can contain.
		    When the limit is exceeded the behaviour is implementation-dependent.
		    Some vendors just fail to install N+1 address to the table. Other delete the oldest entry for this MAC and replace it with the new address.
		    In any case the affected addresses lose network connectivity.
		    The problem is exacerbated by the following:
	    </t>
	    <ul>
		    <li>
		    For the given set of device IPv6 addresses the affected subset may vary over time (depending on what addresses have been used to send traffic recently), which drastically complicates the troubleshooting.
		    </li>
		    <li>
			    The host and applications do not receive any explicit signals, the traffic is just blackholed.
		    </li>
		    <li>
		    Previously working address might become affected if another IPv6 address is assigned to the host.
		    In that case existing traffic flows can be interrupted and even on a dual-stack network Happy Eyeballs would not be able to mitigate the issue, as the failure occurs too late for IPv4 fallback.
		    </li>
	    </ul>
	    <t>
		    As internal implementation details might require a vendor to limit the number of IPv6 addresses per host, it's crucial to provide some recommendations on how to minimize the negative impact of imposing such a limit, especially as virtualiztion on endpoints and IPv6-only WiFi networks are gaining momentum.
	    </t>
    </section>   
    <section>
    <name>Recommendations on Handling Multiple IPv6 Addresses per Host</name>
    <t>
	    If a network equipment manufacturer deems it necessary to impose any limit to a number of IPv6 addresses per host (or MAC address):
    </t>
    <ul>
	    <li>
		    The limit SHOULD be configurable.
	    </li>
	    <li>
		    The default value MUST be at least 20.
	    </li>
	    <li>
		    If the limit is exceeded, the device SHOULD log an error message containing the affected IPv6 address and device identificator (MAC address).
	    </li>
	    <li>
		    If the limit is exceeded, the device SHOULD attempt to minimize the disruptions to existing flows, for example use Least-Recently-Used (LRU) algorithm to remove the oldest entry from the list of addresses.
	    </li>
    </ul>
    </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 includes no request to IANA.</t>
    </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>TBA - I guess there is a risk of a host to create a lot of addresses and exhaust device memory.</t>
    </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.8174.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7934.xml"/>
        <!-- The recommended and simplest way to include a well known reference -->
        
      </references>
 
      <references>
        <name>Informative References</name>
      </references>
    </references>
    
    <section anchor="Acknowledgements" numbered="false">
      <!-- [REPLACE/DELETE] an Acknowledgements section is optional -->
      <name>Acknowledgements</name>
      <t> 
	      TBA
        </t>
    </section>
    
    <section anchor="Contributors" numbered="false">
      <!-- [REPLACE/DELETE] a Contributors section is optional -->
      <name>Contributors</name>
      <t>Thanks to Lorenzo Colitti for the discussions, the input and all contribution.</t>
    </section>
    
 </back>
</rfc>
