<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiesel-v6ops-ipv6-app-testing-00" category="bcp" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="ipv6-app-testing">Testing Applications' IPv6 Support</title>
    <seriesInfo name="Internet-Draft" value="draft-tiesel-v6ops-ipv6-app-testing-00"/>
    <author fullname="Philipp S. Tiesel">
      <organization>SAP SE</organization>
      <address>
        <email>philipp@tiesel.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="25"/>
    <area>General</area>
    <workgroup>v6ops Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 55?>

<t>This document provides guidance for application developers and software as a service providers on how to approach IPv6 testing in Dual-Stack (IPv4+IPv6), and IPv6-only scenarios, including "true IPv6-only" scenarios.
It discusses common misconceptions about the degree to which operating systems and libraries can abstract IPv6 issues away
and explains common regressions to avoid when deploying IPv6 support.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    IPv6 Operations Working Group mailing list (v6ops@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/v6ops/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/philsbln/ipv6-app-testing"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>For the last 20 years, enabling applications for IPv6 has focused on coexistence with IPv4 and allowing traffic to shift towards IPv6 without breaking IPv4 operation.
With the US mandate to move all governmental agencies to "IPv6-only" <xref target="M-21-07"/>, this target for IPv6 support changed to being fully functional in the absence of IPv4 and transition technologies providing connectivity to the IPv4 Internet.
Therefore, today's applications are expected to function regardless of whether they are used in an IPv4-only environment, a Dual-Stack environment, or an IPv6-only environment, with or without connectivity to the IPv4 Internet. To achieve this, applications need to be verified against all these scenarios.</t>
      <t>While the availability of IPv6 support in applications has a considerable impact on the success of IPv6,
there exists no documented best current practices how to do so.
Testing IPv6 compliance of network gear and operating systems has been documented extensively.
While the IETF does not define compliance tests, best current practice exists for the behavior of general IPv6 nodes <xref target="RFC8405"/> and Customer Edge (CE) routers <xref target="I-D.draft-winters-v6ops-rfc7084bis"/>.</t>
      <t>To fill that gap, this document provides guidance for application developers and cloud application providers on how to approach IPv6 testing.
It described which scenarios they should consider validating against, and which common regressions to avoid when adding IPv6 support.
While many application developers assume that the network abstractions of the operating system (OS), communication libraries, and application frameworks will handle the transition towards IPv6 transparently, leaky abstractions within these frameworks will make it difficult for an application developer to write address family-independent code for features such as allow/deny lists and logging.
In addition to that challenge, modern cloud applications are typically composed of hundreds to thousands of micro- and macro-services, forming a complex distributed system that requires intricate communication and orchestration infrastructure to operate.
Enabling these applications to communicate over IPv6 requires careful analysis of data flows within all services and proper IPv6 support in all components that may require IPv6 traffic, as well as IPv6 addresses as metadata.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <section anchor="requirements-language">
        <name>Requirements Language</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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="base-scenarios">
        <name>Base Scenarios</name>
        <t>Within this document, we define the following "base scenarios" in which applications ought to be verified for availability and functional correctness:</t>
        <t>IPv4-only:
A node or application that has native connectivity towards the IPv4 Internet and no connectivity towards the IPv6-only Internet.</t>
        <dl>
          <dt>Dual-Stack:</dt>
          <dd>
            <t>A node or application that has native connectivity towards the IPv4 as well as the IPv6 Internet.</t>
          </dd>
          <dt>IPv6-only with NAT64:</dt>
          <dd>
            <t>A node or application that has native connectivity towards the IPv6 Internet and connectivity towards the IPv4 Internet using a transition technology like NAT64.</t>
          </dd>
          <dt>True IPv6-only:</dt>
          <dd>
            <t>A node or application that has native connectivity towards the IPv6 Internet and no connectivity towards the IPv4-only Internet.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="objectives">
      <name>Testing Objectives</name>
      <t>As a basic principle, IPv6 application testing should always be derived from functional and integration testing.
Therefore, the goal is to verify that the expected behavior is consistent across all connectivity scenarios,
i.e., the application functions correctly in IPv4-only, Dual-Stack, IPv6-only with NAT64 and True IPv6-only settings.
The following sections provide guidance on which connectivity scenarios to include in a testing campaign and how to approach testing complex cloud applications.</t>
      <section anchor="scenarios">
        <name>Connectivity Scenarios</name>
        <t><xref target="scn_combinations"/> lists the combinations of connectivity scenarios that application testing should generally consider.
Note, while the involved parties are listed here as "client" and "server" to reflect the most common case, the combinations can be used the same way when considering peer-to-peer applications, while NAT64 becomes replaceable with other network functions like TURN offering translation capabilities.</t>
        <t>The first five scenarios marked as <em>base</em> should cover all major code paths and fallback conditions.
These include Dual-Stack clients combined with IPv4-only and a True IPv6-only server, to test wither the additional address family confused the client.
We also include then cases with Dual-Stack Server and Single-Stack clients, to test whether a single address family at client side works as anticipated and look at the transition case using NAT64.
We have no special scenarios for 464XLAT <xref target="RFC6877"/> and IPv6-Mostly <xref target="I-D.draft-ietf-v6ops-6mops"/>, as these architectures are from then client side indistinguishable from the Dual-Stack (464XLAT or IPv6-Mostly with CLAT) or IPv6-only with NAT64 (IPv6-Mostly without CLAT).</t>
        <t>For the IPv6-only datacenter case, where servers may be exposed to the IPv4-only Internet using NAT64, it is also advisable to consider the case marked as IPv6-only-DC in <xref target="scn_combinations"/>.</t>
        <t>The other combinations are unlikely to exhibit additional problems for client-server-based applications and therefore are marked as extended in <xref target="scn_combinations"/>.
For peer-to-peer applications and applications with complex connection handling like using STUN <xref target="RFC5389"/> or TURN <xref target="RFC5766"/>, skipping these scenarios is strongly discouraged.
In case of TURN, it is also recommended to test with and without TURN relay in the path, essentially doubling the number or scenarios.</t>
        <table anchor="scn_combinations">
          <name>Scenario combinations to consider for IPv6 testing</name>
          <thead>
            <tr>
              <th align="left">Client</th>
              <th align="left">Server</th>
              <th align="center">Verdict</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">True IPv6-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv6-only with NAT64</td>
              <td align="center">IPv6-only-DC</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">Dual-Stack</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv4-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="testing-complex-cloud-applications-and-applying-test-cases">
        <name>Testing Complex Cloud Applications and Applying Test Cases</name>
        <t>When testing complex applications, especially cloud applications, they typically involve countless data flows.
For some of these, the application may be considered as server, while being a client in others.
Therefore, test cases need to cover each data flow in all relevant scenarios.</t>
        <t>As functional and integration tests are often defined as end-to-end test cases,
they often involve several components, e.g., micro-services, load-balancers, application gateways, logging, authentication, and authorization services, which use IP-based protocols between the components.
Therefore, an end-to-end test case breaks down to a series of flows between components, and for each of these flows,
we need to determine whether we need to apply the connectivity scenarios from <xref target="scn_combinations"/> to it,
of whether the connectivity scenarios are only controlled by the deployment of the application.</t>
        <t>For external flows, i.e., flows outside the developers' control, usually all base scenarios from <xref target="scenarios"/> need to be accounted for.
If one side of the flow is under administrative control, the number of scenario combinations can still be limited:
For example, a cloud software provider choosing to deploy Dual-Stack endpoints can skip all non-Dual-Stack cases on the respective side of the communication.
For internal flows, the relevant scenarios only depend on the applications' architecture, and only scenarios planned in the deployment need to be considered.
 From a networking perspective, flows between components are typically independent. There is no need to run the Cartesian product of scenarios x communications as long as all relevant scenarios for a given flow are tested.</t>
        <t>In addition to the data flows, an implementation may include metadata about the data flow when communicating with backend systems, e.g., for logging or authorization purposes.
While the flows towards these backend systems themselves may be safe to ignore as outlined above,
the functional correctness of the backend systems for all kinds of IP address need to be verified as part of the test series.
Ignoring IP addresses as data in the testing may result in malfunctions, like always denying access over IPv6, or security issues, like not logging access from IPv6 clients.</t>
      </section>
      <section anchor="special-considerations-for-web-based-applications">
        <name>Special considerations for Web-based Applications</name>
        <t>Web-based applications usually load resources from multiple parties, including CDNs and analytic tools, involving data flows to all these parties.
When facing the requirement to support True IPv6-only users, being unable to load some resources due to missing/defective IPv6 support at the respective parties can have any effect from missing analytics insights or ad revenue to severe functional defects rendering the application unusable.
When testing such applications, it is not sufficient to only focus on the initial/main interactions,
but it is necessary to consider all resources and parties providing them.
As Web browsers load these resources dynamically and third-party resources may themselves may request resources from more parties, this kind of testing usually requires an instrumented Web browser,
e.g., using <xref target="Selenium"/>.</t>
      </section>
    </section>
    <section anchor="testing-strategies">
      <name>Testing Strategies</name>
      <t>Naïve IPv6 testing, based on end-to-end functional tests as outlined in <xref target="objectives"/>, would require running a set of functional tests in various connectivity scenarios.
In certain environments, setting up test cases for all scenarios can become forbiddingly expensive,
especially for complex cloud applications, application platforms, or when dealing with corporate IT environments.
While in today's environment getting Dual-Stack connectivity is possible in most cases,</t>
      <t>In this section, we give recommendations how to set up scenarios defined in <xref target="scenarios"/> and
present strategies to meet the relevant testing objective by modifying the client or using Dual-Stack clients and servers to conclude the results for other scenario combinations,
e.g., by tracing whether the right address family is used.</t>
      <section anchor="true-ipv6-only-clients">
        <name>True IPv6-only Clients</name>
        <t>This is the most natural way to test whether True IPv6-only clients behave correctly.
The client device is either placed in a network without IPv4 connectivity or the IPv4 stack is disabled on the device while it is in a Dual-Stack network.
While most desktop operating systems allow disabling IPv4, mobile operating systems, such as Android and iOS, do not.
For mobiles operating systems, a True IPv6-only environment is needed.</t>
        <t>In both cases, it has to be ensured that there is no way to access IPv4-only resources.
In particular, fallback to NAT64 must be prevented by disabling CLAT <xref target="CLAT"/>,
making sure DNS resolution does not perform DNS64 address synthesis <xref target="RFC6147"/>
and blocking the well-known NAT64 prefix <xref target="RFC6052"/> for these clients.
In addition, VPN services including privacy services like <xref target="iCloud-Private-Relay"/> need to be disabled as they can provide connectivity towards the IPv4 Internet.</t>
        <t>A note on the applicability of disabling IPv4:
Before disabling IPv4 make sure the environment supports IPv6-only operation.
Many desktop virtualization environments become unusable because IPv4 is needed to access and manage the virtual machines.
Some corporate environments may render the machines unusable as they require IPv4 connectivity for sign-on.</t>
      </section>
      <section anchor="ipv6-only-servers">
        <name>IPv6-only Servers</name>
        <t>IPv6-only servers are a good option when setting up a True IPv6-only client environment is infeasible and
clients are know to only contact a single server or a small number of servers under the testers' control.
Even if setting up a True IPv6-only server environment is infeasible,
most testing is also achievable by setting up a dedicated DNS name only containing an AAAA record pointing to the IPv6 addresses of an otherwise Dual-Stack server.</t>
      </section>
      <section anchor="client-based-tracing">
        <name>Client-based tracing</name>
        <t>If we can't limit the available address families, we can still trace and verify whether the address family desired for the scenario is used.</t>
        <t>Client-based tracing is especially useful when Dual-Stack servers and clients are available and a conclusion for the True IPv6-only case is desired.
By using the clients' logging/tracing/debugging functionality, the tester can verify that the actual data flows happen over IPv6, which is preferred by most network abstractions. If the client allows changing the preference between IPv6 and IPv4, IPv4-only testing is also possible.</t>
        <t>The most relevant case for this strategy is testing Web applications.
By examining the Web browsers' performance log or using a plugin like <xref target="IPvFoo"/> that visualizes connectivity information, the tester can determine whether all resources are available using IPv6.</t>
      </section>
      <section anchor="server-based-tracing">
        <name>Server-based tracing</name>
        <t>Analogue to tracing on the client side, it is also possible to look at the protocols used on the server side.
While this is functionally equivalent for protocols where clients only communicate to a single server,
this approach is not feasible for Web-based applications where a client usually needs flows towards many servers, where client or network based tracing are the only feasible alternatives to testing with an True IPv6-only client.</t>
      </section>
      <section anchor="network-based-tracing">
        <name>Network-based tracing</name>
        <t>If the communication pattern of an application is known well enough, a packet tracer as <xref target="Wireshark"/> allows to verify that an application uses IPv6 for all flows in a Dual-Stack environment.
If this can be verified, failures in True IPv6-only environments are unlikely.</t>
        <t>While this is the least invasive method of testing True IPv6 scenarios in a Dual-Stack setup, it is the most error-prone as it requires the tester to fully understand the network flows of the application and requires the skills to interpret the output of a packet tracer.</t>
      </section>
    </section>
    <section anchor="failures">
      <name>Common Sources of IPv6 Related Failures and Misbehavior</name>
      <t>In this section, we discuss special failure modes that can cause unexpected application behavior that is hard to debug.
While some of these cases can be automatically mitigated, especially through generalizing the concept of Happy Eyeballs <xref target="RFC8305"/>, others may not.
In cases that developers choose not to mitigate erroneous application behavior, users and operators should be supported in the resolution by exposing specific and detailed error or debug messages.</t>
      <section anchor="enable-ipv6-feature-gates">
        <name>Enable IPv6 Feature Gates</name>
        <t>Some applications completely ignore IPv6 unless explicitly configured to enable IPv6.
This adds another class of user or configuration errors, like deploying an application without enabled IPv6 support in an IPv6-only environment.
As these feature gates are often buried deeply in the documentation and are often vendor, product, or component specific, every component needs to be checked to determine whether IPv6 support needs extra configuration.</t>
      </section>
      <section anchor="destination-address-selection-preference-and-address-filtering">
        <name>Destination Address Selection Preference and Address Filtering</name>
        <t>The destination address selection algorithm in <xref target="RFC6724"/> filters unavailable address families (Rule 1) and de-prioritizes non-matching address families (Rule 2)
and clearly prioritizes IPv6 GUA addresses over IPv4 addresses.
While most operating systems and some alternative resolver libraries, such as <xref target="C-ARES"/>, implement <xref target="RFC6724"/> or its predecessor <xref target="RFC3484"/> correctly,
there are a number of notable and widely used implementations that implement something else, causing anything from unexpected behavior to hard-to-debug errors.</t>
        <ul spacing="normal">
          <li>
            <t>Most JAVA runtimes do the opposite and prefer IPv4 destinations over IPv6.
To prefer IPv6 addresses over IPv4, one needs to set the system property <tt>java.net.preferIPv6Addresses=true</tt>.</t>
          </li>
          <li>
            <t>Some applications only use the first address candidate from the <tt>getaddrinfo()</tt> and fail if the connection attempt to that one fails.</t>
          </li>
          <li>
            <t>Applications composed of services built on different programming languages or runtimes may behave inconsistently with regard to choosing destination addresses.</t>
          </li>
          <li>
            <t>NGINX has its own user DNS resolver without address filtering; thus, adding a <em>AAAA</em> record to a backend can render that backend unusable.
After having resolved a <em>AAAA</em> record, it is trying to open an IPv6 socket, even when the IPv6 stack is disabled.
As socket creation failure is not expected, an internal server error is sent back to the client.</t>
          </li>
        </ul>
      </section>
      <section anchor="input-validation-and-output-rendering">
        <name>Input Validation and Output Rendering</name>
        <t>While most libraries and application frameworks have decent IPv6 support,
there often is still application logic checking whether user input is a valid IPv4 address or rendering output under the assumption that an address is always an IPv4 address,
preventing to take advantage of the IPv6 support by the underlying components.</t>
      </section>
      <section anchor="misbehaving-middle-boxes">
        <name>Misbehaving Middle-Boxes</name>
        <t>In practice, many IPv6-related regressions uncovered during testing turn out to be caused by hidden components outside of the application developers' control.
Middle-Boxes, e.g., firewalls, virus scanners, and intrusion detection systems, can break end-to-end tests in surprising ways, like terminating TLS sessions over IPv6 with certain extensions in the <em>TLS client hello</em> while correctly passing the same flow over IPv4.</t>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>Lab testing of applications for IPv6 compliance should always have the next step in mind: Deploying the application and providing the users with decent IPv6 support.
Therefore, end-to-end tests, especially of cloud applications, should also keep deployment steps, prerequisites, and risks in mind.
This section discusses some issues to keep in mind when planning and executing IPv6 testing.</t>
      <section anchor="operational-scope-software-lifecycle">
        <name>Operational Scope &amp; Software Lifecycle</name>
        <t>Depending on the application and deployment model, the timing of deploying IPv6 support may be in control of the users' organization, the developers' organization, or neither of them.
Based on this setup, certain combinations of IPv6-enabled clients, servers, and infrastructure in between may or may not be excluded from consideration.
Therefore, it may be necessary to add test cases for old software versions with known and already fixed bugs against newly IPv6-enabled servers.
If regressions and service disruptions cannot be ruled out by the tests, a per-user or per-customer tenant opt-in/opt-out/roll-back scheme for the IPv6 enablement should be considered.</t>
      </section>
      <section anchor="allow-deny-lists">
        <name>Allow &amp; Deny Lists</name>
        <t>Application-level IP allow and deny lists pose a special challenge for deploying IPv6 in a cloud application.
As users may already have IPv6 connectivity, adding IPv6 support to the server may cause clients to use IPv6 immediately.
Having no allow list entry for the users' IPv6 addresses results in service disruptions.
Happy Eyeballs as defined in <xref target="RFC8305"/> does not solve the problem as allow list checks usually take place after the transport connection has already been established.</t>
        <t>To mitigate allow or deny lists causing service disruptions when enabling IPv6, support to include IPv6 addresses in allow and deny lists needs to be enabled way before rolling out IPv6 on the transport and communicated towards the users.
To further limit the probability of service disruptions, generalizing Happy Eyeballs to re-try using IPv4 after certain error conditions should be evaluated.</t>
      </section>
      <section anchor="component-and-service-reuse">
        <name>Component and Service Reuse</name>
        <t>If components or cloud services can be reused in other products, special care needs to be taken when planning IPv6 deployment.
The interaction contracts between the reusing parties and the service need to be checked
whether IPv6 enablement of the services also affects the flows of these.
Additional end-to-end tests, including the reusing parties, are recommended.
This is often a recursive process…</t>
      </section>
      <section anchor="ownership-of-software-components">
        <name>Ownership of Software Components</name>
        <t>Sometimes IPv6 enablement requires touching components that are not actively maintained anymore.
Be prepared for this and plan extra time or budget for updating or replacing these components.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The document itself has no specific security implications; thus, some of the issues discussed in <xref target="failures"/> have.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC6724">
          <front>
            <title>Default Address Selection for Internet Protocol Version 6 (IPv6)</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <author fullname="A. Matsumoto" initials="A." surname="Matsumoto"/>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <date month="September" year="2012"/>
            <abstract>
              <t>This document describes two algorithms, one for source address selection and one for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual-stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses -- depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice versa.</t>
              <t>Default address selection as defined in this specification applies to all IPv6 nodes, including both hosts and routers. This document obsoletes RFC 3484. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6724"/>
          <seriesInfo name="DOI" value="10.17487/RFC6724"/>
        </reference>
        <reference anchor="RFC3484">
          <front>
            <title>Default Address Selection for Internet Protocol version 6 (IPv6)</title>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <date month="February" year="2003"/>
            <abstract>
              <t>This document describes two algorithms, for source address selection and for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses - depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice-versa. All IPv6 nodes, including both hosts and routers, must implement default address selection as defined in this specification. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3484"/>
          <seriesInfo name="DOI" value="10.17487/RFC3484"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-winters-v6ops-rfc7084bis">
          <front>
            <title>Basic Requirements for IPv6 Customer Edge Routers</title>
            <author fullname="Gábor Lencse" initials="G." surname="Lencse">
              <organization>Széchenyi István University</organization>
            </author>
            <author fullname="Jordi Palet Martinez" initials="J. P." surname="Martinez">
              <organization>The IPv6 Company</organization>
            </author>
            <author fullname="Ben Patton" initials="" surname="Patton">
              <organization>University of New Hampshire, Interoperability Lab (UNH-IOL)</organization>
            </author>
            <author fullname="Timothy Winters" initials="T." surname="Winters">
              <organization>QA Cafe</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document specifies requirements for an IPv6 Customer Edge (CE)
   router.  Specifically, the current version of this document focuses
   on the basic provisioning of an IPv6 CE router and the provisioning
   of IPv6 hosts attached to it.  The document obsoletes RFC 7084.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-winters-v6ops-rfc7084bis-03"/>
        </reference>
        <reference anchor="I-D.draft-ietf-v6ops-6mops">
          <front>
            <title>IPv6-Mostly Networks: Deployment and Operations Considerations</title>
            <author fullname="Nick Buraglio" initials="N." surname="Buraglio">
              <organization>Energy Sciences Network</organization>
            </author>
            <author fullname="Ondřej Caletka" initials="O." surname="Caletka">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document discusses a deployment scenario called "an IPv6-Mostly
   network", when IPv6-only and IPv4-enabled endpoints coexist on the
   same network (network segment, VLAN, SSID etc).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-6mops-01"/>
        </reference>
        <reference anchor="CLAT">
          <front>
            <title>464XLAT Customer-side Translator (CLAT): Node Recommendations</title>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <author fullname="Tommy Jensen" initials="T." surname="Jensen">
         </author>
            <date day="6" month="July" year="2025"/>
            <abstract>
              <t>   464XLAT [RFC6877] defines an architecture for providing IPv4
   connectivity across an IPv6-only network.  The solution contains two
   key elements: provider-side translator (PLAT) and customer-side
   translator (CLAT).  This document complements [RFC6877] and updates
   [RFC8585] by providing recommendations for the node developers on
   enabling and disabling CLAT functions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-claton-05"/>
        </reference>
        <reference anchor="RFC8405">
          <front>
            <title>Shortest Path First (SPF) Back-Off Delay Algorithm for Link-State IGPs</title>
            <author fullname="B. Decraene" initials="B." surname="Decraene"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="H. Gredler" initials="H." surname="Gredler"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="P. Francois" initials="P." surname="Francois"/>
            <author fullname="C. Bowers" initials="C." surname="Bowers"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This document defines a standard algorithm to temporarily postpone or "back off" link-state IGP Shortest Path First (SPF) computations. This reduces the computational load and churn on IGP nodes when multiple temporally close network events trigger multiple SPF computations.</t>
              <t>Having one standard algorithm improves interoperability by reducing the probability and/or duration of transient forwarding loops during the IGP convergence when the IGP reacts to multiple temporally close IGP events.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8405"/>
          <seriesInfo name="DOI" value="10.17487/RFC8405"/>
        </reference>
        <reference anchor="M-21-07" target="https://www.whitehouse.gov/wp-content/uploads/2020/11/M-21-07.pdf">
          <front>
            <title>M-21-07 – Completing the Transition to Internet Protocol Version 6 (IPv6)</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="19"/>
          </front>
          <seriesInfo name="United States of America Office of Management and Budget" value="Memorandum for Heads of Executive Departments and Agencies"/>
        </reference>
        <reference anchor="iCloud-Private-Relay" target="https://developer.apple.com/videos/play/wwdc2021/10096/">
          <front>
            <title>Apple iCLoud Private Relay (WWDC2021)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IPvFoo" target="https://github.com/pmarks-net/ipvfoo">
          <front>
            <title>IPvFoo - a Chrome/Firefox extension that adds an icon to indicate whether the current page was fetched using IPv4 or IPv6.</title>
            <author initials="P." surname="Marks" fullname="Paul Marks">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Wireshark" target="https://www.wireshark.org/">
          <front>
            <title>Wireshark packet tracer</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="C-ARES" target="https://c-ares.org/">
          <front>
            <title>C-ARES - a modern DNS (stub) resolver library, written in C</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Selenium" target="https://www.selenium.dev/">
          <front>
            <title>Selenium WebDriver</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC6877">
          <front>
            <title>464XLAT: Combination of Stateful and Stateless Translation</title>
            <author fullname="M. Mawatari" initials="M." surname="Mawatari"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <author fullname="C. Byrne" initials="C." surname="Byrne"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document describes an architecture (464XLAT) for providing limited IPv4 connectivity across an IPv6-only network by combining existing and well-known stateful protocol translation (as described in RFC 6146) in the core and stateless protocol translation (as described in RFC 6145) at the edge. 464XLAT is a simple and scalable technique to quickly deploy limited IPv4 access service to IPv6-only edge networks without encapsulation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6877"/>
          <seriesInfo name="DOI" value="10.17487/RFC6877"/>
        </reference>
        <reference anchor="RFC5389">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs, and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution. This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t>
              <t>This document obsoletes RFC 3489. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5389"/>
          <seriesInfo name="DOI" value="10.17487/RFC5389"/>
        </reference>
        <reference anchor="RFC5766">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers). In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5766"/>
          <seriesInfo name="DOI" value="10.17487/RFC5766"/>
        </reference>
        <reference anchor="RFC6147">
          <front>
            <title>DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="A. Sullivan" initials="A." surname="Sullivan"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>DNS64 is a mechanism for synthesizing AAAA records from A records. DNS64 is used with an IPv6/IPv4 translator to enable client-server communication between an IPv6-only client and an IPv4-only server, without requiring any changes to either the IPv6 or the IPv4 node, for the class of applications that work through NATs. This document specifies DNS64, and provides suggestions on how it should be deployed in conjunction with IPv6/IPv4 translators. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6147"/>
          <seriesInfo name="DOI" value="10.17487/RFC6147"/>
        </reference>
        <reference anchor="RFC6052">
          <front>
            <title>IPv6 Addressing of IPv4/IPv6 Translators</title>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>This document discusses the algorithmic translation of an IPv6 address to a corresponding IPv4 address, and vice versa, using only statically configured information. It defines a well-known prefix for use in algorithmic translations, while allowing organizations to also use network-specific prefixes when appropriate. Algorithmic translation is used in IPv4/IPv6 translators, as well as other types of proxies and gateways (e.g., for DNS) used in IPv4/IPv6 scenarios. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6052"/>
          <seriesInfo name="DOI" value="10.17487/RFC6052"/>
        </reference>
        <reference anchor="RFC8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
      </references>
    </references>
    <?line 340?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAA5ag2gAA7Vc63LcyHX+j6focKu8WmdmKMpcSmZ8CUVKu0rpFpFa2bW1
