<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bctb-6man-rfc6296-bis-00" category="std" consensus="true" submissionType="IETF" updates="6296" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="RFC 6296bis">RFC 6296bis IPv6-to-IPv6 Network Prefix Translation</title>
    <seriesInfo name="Internet-Draft" value="draft-bctb-6man-rfc6296-bis-00"/>
    <author initials="M." surname="Wasserman" fullname="Margaret Wasserman">
      <organization>Painless Security</organization>
      <address>
        <email>mrw@painless-security.com</email>
      </address>
    </author>
    <author initials="F." surname="Baker" fullname="Fred Baker">
      <organization>Cisco Systems</organization>
      <address>
        <email>fred@cisco.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="12"/>
    <area>Int</area>
    <workgroup>6MAN</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 66?>

<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>
    </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 75?>

<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="RFC5996"/> should, at least in theory, detect the presence
    of the translator; while no NAT traversal solution is required,
    <xref target="RFC5996"/> 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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>
      </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:0DB8:0001:/48
                   --------------------------------------
                                     |
                                     |
                              +-------------+
                              |     NPTv6   |
                              |  Translator |
                              +-------------+
                                     |
                                     |
                   --------------------------------------
               Internal Network:  Prefix = FD01:0203:0405:/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:0203:0405:/48)
will be overwritten with the external prefix (2001:0DB8:0001:/48).
In an inbound datagram, the destination prefix (2001:0DB8:0001:/48)
will be overwritten with the internal prefix (FD01:0203:0405:/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:0DB8:6666:/48
                       V        +---------+      ^
                       V        |  NPTv6  |      ^
                       V        |  Device |      ^
                       V        +---------+      ^
              External Prefix       |            ^
              2001:0DB8:0001:/48    |            ^
                  --------------------------------------
                  Internal Prefix = FD01:0203:0405:/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:0DB8:0001:/48
                   --------------------------------------
                          |                      |
                          |                      |
                   +-------------+        +-------------+
                   |  NPTv6      |        |  NPTv6      |
                   |  Translator |        |  Translator |
                   |   #1        |        |   #2        |
                   +-------------+        +-------------+
                          |                      |
                          |                      |
                   --------------------------------------
               Internal Network:  Prefix = FD01:0203:0405:/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:0DB8:0001:/48    Prefix = 2001:0DB8:5555:/48
         ---------------------------    --------------------------
                         |                      |
                         |                      |
                  +-------------+        +-------------+
                  |  NPTv6      |        |  NPTv6      |
                  |  Translator |        |  Translator |
                  |   #1        |        |   #2        |
                  +-------------+        +-------------+
                         |                      |
                         |                      |
                  --------------------------------------
              Internal Network:  Prefix = FD01:0203:0405:/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="RFC5389"/>.</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 SHOULD 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 Section 3.4 or Section 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 MUST 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 MUST 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 MUST be inspected in that sequence and the
   first that is not initially 0xFFFF chosen, for consistency's sake.</t>
        <t>NPTv6 Translator implementations SHOULD 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:0203:
   0405:/48, and the External Prefix is 2001:0DB8:0001:/48.</t>
        <t>If a node with internal address FD01:0203:0405:0001::1234 sends an
   outbound datagram through the NPTv6 Translator, the resulting
   external address will be 2001:0DB8:0001: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:0203:0405 is 0xFCF5.  The one's
   complement checksum of 2001:0DB8:0001 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:0DB8:0001:D550::1234.</t>
        <t>When a response datagram is received, it will contain the destination
   address 2001:0DB8:0001:D550::0001, which will be mapped back to FD01:
   0203:0405:0001::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 MUST be dropped, and an ICMPv6 Parameter Problem error
   SHOULD 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>
    <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 MUST support manual configuration of internal and
   external prefixes and MUST NOT place any restrictions on those
   prefixes except that they be valid IPv6 unicast prefixes as described
   in <xref target="RFC4291"/>.  They MAY 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="RFC6204"/>.</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 MUST NOT 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 MUST 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="RFC3484"/> 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: (a) reliance on DNS to solve this problem depends on
 hosts always making queries from DNS servers in the same realm as
 they are (or on DNS interception proxies, which create their own
 problems) and on mobile hosts/applications not caching those results;
 (b) reliance on DNS to solve this problem depends on network
 administrators on all networks using such applications to reliably
 and accurately maintain current DNS entries for every host using
 those applications; and (c) reliance on DNS to solve this problem
 depends on applications always using DNS names, even though they
 often must 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">
        <name>Recommendation for Network Planners Considering Use of NPTv6</name>
        <artwork><![CDATA[
  Translation
]]></artwork>
        <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="RFC5389"/>, Traversal Using Relays
   around NAT (TURN) <xref target="RFC5766"/>, and Interactive Connectivity
   Establishment (ICE) <xref target="RFC5245"/>) 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="RFC6145"/> <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 MUST NOT perform port mapping.</t>
    </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 RECOMMENDED 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 this 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>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="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="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="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="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="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="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="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="RFC3484" target="https://www.rfc-editor.org/info/rfc3484" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3484.xml">
          <front>
            <title>Default Address Selection for Internet Protocol version 6 (IPv6)</title>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <date month="February" year="2003"/>
            <abstract>
              <t>This document describes two algorithms, for source address selection and for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses - depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice-versa. All IPv6 nodes, including both hosts and routers, must implement default address selection as defined in this specification. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3484"/>
          <seriesInfo name="DOI" value="10.17487/RFC3484"/>
        </reference>
        <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="RFC5245" target="https://www.rfc-editor.org/info/rfc5245" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5245.xml">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based multimedia sessions established with the offer/answer model. 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). ICE can be used by any protocol utilizing the offer/answer model, such as the Session Initiation Protocol (SIP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5245"/>
          <seriesInfo name="DOI" value="10.17487/RFC5245"/>
        </reference>
        <reference anchor="RFC5389" target="https://www.rfc-editor.org/info/rfc5389" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5389.xml">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs, and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution. This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t>
              <t>This document obsoletes RFC 3489. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5389"/>
          <seriesInfo name="DOI" value="10.17487/RFC5389"/>
        </reference>
        <reference anchor="RFC5766" target="https://www.rfc-editor.org/info/rfc5766" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5766.xml">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers). In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5766"/>
          <seriesInfo name="DOI" value="10.17487/RFC5766"/>
        </reference>
        <reference anchor="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="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="RFC5996" target="https://www.rfc-editor.org/info/rfc5996" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5996.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"/>
            <date month="September" year="2010"/>
            <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 replaces and updates RFC 4306, and includes all of the clarifications from RFC 4718. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5996"/>
          <seriesInfo name="DOI" value="10.17487/RFC5996"/>
        </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="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="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="RFC6145" target="https://www.rfc-editor.org/info/rfc6145" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6145.xml">
          <front>
            <title>IP/ICMP Translation Algorithm</title>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <date month="April" year="2011"/>
            <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 2765. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6145"/>
          <seriesInfo name="DOI" value="10.17487/RFC6145"/>
        </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"/>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </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="RFC6204" target="https://www.rfc-editor.org/info/rfc6204" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6204.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"/>
            <author fullname="O. Troan" initials="O." role="editor" surname="Troan"/>
            <date month="April" year="2011"/>
            <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. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6204"/>
          <seriesInfo name="DOI" value="10.17487/RFC6204"/>
        </reference>
      </references>
    </references>
    <?line 893?>

