<?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 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bctb-6man-rfc6296-bis-03" category="exp" submissionType="IETF" obsoletes="6296" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="RFC 6296bis">IPv6-to-IPv6 Network Prefix Translation</title>
    <seriesInfo name="Internet-Draft" value="draft-bctb-6man-rfc6296-bis-03"/>
    <author initials="M." surname="Cullen" fullname="Margaret Cullen">
      <organization>Painless Security</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>mrcullen42@gmail.com</email>
      </address>
    </author>
    <author initials="F." surname="Baker" fullname="Fred Baker">
      <organization>Unaffiliated</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>fredbaker.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="O." surname="Troan" fullname="Ole Troan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <country>Norway</country>
        </postal>
        <email>otroan@cisco.com</email>
      </address>
    </author>
    <author initials="N." surname="Buraglio" fullname="Nick Buraglio">
      <organization>Energy Sciences Network</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>buraglio@forwardingplane.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="24"/>
    <area>Int</area>
    <workgroup>6MAN</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<t>This document describes a stateless, transport-agnostic IPv6-to-IPv6
Network Prefix Translation (NPTv6) function that provides the
address-independence benefit associated with IPv4-to-IPv4 NAT
(NAPT44) and provides a 1:1 relationship between addresses in the
"inside" and "outside" prefixes, preserving end-to-end reachability
at the network layer.</t>
      <t>This document obsoletes RFC 6296.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/buraglio/rfc6296-bis"/>.</t>
    </note>
  </front>
  <middle>
    <?line 64?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes a stateless IPv6-to-IPv6 Network Prefix
Translation (NPTv6) function, designed to provide address
independence to the edge network.  It is transport-agnostic with
respect to transports that do not checksum the IP header, such as
SCTP, and to transports that use the TCP/UDP/DCCP (Datagram
Congestion Control Protocol) pseudo-header and checksum <xref target="RFC1071"/>.</t>
      <t>For reasons discussed in <xref target="RFC2993"/> and Section 5, the IETF does not
recommend the use of Network Address Translation technology for IPv6.
Where translation is implemented, however, this specification
provides a mechanism that has fewer architectural problems than
merely implementing a traditional stateful Network Address Translator
in an IPv6 environment.  It also provides a useful alternative to the
complexities and costs imposed by multihoming using provider-
independent addressing and the routing and network management issues
of overlaid ISP address space.  Some problems remain, however.  The
reader should consider the alternatives suggested in <xref target="RFC4864"/> and
the considerations of <xref target="RFC5902"/> for improved approaches.</t>
      <t>The stateless approach described in this document has several
ramifications:</t>
      <ul spacing="normal">
        <li>
          <t>Any security benefit that NAPT44 might offer is not present in
    NPTv6, necessitating the use of a firewall to obtain those
    benefits if desired.  An example of such a firewall is described
    in <xref target="RFC6092"/>.</t>
        </li>
        <li>
          <t>End-to-end reachability is preserved, although the address used
    "inside" the edge network differs from the address used "outside"
    the edge network.  This has implications for application referrals
    and other uses of Internet layer addresses.</t>
        </li>
        <li>
          <t>If there are multiple identically configured prefix translators
    between two networks, there is no need for them to exchange
    dynamic state, as there is no dynamic state -- the algorithmic
    translation will be identical across each of them.  The network
    can therefore asymmetrically route, load share, and fail-over
    among them without issue.</t>
        </li>
        <li>
          <t>Since translation is 1:1 at the network layer, there is no need to
    modify port numbers or other transport parameters.</t>
        </li>
        <li>
          <t>TCP sessions that authenticate peers using the TCP Authentication
    Option <xref target="RFC5925"/> cannot have their addresses translated, as the
    addresses are used in the calculation of the Message
    Authentication Code.  This consideration applies in general to any.</t>
        </li>
        <li>
          <t>Unilateral Self-Address Fixing (UNSAF) <xref target="RFC3424"/> Protocol, which
    the IAB recommends against the deployment of in an environment
    that changes Internet addresses.</t>
        </li>
        <li>
          <t>Applications using the Internet Key Exchange Protocol Version 2
    (IKEv2) <xref target="RFC7296"/> should, at least in theory, detect the presence
    of the translator; while no NAT traversal solution is required,
    <xref target="RFC7296"/> would require such sessions to use UDP.</t>
        </li>
      </ul>
      <section anchor="what-is-address-independence">
        <name>What is Address Independence?</name>
        <t>For the purposes of this document, IPv6 address independence consists
of the following set of properties:</t>
        <t>From the perspective of the edge network:</t>
        <ul spacing="normal">
          <li>
            <t>The IPv6 addresses used inside the local network (for
interfaces, access lists, and logs) do not need to be
renumbered if the global prefix(es) assigned for use by the
edge network are changed.</t>
          </li>
          <li>
            <t>The IPv6 addresses used inside the edge network (for
interfaces, access lists, and logs) or within other upstream
networks (such as when multihoming) do not need to be
renumbered when a site adds, drops, or changes upstream
networks.</t>
          </li>
          <li>
            <t>It is not necessary for an administration to convince an
upstream network to route its internal IPv6 prefixes or for it
to advertise prefixes derived from other upstream networks into
it.</t>
          </li>
          <li>
            <t>Unless it wants to optimize routing between multiple upstream
networks in the process of multihoming, there is no need for a
BGP exchange with the upstream network.</t>
          </li>
        </ul>
        <t>From the perspective of the upstream network:</t>
        <ul spacing="normal">
          <li>
            <t>IPv6 addresses used by the edge network are guaranteed to have
a provider-allocated prefix, eliminating the need and concern
for BCP 38 <xref target="RFC2827"/> ingress filtering and the advertisement of
customer-specific prefixes.</t>
          </li>
        </ul>
        <t>Thus, address independence has ramifications for the edge network,
networks it directly connects with (especially its upstream
networks), and the Internet as a whole.  The desire for address
independence has been a primary driver for IPv4 NAT deployment in
medium- to large-sized enterprise networks, including NAT deployments</t>
        <t>in enterprises that have plenty of IPv4 provider-independent address
space (from IPv4 "swamp space").  It has also been a driver for edge
networks to become members of Regional Internet Registry (RIR)
communities, seeking to obtain BGP Autonomous System Numbers and
provider-independent prefixes, and as a result has been one of the
drivers of the explosion of the IPv4 route table.  Service providers
have stated that the lack of address independence from their
customers has been a negative incentive to deployment, due to the
impact of customer routing expected in their networks.</t>
        <t>The Local Network Protection <xref target="RFC4864"/> document discusses a related
concept called "Address Autonomy" as a benefit of NAPT44.  <xref target="RFC4864"/>
indicates that address autonomy can be achieved by the simultaneous
use of global addresses on all nodes within a site that need external
connectivity and Unique Local Addresses (ULAs) <xref target="RFC4193"/> for all
internal communication.  However, this solution fails to meet the
requirement for address independence, because if an ISP renumbering
event occurs, all of the hosts, routers, DHCP servers, Access Control
Lists (ACLs), firewalls, and other internal systems that are
configured with global addresses from the ISP will need to be
renumbered before global connectivity is fully restored.</t>
        <t>The use of IPv6 provider-independent (PI) addresses has also been
suggested as a means to fulfill the address-independence requirement.
However, this solution requires that an enterprise qualify to receive
a PI assignment and persuade its ISP to install specific routes for
the enterprise's PI addresses.  There are a number of practical
issues with this approach, especially if there is a desire to route
to a number of geographically and topologically diverse sites, which
can sometimes involve coordinating with several ISPs to route
portions of a single PI prefix.  These problems have caused numerous
enterprises with plenty of IPv4 swamp space to choose to use IPv4 NAT
for part, or substantially all, of their internal network instead of
using their provider-independent address space.</t>
      </section>
      <section anchor="nptv6-applicability">
        <name>NPTv6 Applicability</name>
        <t>NPTv6 provides a simple and compelling solution to meet the address-
independence requirement in IPv6.  The address-independence benefit
stems directly from the translation function of the network prefix
translator.  To avoid as many of the issues associated with NAPT44 as
possible, NPTv6 is defined to include a two-way, checksum-neutral,
algorithmic translation function, and nothing else.</t>
        <t>The fact that NPTv6 does not map ports and is checksum-neutral avoids
the need for an NPTv6 Translator to rewrite transport layer headers.
This makes it feasible to deploy new or improved transport layer
protocols without upgrading NPTv6 Translators.  Similarly, since
NPTv6 does not rewrite transport layer headers, NPTv6 will not
interfere with encryption of the full IP payload in many cases.</t>
        <t>The default NPTv6 address-mapping mechanism is purely algorithmic, so
NPTv6 translators do not need to maintain per-node or per-connection
state, allowing deployment of more robust and adaptive networks than
can be deployed using NAPT44.  Since the default NPTv6 mapping can be
performed in either direction, it does not interfere with inbound
connection establishment, thus allowing internal nodes to participate
in direct Peer-to-Peer applications without the application layer
overhead one finds in many IPv4 Peer-to-Peer applications.</t>
        <t>Although NPTv6 compares favorably to NAPT44 in several ways, it does
not eliminate all of the architectural problems associated with IPv4
NAT, as described in <xref target="RFC2993"/>.  NPTv6 involves modifying IP headers
in transit, so it is not compatible with security mechanisms, such as
the IPsec Authentication Header, that provide integrity protection
for the IP header.  NPTv6 may interfere with the use of application
protocols that transmit IP addresses in the application-specific
portion of the IP datagram.  These applications currently require
Application Layer Gateways (ALGs) to work correctly through NAPT44
devices, and similar ALGs may be required for these applications to
work through NPTv6 Translators.  The use of separate internal and
external prefixes creates complexity for DNS deployment, due to the
desire for internal nodes to communicate with other internal nodes
using internal addresses, while external nodes need to obtain
external addresses to communicate with the same nodes.  This
frequently results in the deployment of "split DNS", which may add
complexity to network configuration.</t>
        <t>The choice of address within the edge network bears consideration.
One could use a ULA, which maximizes address independence.  That
could also be considered a misuse of the ULA; if the expectation is
that a ULA prevents access to a system from outside the range of the
ULA, NPTv6 overrides that.  On the other hand, the administration is
aware that it has made that choice and could deploy a second ULA for
the purpose of privacy if it desired; the only prefix that will be
translated is one that has an NPTv6 Translator configured to
translate to or from it.  Also, using any other global-scope address
format makes one either obtain a PI prefix or be at the mercy of the
agency from which it was allocated.</t>
        <t>There are significant technical impacts associated with the