tcYAPTMwMcAYDZAa06ryO+QF8it/8w7Jm/hJcr5zTjcamOHuJuXwh0Ti0n36
9Ll859KYTqdJW7SlPTUHV9a1RbU0Z5tNWWRpW9SV+9y8eHtzYi67zaZu2oMk
nc8be0MPF5ubk2m62UxbeesgyeusStc0UN6ki3baFtbZcnpzUm/cdPz09OHD
hGawy7rZnpp5tkmSYtOcmrbpXPvo4cNfPnyUpI1NT81XtrJNWia3dXO9bOpu
c2p4SPOBLoDar3AxubZbeiI/NS+q1jaVbacXoCJJXJtW+fdpWVdE2da6xK3T
pv3+T11NpJyaqk42xan5tq2ziXG0xMYuHP22XeOX75Ik7dpV3ZwmZpoY+ll0
ZSmrfLsqymKzMZczc8VL5ft1s0yr4s/MvFNzefbWXD7jG3adFuWp2chb/yzc
mRGhSVLVzZpeuLGnxIVq0f9lzIvpxUzYeVtgYU752Syyxw+fHM8LN3yqsO1C
HzlZ07+4e/7y7Op0/zNZmbZ1Rc+8e37+5Pjhl3j81fTR0fTh41Omuk2bpW1P
zaptabDDw9vb29ntqmjtqu6cnS3rm8PbzTSribaqPew2ZZ3m7vDRw0cPD4+O
DnWo2SZfyGgiaHrZ/O2v/2bO6/WmtCx27cqaqyatXAHmmbYOe2neNjVtUF2a
b4gFuHliHkAuv+BhnW2Im+CcEG3M+4pIzM1lSyLmTL0wZ2t6JkvNm8WiyCyu
vEqrdGnXRLYhATFPu5wX+squa6Ih79aGNsJ8bWk9ePzZR5t12BVzYTckQHjR
8ZtnS1tlND9PndOEpwbrnx4dTY9+SReL87Lu8unbprihm9N3tky3+5mb2xtb
1hvbzEhTSjvL6vXhTZHb2h1u6CVifp7R0EeHR6QgJ4cxS6GylqZ6SVMZncrw
VObBhw8X53gNzCKmPa/r/dMvi3bVzXnWDenItZsS6w9Jcxd1Hc8lY5ipSc35
qqnX9vB5QcpSfzT2I4kB70+7SomveQ4WmSKT7SyqHGbFmtuVpc1ueMezrmmw
CRvaDXObOrOwbbaizeschIImOyalYis0YyqCQvLPVP8nPlekzm9ntLFEeriq
upp2Zbjxgah1K/rjB0TcPzIjfR4wOrxMBGfXJJptk2a2gZpNz949u9w/ZjYl
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
AA==

-->

</rfc>