<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
~~~~~~~~~~
      "...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."
~~~~~~~~~~
   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>
      <artwork><![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 "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;
              }
          }
      }
  }

]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19aXMbyZXgd/yKXDomTHYDFG9J1LRnIJJSYyyRHILsng6v
d6IAFIiygCq4qkAKbcu/fd+Z+eoApVa3N3YjlmG3SKAqj5cv3330er1OmZTz
+NRt3bw5cycHL09GSeEG1w8nvTLr4b/uMi4fs/yDu87jafLR3eZRWsyjMsnS
rU40GuXxw6kzL3cm2TiNFjDkJI+mZW80Lke9k0WU9vLpGJ/pwUO9vb1OsRot
kqKAccr1Eh4fXNy+6STL/NSV+aooD/b2Xu4ddKI8juC7tOw83p+6k/f9y86H
R/ogztO47J3jJJ1xVJ66opx0VstJVMbFKa2m04lW5SzLTzvOuR7+x7kkhS/f
77ofo6KIc1gWf8wrfh/l9zBhWf82y2Hu6yhJ53FRuGE8XuVJuebv4kWUzE/d
In/896U80Svkid1xtqjP/WbXvY4+xLmd900eT+ynNN9ZUowzN1wXZbwoKnNN
4fF/H+PXNEEnzWCpZfIQ00bxMA7291+GP44PTvwfR/svD8MfBy/3wx9HR+ab
5y+en3Y6STqtjv12eMG/OCeIA5+4nuunrj/HIwHou/5kkgMYkvTe9fPxLCnj
cbnKYwdjEWrJAOZwKkdz9fvzeD6Xj/E4AUDxKF9F+drtv3z5nL65HAxvaysh
VKAvAKAAV8LaKJ24myyaLKIlzT9cRHnp3ubJhHEoW8Z5NErmcFpuWMLTUT4p
uu4mnsdREbv93b0Nq+Xl4myVlQ7jJZzXKM4dIrCCc3/veQD0/snBUfjj5f6L
cFIvDp6HP16akzo8Mu8cHr0Ifxy9OAl/HB8cHYc/Dl8EJDh+fhKQ4Bhulvnj
wLzz8mV47GTv+MD88dL8sX90ZP84tn+c2D/Cfk4O9uCdTq/Xc9GoKPNoXHY6
tzMgN0AxVos4Ld0kLsZ5MooLF8FtBnjibeoCPQCSs8zyshfdp1lRJuMKheps
plBu+/L69uFkx01X6Zg+KGdR6ZZ59pDAZPBX3IkYW3tJOomXMfwnHcduFKcw
VumADmTjBFYycY9JOcN5j2TeI3fZv+1sX/avb4+OdgjR/LiR2z/dd3nMqyhm
yRJGLB/jOHUyHTyUpDT/FiASvLRFI2xlq5L/WtJmYtg+/AbE6AGvEywPZ4d/
YPBoPBPM7cCeYCiXCiDm0TrOdxnWi2Qymcedzu8cInyeTVYEiC8C/VOMoPMU
mLs4XnKfAtjKTMGiW+9UIA3f49Ljyb1f/y4stXSwupaDx1PowChLoCn0rj5S
8NFOMpdmpRvP4vGHYrWgsQfXbhZHkzjvumI1nsGhdoZnt9ddgnjLGCu4+Pje
7dn1s7vz62fnZ2fXbvs8KqN7oCudsyy9jwvaN/wKIJ0DSLIyG2fzHbcs4tUk
6/F8NIFfyt/+JpTg0yc4mzdAjOAMC0APNwFavgKcmCBO0GN4+T99oveB3dBc
x13eDLBJ2CUcFOwTIAEcYIH4gN/hwrOpPyihw5ULAbR4lmbz7H7tyfFu58dZ
DOS5NI8B8JPFch4jbsSTrptlj/EDArBErEHoJ9NkTM92DNYvYPQoTYoFA3IW
FW4aPyIgAh+I5ogQIxibwJ12FjD5fB3mQ0SPcDWTBMeH5wkhp6v5xp1lOSAV
QIv2A7fkIcmzFMdiVIrmRWYvJ8AJR4uEYwF3EzTsADRhFR9hYnwQTw/QjmCR
4fGM1m6xmpfJLFvgKlfE42TgvGcQu1Rkp83I8eRwufVvvaogY0T3tG2AebGK
iw4cYAagnkfIoobXOhAAPRrHsJ9htogDBHOUCVJ/QPD9LWwjZ/QrZtlqjnsg
CpPTIsymYczVPaKyQTxkJ4x4HXxaX2U6hshFTyEDgacQgwA0sH8YIVrCL0CT
4mIXiUtsyIh+5anMhImfJUCIKwVuIZp34JZ59CqAZ3wD8sXaqVTliTPhGNNf
IHP3sxLWN4VtJnQ3mG4iXEWKc0SkugD6MR4MrA4Pw9ybyE2TPH6M5nNEh2xU
RrRKOHkZQCYGfJgSgQM5DAAOsk/8MUK8wUGYwoSRcI+6645KDgxFZKlEC75x
F+2EHd8W8o+3EM4OTvR+xgcpeAGL14E9K6lTVKAwCBm4jXm2aLwduI4KVE2C
TNwCzwivqR4NIQAcrn4Aa4dZ4AQLFZpgPxmMluM8hD4quDOPCtyQoDCY4tRA
ikAI54uGQE3wPsEMcyASgI/T5H6F8jIzSE+1srzwp8ScFpauGyi6MjChBnwK
7+Pa4cMFnnX8EenWvZ7zZA1yOTAbwmAAe1F5u/KtAxbL1+o+A+ScwRcKRENO
HxPAhJHZiovGeQbgx7NGsOBC+O7qkmWUcZTy5LBcmKVYA7Uvc4EGEhRY3xzk
W7jrADRmaVPQEnpIQ/QUFhkj+oLYJ7zEtIZgPkyIC1dpP0ovbTJFCxjLTGZZ
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

-->

</rfc>