deployment of any prefix translation mechanism, including NPTv6, and
we strongly encourage anyone who is considering the implementation or
deployment of NPTv6 to read <xref target="RFC4864"/> and <xref target="RFC5902"/>, and to carefully
consider the alternatives described in that document, some of which
may cause fewer problems than NPTv6.</t>
      </section>
      <section anchor="requirements-terminology">
        <name>Requirements Terminology</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>
    <section anchor="nptv6-overview">
      <name>NPTv6 Overview</name>
      <t>NPTv6 may be implemented in an IPv6 router to map one IPv6 address
   prefix to another IPv6 prefix as each IPv6 datagram transits the
   router.  A router that implements an NPTv6 prefix translation
   function is referred to as an NPTv6 Translator.</t>
      <section anchor="nptv6-the-simplest-case">
        <name>NPTv6: The Simplest Case</name>
        <t>In its simplest form, an NPTv6 Translator interconnects two network
links, one of which is an "internal" network link attached to a leaf
network within a single administrative domain and the other of which
is an "external" network with connectivity to the global Internet.
All of the hosts on the internal network will use addresses from a
single, locally routed prefix, and those addresses will be translated
to/from addresses in a globally routable prefix as IP datagrams
transit the NPTv6 Translator.  The lengths of these two prefixes will
be functionally the same; if they differ, the longer of the two will
limit the ability to use subnets in the shorter.</t>
        <artwork><![CDATA[
               External Network:  Prefix = 2001:db8:1::/48
                   --------------------------------------
                                     |
                                     |
                              +-------------+
                              |     NPTv6   |
                              |  Translator |
                              +-------------+
                                     |
                                     |
                   --------------------------------------
               Internal Network:  Prefix = fd01:203:405::/48

                       Figure 1: A Simple Translator
]]></artwork>
        <t>Figure 1 shows an NPTv6 Translator attached to two networks.  In this
example, the internal network uses IPv6 Unique Local Addresses (ULAs)
<xref target="RFC4193"/> to represent the internal IPv6 nodes, and the external
network uses globally routable IPv6 addresses to represent the same
nodes.</t>
        <t>When an NPTv6 Translator forwards datagrams in the "outbound"
direction, from the internal network to the external network, NPTv6
overwrites the IPv6 source prefix (in the IPv6 header) with a
corresponding external prefix.  When datagrams are forwarded in the
"inbound" direction, from the external network to the internal
network, the IPv6 destination prefix is overwritten with a
corresponding internal prefix.  Using the prefixes shown in the
diagram above, as an IP datagram passes through the NPTv6 Translator
in the outbound direction, the source prefix (fd01:203:405::/48)
will be overwritten with the external prefix (2001:db8:1::/48).
In an inbound datagram, the destination prefix (2001:db8:1::/48)
will be overwritten with the internal prefix (fd01:203:405::/48).
In both cases, it is the local IPv6 prefix that is overwritten; the
remote IPv6 prefix remains unchanged.  Nodes on the internal network
are said to be "behind" the NPTv6 Translator.</t>
        <t>2.2.  NPTv6 between Peer Networks</t>
        <t>NPTv6 can also be used between two private networks.  In these cases,
   both networks may use ULA prefixes, with each subnet in one network
   mapped into a corresponding subnet in the other network, and vice
   versa.  Or, each network may use ULA prefixes for internal addressing
   and global unicast addresses on the other network.</t>
        <artwork><![CDATA[
                  Internal Prefix = fd01:4444:5555::/48
                  --------------------------------------
                       V            |      External Prefix
                       V            |      2001:db8:6666::/48
                       V        +---------+      ^
                       V        |  NPTv6  |      ^
                       V        |  Device |      ^
                       V        +---------+      ^
              External Prefix       |            ^
              2001:db8:1::/48    |            ^
                  --------------------------------------
                  Internal Prefix = fd01:203:405::/48

               Figure 2: Flow of Information in Translation
]]></artwork>
      </section>
      <section anchor="nptv6-redundancy-and-load-sharing">
        <name>NPTv6 Redundancy and Load Sharing</name>
        <t>In some cases, more than one NPTv6 Translator may be attached to a
   network, as shown in Figure 3.  In such cases, NPTv6 Translators are
   configured with the same internal and external prefixes.  Since there
   is only one translation, even though there are multiple translators,
   they map only one external address (prefix and Interface Identifier
   (IID)) to the internal address.</t>
        <artwork><![CDATA[
               External Network:  Prefix = 2001:db8:1::/48
                   --------------------------------------
                          |                      |
                          |                      |
                   +-------------+        +-------------+
                   |  NPTv6      |        |  NPTv6      |
                   |  Translator |        |  Translator |
                   |   #1        |        |   #2        |
                   +-------------+        +-------------+
                          |                      |
                          |                      |
                   --------------------------------------
               Internal Network:  Prefix = fd01:203:405::/48

                      Figure 3: Parallel Translators
]]></artwork>
      </section>
      <section anchor="nptv6-multihoming">
        <name>NPTv6 Multihoming</name>
        <artwork><![CDATA[
            External Network #1:          External Network #2:
         Prefix = 2001:db8:1::/48    Prefix = 2001:db8:5555::/48
         ---------------------------    --------------------------
                         |                      |
                         |                      |
                  +-------------+        +-------------+
                  |  NPTv6      |        |  NPTv6      |
                  |  Translator |        |  Translator |
                  |   #1        |        |   #2        |
                  +-------------+        +-------------+
                         |                      |
                         |                      |
                  --------------------------------------
              Internal Network:  Prefix = fd01:203:405::/48

      Figure 4: Parallel Translators with Different Upstream Networks
]]></artwork>
        <t>When multihoming, NPTv6 Translators are attached to an internal
   network, as shown in Figure 4, but are connected to different
   external networks.  In such cases, NPTv6 Translators are configured
   with the same internal prefix but different external prefixes.  Since
   there are multiple translations, they map multiple external addresses
   (prefix and IID) to the common internal address.  A system within the
   edge network is unable to determine which external address it is
   using apart from services such as Session Traversal Utilities for NAT
   (STUN) <xref target="RFC8489"/>.</t>
        <t>Multihoming in this sense has one negative feature as compared with
   multihoming with a provider-independent address: when routes change
   between NPTv6 Translators, the translated prefix can change since the
   upstream network changes.  This causes sessions and referrals
   dependent on it to fail as well.  This is not expected to be a major
   issue, however, in networks where routing is generally stable.</t>
      </section>
      <section anchor="mapping-with-no-per-flow-state">
        <name>Mapping with No Per-Flow State</name>
        <t>When NPTv6 is used as described in this document, no per-node or per-
   flow state is maintained in the NPTv6 Translator.  Both inbound and
   outbound datagrams are translated algorithmically, using only
   information found in the IPv6 header.  Due to this property, NPTv6's
   two-way, algorithmic address mapping can support both outbound and
   inbound connection establishment without the need for maintenance of
   mapping state or for state-priming or rendezvous mechanisms.  This is
   a significant improvement over NAPT44 devices, but it also has
   significant security implications, which are described in Section 7.</t>
      </section>
      <section anchor="checksum-neutral-mapping">
        <name>Checksum-Neutral Mapping</name>
        <t>When a change is made to one of the IP header fields in the IPv6
   pseudo-header checksum (such as one of the IP addresses), the
   checksum field in the transport layer header may become invalid.
   Fortunately, an incremental change in the area covered by the
   Internet standard checksum <xref target="RFC1071"/> will result in a well-defined
   change to the checksum value <xref target="RFC1624"/>.  So, a checksum change caused
   by modifying part of the area covered by the checksum can be
   corrected by making a complementary change to a different 16-bit
   field covered by the same checksum.</t>
        <t>The NPTv6 mapping mechanisms described in this document are checksum-
   neutral, which means that they result in IP headers that will
   generate the same IPv6 pseudo-header checksum when the checksum is
   calculated using the standard Internet checksum algorithm <xref target="RFC1071"/>.
   Any changes that are made during translation of the IPv6 prefix are
   offset by changes to other parts of the IPv6 address.  This results
   in transport layers that use the Internet checksum (such as TCP and
   UDP) calculating the same IPv6 pseudo-header checksum for both the
   internal and external forms of the same datagram, which avoids the
   need for the NPTv6 Translator to modify those transport layer headers
   to correct the checksum value.</t>
        <t>The outgoing checksum correction is achieved by making a change to a
   16-bit section of the source address that is not used for routing in
   the external network.  Due to the nature of checksum arithmetic, when
   the corresponding correction is applied to the same bits of
   destination address of the inbound packet, the Destination Address
   (DA) is returned to the correct internal value.</t>
        <t>As noted in Section 4.2, this mapping results in an edge network
   using a /48 external prefix to be unable to use subnet 0xFFFF.</t>
      </section>
    </section>
    <section anchor="nptv6-algorithmic-specification">
      <name>NPTv6 Algorithmic Specification</name>
      <t>The <xref target="RFC4291"/> IPv6 Address is reproduced for clarity in Figure 5.</t>
      <artwork><![CDATA[
      0    15 16   31 32   47 48   63 64   79 80   95 96  111 112  127
     +-------+-------+-------+-------+-------+-------+-------+-------+
     |     Routing Prefix    | Subnet|   Interface Identifier (IID)  |
     +-------+-------+-------+-------+-------+-------+-------+-------+

            Figure 5: Enumeration of the IPv6 Address [RFC4291]
]]></artwork>
      <section anchor="nptv6-configuration-calculations">
        <name>NPTv6 Configuration Calculations</name>
        <t>When an NPTv6 Translation function is configured, it is configured
   with:</t>
        <ul spacing="normal">
          <li>
            <t>one or more "internal" interfaces with their "internal" routing
    domain prefixes, and</t>
          </li>
          <li>
            <t>one or more "external" interfaces with their "external" routing
    domain prefixes.  </t>
            <t>
In the simple case, there is one of each.  If a single router
 provides NPTv6 translation services between a multiplicity of domains
 (as might be true when multihoming), each internal/external pair must
 be thought of as a separate NPTv6 Translator from the perspective of
 this specification.  </t>
            <t>
When an NPTv6 Translator is configured, the translation function
 first ensures that the internal and external prefixes are the same
 length, extending the shorter of the two with zeroes if necessary.
 These two prefixes will be used in the prefix translation function
 described in Sections 3.2 and 3.3.  </t>
            <t>
They are then zero-extended to /64 for the purposes of a calculation.
 The translation function calculates the one's complement sum of the
 16-bit words of the /64 external prefix and the /64 internal prefix.
 It then calculates the difference between these values: internal
 minus external.  This value, called the "adjustment", is effectively
 constant for the lifetime of the NPTv6 Translator configuration and
 is used in per-datagram processing.</t>
          </li>
        </ul>
      </section>
      <section anchor="nptv6-translation-internal-network-to-external-network">
        <name>NPTv6 Translation, Internal Network to External Network</name>
        <t>When a datagram passes through the NPTv6 Translator from an internal
   to an external network, its IPv6 Source Address is either changed in
   two ways or results in the datagram being discarded:</t>
        <ul spacing="normal">
          <li>
            <t>If the internal subnet number has no mapping, such as being 0xFFFF
    or simply not mapped, discard the datagram.  This <bcp14>SHOULD</bcp14> result in
    an ICMP Destination Unreachable.</t>
          </li>
          <li>
            <t>The internal prefix is overwritten with the external prefix, in
    effect subtracting the difference between the two checksums (the
    adjustment) from the pseudo-header's checksum, and</t>
          </li>
          <li>
            <t>A 16-bit word of the address has the adjustment added to it using
    one's complement arithmetic.  If the result is 0xFFFF, it is
    overwritten as zero.  The choice of word is as specified in
    Sections 3.4 or 3.5 as appropriate.</t>
          </li>
        </ul>
      </section>
      <section anchor="nptv6-translation-external-network-to-internal-network">
        <name>NPTv6 Translation, External Network to Internal Network</name>
        <t>When a datagram passes through the NPTv6 Translator from an external
   to an internal network, its IPv6 Destination Address is changed in
   two ways:</t>
        <ul spacing="normal">
          <li>
            <t>The external prefix is overwritten with the internal prefix, in
    effect adding the difference between the two checksums (the
    adjustment) to the pseudo-header's checksum, and</t>
          </li>
          <li>
            <t>A 16-bit word of the address has the adjustment subtracted from it
    (bitwise inverted and added to it) using one's complement
    arithmetic.  If the result is 0xFFFF, it is overwritten as zero.
    The choice of word is as specified in Sections 3.4 or 3.5
    as appropriate.</t>
          </li>
        </ul>
      </section>
      <section anchor="nptv6-with-a-48-or-shorter-prefix">
        <name>NPTv6 with a /48 or Shorter Prefix</name>
        <t>When an NPTv6 Translator is configured with internal and external
   prefixes that are 48 bits in length (a /48) or shorter, the
   adjustment <bcp14>MUST</bcp14> be added to or subtracted from bits 48..63 of the
   address.
   This mapping results in no modification of the Interface Identifier
   (IID), which is held in the lower half of the IPv6 address, so it
   will not interfere with future protocols that may use unique IIDs for
   node identification.</t>
        <t>NPTv6 Translator implementations <bcp14>MUST</bcp14> implement the /48 mapping.</t>
      </section>
      <section anchor="nptv6-with-a-49-or-longer-prefix">
        <name>NPTv6 with a /49 or Longer Prefix</name>
        <t>When an NPTv6 Translator is configured with internal and external
   prefixes that are longer than 48 bits in length (such as a /52, /56,
   or /60), the adjustment must be added to or subtracted from one of
   the words in bits 64..79, 80..95, 96..111, or 112..127 of the
   address.  While the choice of word is immaterial as long as it is
   consistent, these words <bcp14>MUST</bcp14> be inspected in that sequence and the
   first that is not initially 0xFFFF chosen, for consistency's sake.</t>
        <t>NPTv6 Translator implementations <bcp14>SHOULD</bcp14> implement the mapping for
   longer prefixes.</t>
      </section>
      <section anchor="prefix-mapping-example">
        <name>/48 Prefix Mapping Example</name>
        <t>For the network shown in Figure 1, the Internal Prefix is fd01:203:
   405::/48, and the External Prefix is 2001:db8:1::/48.</t>
        <t>If a node with internal address fd01:203:405:1::1234 sends an
   outbound datagram through the NPTv6 Translator, the resulting
   external address will be 2001:db8:1:d550::1234.  The resulting
   address is obtained by calculating the checksum of both the internal
   and external 48-bit prefixes, subtracting the internal prefix from
   the external prefix using one's complement arithmetic to calculate
   the "adjustment", and adding the adjustment to the 16-bit subnet
   field (in this case, 0x0001).</t>
        <t>To show the work:</t>
        <t>The one's complement checksum of fd01:203:405 is 0xFCF5.  The one's
   complement checksum of 2001:db8:1 is 0xD245.  Using one's
   complement arithmetic, 0xD245 - 0xFCF5 = 0xD54F.  The subnet in the
   original datagram is 0x0001.  Using one's complement arithmetic,
   0x0001 + 0xD54F = 0xD550.  Since 0xD550 != 0xFFFF, it is not changed
   to 0x0000.</t>
        <t>So, the value 0xD550 is written in the 16-bit subnet area, resulting
   in a mapped external address of 2001:db8:1:d550::1234.</t>
        <t>When a response datagram is received, it will contain the destination
   address 2001:db8:1:d550::1234, which will be mapped back to fd01:
   203:405:1::1234 using the inverse mapping algorithm.</t>
        <t>In this case, the difference between the two prefixes will be
   calculated as follows:</t>
        <t>Using one's complement arithmetic, 0xFCF5 - 0xD245 = 0x2AB0.  The
   subnet in the original datagram = 0xD550.  Using one's complement
   arithmetic, 0xD550 + 0x2AB0 = 0x0001.  Since 0x0001 != 0xFFFF, it is
   not changed to 0x0000.</t>
        <t>So the value 0x0001 is written into the subnet field, and the
   internal value of the subnet field is properly restored.</t>
      </section>
      <section anchor="address-mapping-for-longer-prefixes">
        <name>Address Mapping for Longer Prefixes</name>
        <t>If the prefix being mapped is longer than 48 bits, the algorithm is
   slightly more complex.  A common case will be that the internal and
   external prefixes are of different lengths.  In such a case, the
   shorter prefix is zero-extended to the length of the longer as
   described in Section 3.1 for the purposes of overwriting the prefix.
   Then, they are both zero-extended to 64 bits to facilitate one's
   complement arithmetic.  The "adjustment" is calculated using those
   64-bit prefixes.</t>
        <t>For example, if the internal prefix is a /48 ULA and the external
   prefix is a /56 provider-allocated prefix, the ULA becomes a /56 with
   zeros in bits 48..55.  For purposes of one's complement arithmetic,
   they are then both zero-extended to 64 bits.  A side effect of this
   is that a subset of the subnets possible in the shorter prefix is
   untranslatable.  While the security value of this is debatable, the
   administration may choose to use them for subnets that it knows need
   no external accessibility.</t>
        <t>We then find the first word in the IID that does not have the value
   0xFFFF, trying bits 64..79, and then 80..95, 96..111, and finally
   112..127.  We perform the same calculation (with the same proof of
   correctness) as in Section 3.6 but apply it to that word.</t>
        <t>Although any 16-bit portion of an IPv6 IID could contain 0xFFFF, an
   IID of all-ones is a reserved anycast identifier that should not be
   used on the network <xref target="RFC2526"/>.  If an NPTv6 Translator discovers a
   datagram with an IID of all-zeros while performing address mapping,
   that datagram <bcp14>MUST</bcp14> be dropped, and an ICMPv6 Parameter Problem error
   <bcp14>SHOULD</bcp14> be generated <xref target="RFC4443"/>.
   Note: This mechanism does involve modification of the IID; it may not
   be compatible with future mechanisms that use unique IIDs for node
   identification.</t>
      </section>
      <section anchor="icmpv6-error-forwarding">
        <name>ICMPv6 error forwarding</name>
        <t>This section describes the processing of ICMPv6 error messages and is similar to
   the ICMP error forwarding specified for IPv4 NATs in <xref target="RFC5508"/>.</t>
        <t>For an ICMPv6 error, both the addresses in the outer IPv6 header and the embedded IPv6 header
   in the ICMPv6 error message must be translated.</t>
        <t>For an ICMPv6 error received from the "outside", the embedded IPv6 header source address
   is translated from the external prefix to the internal prefix. While the outer IPv6 header
   destination address is translated from the external prefix to the internal prefix as normal.
   If the embedded IPv6 source address prefix does not match the external prefix prior to the rewrite,
   the packet <bcp14>MUST</bcp14> be silently dropped.</t>
        <t>For an ICMPv6 error received from the "inside", the embedded IPv6 header destination address
   is translated from the internal prefix to the external prefix. While the outer IPv6 header
   source address is translated from the internal prefix to the external prefix as normal.
   If the embedded IPv6 destination address prefix does not match the internal prefix prior to the rewrite,
   the packet <bcp14>MUST</bcp14> be silently dropped.</t>
        <t>The ICMPv6 forwarding function <bcp14>MUST</bcp14> verify that the length of the embedded packet is long enough to contain the whole IPv6 header.</t>
        <t>An ICMPv6 Error message checksum covers the entire ICMPv6 message,
   including the payload.  When an ICMPv6 Error packet is received, if the
   ICMPv6 checksum fails to validate, NPTv6 <bcp14>SHOULD</bcp14> silently drop the
   ICMPv6 Error packet.  This is because NATv6 uses the embedded IPv6 and
   transport headers for forwarding and translating the ICMPv6 Error
   message.  When the ICMPv6 checksum is
   invalid, the embedded IPv6 and transport headers, which are covered by
   the ICMPv6 checksum, are also suspect.</t>
      </section>
    </section>
    <section anchor="implications-of-network-address-translator-behavioral-requirements">
      <name>Implications of Network Address Translator Behavioral Requirements</name>
      <section anchor="prefix-configuration-and-generation">
        <name>Prefix Configuration and Generation</name>
        <t>NPTv6 Translators <bcp14>MUST</bcp14> support manual configuration of internal and
   external prefixes and <bcp14>MUST NOT</bcp14> place any restrictions on those
   prefixes except that they be valid IPv6 unicast prefixes as described
   in <xref target="RFC4291"/>.  They <bcp14>MAY</bcp14> also support random generation of ULA
   addresses on command.  Since the most common place anticipated for
   the implementation of an NPTv6 Translator is a Customer Premises
   Equipment (CPE) router, the reader is urged to consider the
   requirements of <xref target="RFC7084"/>.</t>
      </section>
      <section anchor="subnet-numbering">
        <name>Subnet Numbering</name>
        <t>For reasons detailed in Appendix B, a network using NPTv6 Translation
   and a /48 external prefix <bcp14>MUST NOT</bcp14> use the value 0xFFFF to designate
   a subnet that it expects to be translated.</t>
      </section>
      <section anchor="nat-behavioral-requirements">
        <name>NAT Behavioral Requirements</name>
        <t>NPTv6 Translators <bcp14>MUST</bcp14> support hairpinning behavior, as defined in
   the NAT Behavioral Requirements for UDP document <xref target="RFC4787"/>.  This
   means that when an NPTv6 Translator receives a datagram on the
   internal interface that has a destination address that matches the
   site's external prefix, it will translate the datagram and forward it
   internally.  This allows internal nodes to reach other internal nodes
   using their external, global addresses when necessary.</t>
        <t>Conceptually, the datagram leaves the domain (is translated as
   described in Section 3.2) and returns (is again translated as
   described in Section 3.3).  As a result, the datagram exchange will
   be through the NPTv6 Translator in both directions for the lifetime
   of the session.  The alternative would be to require the NPTv6
   Translator to drop the datagram, forcing the sender to use the
   correct internal prefix for its peer.  Performing only the external-
   to-internal translation results in the datagram being sent from the
   untranslated internal address of the source to the translated and
   therefore internal address of its peer, which would enable the
   session to bypass the NPTv6 Translator for future datagrams.  It
   would also mean that the original sender would be unlikely to
   recognize the response when it arrived.
   Because NPTv6 does not perform port mapping and uses a one-to-one,
   reversible-mapping algorithm, none of the other NAT behavioral
   requirements apply to NPTv6.</t>
      </section>
    </section>
    <section anchor="implications-for-applications">
      <name>Implications for Applications</name>
      <t>NPTv6 Translation does not create several of the problems known to
   exist with other kinds of NATs as discussed in <xref target="RFC2993"/>.  In
   particular, NPTv6 Translation is stateless, so a "reset" or brief
   outage of an NPTv6 Translator does not break connections that
   traverse the translation function, and if multiple NPTv6 Translators
   exist between the same two networks, the load can shift or be
   dynamically load shared among them.  Also, an NPTv6 Translator does
   not aggregate traffic for several hosts/interfaces behind a fewer
   number of external addresses, so there is no inherent expectation for
   an NPTv6 Translator to block new inbound flows from external hosts
   and no issue with a filter or blacklist associated with one prefix
   within the domain affecting another.  A firewall can, of course, be
   used in conjunction with an NPTv6 Translator; this would allow the
   network administrator more flexibility to specify security policy
   than would be possible with a traditional NAT.</t>
      <t>However, NPTv6 Translation does create difficulties for some kinds of
   applications.  Some examples include:</t>
      <ul spacing="normal">
        <li>
          <t>An application instance "behind" an NPTv6 Translator will see a
    different address for its connections than its peers "outside" the
    NPTv6 Translator.</t>
        </li>
        <li>
          <t>An application instance "outside" an NPTv6 Translator will see a
    different address for its connections than any peer "inside" an
    NPTv6 Translator.</t>
        </li>
        <li>
          <t>An application instance wishing to establish communication with a
    peer "behind" an NPTv6 Translator may need to use a different
    address to reach that peer depending on whether the instance is
    behind the same NPTv6 Translator or external to it.  Since an
    NPTv6 Translator implements hairpinning (Section 4.3), it suffices
    for applications to always use their external addresses.  However,
    this creates inefficiencies in the local network and may also
    complicate implementation of the NPTv6 Translator.  <xref target="RFC6724"/> also
    would prefer the private address in such a case in order to reduce
    those inefficiencies.</t>
        </li>
        <li>
          <t>An application instance that moves from a realm "behind" an NPTv6
    Translator to a realm that is "outside" the network, or vice
    versa, may find that it is no longer able to reach its peers at
    the same addresses it was previously able to use.</t>
        </li>
        <li>
          <t>An application instance that is intermittently communicating with
    a peer that moves from behind an NPTv6 Translator to "outside" of
    it, or vice versa, may find that it is no longer able to reach
    that peer at the same address that it had previously used.  </t>
          <t>
Many, but not all, of the applications that are adversely affected by
 NPTv6 Translation are those that do "referrals" -- where an
 application instance passes its own addresses, and/or addresses of
 its peers, to other peers.  (Some believe referrals are inherently
 undesirable; others believe that they are necessary in some
 circumstances.  A discussion of the merits of referrals, or lack
 thereof, is beyond the scope of this document.)  </t>
          <t>
To some extent, the incidence of these difficulties can be reduced by
 DNS hacks that attempt to expose addresses "behind" an NPTv6
 Translator only to hosts that are also behind the same NPTv6
 Translator and perhaps to also expose only the "internal" addresses
 of hosts behind the NPTv6 Translator to other hosts behind the same
 NPTv6 Translator. However, this cannot be a complete solution.  A
 full discussion of these issues is out of scope for this document,
 but, briefly, relying upon DNS to solve this problem depends on (a)
 hosts always making queries to DNS servers within the same realm as
 these hosts (or on intermediate DNS forwarders) and mobile hosts/applications not caching those results;
 (b) network
 administrators on all networks using such applications to reliably
 and accurately maintain current DNS entries for every host using
 those applications; and (c) applications always using DNS names, even though they
 often run in environments where DNS names are not reliably
 maintained for every host.  Other issues are that there is often no
 single distinguished name for a host and no reliable way for a host
 to determine what DNS names are associated with it and which names
 are appropriate to use in which contexts.</t>
        </li>
      </ul>
      <section anchor="recommendation-for-network-planners-considering-use-of-nptv6-translation">
        <name>Recommendation for Network Planners Considering Use of NPTv6 Translation</name>
        <t>In light of the above, network planners considering the use of NPTv6
   translation should carefully consider the kinds of applications that
   they will need to run in the future and determine whether the
   address-stability and provider-independence benefits are consistent
   with their application requirements.</t>
      </section>
      <section anchor="recommendations-for-application-writers">
        <name>Recommendations for Application Writers</name>
        <t>Several mechanisms (e.g., STUN <xref target="RFC8489"/>, Traversal Using Relays
   around NAT (TURN) <xref target="RFC8656"/>, and Interactive Connectivity
   Establishment (ICE) <xref target="RFC8445"/>) have been used with traditional IPv4
   NAT to circumvent some of the limitations of such devices.  Similar
   mechanisms could also be applied to circumvent some of the issues
   with an NPTv6 Translator.  However, all of these require the
   assistance of an external server or a function co-located with the
   translator that can tell an "internal" host what its "external"
   addresses are.</t>
      </section>
      <section anchor="recommendation-for-future-work">
        <name>Recommendation for Future Work</name>
        <t>It might be desirable to define a general mechanism that would allow
   hosts within a translation domain to determine their external
   addresses and/or request that inbound traffic be permitted.  If such
   a mechanism were to be defined, it would ideally be general enough to
   also accommodate other types of NAT likely to be encountered by IPV6
   applications, in particular IPv4/IPv6 Translation <xref target="RFC6144"/> <xref target="RFC6147"/>
          <xref target="RFC7915"/> <xref target="RFC6146"/> <xref target="RFC6052"/>.  For this and other reasons, such a
   mechanism is beyond the scope of this document.</t>
      </section>
    </section>
    <section anchor="a-note-on-port-mapping">
      <name>A Note on Port Mapping</name>
      <t>In addition to overwriting IP addresses when datagrams are forwarded,
   NAPT44 devices overwrite the source port number in outbound traffic
   and the destination port number in inbound traffic.  This mechanism
   is called "port mapping".</t>
      <t>The major benefit of port mapping is that it allows multiple
   computers to share a single IPv4 address.  A large number of internal
   IPv4 addresses (typically from one of the <xref target="RFC1918"/> private address
   spaces) can be mapped into a single external, globally routable IPv4
   address, with the local port number used to identify which internal
   node should receive each inbound datagram.  This address-
   amplification feature is not generally foreseen as a necessity at
   this time.</t>
      <t>Since port mapping requires rewriting a portion of the transport
   layer header, it requires NAPT44 devices to be aware of all of the
   transport protocols that they forward, thus stifling the development
   of new and improved transport protocols and preventing the use of
   IPsec encryption.  Modifying the transport layer header is
   incompatible with security mechanisms that encrypt the full IP
   payload and restricts the NAPT44 to forwarding transport layers that
   use weak checksum algorithms that are easily recalculated in routers.</t>
      <t>Since there is significant detriment caused by modifying transport
   layer headers and very little, if any, benefit to the use of port
   mapping in IPv6, NPTv6 Translators that comply with this
   specification <bcp14>MUST NOT</bcp14> perform port mapping.</t>
    </section>
    <section anchor="application-layer-gateways">
      <name>Application Layer Gateways</name>
      <t>As explained in <xref target="RFC5382"/> and <xref target="RFC4787"/> Application Layer Gateways
   (ALGs) interfere with UNSAF <xref target="RFC3424"/> methods or protocols that try to be
   NAT-aware. NPTv6 is designed to be transport layer agnostic and an ALG would be incompatible with this design and the checksum-neutral mapping.</t>
      <t>It is <bcp14>RECOMMENDED</bcp14> that an NPTv6 translator does not include ALGs.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to the RFC Editor: This section should be removed before publication as an RFC.</t>
      <t>This section records the status of known implementations of the
   protocol defined by this specification at the time of posting of
   this Internet-Draft, and is based on a proposal described in
   <xref target="RFC7942"/>.  The description of implementations in this section is
   intended to assist the IETF in its decision processes in
   progressing drafts to RFCs.  Please note that the listing of any
   individual implementation here does not imply endorsement by the
   IETF.  Furthermore, no effort has been spent to verify the
   information presented here that was supplied by IETF contributors.
   This is not intended as, and must not be construed to be, a
   catalog of available implementations or their features.  Readers
   are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
   groups to assign due consideration to documents that have the
   benefit of running code, which may serve as evidence of valuable
   experimentation and feedback that have made the implemented
   protocols more mature.  It is up to the individual working groups
   to use this information as they see fit".</t>
      <section anchor="fdio-vpp">
        <name>fd.io VPP</name>
        <t>The fd.io Vector Packet Processing (VPP) project has implemented NPTv6
   as described in this document.  The implementation is available in
   the fd.io VPP project's git repository at
   https://git.fd.io/vpp/tree/src/plugins/npt66</t>
        <t>The implementation is considered to be in the "beta" stage of
   maturity.</t>
        <t>It is licensed under the Apache License, Version 2.0.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="cisco">
        <name>Cisco</name>
        <t>Cisco has implemented NPTv6 as described in this document in IOS-XE
   and IOS-XR.  The implementation is considered to be in
   the "production" stage of maturity.</t>
        <t>It is licensed under the Cisco Systems, Inc. Software License
   Agreement.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="vyos">
        <name>VyOS</name>
        <t>VyOS has implemented NPTv6 as described in this document since VyOS 1.2 (Crux).  The
   implementation is considered to be in the "production" stage of
   maturity. More info can be found at https://vyos.io.</t>
        <t>It is licensed under the GNU General Public License version 2.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="linux">
        <name>Linux</name>
        <t>Linux has implemented NPTv6 as described in this document since
   kernel 3.14.  The implementation is considered to be in the
   "production" stage of maturity.</t>
        <t>It is licensed under the GNU General Public License version 2.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="opnsense">
        <name>OPNsense</name>
        <t>OPNsense has implemented NPTv6 as described in this document since
   version 18.1.  The implementation is considered to be in the
   "production" stage of maturity.</t>
        <t>It is licensed under the 2-clause BSD license.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="palo-alto-networks">
        <name>Palo Alto Networks</name>
        <t>Palo Alto Networks has implemented NPTv6 as described in this document since PAN-OS 8.0.  The implementation is considered to be in the "production" stage of maturity.</t>
        <t>It is licensed under the Palo Alto Networks End User License Agreement.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="juniper">
        <name>Juniper</name>
        <t>Juniper has implemented NPTv6 as described in this document since Junos 15.1.  The implementation is considered to be in the "production" stage of maturity.</t>
        <t>It is licensed under the Juniper End User License Agreement.
   Last updated: 2023-12-19.</t>
      </section>
      <section anchor="mikrotik-routeros">
        <name>Mikrotik RouterOS</name>
        <t>Mikrotik RouterOS has implemented NPTv6 functionality as described in this document since RouterOS 7.1. The implementation is considered to be in the "production" stage of maturity.</t>
        <t>It is licensed under the Mikrotik End User License Agreement.
   Last Updated: 2024-01-04</t>
      </section>
      <section anchor="ipfw">
        <name>IPFW</name>
        <t>FreeBSD and other compatible systems have implemented NPTv6 functionality as described in this document as part of the IPFW toolkit since 2018.</t>
        <t>It is licensed under the 2-clause BSD license.
  Last updated: 2024-01-04.</t>
      </section>
    </section>
    <section anchor="deployment-status">
      <name>Deployment Status</name>
      <t>Note to the RFC Editor: This section should be removed before publication as an RFC.</t>
      <t>This section records the status of known operational deployment scenarios of the
   protocol defined by this specification at the time of posting of
   this Internet-Draft, and is based on a proposal described in
   <xref target="RFC7942"/>.  The description of operational deployment scenarios in this section is
   intended to assist the IETF in its decision processes in
   progressing drafts to RFCs.  Please note that the listing of any
   individual operational deployment scenarios here does not imply endorsement by the
   IETF.  Furthermore, no effort has been spent to verify the
   information presented here that was supplied by IETF contributors.
   This is not intended as, and must not be construed to be, a
   catalog of available implementations or their features.  Readers
   are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
   groups to assign due consideration to documents that have the
   benefit of running code, which may serve as evidence of valuable
   experimentation and feedback that have made the implemented
   protocols more mature.  It is up to the individual working groups
   to use this information as they see fit".</t>
      <section anchor="nptv6-address-translation-for-airlandseaspace-mobile-networking">
        <name>NPTv6 Address translation for air/land/sea/space mobile networking</name>
        <t>Due to the transient and mobile nature of air/land/sea/space
networking, prefix mobility is necessary for continuity of service.
NPTv6 allows for the ability to assign static Provider-Aggregated (PA)
IPv6 prefixes to proxy nodes which may themselves be mobile but
with stable Internet uplink connections. The proxy nodes then
delegate translated PA GUA/ULA addresses to their constituent
mobile nodes which may connect via the proxy downlink either
directly or over a localized multihop region such as a Mobile
Ad-hoc Network (MANET).</t>
        <t>As long as a mobile node remains associated with a specific proxy, it can
communicate with local network peers using its ULA, while the proxy will
perform stateless translation to the corresponding PA GUA to connect
with Internetworking correspondents. If a mobile node moves to become
associated with a second proxy, it simply deprecates the GUA/ULA pair
assigned by the first proxy and requests delegation of a new GUA/ULA pair
via the new proxy. It can then resume communications with the new
address pair in a nomadic capacity where the addresses change but
the Internetworking service is sustained.</t>
        <t>Mobile nodes that require a true Provider-Independent (PI) IPv6 prefix
use their NPTv6 proxy connections as bearer interfaces for coordinating
with a network distributed mobility service using encapsulation. The
mobility service coupled with the encapsulation of PI addresses within
NPTv6-served PA addresses provides mobile node PI IPv6 prefix stability
even if the node frequently moves between proxys. This takes best
advantage of translation combined with encapsulation and allows
mobile nodes to maintain stable Internet of Things (IoT) subnetworks
even as they move about freely both within local operational regions
and between remote operational regions.</t>
      </section>
      <section anchor="distributed-data-center-with-stateful-intrusion-detection-systems-this-needs-some-work-will-address">
        <name>Distributed data center with stateful intrusion detection systems (this needs some work, will address)</name>
        <t>Distributed data centers are the de facto deployment model for large, geographically diverse, high availability services. These high availability services often operate in an anycast-style manner
connecting customers to the geographically closest resource, which may change over time depending on network segmentation, failure of resources, or other interruptions of the path between the client and
the service resource. Many of these services are bound by compliance requirements (i.e. PCI-DSS, etc.) or internal security policy dictating that they provide intrusion detection systems in line for
deep packet inspection and/or intrusion prevention capabilities (IDS/IPS). A hallmark of these stateful intrusion systems is that they require a full
connection for proper processing, without which the packets appear to be only half of a connection and are deemed either backscatter or otherwise invalid connections and dropped.
Because the entire handshake is required for proper IDS/IPS operation, and because the networks in question announce their networks in such a way that they may see connections
from different regions, normalization of the internal addressing is required for appropriate processing. NPTv6 provides the normalization of the transaction at a high rate with low overhead, allowing all traffic to appear
complete even when the packets originate from other regions.</t>
      </section>
      <section anchor="remote-access-for-out-of-band-connectivity">
        <name>Remote access for out of band connectivity</name>
        <t>In environments operating IPv6-only networks that require an out of band (OOB) connectivity provided by a third party service to avoid fate sharing, NPTv6 provides a very simple and straightforward way to statelessly map
a provider assigned (PA) prefix onto a customer defined internal prefix. In this use case, a data center provided /48 is mapped directly to a customer defined provider independent (PI) address block. This customer defined address block is configured
as an internal, IPv6-only management network providing access to internal systems, console access, IPMI, and other out of band management scenarios. Mapping the PA addressing to the PI addressing allows for access during network
outages or other service interruptions, and provides for a straightforward and simple mechanism for access during maintenance windows.</t>
        <artwork><![CDATA[
                                                        +-------+
 Remote Client                                          |       |Primary
           +                                            |       |Transit
           |                                            +----+--+Router
           |                                                 |
           |                                                 |
           |                                                 |
           +             +------+              PI            |
PA Provided +------------+      +------------+ Address +-----+--------+Management
OOB Access               +------+              space                   Network
                         NPTv6
                         Remote
                         Access
                         Device
]]></artwork>
      </section>
      <section anchor="small-network-multihoming">
        <name>Small network multihoming</name>
        <t>In environments where provider independent addressing is not able to be deployed or is otherwise unavailable, NPTv6 is a supportable tool for providing access in a primary / backup architecture. In this design model, addressing from the primary provider
is used to address hosts on the access network. At the CPE, NPTv6 can be leveraged to provide failover access in the case that the primary transit provider becomes unavailable. This is typically provided by a tool such as NETMAP or corresponding NPTv6 implementation
. This method is limited to the smallest sized PA or PD allocation, and requires some additional configuration and, if not using ULA or a self-provided address block, a mechanism for updating dynamic prefixes.</t>
      </section>
      <section anchor="sd-wan-with-local-internet-hand-off">
        <name>SD-WAN with local Internet hand off</name>
        <t>In Software Defined Wide Area Networks (SD-WAN) there exists an architecture model that leverages corporate PI address space internally, tunneled back to private infrastructure. Commodity transit is handed off locally to the local provider and the PI addressing
is translated via NPTv6 to the locally provided PA block. This model allows consistent addressing for all remote site access with granular control over access to corporate network resources while still providing local commodity transit.</t>
        <artwork><![CDATA[
Private
Data                       Native P.I.
Center  +------------------Address over
or                         VPN tunnel
corporate network                 |
                                  |
                                  |
                                  |
                   ISP         +--+-+
Commodity ISP +----provided ---+    +----------+LAN
                   P.A.        +----+           Native P.I. Addressing
                   Addressing  CPE
                               with
                               NPTv6
                               Process
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>When NPTv6 is deployed using either of the two-way, algorithmic
   mappings defined in this document, it allows direct inbound
   connections to internal nodes.  While this can be viewed as a benefit
   of NPTv6 versus NAPT44, it does open internal nodes to attacks that
   would be more difficult in a NAPT44 network.  From a security
   standpoint, although this situation is not substantially worse than
   running IPv6 with no NAT, some enterprises may assume that an NPTv6
   Translator will offer similar protection to a NAPT44 device.</t>
      <t>The port mapping mechanism in NAPT44 implementations requires that
   state be created in both directions.  This has lead to an industry-
   wide perception that NAT functionality is the same as a stateful
   firewall.  It is not.  The translation function of the NAT only
   creates dynamic state in one direction and has no policy.  For this
   reason, it is <bcp14>RECOMMENDED</bcp14> that NPTv6 Translators also implement
   firewall functionality such as described in <xref target="RFC6092"/>, with
   appropriate configuration options including turning it on or off.</t>
      <t>When <xref target="RFC4864"/> talks about randomizing the subnet identifier, the
   idea is to make it harder for worms to guess a valid subnet
   identifier at an advertised network prefix.  This should not be
   interpreted as endorsing concealment of the subnet identifier behind
   the obfuscating function of a translator such as NPTv6.  <xref target="RFC4864"/>
   specifically talks about how to obtain the desired properties of
   concealment without using a translator.  Topology hiding when using
   NAT is often ineffective in environments where the topology is
   visible in application layer messaging protocols such as DNS, SIP,
   SMTP, etc.  If the information were not available through the
   application layer, <xref target="RFC2993"/> would not be valid.</t>
      <t>Due to the potential interactions with IKEv2/IPsec NAT traversal, it
   would be valuable to test interactions of NPTv6 with various aspects
   of current-day IKEv2/IPsec NAT traversal.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The checksum-neutral algorithmic address mapping described in this
   document is based on email written by Iljtsch van Beijnum.</t>
      <t>The following people provided advice or review comments that
   substantially improved the original RFC6296 document: Allison Mankin, Christian
   Huitema, Dave Thaler, Ed Jankiewicz, Eric Kline, Iljtsch van Beijnum,
   Jari Arkko, Keith Moore, Mark Townsley, Merike Kaeo, Ralph Droms,
   Remi Despres, Steve Blake, and Tony Hain.</t>
      <t>The following people provided advice or review comments that substantially improved this revised document: Mohamed Boucadair, Ed Horley, and Fred Templin.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4193" target="https://www.rfc-editor.org/info/rfc4193" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4193.xml">
          <front>
            <title>Unique Local IPv6 Unicast Addresses</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="B. Haberman" initials="B." surname="Haberman"/>
            <date month="October" year="2005"/>
            <abstract>
              <t>This document defines an IPv6 unicast address format that is globally unique and is intended for local communications, usually inside of a site. These addresses are not expected to be routable on the global Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4193"/>
          <seriesInfo name="DOI" value="10.17487/RFC4193"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="RFC4291" target="https://www.rfc-editor.org/info/rfc4291" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="RFC2526" target="https://www.rfc-editor.org/info/rfc2526" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2526.xml">
          <front>
            <title>Reserved IPv6 Subnet Anycast Addresses</title>
            <author fullname="D. Johnson" initials="D." surname="Johnson"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="March" year="1999"/>
            <abstract>
              <t>This document defines a set of reserved anycast addresses within each subnet prefix, and lists the initial allocation of these reserved subnet anycast addresses. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2526"/>
          <seriesInfo name="DOI" value="10.17487/RFC2526"/>
        </reference>
        <reference anchor="RFC4443" target="https://www.rfc-editor.org/info/rfc4443" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC4787" target="https://www.rfc-editor.org/info/rfc4787" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4787.xml">
          <front>
            <title>Network Address Translation (NAT) Behavioral Requirements for Unicast UDP</title>
            <author fullname="F. Audet" initials="F." role="editor" surname="Audet"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <date month="January" year="2007"/>
            <abstract>
              <t>This document defines basic terminology for describing different types of Network Address Translation (NAT) behavior when handling Unicast UDP and also defines a set of requirements that would allow many applications, such as multimedia communications or online gaming, to work consistently. Developing NATs that meet this set of requirements will greatly increase the likelihood that these applications will function properly. 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="127"/>
          <seriesInfo name="RFC" value="4787"/>
          <seriesInfo name="DOI" value="10.17487/RFC4787"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="GSE">
          <front>
            <title>GSE - An Alternate Addressing Architecture for IPv6</title>
            <author initials="M." surname="O'Dell">
              <organization/>
            </author>
            <date year="1997" month="February"/>
          </front>
        </reference>
        <reference anchor="NIST">
          <front>
            <title>Draft NIST Framework and Roadmap for Smart Grid Interoperability Standards, Release 1.0</title>
            <author initials="" surname="NIST">
              <organization/>
            </author>
            <date year="2009" month="September"/>
          </front>
        </reference>
        <reference anchor="RFC1071" target="https://www.rfc-editor.org/info/rfc1071" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1071.xml">
          <front>
            <title>Computing the Internet checksum</title>
            <author fullname="R.T. Braden" initials="R.T." surname="Braden"/>
            <author fullname="D.A. Borman" initials="D.A." surname="Borman"/>
            <author fullname="C. Partridge" initials="C." surname="Partridge"/>
            <date month="September" year="1988"/>
            <abstract>
              <t>This RFC summarizes techniques and algorithms for efficiently computing the Internet checksum. It is not a standard, but a set of useful implementation techniques.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1071"/>
          <seriesInfo name="DOI" value="10.17487/RFC1071"/>
        </reference>
        <reference anchor="RFC2993" target="https://www.rfc-editor.org/info/rfc2993" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2993.xml">
          <front>
            <title>Architectural Implications of NAT</title>
            <author fullname="T. Hain" initials="T." surname="Hain"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This document discusses some of the architectural implications and guidelines for implementations of Network Address Translation (NAT). This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2993"/>
          <seriesInfo name="DOI" value="10.17487/RFC2993"/>
        </reference>
        <reference anchor="RFC4864" target="https://www.rfc-editor.org/info/rfc4864" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4864.xml">
          <front>
            <title>Local Network Protection for IPv6</title>
            <author fullname="G. Van de Velde" initials="G." surname="Van de Velde"/>
            <author fullname="T. Hain" initials="T." surname="Hain"/>
            <author fullname="R. Droms" initials="R." surname="Droms"/>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
            <author fullname="E. Klein" initials="E." surname="Klein"/>
            <date month="May" year="2007"/>
            <abstract>
              <t>Although there are many perceived benefits to Network Address Translation (NAT), its primary benefit of "amplifying" available address space is not needed in IPv6. In addition to NAT's many serious disadvantages, there is a perception that other benefits exist, such as a variety of management and security attributes that could be useful for an Internet Protocol site. IPv6 was designed with the intention of making NAT unnecessary, and this document shows how Local Network Protection (LNP) using IPv6 can provide the same or more benefits without the need for address translation. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4864"/>
          <seriesInfo name="DOI" value="10.17487/RFC4864"/>
        </reference>
        <reference anchor="RFC5902" target="https://www.rfc-editor.org/info/rfc5902" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5902.xml">
          <front>
            <title>IAB Thoughts on IPv6 Network Address Translation</title>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="L. Zhang" initials="L." surname="Zhang"/>
            <author fullname="G. Lebovitz" initials="G." surname="Lebovitz"/>
            <date month="July" year="2010"/>
            <abstract>
              <t>There has been much recent discussion on the topic of whether the IETF should develop standards for IPv6 Network Address Translators (NATs). This document articulates the architectural issues raised by IPv6 NATs, the pros and cons of having IPv6 NATs, and provides the IAB's thoughts on the current open issues and the solution space. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5902"/>
          <seriesInfo name="DOI" value="10.17487/RFC5902"/>
        </reference>
        <reference anchor="RFC6092" target="https://www.rfc-editor.org/info/rfc6092" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6092.xml">
          <front>
            <title>Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet Service</title>
            <author fullname="J. Woodyatt" initials="J." role="editor" surname="Woodyatt"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document identifies a set of recommendations for the makers of devices and describes how to provide for "simple security" capabilities at the perimeter of local-area IPv6 networks in Internet-enabled homes and small offices. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6092"/>
          <seriesInfo name="DOI" value="10.17487/RFC6092"/>
        </reference>
        <reference anchor="RFC5925" target="https://www.rfc-editor.org/info/rfc5925" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5925.xml">
          <front>
            <title>The TCP Authentication Option</title>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>This document specifies the TCP Authentication Option (TCP-AO), which obsoletes the TCP MD5 Signature option of RFC 2385 (TCP MD5). TCP-AO specifies the use of stronger Message Authentication Codes (MACs), protects against replays even for long-lived TCP connections, and provides more details on the association of security with TCP connections than TCP MD5. TCP-AO is compatible with either a static Master Key Tuple (MKT) configuration or an external, out-of-band MKT management mechanism; in either case, TCP-AO also protects connections when using the same MKT across repeated instances of a connection, using traffic keys derived from the MKT, and coordinates MKT changes between endpoints. The result is intended to support current infrastructure uses of TCP MD5, such as to protect long-lived connections (as used, e.g., in BGP and LDP), and to support a larger set of MACs with minimal other system and operational changes. TCP-AO uses a different option identifier than TCP MD5, even though TCP-AO and TCP MD5 are never permitted to be used simultaneously. TCP-AO supports IPv6, and is fully compatible with the proposed requirements for the replacement of TCP MD5. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5925"/>
          <seriesInfo name="DOI" value="10.17487/RFC5925"/>
        </reference>
        <reference anchor="RFC3424" target="https://www.rfc-editor.org/info/rfc3424" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3424.xml">
          <front>
            <title>IAB Considerations for UNilateral Self-Address Fixing (UNSAF) Across Network Address Translation</title>
            <author fullname="L. Daigle" initials="L." role="editor" surname="Daigle"/>
            <author>
              <organization abbrev="IAB">Internet Architecture Board</organization>
            </author>
            <date month="November" year="2002"/>
            <abstract>
              <t>As a result of the nature of Network Address Translation (NAT) Middleboxes, communicating endpoints that are separated by one or more NATs do not know how to refer to themselves using addresses that are valid in the addressing realms of their (current and future) peers. Various proposals have been made for "UNilateral Self-Address Fixing (UNSAF)" processes. These are processes whereby some originating endpoint attempts to determine or fix the address (and port) by which it is known to another endpoint - e.g., to be able to use address data in the protocol exchange, or to advertise a public address from which it will receive connections. This document outlines the reasons for which these proposals can be considered at best as short term fixes to specific problems and the specific issues to be carefully evaluated before creating an UNSAF proposal. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3424"/>
          <seriesInfo name="DOI" value="10.17487/RFC3424"/>
        </reference>
        <reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC2827" target="https://www.rfc-editor.org/info/rfc2827" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2827.xml">
          <front>
            <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
            <author fullname="P. Ferguson" initials="P." surname="Ferguson"/>
            <author fullname="D. Senie" initials="D." surname="Senie"/>
            <date month="May" year="2000"/>
            <abstract>
              <t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point. 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="38"/>
          <seriesInfo name="RFC" value="2827"/>
          <seriesInfo name="DOI" value="10.17487/RFC2827"/>
        </reference>
        <reference anchor="RFC1624" target="https://www.rfc-editor.org/info/rfc1624" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1624.xml">
          <front>
            <title>Computation of the Internet Checksum via Incremental Update</title>
            <author fullname="A. Rijsinghani" initials="A." role="editor" surname="Rijsinghani"/>
            <date month="May" year="1994"/>
            <abstract>
              <t>This memo describes an updated technique for incremental computation of the standard Internet checksum. It updates the method described in RFC 1141. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1624"/>
          <seriesInfo name="DOI" value="10.17487/RFC1624"/>
        </reference>
        <reference anchor="RFC5508" target="https://www.rfc-editor.org/info/rfc5508" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5508.xml">
          <front>
            <title>NAT Behavioral Requirements for ICMP</title>
            <author fullname="P. Srisuresh" initials="P." surname="Srisuresh"/>
            <author fullname="B. Ford" initials="B." surname="Ford"/>
            <author fullname="S. Sivakumar" initials="S." surname="Sivakumar"/>
            <author fullname="S. Guha" initials="S." surname="Guha"/>
            <date month="April" year="2009"/>
            <abstract>
              <t>This document specifies the behavioral properties required of the Network Address Translator (NAT) devices in conjunction with the Internet Control Message Protocol (ICMP). The objective of this memo is to make NAT devices more predictable and compatible with diverse application protocols that traverse the devices. Companion documents provide behavioral recommendations specific to TCP, UDP, and other protocols. 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="148"/>
          <seriesInfo name="RFC" value="5508"/>
          <seriesInfo name="DOI" value="10.17487/RFC5508"/>
        </reference>
        <reference anchor="RFC7084" target="https://www.rfc-editor.org/info/rfc7084" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7084.xml">
          <front>
            <title>Basic Requirements for IPv6 Customer Edge Routers</title>
            <author fullname="H. Singh" initials="H." surname="Singh"/>
            <author fullname="W. Beebee" initials="W." surname="Beebee"/>
            <author fullname="C. Donley" initials="C." surname="Donley"/>
            <author fullname="B. Stark" initials="B." surname="Stark"/>
            <date month="November" year="2013"/>
            <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 also covers IP transition technologies. Two transition technologies in RFC 5969's IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) and RFC 6333's Dual-Stack Lite (DS-Lite) are covered in the document. The document obsoletes RFC 6204.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7084"/>
          <seriesInfo name="DOI" value="10.17487/RFC7084"/>
        </reference>
        <reference anchor="RFC6724" target="https://www.rfc-editor.org/info/rfc6724" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6724.xml">
          <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="RFC8489" target="https://www.rfc-editor.org/info/rfc8489" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8489.xml">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with 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.</t>
              <t>This document obsoletes RFC 5389.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8489"/>
          <seriesInfo name="DOI" value="10.17487/RFC8489"/>
        </reference>
        <reference anchor="RFC8656" target="https://www.rfc-editor.org/info/rfc8656" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8656.xml">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. 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 "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </reference>
        <reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8445" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8445.xml">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="RFC6144" target="https://www.rfc-editor.org/info/rfc6144" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6144.xml">
          <front>
            <title>Framework for IPv4/IPv6 Translation</title>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="K. Yin" initials="K." surname="Yin"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This note describes a framework for IPv4/IPv6 translation. This is in the context of replacing Network Address Translation - Protocol Translation (NAT-PT), which was deprecated by RFC 4966, and to enable networks to have IPv4 and IPv6 coexist in a somewhat rational manner while transitioning to an IPv6 network. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6144"/>
          <seriesInfo name="DOI" value="10.17487/RFC6144"/>
        </reference>
        <reference anchor="RFC6147" target="https://www.rfc-editor.org/info/rfc6147" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6147.xml">
          <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="RFC7915" target="https://www.rfc-editor.org/info/rfc7915" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7915.xml">
          <front>
            <title>IP/ICMP Translation Algorithm</title>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="T. Anderson" initials="T." surname="Anderson"/>
            <author fullname="F. Gont" initials="F." surname="Gont"/>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the Stateless IP/ICMP Translation Algorithm (SIIT), which translates between IPv4 and IPv6 packet headers (including ICMP headers). This document obsoletes RFC 6145.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7915"/>
          <seriesInfo name="DOI" value="10.17487/RFC7915"/>
        </reference>
        <reference anchor="RFC6146" target="https://www.rfc-editor.org/info/rfc6146" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6146.xml">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <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>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </reference>
        <reference anchor="RFC6052" target="https://www.rfc-editor.org/info/rfc6052" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6052.xml">
          <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="RFC1918" target="https://www.rfc-editor.org/info/rfc1918" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1918.xml">
          <front>
            <title>Address Allocation for Private Internets</title>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="B. Moskowitz" initials="B." surname="Moskowitz"/>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg"/>
            <author fullname="G. J. de Groot" initials="G. J." surname="de Groot"/>
            <author fullname="E. Lear" initials="E." surname="Lear"/>
            <date month="February" year="1996"/>
            <abstract>
              <t>This document describes address allocation for private internets. 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="5"/>
          <seriesInfo name="RFC" value="1918"/>
          <seriesInfo name="DOI" value="10.17487/RFC1918"/>
        </reference>
        <reference anchor="RFC5382" target="https://www.rfc-editor.org/info/rfc5382" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5382.xml">
          <front>
            <title>NAT Behavioral Requirements for TCP</title>
            <author fullname="S. Guha" initials="S." role="editor" surname="Guha"/>
            <author fullname="K. Biswas" initials="K." surname="Biswas"/>
            <author fullname="B. Ford" initials="B." surname="Ford"/>
            <author fullname="S. Sivakumar" initials="S." surname="Sivakumar"/>
            <author fullname="P. Srisuresh" initials="P." surname="Srisuresh"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>This document defines a set of requirements for NATs that handle TCP that would allow many applications, such as peer-to-peer applications and online games to work consistently. Developing NATs that meet this set of requirements will greatly increase the likelihood that these applications will function properly. 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="142"/>
          <seriesInfo name="RFC" value="5382"/>
          <seriesInfo name="DOI" value="10.17487/RFC5382"/>
        </reference>
        <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 1159?>

<section anchor="why-gse">
      <name>Why GSE?</name>
      <t>For the purpose of this discussion, let us oversimplify the
   Internet's structure by distinguishing between two broad classes of
   networks: transit and edge.  A "transit network", in this context, is
   a network that provides connectivity services to other networks.  Its
   Autonomous System (AS) number may show up in a non-final position in
   BGP AS paths, or in the case of mobile and residential broadband
   networks, it may offer network services to smaller networks that
   cannot justify RIR membership.  An "edge network", in contrast, is
   any network that is not a transit network; it is the ultimate
   customer, and while it provides internal connectivity for its own
   use, it is a consumer of transit services in other respects.  In
   terms of routing, a network in the transit domain generally needs
   some way to make choices about how it routes to other networks; an
   edge network is generally quite satisfied with a simple default
   route.</t>
      <t>The <xref target="GSE"/> proposal, and as a result this proposal (which is similar
   to GSE in most respects and inspired by it), responds directly to
   current concerns in the RIR communities.  Edge networks are used to
   an environment in IPv4 in which their addressing is disjoint from
   that of their upstream transit networks; it is either provider
   independent, or a network prefix translator makes their external
   address distinct from their internal address, and they like the
   distinction.  In IPv6, there is a mantra that edge network addresses
   should be derived from their upstream, and if they have multiple
   upstreams, edge networks are expected to design their networks to use
   all of those prefixes equivalently.  They see this as unnecessary and
   unwanted operational complexity and, as a result, are pushing very
   hard in the RIR communities for provider-independent addressing.</t>
      <t>Widespread use of provider-independent addressing has a natural and
   perhaps unavoidable side effect that is likely to be very expensive
   in the long term.  With widespread PI addressing, the routing table
   will enumerate the networks at the edge of the transit domain, the
   edge networks, rather than enumerate the transit domain.  Per the BGP
   Update Report of 17 December 2010, there are currently over 36,000
   Autonomous Systems being advertised in BGP, of which over 15,000
   advertise only one prefix.  There are in the neighborhood of 5000 ASs
   that show up in a non-final position in AS paths, and perhaps another
   5000 networks whose AS numbers are terminal in more than one AS path.
   In other words, we have prefixes for some 36,000 transit and edge
   networks in the route table now, many of which arguably need an
   Autonomous System number only for multihoming.  The vast majority of
   networks (2/3) having the tools necessary to multihome are not visibly
   doing so and would be well served by any solution that gives
   them address independence without the overhead of RIR membership and
   BGP routing.</t>
      <t>Current growth estimates suggest that we could easily see that be on
   the order of 10,000,000 within fifteen years.  Tens of thousands of
   entries in the route table are very survivable; while our protocols
   and computers will likely do quite well with tens of millions of
   routes, the heat produced and power consumed by those routers, and
   the inevitable impact on the cost of those routers, is not a good
   outcome.  To avoid having a massive and unscalable route table, we
   need to find a way that is politically acceptable and returns us to
   enumerating the transit domain, not the edge.</t>
      <t>There have been a number of proposals.  As described, Shim6 moves the
   complexity to the edge, and the edge is rebelling.  Geographic
   addressing in essence forces ISPs to "own" geographic territory from
   a routing perspective, as otherwise there is no clue in the address
   as to what network a datagram should be delivered to in order to
   reach it.  Metropolitan Addressing can imply regulatory authority
   and, even if it is implemented using internet exchange consortia,
   visits a great deal of complexity on the transit networks that
   directly serve the edge.  The one that is likely to be most
   acceptable is any proposal that enables an edge network to be
   operationally independent of its upstreams, with no obligation to
   renumber when it adds, drops, or changes ISPs, and with no additional
   burden placed either on the ISP or the edge network as a result.
   From an application perspective, an additional operational
   requirement in the words of the Roadmap for the Smart Grid <xref target="NIST"/> is
   that:</t>
      <ul empty="true">
        <li>
          <t>"...the network should provide the capability to enable an
application in a particular domain to communicate with an
application in any other domain over the information network, with
proper management control as to who and where applications can be
inter-connected."</t>
        </li>
      </ul>
      <t>In other words, the structure of the network should allow for and
   enable appropriate access control, but the structure of the network
   should not inherently limit access.</t>
      <t>The GSE model, by statelessly translating the prefix between an edge
   network and its upstream transit network, accomplishes that with a
   minimum of fuss and bother.  Stated in the simplest terms, it enables
   the edge network to behave as if it has a provider-independent prefix
   from a multihoming and renumbering perspective without the overhead
   of RIR membership or maintenance of BGP connectivity, and it enables
   the transit networks to aggressively aggregate what are from their
   perspective provider-allocated customer prefixes, to maintain a
   rational-sized routing table.</t>
    </section>
    <section anchor="verification-code">
      <name>Verification Code</name>
      <t>This non-normative appendix is presented as a proof of concept; it is
   in no sense optimized.  For example, one's complement arithmetic is
   implemented in portable subroutines, where operational
   implementations might use one's complement arithmetic instructions
   through a pragma; such implementations probably need to explicitly
   force 0xFFFF to 0x0000, as the instruction will not.  The original
   purpose of the code was to verify whether or not it was necessary to
   suppress 0xFFFF by overwriting with zero and whether predicted issues
   with subnet numbering were real.</t>
      <t>The point is to:</t>
      <ul spacing="normal">
        <li>
          <t>demonstrate that if one or the other representation of zero is not
    used in the word in which the checksum is updated, the program
    maps inner and outer addresses in a manner that is,
    mathematically, 1:1 and onto (each inner address maps to a unique
    outer address, and that outer address maps back to exactly the
    same inner address), and</t>
        </li>
        <li>
          <t>give guidance on the suppression of 0xFFFF checksums.  </t>
          <t>
In short, in one's complement arithmetic, x-x=0 but will take the
 negative representation of zero.  If 0xFFFF results are forced to the
 value 0x0000, as is recommended in <xref target="RFC1071"/>, the word the checksum
 is adjusted in cannot be initially 0xFFFF, as on the return it will
 be forced to 0.  If 0xFFFF results are not forced to the value 0x0000
 as is recommended in <xref target="RFC1071"/>, the word the checksum is adjusted in
 cannot be initially 0, as on the return it will be calculated as
 0+(~0) = 0xFFFF.  We chose to follow <xref target="RFC1071"/>'s recommendations,
 which implies a requirement to not use 0xFFFF as a subnet number in
 networks with a /48 external prefix.</t>
        </li>
      </ul>
      <sourcecode markers="true"><![CDATA[

  /*
   * Copyright (c) 2011 IETF Trust and the persons identified as
   * authors of the code.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * - Redistributions of source code must retain the above copyright
   *   notice, this list of conditions and the following disclaimer.
   *
   * - Redistributions in binary form must reproduce the above
   *   copyright notice, this list of conditions and the following
   *   disclaimer in the documentation and/or other materials provided
   *   with the distribution.
   *
   * - Neither the name of Internet Society, IETF or IETF Trust, nor
   *   the names of specific contributors, may be used to endorse or
   *   promote products derived from this software without specific
   *   prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
   * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
   * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
   * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   */
  #include "stdio.h"
  #include "stdlib.h"
  #include "assert.h"
  /*
   * program to verify the NPTv6 algorithm
   *
   * argument:
   *    Perform negative zero suppression: boolean
   *
   * method:
   *    We specify an internal and an external prefix.  The prefix
   *    length is presumed to be the common length of both and, for
   *    this, is a /48.  We perform the three algorithms specified.
   *    The "datagram" address is in effect the source address
   *    internal->external and the destination address
   *    external->internal.
   */
  unsigned short  inner_init[] = {
      0xFD01, 0x0203, 0x0405, 1, 2, 3, 4, 5};
  unsigned short  outer_init[] = {
      0x2001, 0x0db8, 0x0001, 1, 2, 3, 4, 5};
  unsigned short  inner[8];
  unsigned short  datagram[8];
  unsigned char   checksum[65536] = {0};

  unsigned short  outer[8];
  unsigned short  adjustment;
  unsigned short  suppress;
  /*
   * One's complement sum.
   * return number1 + number2
   */
  unsigned short
  add1(number1, number2)
      unsigned short  number1;
      unsigned short  number2;
  {
      unsigned int    result;

      result = number1;
      result += number2;
      if (suppress) {
          while (0xFFFF <= result) {
              result = result + 1 - 0x10000;
          }
      } else {
          while (0xFFFF < result) {
              result = result + 1 - 0x10000;
          }
      }
      return result;
  }

  /*
   * One's complement difference
   * return number1 - number2
   */
  unsigned short
  sub1(number1, number2)
      unsigned short  number1;
      unsigned short  number2;
  {
      return add1(number1, ~number2);
  }

  /*
   * return one's complement sum of an array of numbers
   */
  unsigned short
  sum1(numbers, count)
      unsigned short *numbers;
      int             count;
  {
      unsigned int    result;

      result = *numbers++;
      while (--count > 0) {
          result += *numbers++;
      }

      if (suppress) {
          while (0xFFFF <= result) {
              result = result + 1 - 0x10000;
          }
      } else {
          while (0xFFFF < result) {
              result = result + 1 - 0x10000;
          }
      }
      return result;
  }

  /*
   * NPTv6 initialization: Section 3.1 assuming Section 3.4
   *
   * Create the /48, a source address in internal format, and a
   * source address in external format.  Calculate the adjustment
   * if one /48 is overwritten with the other.
   */
  void
  nptv6_initialization(subnet)
      unsigned short  subnet;
  {
      int             i;
      unsigned short  inner48;
      unsigned short  outer48;

      /* Initialize the internal and external prefixes. */
      for (i = 0; i < 8; i++) {
          inner[i] = inner_init[i];
          outer[i] = outer_init[i];
      }
      inner[3] = subnet;
      outer[3] = subnet;
      /* Calculate the checksum adjustment. */
      inner48 = sum1(inner, 3);
      outer48 = sum1(outer, 3);
      adjustment = sub1(inner48, outer48);
  }

  /*
   * NPTv6 datagram from edge to transit: Section 3.2 assuming
   * Section 3.4
   *
   * Overwrite the prefix in the source address with the outer
   * prefix and adjust the checksum.
   */
  void
  nptv6_inner_to_outer()
  {
      int             i;

      /* Let's get the source address into the datagram. */
      for (i = 0; i < 8; i++) {
          datagram[i] = inner[i];
      }

      /* Overwrite the prefix with the outer prefix. */
      for (i = 0; i < 3; i++) {
          datagram[i] = outer[i];
      }

      /* Adjust the checksum. */
      datagram[3] = add1(datagram[3], adjustment);
  }

  /*
   * NPTv6 datagram from transit to edge: Section 3.3 assuming
   * Section 3.4
   *
   * Overwrite the prefix in the destination address with the
   * inner prefix and adjust the checksum.
   */
  void
  nptv6_outer_to_inner()
  {
      int             i;

      /* Overwrite the prefix with the outer prefix. */
      for (i = 0; i < 3; i++) {
          datagram[i] = inner[i];
      }

      /* Adjust the checksum. */
      datagram[3] = sub1(datagram[3], adjustment);
  }

  /*
   * Main program
   */
  main(argc, argv)
      int             argc;
      char          **argv;
  {
      unsigned        subnet;
      int             i;

      if (argc < 2) {
             fprintf(stderr, "usage: nptv6 supression\n");
             assert(0);
         }
         suppress = atoi(argv[1]);
         assert(suppress <= 1);

         for (subnet = 0; subnet < 0x10000; subnet++) {
             /* Section 3.1: initialize the system */
             nptv6_initialization(subnet);

             /* Section 3.2: take a datagram from inside to outside */
             nptv6_inner_to_outer();

             /* The resulting checksum value should be unique. */
             if (checksum[subnet]) {
                  printf("inner->outer duplicated checksum: "
                         "inner: %x:%x:%x:%x:%x:%x:%x:%x(%x) "
                         "calculated: %x:%x:%x:%x:%x:%x:%x:%x(%x)\n",
                         inner[0], inner[1], inner[2], inner[3],
                         inner[4], inner[5], inner[6], inner[7],
                         sum1(inner, 8), datagram[0], datagram[1],
                         datagram[2], datagram[3], datagram[4],
                         datagram[5], datagram[6], datagram[7],
                         sum1(datagram, 8));
          }

          checksum[subnet] = 1;

          /*
           * The resulting checksum should be the same as the inner
           * address's checksum.
           */
          if (sum1(datagram, 8) != sum1(inner, 8)) {
              printf("inner->outer incorrect: "
                     "inner: %x:%x:%x:%x:%x:%x:%x:%x(%x) "
                     "calculated: %x:%x:%x:%x:%x:%x:%x:%x(%x)\n",
                     inner[0], inner[1], inner[2], inner[3],
                     inner[4], inner[5], inner[6], inner[7],
                     sum1(inner, 8),
                     datagram[0], datagram[1], datagram[2], datagram[3],
                     datagram[4], datagram[5], datagram[6], datagram[7],
                     sum1(datagram, 8));
          }

          /* Section 3.3: take a datagram from outside to inside */
          nptv6_outer_to_inner();

          /*
           * The returning datagram should have the same checksum it
           * left with.
           */
          if (sum1(datagram, 8) != sum1(inner, 8)) {
              printf("outer->inner checksum incorrect: "
                     "calculated: %x:%x:%x:%x:%x:%x:%x:%x(%x) "
                     "inner: %x:%x:%x:%x:%x:%x:%x:%x(%x)\n",
                     datagram[0], datagram[1], datagram[2], datagram[3],
                     datagram[4], datagram[5], datagram[6], datagram[7],
                     sum1(datagram, 8), inner[0], inner[1], inner[2],
                     inner[3], inner[4], inner[5], inner[6], inner[7],
                     sum1(inner, 8));
          }

          /*
           * And every octet should calculate back to the same inner
           * value.
           */
          for (i = 0; i < 8; i++) {
              if (inner[i] != datagram[i]) {
                  printf("outer->inner different: "
                         "calculated: %x:%x:%x:%x:%x:%x:%x:%x "
                         "inner: %x:%x:%x:%x:%x:%x:%x:%x\n",
                         datagram[0], datagram[1], datagram[2],
                         datagram[3], datagram[4], datagram[5],
                         datagram[6], datagram[7], inner[0], inner[1],
                         inner[2], inner[3], inner[4], inner[5],
                         inner[6], inner[7]);
                  break;
              }
          }
      }
  }

]]></sourcecode>
    </section>
    <section anchor="changes-since-rfc6296">
      <name>Changes since RFC6296</name>
      <ul spacing="normal">
        <li>
          <t>Updated references to updated RFCs. RFC 5996, RFC 6204, RFC 5389, RFC 5766, RFC 5245, RFC6145.</t>
        </li>
        <li>
          <t>Boilerplate text to Implementation status</t>
        </li>
        <li>
          <t>Update IPv6 addresses to be 5952 compliant.</t>
        </li>
        <li>
          <t>Added a new section on implementation status</t>
        </li>
        <li>
          <t>Added a new section recommending against the use of ALG</t>
        </li>
        <li>
          <t>Added a new section on ICMPv6 error proxying</t>
        </li>
        <li>
          <t>Fixed errata 3033</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19aXfb2JXgd/yK18rpU1KZpLXblpNK05LsYseW1KJU1XUy
mT4gCYqIQYABQMlMqvJb5rfML5u7vgUE5a3S03OmdZKyRAJvue++uy/dbjeq
0zpLTszW4Or+uFsXXfzXXCT1Q1G+N1dlMk0/mJsyzqssrtMi34ri0ahM7k/M
9etTc7z/4niUVtGkGOfxHIaZlPG07o7G9ah7PI/zbjkd4zNdeKi7exBVy9E8
rSoYp14t4PHB+c3rKF2UJ6Yul1W9v7v7Ync/isskhu/yOnq4OzHH7/oX0fsH
+iAp86TunuEk0TiuT0zyYREVo6rIkjqpTmg9URQv61lRnkTGmC7+x5g0hy/f
9czpMsuSnD/jBb+LyzuYrw6+KkqY9ypO8yypKjNMxssyrVf8XTKP0+zEzMsx
vXC4/y93+ElvXMz5gXGxzOtydWJuh/2ouYbXPfMqfp+U/hJel8nE/5Rmv83j
6TTN0rhOJsHEU3h6hA/30qSeftbklz04ySIO9n+ZJf6HNPdpWo0LM1xVdTKv
gsmLGh/9lzE+0DLpRVE+xKvmtBew52UZ32Vp4c98kY7fN76g2c/zpLxbmeE4
TfJxUikuBusYyWv/MsUZy0ma3y2yOE96gB5tgEhzeHAOCHyfEFqYN8Nz/sUY
uQDwiemafm76GaIZwN30J5MSEAAGN/1yPEvrZFwvy8TAWAaviQzgoVuAbJff
nCVZJh9PYEA46mRULuNyZfZevHhG31wMhjeNlRB60xeAGgAquolxPjHXRTyZ
xwuafziPy9q8KdMJ34tikZTxCBCmBtDV8DRApeqY6yRL4ioxe73dDauVM4LZ
gpUOkwWc/igpDV7KKOp2uyYeVXUZj+soupmllYFLv5wneW0mSTUu0xGcVWyq
Gl7Ha9OBKw1UY1GUdTe+y4uqTsfGJzLRZiJjti+ubu6Pd8x0mY/pg3oW12ZR
FvcpTAZ/JVHMh9NN80mySOA/gCxmlOQwVm3iqirGdHfMQ1rPcN5DmffQXPRv
ou2L/tXN4eEOwdWOG5u9kz1TJryKapYuYMT6IUlyI9PBQ2lO828B3OClLRph
q1jW/NeCNpPA9uG3KinvEXtgeTg7/AODx+OZHFQEe4KhTC6AyOIVXOsmdC15
sxS3x8cxTyeTLImi3xhEgbKYLAlWn3Q65hFyHz12Eh0cL73LAbJ1oZBT6ETB
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
rMRq0jWv0w+YPVKWWK/wYPfgIPo/fQpdKuIkAQA=

-->

</rfc>
